35 #include "../sm/Elements/nlstructuralelement.h" 36 #include "../sm/Materials/structuralms.h" 37 #include "../sm/CrossSections/structuralcrosssection.h" 76 vol += gp->giveWeight() * detJ * J;
104 if ( matMode == _3dMat || matMode == _PlaneStrain ) {
108 }
else if ( matMode == _PlaneStress ) {
111 }
else if ( matMode == _1dMat ) {
167 if ( useUpdatedGpRecord == 1 ) {
180 if ( useUpdatedGpRecord == 1 ) {
188 if ( useUpdatedGpRecord == 1 ) {
240 TimeStep *tStep,
int useUpdatedGpRecord)
272 if ( useUpdatedGpRecord == 1 ) {
280 if ( useUpdatedGpRecord == 1 ) {
288 if ( useUpdatedGpRecord == 1 ) {
362 if ( matStiffSymmFlag ) {
372 answer.
add(initialStressMatrix);
376 OOFEM_ERROR(
"Updated lagrangian not supported yet");
379 int iStartIndx, iEndIndx, jStartIndx, jEndIndx;
427 Dij.
beSubMatrixOf(D, iStartIndx, iEndIndx, jStartIndx, jEndIndx);
430 if ( matStiffSymmFlag ) {
440 if ( matStiffSymmFlag ) {
468 for (
auto &gp : *iRule ) {
485 if ( matStiffSymmFlag ) {
499 if ( matStiffSymmFlag ) {
517 this->
giveIPValue(stress, gp, IST_StressTensor, tStep);
522 stress_identFull.
at(1, 1) = stress.
at(1);
523 stress_identFull.
at(2, 2) = stress.
at(2);
524 stress_identFull.
at(3, 3) = stress.
at(3);
525 stress_identFull.
at(4, 4) = stress.
at(2) + stress.
at(3);
526 stress_identFull.
at(5, 5) = stress.
at(1) + stress.
at(3);
527 stress_identFull.
at(6, 6) = stress.
at(1) + stress.
at(2);
529 stress_identFull.
at(1, 5) = stress.
at(5);
530 stress_identFull.
at(1, 6) = stress.
at(6);
532 stress_identFull.
at(2, 4) = stress.
at(4);
533 stress_identFull.
at(2, 5) = stress.
at(6);
535 stress_identFull.
at(3, 4) = stress.
at(4);
536 stress_identFull.
at(3, 5) = stress.
at(5);
538 stress_identFull.
at(4, 5) = stress.
at(6);
539 stress_identFull.
at(4, 6) = stress.
at(5);
540 stress_identFull.
at(5, 6) = stress.
at(4);
578 OOFEM_ERROR(
"nlGeometry = 2 is not supported anymore. If access to F is needed, then the material \n should overload giveFirstPKStressVector which has F as input.");
double giveDeterminant() const
Returns the trace (sum of diagonal components) of the receiver.
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
Returns the size of symmetric part of a reduced stress/strain vector according to given mode...
virtual bool isActivated(TimeStep *tStep)
MaterialMode giveMaterialMode()
Returns corresponding material mode 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.
Domain * domain
Link to domain object, useful for communicating with other FEM components.
const FloatArray & givePVector() const
Returns the const pointer to receiver's first Piola-Kirchhoff stress vector.
std::unique_ptr< FloatArray > initialDisplacements
Initial displacement vector, describes the initial nodal displacements when element has been casted...
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)=0
Computes constitutive matrix of receiver.
double & at(int i)
Coefficient access function.
void beSubMatrixOf(const FloatMatrix &src, int topRow, int bottomRow, int topCol, int bottomCol)
Assigns to the receiver the sub-matrix of another matrix.
This class implements a structural material status information.
void clear()
Clears receiver (zero size).
void giveInternalForcesVector_withIRulesAsSubcells(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord=0)
Evaluates nodal representation of real internal forces.
virtual int checkConsistency()
Performs consistency check.
EngngModel * giveEngngModel()
Returns engineering model to which receiver is associated.
const FloatArray & giveCVector() const
Returns the const pointer to receiver's Cauchy stress vector.
#define _IFT_NLStructuralElement_nlgeoflag
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
MaterialMode
Type representing material mode of integration point.
Class implementing an array of integers.
MatResponseMode
Describes the character of characteristic material matrix.
virtual FEInterpolation * giveInterpolation() const
Abstract base class representing integration rule.
void beMatrixForm(const FloatArray &aArray)
virtual void giveStiffnessMatrix_dPdF(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Computes the material stiffness matrix dPdF of receiver in a given integration point, respecting its history.
Class representing a general abstraction for finite element interpolation class.
void plusProductUnsym(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
const char * __MaterialModeToString(MaterialMode _value)
void computeFirstPKStressVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Computes the first Piola-Kirchhoff stress tensor on Voigt format.
Abstract base class for all "structural" finite elements.
double computeCurrentVolume(TimeStep *tStep)
Computes the current volume of element.
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode mode)=0
Check for symmetry of stiffness matrix.
static void giveReducedSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the full unsymmetric Voigt vector (2nd order tensor) to reduced form.
static void giveReducedVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the full symmetric Voigt vector (2nd order tensor) to reduced form.
virtual void giveFirstPKStresses(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedFIncrement, TimeStep *tStep)=0
Computes the First Piola-Kirchoff stress vector for a given deformation gradient and integration poin...
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
virtual void giveCauchyStresses(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedFIncrement, TimeStep *tStep)=0
Computes the Cauchy stress vector for a given increment of deformation gradient and given integration...
virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)=0
Computes the stress vector of receiver at given integration point, at time step tStep.
Wrapper around element definition to provide FEICellGeometry interface.
virtual fMode giveFormulation()
Indicates type of non linear computation (total or updated formulation).
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
virtual void computeStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Compute strain vector of receiver evaluated at given integration point at given time step from elemen...
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
double at(int i, int j) const
Coefficient access function.
virtual int giveIntegrationRuleLocalCodeNumbers(IntArray &answer, IntegrationRule &ie)
Assembles the code numbers of given integration element (sub-patch) This is done by obtaining list of...
void computeCauchyStressVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Computes the Cauchy stress tensor on Voigt format.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
Class representing vector of real numbers.
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...
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
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 add(const FloatMatrix &a)
Adds matrix to the receiver.
NLStructuralElement(int n, Domain *d)
Constructor.
void zero()
Zeroes all coefficients of receiver.
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int lowerIndx=1, int upperIndx=ALL_STRAINS)=0
Computes the geometrical matrix of receiver in given integration point.
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void computeBHmatrixAt(GaussPoint *gp, FloatMatrix &answer)
Computes a matrix which, multiplied by the column matrix of nodal displacements, gives the displaceme...
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord=0)
Evaluates nodal representation of real internal forces.
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
int giveSize() const
Returns the size of receiver.
Abstract base class for all structural cross section models.
the oofem namespace is to define a context or scope in which all oofem names are defined.
void assemble(const FloatMatrix &src, const IntArray &loc)
Assembles the contribution using localization array into receiver.
void clear()
Sets size of receiver to be an empty matrix. It will have zero rows and zero columns size...
void symmetrized()
Initializes the lower half of the receiver according to the upper half.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void computeInitialStressMatrix(FloatMatrix &answer, TimeStep *tStep)
Computes the initial stiffness matrix of receiver.
virtual void giveStiffnessMatrix_dCde(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Computes the material stiffness matrix dCde of receiver in a given integration point, respecting its history.
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
Class representing solution step.
void computeStiffnessMatrix_withIRulesAsSubcells(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
void resize(int s)
Resizes receiver towards requested size.
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
Adds the product .