51PhaseFieldElement :: PhaseFieldElement(
int i,
Domain *aDomain )
60PhaseFieldElement :: computeLocationArrayOfDofIDs(
const IntArray &dofIdArray,
IntArray &answer )
68 for (
int j = 1; j <= dofIdArray.
giveSize( ); j++ ) {
81PhaseFieldElement :: computeDisplacementUnknowns(
FloatArray &answer, ValueModeType valueMode,
TimeStep *stepN)
85 Element :: computeVectorOf(dofIdArray, valueMode, stepN, answer);
89PhaseFieldElement :: computeDamageUnknowns(
FloatArray &answer, ValueModeType valueMode,
TimeStep *stepN)
93 Element :: computeVectorOf(dofIdArray, valueMode, stepN, answer);
97PhaseFieldElement :: giveInternalForcesVector(
FloatArray &answer,
TimeStep *tStep,
int useUpdatedGpRecord)
106 int ndofs = this->
giveElement()->computeNumberOfDofs();
120PhaseFieldElement :: giveInternalForcesVector_u(
FloatArray &answer,
TimeStep *tStep,
int useUpdatedGpRecord)
139PhaseFieldElement :: giveInternalForcesVector_d(
FloatArray &answer,
TimeStep *tStep,
int useUpdatedGpRecord)
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);
246 N.beNMatrixOf(Nvec,1);
273 int nDofs = this->
giveElement()->computeNumberOfDofs();
274 answer.
resize( nDofs, nDofs );
291PhaseFieldElement :: computeStiffnessMatrix_uu(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
309 if ( matStiffSymmFlag ) {
316 if ( matStiffSymmFlag ) {
322PhaseFieldElement :: computeStiffnessMatrix_ud(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
346 S.setColumn(stress,1);
354PhaseFieldElement :: computeStiffnessMatrix_dd(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
375 double factorN = t_star / Delta_t + g_c / l + psiBar*(-2.0);
376 double factorB = g_c*l;
388PhaseFieldElement :: computeStressVectorAndLocalCumulatedStrain(
FloatArray &answer,
double localCumulatedStrain,
GaussPoint *gp,
TimeStep *stepN)
399 this->computeLocalStrainVector(Epsilon, gp, stepN);
400 dpmat->giveRealStressVector(answer, gp, Epsilon, nlCumulatedStrain, stepN);
401 }
else if ( nlGeo == 1 ) {
404 this->computeDeformationGradientVector(vF, gp, stepN);
405 dpmat->giveFirstPKStressVector(answer, gp, vF, nlCumulatedStrain, stepN);
413PhaseFieldElement :: giveInternalForcesVector_u(
FloatArray &answer,
TimeStep *tStep,
int useUpdatedGpRecord)
416 this->giveInternalForcesVectorGen(answer, tStep, useUpdatedGpRecord,
418 &this->computeBmatrixAt,
420 &this->computeBStress_u,
421 &this->computeVolumeAround
426PhaseFieldElement :: giveInternalForcesVector_d(
FloatArray &answer,
TimeStep *tStep,
int useUpdatedGpRecord)
429 this->giveInternalForcesVectorGen(answer, tStep, useUpdatedGpRecord,
430 &this->computeNmatrixAt,
431 &this->computeBmatrixAt,
432 &this->computeNStress_d,
433 &this->computeBStress_d,
434 &this->computeVolumeAround
443 double l = this->giveInternalLength();
444 double g_c = this->giveCriticalEnergy();
446 answer.at(1) = g_c*l;
450PhaseFieldElement :: computeStiffnessMatrix_du(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
455PhaseFieldElement :: computeStiffnessMatrix_dd(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
459 this->computeStiffnessMatrixGen(answer, rMode, tStep,
461 &this->computeBmatrixAt,
464 this->computeVolumeAround
469PhaseFieldElement :: computeStiffnessMatrix_uu(
FloatMatrix &answer, MatResponseMode rMode,
TimeStep *tStep)
473 this->computeStiffnessMatrixGen(answer, rMode, tStep,
475 &this->computeBmatrixAt,
478 this->computeVolumeAround
bool hasDofID(DofIDItem id) const
int giveNumberOfDofs() const
Dof * giveDofWithID(int dofID) const
EngngModel * giveEngngModel()
virtual FEInterpolation * giveInterpolation() const
virtual IntegrationRule * giveIntegrationRule(int i)
virtual int giveNumberOfDofManagers() const
DofManager * giveDofManager(int i) const
CrossSection * giveCrossSection()
virtual double computeVolumeAround(GaussPoint *gp)
virtual fMode giveFormulation()
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
Domain * giveDomain() const
void assemble(const FloatArray &fe, const IntArray &loc)
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
double dotProduct(const FloatArray &x) const
Index giveSize() const
Returns the size of receiver.
void zero()
Zeroes all coefficients of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatArray &src)
void plusProductSymmUpper(const FloatMatrix &a, const FloatMatrix &b, double dV)
void resize(Index rows, Index cols)
*Sets size of receiver to be an empty matrix It will have zero rows and zero columns size void clear()
void plusProductUnsym(const FloatMatrix &a, const FloatMatrix &b, double dV)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
void beTranspositionOf(const FloatMatrix &src)
void zero()
Zeroes all coefficient of receiver.
void assemble(const FloatMatrix &src, const IntArray &loc)
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
IntegrationPointStatus * giveMaterialStatus(IntegrationPointStatusIDType key=IPSID_Default)
void followedBy(const IntArray &b, int allocChunk=0)
void giveInternalForcesVector_u(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
void giveInternalForcesVector_d(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
double computeDamageAt(GaussPoint *gp, ValueModeType valueMode, TimeStep *stepN)
void computeDisplacementUnknowns(FloatArray &answer, ValueModeType valueMode, TimeStep *stepN)
void computeStiffnessMatrix_dd(FloatMatrix &, MatResponseMode, TimeStep *)
virtual NLStructuralElement * giveElement()=0
void computeNStress_d(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, int useUpdatedGpRecord)
double giveInternalLength()
void computeDamageUnknowns(FloatArray &answer, ValueModeType valueMode, TimeStep *stepN)
virtual void giveDofManDofIDMask_u(IntArray &answer)=0
void computeLocationArrayOfDofIDs(const IntArray &dofIdArray, IntArray &answer)
virtual void computeNd_matrixAt(const FloatArray &lCoords, FloatMatrix &N)
double computeFreeEnergy(GaussPoint *gp, TimeStep *tStep)
double computeGPrim(GaussPoint *gp, ValueModeType valueMode, TimeStep *stepN)
double giveRelaxationTime()
virtual void computeBd_matrixAt(GaussPoint *, FloatMatrix &, int=1, int=ALL_STRAINS)
void computeStiffnessMatrix_ud(FloatMatrix &, MatResponseMode, TimeStep *)
void computeBStress_u(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, int useUpdatedGpRecord)
virtual void giveDofManDofIDMask_d(IntArray &answer)=0
double computeG(GaussPoint *gp, ValueModeType valueMode, TimeStep *stepN)
void computeStiffnessMatrix_uu(FloatMatrix &, MatResponseMode, TimeStep *)
double giveCriticalEnergy()
bool isCharacteristicMtrxSymmetric(MatResponseMode mode) const override=0
virtual void giveCharMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int lowerIndx=1, int upperIndx=ALL_STRAINS)=0
virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)=0
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver's temporary stress vector.
const FloatArray & giveTempStrainVector() const
Returns the const pointer to receiver's temporary strain vector.
double giveTimeIncrement()
Returns solution step associated time increment.