35 #include "../sm/Elements/tet21ghostsolid.h" 36 #include "../sm/Elements/nlstructuralelement.h" 37 #include "../sm/CrossSections/structuralcrosssection.h" 63 #define FIXEDpressure 0 64 #define USEUNCOUPLED 1 68 #define VELOCITYCOEFF 1.0 79 1, 2, 3, 8, 9, 10, 15, 16, 17, 22, 23, 24, 28, 29, 30, 34, 35, 36
82 4, 5, 6, 11, 12, 13, 18, 19, 20, 25, 26, 27, 31, 32, 33, 37, 38, 39
91 double nu = .25,
E = 1;
107 for (
int i = 0, j = 1; i < 10; ++i ) {
117 for (
int i = 0, j = 1; i < 10; ++i ) {
170 aPert.
at(i) = aPert.
at(i) + eps;
174 DintF.operator = ( intF - intFPert );
175 DintF.
times(-1 / eps);
195 aPert.
at(i) = aPert.
at(i) + eps;
199 DintF.operator = ( intF - intFPert );
200 DintF.
times(-1 / eps);
231 FloatMatrix afDu, afDw, bfuDu, bfuDp, bfpDu, bfpDw, cfwDu;
234 FloatArray aVelocity, aPressure, aGhostDisplacement, aIncGhostDisplacement;
256 a_inc.operator = ( a - a_prev );
264 aTotal.operator = ( aVelocity + aIncGhostDisplacement *
VELOCITYCOEFF );
268 const FloatArray &lcoords = gp->giveNaturalCoordinates();
270 double weight = gp->giveWeight();
278 dNv.
at(k * 3 + 1) = dNx.
at(k + 1, 1);
279 dNv.
at(k * 3 + 2) = dNx.
at(k + 1, 2);
280 dNv.
at(k * 3 + 3) = dNx.
at(k + 1, 3);
284 gp->setMaterialMode(_3dFlow);
286 gp->setMaterialMode(_3dMat);
306 int Voigt6 [ 3 ] [ 3 ] = { { 1, 6, 5 }, { 6, 2, 4 }, { 5, 4, 3 } };
307 int Voigt9 [ 3 ] [ 3 ] = { { 1, 6, 5 }, { 9, 2, 4 }, { 8, 7, 3 } };
337 double epsvol, pressure;
342 #if FIXEDpressure == 1 346 gp->setMaterialMode(_3dFlow);
348 gp->setMaterialMode(_3dMat);
356 fluidTwoPointStressMatrix.
beProductOf(fluidCauchyMatrix, FinvT);
357 fluidTwoPointStressArray.
beVectorForm(fluidTwoPointStressMatrix);
362 afuT1.
times(J * weight * detJ);
375 for (
int i = 1; i <= 3; i++ ) {
376 for (
int j = 1; j <= 3; j++ ) {
377 for (
int k = 1; k <= 3; k++ ) {
378 for (
int l = 1; l <= 3; l++ ) {
379 for (
int m = 1; m <= 3; m++ ) {
380 G.
at(Voigt9 [ i - 1 ] [ j - 1 ], Voigt9 [ k - 1 ] [ l - 1 ]) +=
381 Ed.
at(Voigt6 [ i - 1 ] [ m - 1 ], Voigt6 [ k - 1 ] [ l - 1 ]) * FinvT.
at(m, j);
390 afuT2.
times(J * weight * detJ);
401 for (
int i = 1; i <= 3; i++ ) {
402 for (
int j = 1; j <= 3; j++ ) {
403 for (
int k = 1; k <= 3; k++ ) {
404 for (
int l = 1; l <= 3; l++ ) {
405 for (
int m = 1; m <= 3; m++ ) {
406 K.
at(Voigt9 [ i - 1 ] [ j - 1 ], Voigt9 [ m - 1 ] [ l - 1 ]) +=
407 fluidCauchyArray.
at(Voigt6 [ i - 1 ] [ k - 1 ]) * FinvT.
at(k, l) * FinvT.
at(m, j);
416 afuT3.
times(-J * weight * detJ);
429 bfuT1.
times(-J * pressure * weight * detJ);
438 for (
int i = 1; i <= 3; i++ ) {
439 for (
int j = 1; j <= 3; j++ ) {
440 for (
int k = 1; k <= 3; k++ ) {
441 for (
int l = 1; l <= 3; l++ ) {
442 C.
at(Voigt9 [ i - 1 ] [ j - 1 ], Voigt9 [ k - 1 ] [ l - 1 ]) +=
443 FinvT.
at(i, l) * FinvT.
at(k, j);
451 bfuT2.
times(pressure * J * weight * detJ);
458 bfuT3.
times(-J * detJ * weight);
474 for (
int k = 1; k <= 3; k++ ) {
475 for (
int l = 1; l <= 3; l++ ) {
476 for (
int i = 1; i <= 3; i++ ) {
477 for (
int j = 1; j <= 3; j++ ) {
478 A_IVm.
at(k, l) += Bvm.
at(i, j) * FinvT.
at(i, l) * FinvT.
at(k, j);
487 bfpT1.
times(-J * detJ * weight * FinvTaBv);
500 bfpT2.
times(J * detJ * weight);
510 bfpT3.
times(-J * detJ * weight);
522 cfwT1.
times(detJ * weight);
573 double difference = numtan.
at(i, j) - temp.
at(i, j);
574 if ( fabs(difference) > fabs(MaxErr) ) {
579 if ( fabs(numtan.
at(i, j) < 1e-15) ) {
580 numtan.
at(i, j) = 0.0;
582 if ( fabs(temp.
at(i, j) < 1e-15) ) {
588 printf(
"globalNumber: %u, i:%u, j:%u, MaxErr: %e, Numtan=%f, Analytic=%f\n", this->
globalNumber, imax, jmax, MaxErr, numtan.
at(imax, jmax), temp.
at(imax, jmax) );
592 if ( fabs(MaxErr) > 1e-5 ) {
593 printf(
"The error is actually quite large..\n");
609 if ( type != ExternalForcesVector ) {
617 FloatArray N, gVector, temparray(30), dNv, inc, a, a_prev, u, u_prev, vload;
631 const FloatArray &lcoords = gp->giveNaturalCoordinates();
634 double dA = detJ * gp->giveWeight();
639 double rho = mat->
give(
'd', gp);
661 for (
int j = 0; j < N.
giveSize(); j++ ) {
662 temparray(3 * j + 0) +=
N(j) * rho * gVector(0) * dA;
663 temparray(3 * j + 1) +=
N(j) * rho * gVector(1) * dA;
664 temparray(3 * j + 2) +=
N(j) * rho * gVector(2) * dA;
674 dNv.
at(k * 3 + 1) = dNx.
at(k + 1, 1);
675 dNv.
at(k * 3 + 2) = dNx.
at(k + 1, 2);
676 dNv.
at(k * 3 + 3) = dNx.
at(k + 1, 3);
717 FloatArray Strain, Stress, Nlin, dNv, a_inc, a_prev, aVelocity, aPressure, aGhostDisplacement, aIncGhostDisplacement, fluidStress, epsf, dpdivv;
718 FloatArray momentum, conservation, auxstress, divv;
719 double pressure, epsvol = 0.0;
727 a_inc.operator = ( a - a_prev );
735 aTotal.operator = ( aVelocity + aIncGhostDisplacement *
VELOCITYCOEFF );
738 const FloatArray &lcoords = gp->giveNaturalCoordinates();
740 double weight = gp->giveWeight();
747 dNv.
at(k * 3 + 1) = dNx.
at(k + 1, 1);
748 dNv.
at(k * 3 + 2) = dNx.
at(k + 1, 2);
749 dNv.
at(k * 3 + 3) = dNx.
at(k + 1, 3);
760 gp->setMaterialMode(_3dFlow);
766 gp->setMaterialMode(_3dMat);
768 momentum.
plusProduct(B, fluidStress, detJ * weight);
769 momentum.
add(-pressure * detJ * weight, dNv);
773 divv.
times(-detJ * weight);
775 conservation.
add(divv.
at(1), Nlin);
807 gp->setMaterialMode(_3dFlow);
813 gp->setMaterialMode(_3dMat);
817 fluidStressMatrix.
beProductOf(fluidCauchyMatrix, FinvT);
821 momentum.
plusProduct(BH, fluidStress, detJ * J * weight);
827 momentum.
add(-pressure * detJ * weight * J, ptemp);
831 double FinvTaBvaTotal;
835 conservation.
add(-J * detJ * weight * FinvTaBvaTotal, Nlin);
870 FloatArray Strain, Stress, Nlin, dNv, a_inc, a_prev, aVelocity, aPressure, aGhostDisplacement, aIncGhostDisplacement, fluidStress, epsf, dpdivv;
871 FloatArray momentum, conservation, auxstress, divv;
872 double pressure, epsvol = 0.0;
880 a_inc.operator = ( a - a_prev );
888 aTotal.operator = ( aVelocity + aIncGhostDisplacement *
VELOCITYCOEFF );
892 const FloatArray &lcoords = gp->giveNaturalCoordinates();
894 double weight = gp->giveWeight();
901 dNv.
at(k * 3 + 1) = dNx.
at(k + 1, 1);
902 dNv.
at(k * 3 + 2) = dNx.
at(k + 1, 2);
903 dNv.
at(k * 3 + 3) = dNx.
at(k + 1, 3);
907 #if FIXEDpressure == 1 917 gp->setMaterialMode(_3dFlow);
923 gp->setMaterialMode(_3dMat);
925 momentum.
plusProduct(B, fluidStress, detJ * weight);
926 momentum.
add(-pressure * detJ * weight, dNv);
930 divv.
times(-detJ * weight);
932 conservation.
add(divv.
at(1), Nlin);
975 gp->setMaterialMode(_3dFlow);
981 gp->setMaterialMode(_3dMat);
985 fluidStressMatrix.
beProductOf(fluidCauchyMatrix, FinvT);
996 momentum.
plusProduct(BH, fluidStress, detJ * J * weight);
1001 momentum.
add(-pressure * detJ * weight * J, ptemp);
1005 double FinvTaBvaTotal;
1008 FinvTaBvaTotal = FinvTa.
dotProduct(BvaTotal);
1009 conservation.
add(-J * detJ * weight * FinvTaBvaTotal, Nlin);
1043 V_u, V_v, V_w, D_u, D_v, D_w, P_f
1047 V_u, V_v, V_w, D_u, D_v, D_w
1065 for (
int i = 1; i <= 10; i++ ) {
1066 answer.
at(1, 3 * i - 2) = dnx.
at(i, 1);
1067 answer.
at(2, 3 * i - 1) = dnx.
at(i, 2);
1068 answer.
at(3, 3 * i - 0) = dnx.
at(i, 3);
1070 answer.
at(4, 3 * i - 1) = dnx.
at(i, 3);
1071 answer.
at(4, 3 * i - 0) = dnx.
at(i, 2);
1073 answer.
at(5, 3 * i - 2) = dnx.
at(i, 3);
1074 answer.
at(5, 3 * i - 0) = dnx.
at(i, 1);
1076 answer.
at(6, 3 * i - 2) = dnx.
at(i, 2);
1077 answer.
at(6, 3 * i - 1) = dnx.
at(i, 1);
1099 BH.
at(1, 3 * i - 2) = dNdx.
at(i, 1);
1100 BH.
at(2, 3 * i - 1) = dNdx.
at(i, 2);
1101 BH.
at(3, 3 * i - 0) = dNdx.
at(i, 3);
1102 BH.
at(4, 3 * i - 1) = dNdx.
at(i, 3);
1103 BH.
at(7, 3 * i - 0) = dNdx.
at(i, 2);
1104 BH.
at(5, 3 * i - 2) = dNdx.
at(i, 3);
1105 BH.
at(8, 3 * i - 0) = dNdx.
at(i, 1);
1106 BH.
at(6, 3 * i - 2) = dNdx.
at(i, 2);
1107 BH.
at(9, 3 * i - 1) = dNdx.
at(i, 1);
1130 answer.
at(1, 3 * i - 2) = dnx.
at(i, 1);
1131 answer.
at(2, 3 * i - 1) = dnx.
at(i, 2);
1132 answer.
at(3, 3 * i - 0) = dnx.
at(i, 3);
1133 answer.
at(4, 3 * i - 1) = dnx.
at(i, 3);
1134 answer.
at(7, 3 * i - 0) = dnx.
at(i, 2);
1135 answer.
at(5, 3 * i - 2) = dnx.
at(i, 3);
1136 answer.
at(8, 3 * i - 0) = dnx.
at(i, 1);
1137 answer.
at(6, 3 * i - 2) = dnx.
at(i, 2);
1138 answer.
at(9, 3 * i - 1) = dnx.
at(i, 1);
1153 u_prev.operator = ( inc );
1176 if ( matMode == _3dMat || matMode == _PlaneStrain ) {
1177 answer.
at(1) += 1.0;
1178 answer.
at(2) += 1.0;
1179 answer.
at(3) += 1.0;
1180 }
else if ( matMode == _PlaneStress ) {
1181 answer.
at(1) += 1.0;
1182 answer.
at(2) += 1.0;
1183 }
else if ( matMode == _1dMat ) {
1184 answer.
at(1) += 1.0;
1206 return ( determinant * weight );
1213 if ( type == IST_Velocity ) {
1221 for (
int i = 1; i <= N.
giveSize(); i++ ) {
1222 Nmat.
at(1, 3 * i - 2) = N.
at(i);
1223 Nmat.
at(2, 3 * i - 1) = N.
at(i);
1224 Nmat.
at(3, 3 * i - 0) = N.
at(i);
1229 }
else if ( type == IST_Pressure ) {
1255 #if USEUNCOUPLED == 0 1272 for (
int j = 1; j <= DofIDs.
giveSize(); j++ ) {
1276 if ( DofIDs.
at(j) == V_u || DofIDs.
at(j) == V_v || DofIDs.
at(j) == V_w ) {
1282 for (
int n = 1; n <= DofIDs.
giveSize(); n++ ) {
1283 if ( ( DofIDs.
at(j) == V_u && DofIDs.
at(n) == D_u ) ||
1284 ( DofIDs.
at(j) == V_v && DofIDs.
at(n) == D_v ) ||
1285 ( DofIDs.
at(j) == V_w && DofIDs.
at(n) == D_w ) ) {
1286 row2 = firstIndex + n - 1;
1303 for (
int i = 1; i <= row1List.
giveSize(); i++ ) {
1344 for (
int i = 1; i <= n.
giveSize(); i++ ) {
1350 for (
int i = 1; i <= n_lin.
giveSize(); i++ ) {
1358 if ( type == IST_Pressure ) {
1365 answer.
at(1) = 0.5 * (
1366 this->
giveNode( eNodes.
at(1) )->giveDofWithID(P_f)->giveUnknown(VM_Total, tStep) +
1367 this->
giveNode( eNodes.
at(2) )->giveDofWithID(P_f)->giveUnknown(VM_Total, tStep) );
1378 if ( type != ExternalForcesVector ) {
1396 FloatArray lcoords = gp->giveNaturalCoordinates();
1404 if ( thisLoad != NULL ) {
1444 double thickness = 1.0;
double giveDeterminant() const
Returns the trace (sum of diagonal components) of the receiver.
CrossSection * giveCrossSection()
virtual void computeDeformationGradientVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Computes the deformation gradient in Voigt form at integration point ip and at time step tStep...
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
The element interface required by NodalAvergagingRecoveryModel.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
int giveNumberOfColumns() const
Returns number of columns of receiver.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
int nlGeometry
Flag indicating if geometrical nonlinearities apply.
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
Returns local vector of unknowns.
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Access method for default integration rule.
virtual double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the determinant of the transformation.
Abstract base class for all fluid materials.
virtual double computeVolume()
Computes the volume.
virtual void giveInternalForcesVectorGivenSolutionDebug(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord, FloatArray &SolutionVector, bool ExtraLogging)
Abstract base class for "structural" finite elements with geometrical nonlinearities.
virtual bool giveRowTransformationMatrix(TimeStep *tStep)
Load is specified in global c.s.
std::unique_ptr< FloatArray > initialDisplacements
Initial displacement vector, describes the initial nodal displacements when element has been casted...
virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes the stress vector of receiver at given integration point, at time step tStep.
double & at(int i)
Coefficient access function.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Class implementing element body load, acting over whole element volume (e.g., the dead weight)...
void clear()
Clears receiver (zero size).
virtual int global2local(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates local coordinates from given global ones.
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
virtual double giveUnknown(ValueModeType mode, TimeStep *tStep)=0
The key method of class Dof.
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
static IntArray momentum_ordering
Ordering of momentum balance equations in element. Used to assemble the element stiffness.
virtual CoordSystType giveCoordSystMode()
Returns receiver's coordinate system.
void beVectorForm(const FloatMatrix &aMatrix)
Reciever will be a vector with 9 components formed from a 3x3 matrix.
virtual void computeBmatrixAt(GaussPoint *, FloatMatrix &, int=1, int=ALL_STRAINS)
Computes the geometrical matrix of receiver in given integration point.
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
Computes boundary condition value - its components values at given time.
virtual void computeDeformationGradientVectorFromDispl(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, FloatArray &u)
void plusDyadUnsym(const FloatArray &a, const FloatArray &b, double dV)
Adds to the receiver the product .
MaterialMode
Type representing material mode of integration point.
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)
Computes the element value in given node.
void printYourselfToFile(const std::string filename, const bool showDimensions=true) const
Print matrix to file.
virtual void computeLocalEdgeMapping(IntArray &edgeNodes, int iedge)
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
virtual int giveNumberOfDofManagers() const
void rotatedWith(FloatMatrix &r, char mode)
Returns the receiver a rotated according the change-of-base matrix r.
virtual void computeDeformationGradientVectorAt(FloatArray &answer, FloatArray lcoord, TimeStep *tStep)
Abstract base class representing integration rule.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
virtual void computeBHmatrixAt(GaussPoint *, FloatMatrix &)
Computes a matrix which, multiplied by the column matrix of nodal displacements, gives the displaceme...
bool isTheFirstStep()
Check if receiver is first step.
void beMatrixForm(const FloatArray &aArray)
Class representing a general abstraction for finite element interpolation class.
const char * __MaterialModeToString(MaterialMode _value)
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
virtual void computeLoadVector(FloatArray &answer, BodyLoad *load, CharType type, ValueModeType mode, TimeStep *tStep)
Computes the contribution of the given body load (volumetric).
virtual void computeDeviatoricStressVector(FloatArray &stress_dev, double &epsp_vol, GaussPoint *gp, const FloatArray &eps, double pressure, TimeStep *tStep)
Computes the deviatoric stress vector and volumetric strain rate from given deviatoric strain and pre...
Abstract base class representing a boundary load (force, momentum, ...) that acts directly on a bound...
int giveNumber()
Returns receiver's number.
int globalNumber
In parallel mode, globalNumber contains globally unique DoFManager number.
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
DofIDItem
Type representing particular dof type.
static IntArray displacementdofsonside
virtual int computeLoadGToLRotationMtrx(FloatMatrix &answer)
Returns transformation matrix from global coordinate system to local element coordinate system for el...
virtual void giveDofManDofIDMask(int inode, IntArray &answer) const
Returns dofmanager dof mask for node.
virtual double giveWeight()
Returns integration weight of receiver.
virtual FormulationType giveFormulationType()
Specifies is load should take local or global coordinates.
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
void times(double f)
Multiplies receiver by factor f.
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord=0)
Evaluates nodal representation of real internal forces.
Wrapper around element definition to provide FEICellGeometry interface.
virtual void computeValueAtBoundary(FloatArray &answer, TimeStep *tStep, const FloatArray &coords, ValueModeType mode, Element *e, int boundary)
void resizeWithValues(int n, int allocChunk=0)
Checks size of receiver towards requested bounds.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
virtual double boundaryGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo)=0
Evaluates the determinant of the transformation Jacobian on the requested boundary.
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
virtual int giveApproxOrder()=0
TimeStep * givePreviousStep()
Returns pointer to previous solution step.
virtual void EIPrimaryUnknownMI_computePrimaryUnknownVectorAtLocal(ValueModeType u, TimeStep *tStep, const FloatArray &coords, FloatArray &answer)
Computes the element vector of primary unknowns at given point in the local coordinate system...
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
double at(int i, int j) const
Coefficient access function.
virtual void computeNumericStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
void giveUnknownData(FloatArray &u_prev, FloatArray &u, FloatArray &inc, TimeStep *tStep)
static IntArray conservation_ordering
Ordering of conservation equations in element. Used to assemble the element stiffness.
virtual int setupIntegrationPoints(IntegrationRule &irule, int npoints, Element *element)
Sets up integration rule for the given element.
void setMaterialMode(MaterialMode newMode)
Sets material mode of receiver.
int numberOfGaussPoints
Number of integration points as specified by nip.
void beNMatrixOf(const FloatArray &n, int nsd)
Assigns the receiver to be a repeated diagonal matrix.
virtual void giveRealStress_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)=0
Class representing vector of real numbers.
virtual FEInterpolation * giveInterpolation() const
Implementation of matrix containing floating point numbers.
void beMatrixFormOfStress(const FloatArray &aArray)
Reciever will be a 3x3 matrix formed from a vector with either 9 or 6 components. ...
static IntArray velocitydofsonside
void beSubArrayOf(const FloatArray &src, const IntArray &indx)
Extract sub vector form src array and stores the result into receiver.
void assemble(const FloatArray &fe, const IntArray &loc)
Assembles the array fe (typically, the load vector of a finite element) into the receiver, using loc as location array.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual IntegrationRule * giveBoundaryIntegrationRule(int order, int boundary)
Sets up a suitable integration rule for integrating over the requested boundary.
void add(const FloatMatrix &a)
Adds matrix to the receiver.
Dof * giveDofWithID(int dofID) const
Returns DOF with given dofID; issues error if not present.
void zero()
Zeroes all coefficients of receiver.
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
void setColumn(const FloatArray &src, int c)
Sets the values of the matrix in specified column.
virtual Interface * giveInterface(InterfaceType t)
Interface requesting service.
void times(double s)
Multiplies receiver with scalar.
static FEI3dTetLin interpolation_lin
void beTranspositionOf(const FloatMatrix &src)
Assigns to the receiver the transposition of parameter.
The spatial localizer element interface associated to spatial localizer.
virtual void surfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates edge global coordinates from given local ones.
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
virtual void computeNumericStiffnessMatrixDebug(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
The element interface class related to Element Interpolation Mappers.
void zero()
Zeroes all coefficient of receiver.
InterfaceType
Enumerative type, used to identify interface type.
void beUnitMatrix()
Sets receiver to unity matrix.
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
int giveSize() const
Returns the size of receiver.
virtual void giveStiffnessMatrix_3d(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Method for computing the stiffness matrix.
the oofem namespace is to define a context or scope in which all oofem names are defined.
DofManager * giveDofManager(int i) const
void assemble(const FloatMatrix &src, const IntArray &loc)
Assembles the contribution using localization array into receiver.
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
Node * giveNode(int i) const
Returns reference to the i-th node of element.
virtual void giveInternalForcesVectorGivenSolution(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord, FloatArray &SolutionVector)
virtual void computeValueAt(FloatArray &answer, TimeStep *tStep, const FloatArray &coords, ValueModeType mode)
Computes components values of load at given point - global coordinates (coordinates given)...
int giveNumberOfRows() const
Returns number of rows of receiver.
void symmetrized()
Initializes the lower half of the receiver according to the upper half.
static FEI3dTetQuad interpolation
virtual void boundaryEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo)=0
Evaluates the basis functions on the requested boundary.
Class representing integration point in finite element program.
Class representing solution step.
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
tet21ghostsolid(int n, Domain *d)
virtual int giveNsd()=0
Returns number of spatial dimensions.
int numberOfDofMans
Number of dofmanagers.
void add(const FloatArray &src)
Adds array src to receiver.
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)=0
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
const FloatArray & giveNaturalCoordinates()
Returns coordinate array of receiver.
Class representing Gaussian-quadrature integration rule.
virtual void computeBoundarySurfaceLoadVector(FloatArray &answer, BoundaryLoad *load, int boundary, CharType type, ValueModeType mode, TimeStep *tStep, bool global=true)
Computes the contribution of the given load at the given boundary surface in global coordinate system...
static IntArray ghostdisplacement_ordering
Ordering of ghost displacements equations.
void resize(int s)
Resizes receiver towards requested size.
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes constitutive matrix of receiver.
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
Adds the product .
virtual void giveDeviatoricStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Computes the deviatoric stiffness; .