36 #include "../sm/Elements/phasefieldelement.h" 37 #include "../sm/CrossSections/structuralcrosssection.h" 38 #include "../sm/Materials/structuralms.h" 68 for (
int j = 1; j <= dofIdArray.
giveSize( ); j++ ) {
160 BStress = grad_d * l * g_c;
207 answer.
at( 1 ) = t_star / Delta_t * Delta_d + g_c / l *d + Gprim * Psibar;
228 return (1.0 - d) * (1.0 - d) + r0;
236 return -2.0 * (1.0 - d);
274 answer.
resize( nDofs, nDofs );
309 if ( matStiffSymmFlag ) {
316 if ( matStiffSymmFlag ) {
375 double factorN = t_star / Delta_t + g_c / l + psiBar*(-2.0);
376 double factorB = g_c*l;
398 PhaseFieldElement :: computeStressVectorAndLocalCumulatedStrain(
FloatArray &answer,
double localCumulatedStrain,
GaussPoint *gp,
TimeStep *stepN)
409 this->computeLocalStrainVector(Epsilon, gp, stepN);
410 dpmat->giveRealStressVector(answer, gp, Epsilon, nlCumulatedStrain, stepN);
411 }
else if ( nlGeo == 1 ) {
414 this->computeDeformationGradientVector(vF, gp, stepN);
415 dpmat->giveFirstPKStressVector(answer, gp, vF, nlCumulatedStrain, stepN);
426 this->giveInternalForcesVectorGen(answer, tStep, useUpdatedGpRecord,
428 &this->computeBmatrixAt,
431 &this->computeVolumeAround
439 this->giveInternalForcesVectorGen(answer, tStep, useUpdatedGpRecord,
440 &this->computeNmatrixAt,
441 &this->computeBmatrixAt,
443 &this->computeBStress_d,
444 &this->computeVolumeAround
456 answer.
at(1) = g_c*l;
469 this->computeStiffnessMatrixGen(answer, rMode, tStep,
471 &this->computeBmatrixAt,
474 this->computeVolumeAround
483 this->computeStiffnessMatrixGen(answer, rMode, tStep,
485 &this->computeBmatrixAt,
488 this->computeVolumeAround
CrossSection * giveCrossSection()
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)=0
Evaluates the array of interpolation functions (shape functions) at given point.
void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
Returns local vector of unknowns.
virtual int computeNumberOfDofs()
Computes or simply returns total number of element's local DOFs.
virtual IntegrationRule * giveIntegrationRule(int i)
Abstract base class for "structural" finite elements with geometrical nonlinearities.
double computeGPrim(GaussPoint *gp, ValueModeType valueMode, TimeStep *stepN)
void computeStiffnessMatrix_dd(FloatMatrix &, MatResponseMode, TimeStep *)
double & at(int i)
Coefficient access function.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
This class implements a structural material status information.
void clear()
Clears receiver (zero size).
void giveInternalForcesVector_u(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
EngngModel * giveEngngModel()
Returns engineering model to which receiver is associated.
void computeLocationArrayOfDofIDs(const IntArray &dofIdArray, IntArray &answer)
Base class for dof managers.
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
virtual void giveCharMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Computes the stiffness matrix of receiver in given integration point, respecting its history...
virtual FEInterpolation * giveInterpolation() const
void computeDamageUnknowns(FloatArray &answer, ValueModeType valueMode, TimeStep *stepN)
double giveTimeIncrement()
Returns solution step associated time increment.
void plusProductUnsym(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
virtual IRResultType initializeFrom(InputRecord *ir)
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
virtual bool isCharacteristicMtrxSymmetric(MatResponseMode mode)=0
Check for symmetry of stiffness matrix.
double computeG(GaussPoint *gp, ValueModeType valueMode, TimeStep *stepN)
int giveNumberOfDofs() const
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
void computeStiffnessMatrix_uu(FloatMatrix &, MatResponseMode, TimeStep *)
void clear()
Clears the array (zero size).
DofIDItem
Type representing particular dof type.
void times(double f)
Multiplies receiver by factor f.
void computeDisplacementUnknowns(FloatArray &answer, ValueModeType valueMode, TimeStep *stepN)
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.
const FloatArray & giveTempStrainVector() const
Returns the const pointer to receiver's temporary strain vector.
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
Adds to the receiver the product .
virtual void giveDofManDofIDMask_u(IntArray &answer)=0
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
void beNMatrixOf(const FloatArray &n, int nsd)
Assigns the receiver to be a repeated diagonal matrix.
int giveGeometryMode()
Returns the geometry mode describing the formulation used in the internal work 0 - Engineering (small...
void computeStiffnessMatrix_du(FloatMatrix &, MatResponseMode, TimeStep *)
Class representing vector of real numbers.
double computeDamageAt(GaussPoint *gp, ValueModeType valueMode, TimeStep *stepN)
bool hasDofID(DofIDItem id) const
Checks if receiver contains dof with given ID.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
virtual NLStructuralElement * giveElement()=0
IntegrationPointStatus * giveMaterialStatus()
Returns reference to associated material status (NULL if not defined).
void computeStiffnessMatrix_ud(FloatMatrix &, MatResponseMode, TimeStep *)
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 computeBStress_u(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, int useUpdatedGpRecord)
void computeNStress_d(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, int useUpdatedGpRecord)
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
void giveInternalForcesVector_d(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
Dof * giveDofWithID(int dofID) const
Returns DOF with given dofID; issues error if not present.
void followedBy(const IntArray &b, int allocChunk=0)
Appends array b at the end of receiver.
void zero()
Zeroes all coefficients of receiver.
virtual void giveDofManDofIDMask_d(IntArray &answer)=0
void setColumn(const FloatArray &src, int c)
Sets the values of the matrix in specified column.
void times(double s)
Multiplies receiver with scalar.
void beTranspositionOf(const FloatMatrix &src)
Assigns to the receiver the transposition of parameter.
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.
double computeFreeEnergy(GaussPoint *gp, TimeStep *tStep)
void zero()
Zeroes all coefficient of receiver.
Domain * giveDomain() const
virtual void computeBd_matrixAt(GaussPoint *, FloatMatrix &, int=1, int=ALL_STRAINS)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver's temporary stress vector.
int giveSize() const
Returns the size of receiver.
Abstract base class for all structural cross section models.
double giveRelaxationTime()
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 clear()
Sets size of receiver to be an empty matrix. It will have zero rows and zero columns size...
PhaseFieldElement(int i, Domain *aDomain)
Abstract class Dof represents Degree Of Freedom in finite element mesh.
double giveCriticalEnergy()
void symmetrized()
Initializes the lower half of the receiver according to the upper half.
virtual void computeStiffnessMatrix(FloatMatrix &, MatResponseMode, TimeStep *)
double giveInternalLength()
Class representing integration point in finite element program.
Class representing solution step.
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.
void resize(int s)
Resizes receiver towards requested size.
virtual void computeNd_matrixAt(const FloatArray &lCoords, FloatMatrix &N)
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
Adds the product .