35#ifndef anisodamagemodel_h
36#define anisodamagemodel_h
41#define keep_track_of_dissipated_energy
52#define _IFT_AnisotropicDamageMaterial_Name "adm"
53#define _IFT_AnisotropicDamageMaterial_equivStrainType "equivstraintype"
54#define _IFT_AnisotropicDamageMaterial_damageLawType "damlaw"
55#define _IFT_AnisotropicDamageMaterial_kappa0 "kappa0"
56#define _IFT_AnisotropicDamageMaterial_kappaf "kappaf"
57#define _IFT_AnisotropicDamageMaterial_aA "aa"
88#ifdef keep_track_of_dissipated_energy
140#ifdef keep_track_of_dissipated_energy
158 const char *
giveClassName()
const override {
return "AnisotropicDamageMaterialModelStatus"; }
207 const char *
giveClassName()
const override {
return "AnisotropicDamageMaterial"; }
213 void computePrincValDir2D(
double &D1,
double &D2,
double &c,
double &s,
double Dx,
double Dy,
double Dxy)
const;
284 std::unique_ptr<MaterialStatus>
CreateStatus(
GaussPoint *gp)
const override {
return std::make_unique<AnisotropicDamageMaterialStatus>(gp); }
298 const FloatArray &totalStrain,
double equivStrain,
#define _IFT_AnisotropicDamageMaterial_Name
double tempStrainZ
Non-equilibrated out-of-plane value for 2dPlaneStress mode.
double giveTempStressWork()
Returns the temp density of total work of stress on strain increments.
double giveStoredFactor()
Returns the last Stored Factor.
double strainZ
Out-of-plane value for 2dPlaneStress mode.
double giveStressWork()
Returns the density of total work of stress on strain increments.
void setTempDamage(const FloatMatrix &d)
Assigns temp. damage tensor to given tensor d.
double giveStrainZ()
Returns the last equilibrated scalar measure of the out-of-plane strain to given value (for 2dPlaneSt...
AnisotropicDamageMaterialStatus(GaussPoint *g)
Constructor.
double giveTempStoredFactor()
Returns the last Temp Stored Factor.
double giveDissWork()
Returns the density of dissipated work.
void setTempFlag(int newflag)
Sets the value of the temporary value of flag.
double giveTempStrainZ()
Returns the temp scalar measure of the out-of-plane strain to given value (for 2dPlaneStress mode).
void restoreContext(DataStream &stream, ContextMode mode) override
int giveFlag()
Returns the value of the flag.
double kappa
Scalar measure of the largest strain level ever reached in material.
void saveContext(DataStream &stream, ContextMode mode) override
int giveTempFlag()
Returns the value of the temporary value of flag.
FloatMatrix tempDamage
Non-equilibrated second order damage tensor.
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
FloatMatrix damage
Second order damage tensor.
void setTempStoredFactor(double newTempStoredFactor)
Sets the Temp Stored Factor to given value .
double tempStressWork
Non-equilibrated density of total work done by stresses on strain increments.
double dissWork
Density of dissipated work.
void updateYourself(TimeStep *tStep) override
void setTempKappa(double newKappa)
Sets the temp scalar measure of the largest strain level to given value.
const char * giveClassName() const override
void computeWork(GaussPoint *gp)
Computes the increment of total stress work and of dissipated work.
void initTempStatus() override
int flag
This flag turns into 1 and remains 1 when the trace of the damage tensor is >1 in compression (tr(str...
void setTempDissWork(double w)
Sets the density of dissipated work to given value.
double tempKappa
Non-equilibrated scalar measure of the largest strain level.
double giveTempDissWork()
Returns the density of temp dissipated work.
const FloatMatrix & giveTempDamage()
Returns the temp. second order damage tensor.
double tempDissWork
Non-equilibrated density of dissipated work.
double stressWork
Density of total work done by stresses on strain increments.
void setStoredFactor(double newStoredFactor)
Sets the Stored Factor to given value .
double giveTempKappa()
Returns the temp. scalar measure of the largest strain level.
void setTempStrainZ(double newStrainZ)
Sets the temp scalar measure of the out-of-plane strain to given value (for 2dPlaneStress mode).
double giveKappa()
Returns the last equilibrated scalar measure of the largest strain level.
void setTempStressWork(double w)
Sets the density of total work of stress on strain increments to given value.
const FloatMatrix & giveDamage()
Returns the last equilibrated second order damage tensor.
FloatMatrixF< 1, 1 > give1dStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
IsotropicLinearElasticMaterial linearElasticMaterial
Reference to bulk (undamaged) material.
const char * giveClassName() const override
void computePlaneStressSigmaZ(double &answer, FloatMatrix damageTensor, FloatArray reducedTotalStrainVector, double epsZ, GaussPoint *gp, TimeStep *atTime) const
void computeDamage(FloatMatrix &tempDamage, const FloatMatrix &damage, double kappa, double eps1, double eps2, double ceps, double seps, double epsZ) const
double computeTraceD(double equivStrain) const
FloatArrayF< 6 > giveRealStressVector_3d(const FloatArrayF< 6 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
EquivStrainType
Type characterizing the algorithm used to compute equivalent strain measure.
@ EST_ElasticEnergyPositiveStrain
@ EST_ElasticEnergyPositiveStress
DamLawType
Type characterizing the damage law.
double obtainAlpha2(FloatMatrix tempDamageTensor, double deltaLambda, FloatMatrix positiveStrainTensor, FloatMatrix ProjMatrix, double damageThreshold) const
Obtains the proportion of the damage tensor that is needed to get the second eigenvalue equal to the ...
const char * giveInputRecordName() const override
double nu
Poisson's ratio.
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *atTime) override
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
void initializeFrom(InputRecord &ir) override
double computeKappa(FloatMatrix damageTensor) const
FloatMatrixF< 3, 3 > givePlaneStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
AnisotropicDamageMaterial(int n, Domain *d)
Constructor.
FloatArrayF< 3 > giveRealStressVector_PlaneStress(const FloatArrayF< 3 > &reducedE, GaussPoint *gp, TimeStep *tStep) const override
Plane-stress version of the stress evaluation algorithm.
FloatArrayF< 1 > giveRealStressVector_1d(const FloatArrayF< 1 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
double computeDimensionlessOutOfPlaneStress(const FloatArray &inplaneStrain, double epsZ, const FloatMatrix &dam) const
void giveInputRecord(DynamicInputRecord &input) override
double kappa0
Damage threshold kappa0, as defined in the paper mentioned above.
bool checkPrincVal2D(double Dx, double Dy, double Dxy) const
bool hasMaterialModeCapability(MaterialMode mode) const override
void computeEquivalentStrain(double &kappa, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) const
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
double computeCorrectionFactor(FloatMatrix tempDamageTensor, FloatMatrix strainTensor, GaussPoint *gp) const
double checkSymmetry(FloatMatrix matrix) const
double aA
Damage parameter a*A, needed to obtain Kappa(trD), according to eq. 33 in the paper mentioned above.
double computeK(GaussPoint *gp)
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
double obtainAlpha3(FloatMatrix tempDamageTensor, double deltaLambda, FloatMatrix positiveStrainTensor, FloatArray vec3, double damageThreshold) const
Obtains the proportion of the damage tensor that is needed to get the third eigenvalue equal to the d...
FloatArrayF< 4 > giveRealStressVector_PlaneStrain(const FloatArrayF< 4 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_3d.
DamLawType damageLawType
Parameter specifying the damage law.
void correctBigValues(FloatMatrix &matrix) const
double kappaf
Damage parameter kappa_f (in the paper denoted as "a").
void computeDamageTensor(FloatMatrix &answer, GaussPoint *gp, const FloatArray &totalStrain, double equivStrain, TimeStep *atTime) const
void computeInplaneStress(FloatArray &inplaneStress, const FloatArray &inplaneStrain, double epsZ, const FloatMatrix &dam) const
double obtainAlpha1(FloatMatrix tempDamageTensor, double deltaLambda, FloatMatrix positiveStrainTensor, double damageThreshold) const
Obtains the proportion of the damage tensor that is needed to get the first eigenvalue equal to the d...
FloatArray giveRealStressVector_StressControl(const FloatArray &strain, const IntArray &strainControl, GaussPoint *gp, TimeStep *tStep) const override
Iteratively calls giveRealStressVector_3d to find the stress controlled equal to zero·
void computePrincValDir2D(double &D1, double &D2, double &c, double &s, double Dx, double Dy, double Dxy) const
void computePlaneStressStrain(FloatMatrix &answer, FloatMatrix damageTensor, FloatArray totalStrain, GaussPoint *gp, TimeStep *atTime) const
EquivStrainType equivStrainType
Parameter specifying the definition of equivalent strain.
virtual void computeSecantOperator(FloatMatrix &answer, FloatMatrix strainTensor, FloatMatrix damageTensor, GaussPoint *gp) const
double computeOutOfPlaneStrain(const FloatArray &inplaneStrain, const FloatMatrix &dam, bool tens_flag) const
GaussPoint * gp
Associated integration point.
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralMaterial(int n, Domain *d)