75 switch ( softening ) {
112 OOFEM_WARNING(
"the size of 'soft_w' and 'soft(w)' must be the same");
125 OOFEM_ERROR(
"crack spacing must not be defined in strain-defined materials (does not make sense)");
142 OOFEM_WARNING(
"the size of 'soft_eps' and 'soft(eps)' must be the same");
147 OOFEM_ERROR(
"crack spacing must not be defined in strain-defined materials (does not make sense)");
192 OOFEM_WARNING(
"the size of 'beta_w' and 'beta(w)' must be the same");
245 double ef, emax, c1, c2, Le, Ncr, w;
272 if ( ( rMode == TangentStiffness ) && ( ec >= emax ) ) {
274 OOFEM_ERROR(
"For unknown reason the tensile strength has been exceeded and cracking has been initiated!");
276 ef = Gf / ( Ft * Le );
281 Cf = -Ft / ef *exp(-ec / ef);
285 ef = 2. * Gf / ( Ft * Le );
287 if ( ( ec >= ef ) || ( emax >= ef ) ) {
297 ef = 5.14 * Gf / Ft / Le;
299 if ( ( ec >= ef ) || ( emax >= ef ) ) {
301 }
else if ( emax == 0. ) {
302 Cf = Ft * ( -c2 / ef - ( exp(-c2) * ( c1 * c1 * c1 + 1. ) ) / ef );
304 Cf = Ft * ( ( 3. * c1 * c1 * c1 * ec * ec * exp(-( c2 * ec ) / ef) ) / ( ef * ef * ef ) - ( c2 * exp(-( c2 * ec ) / ef) * ( c1 * c1 * c1 * ec * ec * ec + ef * ef * ef ) ) / ( ef * ef * ef * ef ) - ( exp(-c2) * ( c1 * c1 * c1 + 1. ) ) / ef );
312 OOFEM_WARNING(
"Crack width is larger than the last user-defined value in the traction-opening law.");
314 }
else if ( emax == 0. ) {
330 if ( ( ec >= this->
eps_f ) || ( emax >= this->
eps_f ) ) {
340 OOFEM_WARNING(
"Crack strain is larger than the last user-defined value in the stress-crack-strain law.");
342 }
else if ( emax == 0. ) {
382 double Le, ef, emax, w,
E, c1, c2;
400 OOFEM_ERROR(
"For unknown reason the tensile strength has been exceeded and cracking has been initiated!");
402 ef = Gf / ( Ft * Le );
405 traction = Ft * exp(-ec / ef);
409 traction = Ft * ec / emax *exp(-emax / ef);
413 ef = 2. * Gf / ( Ft * Le );
415 if ( ( ec >= ef ) || ( emax >= ef ) ) {
418 }
else if ( ec >= emax ) {
420 traction = Ft - Ft * ec / ef;
421 }
else if ( ec <= 0. ) {
424 traction = Ft * ec * ( ef - emax ) / ( emax * ef );
430 ef = 5.14 * Gf / Ft / Le;
432 if ( ( ec >= ef ) || ( emax >= ef ) ) {
435 }
else if ( ec >= emax ) {
437 traction = Ft * ( ( 1. + pow( ( c1 * ec / ef ), 3. ) ) * exp(-c2 * ec / ef) - ec / ef * ( 1. + c1 * c1 * c1 ) * exp(-c2) );
438 }
else if ( ec <= 0. ) {
441 traction = Ft * ec / emax * ( ( 1. + pow( ( c1 * emax / ef ), 3. ) ) * exp(-c2 * emax / ef) - emax / ef * ( 1. + c1 * c1 * c1 ) * exp(-c2) );
452 OOFEM_WARNING(
"Crack width is larger than the last user-defined value in the traction-opening law.");
455 }
else if ( ec >= emax ) {
463 traction *= this->
Ft;
468 }
else if ( ec <= 0. ) {
480 traction *= this->Ft * ec / emax;
487 if ( ( ec >= this->
eps_f ) || ( emax >= this->
eps_f ) ) {
489 }
else if ( emax == 0. ) {
496 traction = ( this->Ft + emax * this->
H ) * ec / emax;
502 OOFEM_WARNING(
"Cracking strain is larger than the last user-defined value in the traction-cracking-strain law.");
504 }
else if ( ec >= emax ) {
512 traction *= this->
Ft;
517 }
else if ( ec <= 0. ) {
527 traction *= this->Ft * ec / emax;
544 double G, Geff, D2tot,
N;
556 if ( shearDirection == 4 ) {
559 }
else if ( shearDirection == 5 ) {
562 }
else if ( shearDirection == 6 ) {
566 OOFEM_ERROR(
"Unexpected value of index i (4, 5, 6 permitted only)");
576 Geff = G * this->
beta / ( N - this->
beta * ( N - 1 ) );
581 Geff = G * D2tot / ( G + D2tot );
586 Geff = G * D2tot / ( G + D2tot );
600 double D2,
N, G,
E, w, beta_m;
614 D2 = G * this->
beta / ( 1. - this->
beta );
639 beta_m =
min(1., beta_m);
644 if ( beta_m >= 1. ) {
647 D2 = G * beta_m / ( 1. - beta_m );
665 double E,
Gf,
Ft, Le;
668 double efail, c1, c2;
678 OOFEM_ERROR(
"For unknown reason the tensile strength has been exceeded and cracking has been initiated!");
680 ef = Gf / ( Ft * Le );
682 ef = 2. * Gf / ( Ft * Le );
684 efail = 5.14 * Gf / Ft / Le;
688 ef = 1. / ( c2 / efail + ( exp(-c2) * ( c1 * c1 * c1 + 1. ) ) / efail );
695 ef =
min(fabs(1. / slope), ef);
706 ef =
min(fabs(1. / slope), ef);
713 if ( ef <= Ft / E ) {
722 double maxTau, crackOpening, wmax, scale;
736 }
else if ( i == 5 ) {
739 }
else if ( i == 6 ) {
743 OOFEM_ERROR(
"Unexpected number for shear stress (must be either 4, 5 or 6).");
753 crackOpening =
max(wmax, crackOpening);
756 maxTau = 0.18 * sqrt(this->
fc) / ( 0.31 + 24. * crackOpening * scale / ( this->
ag * scale + 16. ) );
772 }
else if ( aProperty ==
gf_ID ) {
793 if ( status == NULL ) {
797 if ( status != NULL ) {
FloatArray soft_eps
user-defined softening (traction-strain)
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
bool multipleCrackShear
if true = takes shear compliance of all cracks, false = only dominant crack contribution, default value is false
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual double computeOverallElasticStiffness(void)
returns overall Young's modulus
double H
hardening modulus
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
#define _IFT_ConcreteFCM_softType
IntegrationPointStatus * setMaterialStatus(IntegrationPointStatus *ptr, int n)
Sets Material status managed by receiver.
virtual bool isIntact(GaussPoint *gp, int icrack)
returns true for closed or no crack (i = 1, 2, 3)
This class implements associated Material Status to FCMMaterial (fixed crack material).
#define _IFT_ConcreteFCM_shearStrengthType
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
saves current context(state) into stream
double & at(int i)
Coefficient access function.
int max(int i, int j)
Returns bigger value form two given decimals.
virtual double giveCrackSpacing(void)
returns either user-provided value of crack spacing or a value computed from composition ...
This class implements a Fixed Crack Model for fracture (after initiation the crack directions cannot ...
#define _IFT_ConcreteFCM_gf
This class manages the status of ConcreteFCM.
virtual double giveNormalCrackingStress(GaussPoint *gp, double eps_cr, int i)
computes normal stress associated with i-th crack direction
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
Element * giveElement()
Returns corresponding element to receiver.
double giveCharLength(int icrack) const
returns characteristic length associated with i-th crack direction
#define _IFT_ConcreteFCM_soft_w
#define _IFT_ConcreteFCM_soft_function_w
#define _IFT_ConcreteFCM_H
MatResponseMode
Describes the character of characteristic material matrix.
virtual double computeMaxNormalCrackOpening(GaussPoint *gp, int i)
uses maximum equilibrated cracking strain and characteristic length to obtain the maximum reached cra...
virtual double computeD2ModulusForCrack(GaussPoint *gp, int icrack)
shear modulus for a given crack plane (1, 2, 3)
#define _IFT_ConcreteFCM_soft_function_eps
ConcreteFCM(int n, Domain *d)
ShearStrengthType shearStrengthType
virtual double computeTotalD2Modulus(GaussPoint *gp, int i)
shear modulus for a given shear direction (4, 5, 6)
void _generateStatusVariables(GaussPoint *) const
Sets up (generates) the variables identified in randVariables array using generators given in randomV...
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
virtual void initTempStatus()
initializes temporary status
virtual void checkSnapBack(GaussPoint *gp, int crack)
checks possible snap-back
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
saves current context(state) into stream
double giveTempCrackStrain(int icrack) const
returns i-th component of the crack strain vector (temporary)
ConcreteFCMStatus(int n, Domain *d, GaussPoint *g)
double beta
shear retention factor
virtual double giveFractureEnergy(GaussPoint *gp)
returns fracture energy (can be random)
#define _IFT_ConcreteFCM_ft
This class implements an isotropic linear elastic material in a finite element problem.
#define _IFT_ConcreteFCM_beta
#define _IFT_ConcreteFCM_fc
#define _IFT_ConcreteFCM_lengthScale
#define _IFT_ConcreteFCM_shearType
Abstract base class for all random materials.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
FloatArray beta_w
user-defined shear retention factor (with respect to crack opening)
#define _IFT_ConcreteFCM_soft_eps
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
restores context(state) from stream
double ag
Collins' aggregate interlock: aggregate diameter in appropriate units (same as FE mesh) ...
#define _IFT_ConcreteFCM_sf
bool give(int key, GaussPoint *gp, double &value)
Returns the property in associated status of given integration point if defined.
ShearRetentionType shearType
Abstract base class for all random constitutive model statuses.
virtual double computeEffectiveShearModulus(GaussPoint *gp, int i)
returns Geff which is necessary in the global stiffness matrix
double eps_f
strain at failure
double Ft
Tensile strenght.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Abstract base class representing a material status information.
Class representing vector of real numbers.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual double maxShearStress(GaussPoint *gp, int i)
computes the maximum value of the shear stress; if the shear stress exceeds this value, it is cropped
virtual double giveNumberOfCracksForShearDirection(GaussPoint *gp, int i)
returns number of cracks for given shear direction (i = 4, 5, 6) which is treated as the maximum of t...
const IntArray & giveTempCrackStatus()
returns vector of temporary crack statuses
IRResultType
Type defining the return values of InputRecord reading operations.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Writes information into the output file.
virtual void initTempStatus()
initializes temporary status
IntegrationPointStatus * giveMaterialStatus()
Returns reference to associated material status (NULL if not defined).
double lengthScale
Collins' aggregate interlock: 1 for meter, 1000 for analysis in mm.
#define _IFT_ConcreteFCM_beta_function
#define _IFT_ConcreteFCM_ag
virtual ~ConcreteFCMStatus()
IsotropicLinearElasticMaterial * linearElasticMaterial
double giveMaxCrackStrain(int icrack)
returns maximum crack strain for the i-th crack (equilibrated value)
#define _IFT_ConcreteFCM_eps_f
virtual bool isIntactForShear(GaussPoint *gp, int i)
returns true for closed or no cracks associated to given shear direction (i = 4, 5, 6)
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
restores context(state) from stream
virtual double giveNumberOfCracksInDirection(GaussPoint *gp, int iCrack)
returns number of fictiotious parallel cracks in the direction of i-th crack
virtual void printOutputAt(FILE *file, TimeStep *tStep)
prints the output into the output file
virtual void updateYourself(TimeStep *tStep)
replaces equilibrated values with temporary values
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
InterfaceType
Enumerative type, used to identify interface type.
int min(int i, int j)
Returns smaller value from two given decimals.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
REGISTER_Material(DummyMaterial)
int giveSize() const
Returns the size of receiver.
virtual double computeNormalCrackOpening(GaussPoint *gp, int i)
uses temporary cracking strain and characteristic length to obtain the crack opening ...
virtual void updateYourself(TimeStep *tStep)
replaces equilibrated values with temporary values
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Class representing solution step.
virtual double giveCrackingModulus(MatResponseMode rMode, GaussPoint *gp, int i)
returns stiffness in the normal direction of the i-th crack
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
FloatArray soft_w
user-defined softening (traction-COD)
double fc
Collins' aggregate interlock: compressive strength in MPa.
FloatArray soft_function_eps
FloatArray soft_function_w
#define _IFT_ConcreteFCM_beta_w
virtual double computeOverallElasticShearModulus(void)
returns overall shear modulus
double Gf
Fracture energy.
virtual double giveTensileStrength(GaussPoint *gp)
returns tensile strength (can be random)