46#define _IFT_FCM_nAllowedCracks "ncracks"
47#define _IFT_FCM_crackSpacing "crackspacing"
48#define _IFT_FCM_multipleCrackShear "multiplecrackshear"
49#define _IFT_FCM_ecsm "ecsm"
50#define _IFT_FCM_shearCoeffNumer "shearcoeffnumer"
51#define _IFT_FCM_normalCoeffNumer "normalcoeffnumer"
57#define pscm_JUST_INIT 1
58#define pscm_SOFTENING 2
59#define pscm_UNLO_RELO 3
62#define fcm_SMALL_STRAIN 1.e-12
63#define fcm_BIGNUMBER 1.e6
64#define fcm_TOLERANCE 1.e-6
65#define fcm_THRESHOLD_CRACK_STRAIN 1.e-8
270 std::unique_ptr<MaterialStatus>
CreateStatus(
GaussPoint *gp)
const override {
return std::make_unique<FCMMaterialStatus>(gp); }
368 MatResponseMode rMode,
373 MatResponseMode rMode,
void setCharLength(int icrack, double val)
sets characteristic length for i-th crack
void setTempMaxCrackStrain(int icrack, double val)
sets value of the maximum crack strain for the i-th crack (temporary value)
FloatMatrix transMatrix_G2Lstress
transformation matrix converting stress from global to local coordinate system
void setL2GStressVectorTransformationMtrx(FloatMatrix t)
sets transformation matrix for stress transformation from local to global coordinate system
const FloatMatrix & giveG2LStressVectorTransformationMtrx()
returns transformation matrix for stress transformation from global to local coordinate system
const FloatMatrix & giveL2GStrainVectorTransformationMtrx()
sets transformation matrix for stress transformation from global to local coordinate system
void setTempNormalCrackStrainVector(FloatArray a)
sets temporary vector of cracking strains (normal components)
FloatArray tempMaxCrackStrains
void restoreContext(DataStream &stream, ContextMode mode) override
FloatMatrix transMatrix_L2Gstress
transformation matrix converting stress from local to global coordinate system
IntArray crackStatuses
crack statuses (none, just initialized, softening, unload-reload, closed)
double giveCharLength(int icrack) const
returns characteristic length associated with i-th crack direction
void updateYourself(TimeStep *tStep) override
double giveCrackStrain(int icrack) const
returns i-th component of the crack strain vector (equilibrated)
void setMaxCrackStrain(int icrack, double val)
sets value of the maximum crack strain for the i-th crack (equilibrated value)
void setCrackStrainVector(FloatArray a)
sets equilibrated vector of cracking strains (max 6 components)
FloatArray charLengths
Characteristic lengths computed from the crack orientation and element geometry.
FloatMatrix crackDirs
Storing direction of cracks (crack normals) in columwise format.
const IntArray & giveTempCrackStatus()
returns vector of temporary crack statuses
FloatArray tempCrackStrainVector
void setTempCrackStrain(int icrack, double val)
sets temporary value of i-th cracking strain (max 6 components)
const FloatMatrix & giveG2LStrainVectorTransformationMtrx()
sets transformation matrix for strain transformation from global to local coordinate system
const FloatArray & giveMaxCrackStrainVector()
returns vector with maximum cracking strains (max 3 components)
const FloatMatrix & giveL2GStressVectorTransformationMtrx()
sets transformation matrix for stress transformation from local to global coordinate system
int giveCrackStatus(int icrack) const
return equilibrated value of status associated with i-th crack direction
FloatArray maxCrackStrains
Max. crack strain reached in the entire previous history.
void saveContext(DataStream &stream, ContextMode mode) override
virtual int giveNumberOfCracks() const
returns number of cracks from the previous time step (equilibrated value)
double giveTempMaxCrackStrain(int icrack)
returns maximum crack strain for the i-th crack (temporary value)
const IntArray & giveCrackStatus()
returns crack statuses
void printOutputAt(FILE *file, TimeStep *tStep) const override
Print receiver's output to given stream.
const char * giveClassName() const override
void setG2LStrainVectorTransformationMtrx(FloatMatrix s)
sets transformation matrix for strain transformation from global to local coordinate system
void setTempCrackStrainVector(FloatArray a)
sets temporary vector of cracking strains (max 6 components)
void setTempCrackStatus(int icrack, int val)
sets temporary value of status for of the i-th crack
void setCrackDirs(FloatMatrix a)
sets matrix with crack directions (normal vectors)
IntArray tempCrackStatuses
virtual int giveNumberOfTempCracks() const
returns temporary number of cracks
int giveTempCrackStatus(int icrack) const
returns temporary value of status associated with i-th crack direction
FloatMatrix transMatrix_L2Gstrain
transformation matrix converting strain from local to global coordinate system
void setG2LStressVectorTransformationMtrx(FloatMatrix t)
sets transformation matrix for stress transformation from global to local coordinate system
FloatArray crackStrainVector
Components of crack strain vector (normal as well as shear).
void initTempStatus() override
FCMMaterialStatus(GaussPoint *g)
double giveMaxCrackStrain(int icrack)
returns maximum crack strain for the i-th crack (equilibrated value)
double giveTempCrackStrain(int icrack) const
returns i-th component of the crack strain vector (temporary)
void setL2GStrainVectorTransformationMtrx(FloatMatrix s)
sets transformation matrix for stress transformation from global to local coordinate system
const FloatMatrix & giveCrackDirs()
returns crack directions
int nMaxCracks
number of maximum possible cracks (optional parameter)
const FloatArray & giveTempCrackStrainVector()
return temporary crack strain vector (max 6 components)
virtual int giveMaxNumberOfCracks(GaussPoint *gp)
returns maximum number of cracks associated with current mode
FloatMatrix transMatrix_G2Lstrain
transformation matrix converting strain from global to local coordinate system
const FloatArray & giveCrackStrainVector() const
return equilibrated crack strain vector (max 6 components)
const char * giveClassName() const override
FloatArrayF< 4 > giveRealStressVector_PlaneStrain(const FloatArrayF< 4 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_3d.
virtual double computeNormalCrackOpening(GaussPoint *gp, int i) const
uses temporary cracking strain and characteristic length to obtain the crack opening
virtual double givePoissonsRatio() const
returns Poisson's ratio
FloatArrayF< 2 > giveRealStressVector_2dBeamLayer(const FloatArrayF< 2 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
virtual double giveCharacteristicElementLength(GaussPoint *gp, const FloatArray &crackPlaneNormal) const
returns characteristic element length in given direction
virtual void updateCrackStatus(GaussPoint *gp) const
updates crack statuses
bool multipleCrackShear
if true = takes shear compliance of all cracks, false = only dominant crack contribution,...
virtual double giveTensileStrength(GaussPoint *gp, TimeStep *tStep) const =0
comutes tensile strength
FloatArrayF< 1 > giveRealStressVector_1d(const FloatArrayF< 1 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
virtual void checkSnapBack(GaussPoint *gp, TimeStep *tStep, int crack) const =0
checks possible snap-back
double shearCoeffNumer
minimum ratio of effective shear modulus vs. shear modulus - just for numerical purpose
virtual bool isIntactForShear(GaussPoint *gp, int i) const
returns true for closed or no cracks associated to given shear direction (i = 4, 5,...
virtual double giveNumberOfCracksForShearDirection(GaussPoint *gp, int i) const
returns number of cracks for given shear direction (i = 4, 5, 6) which is treated as the maximum of t...
virtual void giveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep) const
virtual double computeTotalD2Modulus(GaussPoint *gp, TimeStep *tStep, int i) const
shear modulus for a given shear direction (4, 5, 6)
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
virtual double giveNormalCrackingStress(GaussPoint *gp, TimeStep *tStep, double eps_cr, int i) const =0
computes normal stress associated with i-th crack direction
virtual void giveTotalLocalCrackedStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
returns local stiffness matrix in the cracks' direction (total according to the material mode)
virtual bool isIntact(GaussPoint *gp, int icrack) const
returns true for closed or no crack (i = 1, 2, 3)
virtual double computeShearSlipOnCrack(GaussPoint *gp, TimeStep *tStep, int i) const
computes total shear slip on a given crack plane (i = 1, 2, 3); the slip is computed from the tempora...
virtual double giveCrackSpacing(void) const
returns either user-provided value of crack spacing or a value computed from composition
virtual double giveNumberOfCracksInDirection(GaussPoint *gp, int iCrack) const
returns number of fictiotious parallel cracks in the direction of i-th crack
FloatMatrixF< 4, 4 > givePlaneStrainStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
virtual double computeEffectiveShearModulus(GaussPoint *gp, TimeStep *tStep, int i) const =0
returns Geff which is necessary in the global stiffness matrix
FloatMatrixF< 3, 3 > givePlaneStressStiffMtrx(MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep) const override
double give(int aProperty, GaussPoint *gp) const override
virtual double computeOverallElasticShearModulus(GaussPoint *gp, TimeStep *tStep) const
returns overall shear modulus
virtual double computeOverallElasticStiffness(GaussPoint *gp, TimeStep *tStep) const
returns overall Young's modulus
double normalCoeffNumer
minimum ratio of effective normal stiffness vs. overall modulus - just for numerical purpose
virtual void giveNormalLocalCrackedStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const
returns local stiffness matrix in the cracks' direction (only normal components)
virtual bool checkStrengthCriterion(FloatMatrix &newBase, const FloatArray &globalStress, GaussPoint *gp, TimeStep *tStep, int nCrack) const
checks if the globalStress does not exceed strength in the direction of newBase for n-th crack
virtual double computeMaxNormalCrackOpening(GaussPoint *gp, TimeStep *tStep, int i) const
uses maximum equilibrated cracking strain and characteristic length to obtain the maximum reached cra...
virtual bool isStrengthExceeded(const FloatMatrix &base, GaussPoint *gp, TimeStep *tStep, int iCrack, double trialStress) const
compares trial stress with strength. Returns true if the strength is exceeded. Function oveloaded in ...
FloatArrayF< 5 > giveRealStressVector_PlateLayer(const FloatArrayF< 5 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
virtual double maxShearStress(GaussPoint *gp, TimeStep *tStep, int i) const =0
computes the maximum value of the shear stress; if the shear stress exceeds this value,...
virtual double computeNumerD2Modulus(GaussPoint *gp, TimeStep *tStep, int i) const
shear modulus in a STIFFNESS MATRIX for a given shear direction (4, 5, 6)
virtual bool isThisShearComponent(GaussPoint *gp, int component) const
returns true if current component is associated with shear
virtual double computeD2ModulusForCrack(GaussPoint *gp, TimeStep *tStep, int icrack) const =0
shear modulus for a given crack plane (1, 2, 3)
IsotropicLinearElasticMaterial linearElasticMaterial
virtual void initializeCrack(GaussPoint *gp, TimeStep *tStep, FloatMatrix &base, int nCrack) const
void initializeFrom(InputRecord &ir) override
virtual double computeShearStiffnessRedistributionFactor(GaussPoint *gp, TimeStep *tStep, int ithCrackPlane, int jthCrackDirection) const
function calculating ratio used to split shear slips on two crack planes
ElementCharSizeMethod ecsMethod
Method used for evaluation of characteristic element size.
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
bool hasMaterialModeCapability(MaterialMode mode) const override
virtual double giveCrackingModulus(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep, int i) const =0
returns stiffness in the normal direction of the i-th crack
FloatArrayF< 6 > giveRealStressVector_3d(const FloatArrayF< 6 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
FCMMaterial(int n, Domain *d)
virtual double giveCrackingModulusInTension(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep, int i) const =0
returns stiffness in the normal direction of the i-th crack
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
FloatMatrixF< 6, 6 > give3dMaterialStiffnessMatrix(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const override
double crackSpacing
value of crack spacing (allows to "have" more parallel cracks in one direction if the element size ex...
virtual double computeNumerD2ModulusForCrack(GaussPoint *gp, TimeStep *tStep, int icrack) const =0
shear modulus for numerical purpose (stiffness matrix) for a given crack plane (1,...
FloatArrayF< 3 > giveRealStressVector_PlaneStress(const FloatArrayF< 3 > &strain, GaussPoint *gp, TimeStep *tStep) const override
Default implementation relies on giveRealStressVector_StressControl.
int nAllowedCracks
allowed number of cracks (user-defined)
GaussPoint * gp
Associated integration point.
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralMaterial(int n, Domain *d)