本文整理汇总了C++中FloatArray::givePointer方法的典型用法代码示例。如果您正苦于以下问题:C++ FloatArray::givePointer方法的具体用法?C++ FloatArray::givePointer怎么用?C++ FloatArray::givePointer使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FloatArray
的用法示例。
在下文中一共展示了FloatArray::givePointer方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: accumulate
void
ParallelContext :: accumulate(const FloatArray &local, FloatArray &global)
{
#ifdef __PARALLEL_MODE
if ( emodel->isParallel() ) {
int size = local.giveSize();
global.resize(size);
///@todo Why aren't we using the C++ MPI functions?
MPI_Allreduce( const_cast<double*>(local.givePointer()), global.givePointer(), size, MPI_DOUBLE, MPI_SUM, this->emodel->giveParallelComm() );
} else {
#endif
global = local;
#ifdef __PARALLEL_MODE
}
#endif
}
示例2: times
void
PetscSparseMtrx :: times(const FloatArray &x, FloatArray &answer) const
{
if ( this->giveNumberOfColumns() != x.giveSize() ) {
OOFEM_ERROR("Dimension mismatch");
}
#ifdef __PARALLEL_MODE
if ( emodel->isParallel() ) {
OOFEM_ERROR("PetscSparseMtrx :: times - Not implemented");
}
#endif
Vec globX, globY;
VecCreateSeqWithArray(PETSC_COMM_SELF, 1, x.giveSize(), x.givePointer(), & globX);
VecCreate(PETSC_COMM_SELF, & globY);
VecSetType(globY, VECSEQ);
VecSetSizes(globY, PETSC_DECIDE, this->nRows);
MatMult(this->mtrx, globX, globY);
double *ptr;
VecGetArray(globY, & ptr);
answer.resize(this->nRows);
for ( int i = 0; i < this->nRows; i++ ) {
answer(i) = ptr [ i ];
}
VecRestoreArray(globY, & ptr);
VecDestroy(&globX);
VecDestroy(&globY);
}
示例3: loc_rhs
void AbaqusUserElement :: giveInternalForcesVector(FloatArray &answer, TimeStep *tStep,
FloatArray &U, FloatMatrix &DU, int useUpdatedGpRecord)
{
if ( useUpdatedGpRecord ) {
this->rhs.copyColumn(answer, 1);
} else {
this->lFlags.at(1) = 1; // 1 based access
this->lFlags.at(3) = 1; // 1 based access
this->lFlags.at(4) = 0; // 1 based access
int nprops = props.giveSize();
int njprops = jprops.giveSize();
FloatMatrix loc_rhs(this->ndofel, this->nrhs);
FloatMatrix loc_amatrx(this->ndofel, this->ndofel);
FloatArray loc_svars = this->giveStateVector();
//this->getSvars();
double period = 0., pnewdt = 0.;
double dtime = tStep->giveTimeIncrement();
double time[] = {tStep->giveTargetTime() - dtime, tStep->giveTargetTime()};
this->uel(
loc_rhs.givePointer(),
loc_amatrx.givePointer(),
loc_svars.givePointer(),
energy.givePointer(),
& ndofel,
& nrhs,
& numSvars,
props.givePointer(),
& nprops,
coords.givePointer(),
& mcrd,
& this->numberOfDofMans,
U.givePointer(),
DU.givePointer(),
V.givePointer(),
A.givePointer(),
& jtype,
time,
& dtime,
& kstep,
& kinc,
& ( this->number ),
params,
& ndLoad,
jdltype,
adlmag.givePointer(),
predef.givePointer(),
& npredef,
lFlags.givePointer(),
& mlvarx,
ddlmag.givePointer(),
& mdLoad,
& pnewdt,
jprops.givePointer(),
& njprops,
& period);
//FloatArray vout;
//vout.resize(12);
//for (int i = 1; i <= 3; i++)
//{
// vout.at(i) = rhs.at(i, 1);
// vout.at(i+6) = rhs.at(i+3, 1);
//}
//answer = vout;
//this->rhs.copyColumn(answer, 1);
//answer.negated();
loc_rhs.negated(); //really needed???
loc_rhs.copyColumn(answer, 1);
letTempRhsBe(loc_rhs);
letTempTangentBe(loc_amatrx);
letTempSvarsBe(loc_svars);
}
}
示例4: stress
//.........这里部分代码省略.........
double celent = 0.0; /// @todo Include the characteristic element length
/* Array containing the deformation gradient at the beginning of the increment. See the discussion
* regarding the availability of the deformation gradient for various element types. */
FloatMatrix dfgrd0(3, 3);
/* Array containing the deformation gradient at the end of the increment. The components of this array
* are set to zero if nonlinear geometric effects are not included in the step definition associated with
* this increment. See the discussion regarding the availability of the deformation gradient for various
* element types. */
FloatMatrix dfgrd1(3, 3);
dfgrd0.beMatrixForm( ms->giveFVector() );
dfgrd1.beMatrixForm(vF);
int noel = gp->giveElement()->giveNumber(); // Element number.
int npt = 0; // Integration point number.
// We intentionally ignore the layer number since that is handled by the layered cross-section in OOFEM.
int layer = 0; // Layer number (for composite shells and layered solids)..
int kspt = 0; // Section point number within the current layer.
int kstep = tStep->giveMetaStepNumber(); // Step number.
int kinc = 0; // Increment number.
///@todo No idea about these parameters
double predef;
double dpred;
// Change to Abaqus's component order
stress.changeComponentOrder();
strain.changeComponentOrder();
strainIncrement.changeComponentOrder();
OOFEM_LOG_DEBUG("AbaqusUserMaterial :: giveRealStressVector - Calling subroutine");
this->umat(stress.givePointer(), // STRESS
state.givePointer(), // STATEV
jacobian.givePointer(), // DDSDDE
& sse, // SSE
& spd, // SPD
& scd, // SCD
& rpl, // RPL
ddsddt.givePointer(), // DDSDDT
drplde.givePointer(), // DRPLDE
& drpldt, // DRPLDT
strain.givePointer(), // STRAN
strainIncrement.givePointer(), // DSTRAN
time, // TIME
& dtime, // DTIME
& temp, // TEMP
& dtemp, // DTEMP
& predef, // PREDEF
& dpred, // DPRED
this->cmname, // CMNAME
& ndi, // NDI
& nshr, // NSHR
& ntens, // NTENS
& numState, // NSTATV
properties.givePointer(), // PROPS
& numProperties, // NPROPS
coords.givePointer(), // COORDS
drot.givePointer(), // DROT
& pnewdt, // PNEWDT
& celent, // CELENT
dfgrd0.givePointer(), // DFGRD0
dfgrd1.givePointer(), // DFGRD1
& noel, // NOEL
& npt, // NPT
示例5: if
//.........这里部分代码省略.........
* energy output. */
double sse, spd, scd;
// Outputs only in a fully coupled thermal-stress analysis:
double rpl = 0.0; // Volumetric heat generation per unit time at the end of the increment caused by mechanical working of the material.
FloatArray ddsddt(ntens); // Variation of the stress increments with respect to the temperature.
FloatArray drplde(ntens); // Variation of RPL with respect to the strain increments.
double drpldt = 0.0; // Variation of RPL with respect to the temperature.
/* An array containing the coordinates of this point. These are the current coordinates if geometric
* nonlinearity is accounted for during the step (see “Procedures: overview,” Section 6.1.1); otherwise,
* the array contains the original coordinates of the point */
FloatArray coords;
gp->giveElement()->computeGlobalCoordinates( coords, * gp->giveCoordinates() ); ///@todo Large deformations?
/* Rotation increment matrix. This matrix represents the increment of rigid body rotation of the basis
* system in which the components of stress (STRESS) and strain (STRAN) are stored. It is provided so
* that vector- or tensor-valued state variables can be rotated appropriately in this subroutine: stress and
* strain components are already rotated by this amount before UMAT is called. This matrix is passed in
* as a unit matrix for small-displacement analysis and for large-displacement analysis if the basis system
* for the material point rotates with the material (as in a shell element or when a local orientation is used).*/
FloatMatrix drot(3, 3);
drot.beUnitMatrix();
/* Characteristic element length, which is a typical length of a line across an element for a first-order
* element; it is half of the same typical length for a second-order element. For beams and trusses it is a
* characteristic length along the element axis. For membranes and shells it is a characteristic length in
* the reference surface. For axisymmetric elements it is a characteristic length in the
* plane only.
* For cohesive elements it is equal to the constitutive thickness.*/
double celent = 0.0; /// @todo Include the characteristic element length
/* Array containing the deformation gradient at the beginning of the increment. See the discussion
* regarding the availability of the deformation gradient for various element types. */
FloatMatrix dfgrd0(3, 3);
/* Array containing the deformation gradient at the end of the increment. The components of this array
* are set to zero if nonlinear geometric effects are not included in the step definition associated with
* this increment. See the discussion regarding the availability of the deformation gradient for various
* element types. */
FloatMatrix dfgrd1(3, 3);
int noel = gp->giveElement()->giveNumber(); // Element number.
int npt = 0; // Integration point number.
int layer = 0; // Layer number (for composite shells and layered solids)..
int kspt = 0.0; // Section point number within the current layer.
int kstep = 0; // Step number.
int kinc = 0; // Increment number.
///@todo No idea about these parameters
double predef;
double dpred;
OOFEM_LOG_DEBUG("AbaqusUserMaterial :: giveRealStressVector - Calling subroutine");
this->umat(stress.givePointer(), // STRESS
state.givePointer(), // STATEV
jacobian.givePointer(), // DDSDDE
& sse, // SSE
& spd, // SPD
& scd, // SCD
& rpl, // RPL
ddsddt.givePointer(), // DDSDDT
drplde.givePointer(), // DRPLDE
& drpldt, // DRPLDT
strain.givePointer(), // STRAN
strainIncrement.givePointer(), // DSTRAN
time, // TIME
& dtime, // DTIME
& temp, // TEMP
& dtemp, // DTEMP
& predef, // PREDEF
& dpred, // DPRED
this->cmname, // CMNAME
& ndi, // NDI
& nshr, // NSHR
& ntens, // NTENS
& numState, // NSTATV
properties.givePointer(), // PROPS
& numProperties, // NPROPS
coords.givePointer(), // COORDS
drot.givePointer(), // DROT
& pnewdt, // PNEWDT
& celent, // CELENT
dfgrd0.givePointer(), // DFGRD0
dfgrd1.givePointer(), // DFGRD1
& noel, // NOEL
& npt, // NPT
& layer, // LAYER
& kspt, // KSPT
& kstep, // KSTEP
& kinc); // KINC
ms->letTempStrainVectorBe(reducedStrain);
ms->letTempStressVectorBe(stress);
ms->letTempStateVectorBe(state);
ms->letTempTangentBe(jacobian);
answer = stress;
OOFEM_LOG_DEBUG("AbaqusUserMaterial :: giveRealStressVector - Calling subroutine was successful");
}
示例6: solve
void DSSMatrix :: solve(FloatArray &b, FloatArray &x)
{
x.resize( b.giveSize() );
_dss->Solve( x.givePointer(), b.givePointer() );
}