35 #ifndef anisodamagemodel_h 36 #define anisodamagemodel_h 41 #define keep_track_of_dissipated_energy 44 #include "../sm/Materials/structuralmaterial.h" 46 #include "../sm/Materials/structuralms.h" 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 142 #ifdef keep_track_of_dissipated_energy 160 virtual const char *
giveClassName()
const {
return "AnisotropicDamageMaterialModelStatus"; }
196 enum EquivStrainType {
EST_Unknown, EST_Mazars, EST_Rankine_Smooth, EST_Rankine_Standard, EST_ElasticEnergy, EST_ElasticEnergyPositiveStress, EST_ElasticEnergyPositiveStrain, EST_Mises, EST_Griffith };
211 virtual int hasMaterialModeCapability(
MaterialMode mode);
214 virtual const char *
giveClassName()
const {
return "AnisotropicDamageMaterial"; }
222 void computePrincValDir2D(
double &D1,
double &D2,
double &c,
double &s,
double Dx,
double Dy,
double Dxy);
223 bool checkPrincVal2D(
double Dx,
double Dy,
double Dxy);
225 double computeTraceD(
double equivStrain);
226 double computeOutOfPlaneStrain(
const FloatArray &inplaneStrain,
const FloatMatrix &dam,
bool tens_flag);
227 double computeDimensionlessOutOfPlaneStress(
const FloatArray &inplaneStrain,
double epsZ,
const FloatMatrix &dam);
232 double obtainAlpha1(
FloatMatrix tempDamageTensor,
double deltaLambda,
FloatMatrix positiveStrainTensor,
double damageThreshold);
246 virtual void give3dMaterialStiffnessMatrix(
FloatMatrix &answer,
255 { this->giveRealStressVector(answer, gp, reducedE, tStep); }
257 { this->giveRealStressVector(answer, gp, reducedE, tStep); }
259 { this->giveRealStressVector(answer, gp, reducedE, tStep); }
261 { this->giveRealStressVector(answer, gp, reducedE, tStep); }
280 const FloatArray &totalStrain,
double equivStrain,
301 virtual void computePlaneStressSigmaZ(
double &answer,
FloatMatrix damageTensor,
FloatArray reducedTotalStrainVector,
317 #endif // anisodamagemodel_h
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
double aA
Damage parameter a*A, needed to obtain Kappa(trD), according to eq. 33 in the paper mentioned above...
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
This class implements associated Material Status to AnisotropicDamageMaterial.
int giveTempFlag()
Returns the value of the temporary value of flag.
GaussPoint * gp
Associated integration point.
IsotropicLinearElasticMaterial * linearElasticMaterial
Reference to bulk (undamaged) material.
virtual const char * giveClassName() const
Domain * domain
Link to domain object, useful for communicating with other FEM components.
double tempDissWork
Non-equilibrated density of dissipated work.
double tempStressWork
Non-equilibrated density of total work done by stresses on strain increments.
AnisotropicDamageMaterialStatus(int n, Domain *d, GaussPoint *g)
Constructor.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
FloatMatrix tempDamage
Non-equilibrated second order damage tensor.
Class representing anisotropic damage model.
This class implements a structural material status information.
double nu
Poisson's ratio.
virtual ~AnisotropicDamageMaterialStatus()
Destructor.
double giveStressWork()
Returns the density of total work of stress on strain increments.
double giveTempDissWork()
Returns the density of temp dissipated work.
double giveTempStoredFactor()
Returns the last Temp Stored Factor.
double giveStoredFactor()
Returns the last Stored Factor.
DamLawType damageLawType
Parameter specifying the damage law.
void setTempFlag(int newflag)
Sets the value of the temporary value of flag.
#define _IFT_AnisotropicDamageMaterial_Name
double stressWork
Density of total work done by stresses on strain increments.
MaterialMode
Type representing material mode of integration point.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
Class implementing an array of integers.
MatResponseMode
Describes the character of characteristic material matrix.
virtual void giveRealStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
FloatMatrix damage
Second order damage tensor.
const FloatMatrix & giveDamage()
Returns the last equilibrated second order damage tensor.
double giveTempStressWork()
Returns the temp density of total work of stress on strain increments.
virtual void giveRealStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_3d.
double dissWork
Density of dissipated work.
virtual void giveRealStressVector_StressControl(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, const IntArray &strainControl, TimeStep *tStep)
Iteratively calls giveRealStressVector_3d to find the stress controlled equal to zero· ...
double tempKappa
Non-equilibrated 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)...
void setTempDamage(const FloatMatrix &d)
Assigns temp. damage tensor to given tensor d.
double giveKappa()
Returns the last equilibrated scalar measure of the largest strain level.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
This class implements an isotropic linear elastic material in a finite element problem.
virtual const char * giveInputRecordName() const
void setTempDissWork(double w)
Sets the density of dissipated work to given value.
void setStoredFactor(double newStoredFactor)
Sets the Stored Factor to given value .
double giveTempStrainZ()
Returns the temp scalar measure of the out-of-plane strain to given value (for 2dPlaneStress mode)...
double giveTempKappa()
Returns the temp. scalar measure of the largest strain level.
double strainZ
Non-equilibrated out-of-plane value for 2dPlaneStress mode.
EquivStrainType
Type characterizing the algorithm used to compute equivalent strain measure.
void computeWork(GaussPoint *gp)
Computes the increment of total stress work and of dissipated work.
IsotropicLinearElasticMaterial * giveLinearElasticMaterial()
Returns reference to undamaged (bulk) material.
double giveDissWork()
Returns the density of dissipated work.
int giveFlag()
Returns the value of the flag.
Abstract base class representing a material status information.
Class representing vector of real numbers.
void setTempKappa(double newKappa)
Sets the temp scalar measure of the largest strain level to given value.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
double kappaf
Damage parameter kappa_f (in the paper denoted as "a")
virtual void giveRealStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
double kappa0
Damage threshold kappa0, as defined in the paper mentioned above.
MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
virtual const char * giveClassName() const
void setTempStoredFactor(double newTempStoredFactor)
Sets the Temp Stored Factor to given value .
double kappa
Scalar measure of the largest strain level ever reached in material.
DamLawType
Type characterizing the damage law.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Abstract base class for all "structural" constitutive models.
double tempStrainZ
Out-of-plane value for 2dPlaneStress mode.
const FloatMatrix & giveTempDamage()
Returns the temp. second order damage tensor.
virtual int hasNonLinearBehaviour()
Returns nonzero if receiver is non linear.
double E
Young's modulus.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
int flag
This flag turns into 1 and remains 1 when the trace of the damage tensor is >1 in compression (tr(str...
the oofem namespace is to define a context or scope in which all oofem names are defined.
void setTempStressWork(double w)
Sets the density of total work of stress on strain increments to given value.
Class representing integration point in finite element program.
Class representing solution step.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
EquivStrainType equivStrainType
Parameter specifying the definition of equivalent strain.
double giveStrainZ()
Returns the last equilibrated scalar measure of the out-of-plane strain to given value (for 2dPlaneSt...