66 OOFEM_ERROR(
"FibreActivationOpening must be positive");
72 OOFEM_ERROR(
"dw0 must be positive and smaller than fibreActivationOpening");
77 if ( ( this->
dw1 < 0. ) ) {
82 if ( ( ( this->
dw1 == 0. ) && ( this->
dw0 > 0. ) ) || ( ( this->
dw0 == 0. ) && ( this->
dw1 > 0. ) ) ) {
83 OOFEM_ERROR(
"both dw0 and dw1 must be specified at the same time");
146 OOFEM_WARNING(
"Fibre damage type number %d is unknown", type);
176 OOFEM_ERROR(
"length of the fibre orientation vector must be 2 for 2D and 3 for 3D analysis");
184 length = sqrt(length);
197 OOFEM_ERROR(
"fibre volume content must not be negative");
215 Gfib =
Ef / ( 2. * ( 1. + nuf ) );
232 OOFEM_ERROR(
"snubbing coefficient must not be negative");
237 this->
g = 2. * ( 1. + exp(
M_PI *
f / 2.) ) / ( 4. +
f *
f );
243 this->
eta = this->
Ef * this->
Vf / ( Em * ( 1. - this->
Vf ) );
278 }
else if ( theta < -1. ) {
286 if ( theta >
M_PI / 2. ) {
287 theta =
M_PI - theta;
308 double ec, emax, Le, Ncr, w, w_max, factor, omega;
310 double sig_dw1, Dsig_dw1, x, dw_smooth, C1, C2;
318 Cfc *= ( 1. - this->
Vf );
348 if ( rMode == TangentStiffness ) {
352 if ( ( w_max < this->
dw0 ) || ( w < this->dw0 ) ) {
356 if ( ( w_max < 0. ) || ( w < 0. ) ) {
362 if ( ( this->
smoothen ) && ( w_max > this->
dw0 ) && ( w_max < this->
dw1 ) ) {
366 x = w_max - this->
dw0;
367 dw_smooth = this->dw1 - this->
dw0;
370 sig_dw1 = 2. *this->
Vf *sqrt(this->dw1 *this->
Ef * ( 1. + this->
eta ) *this->
tau_0 / this->
Df);
371 Dsig_dw1 = this->
Vf * sqrt( this->
Ef * ( 1. + this->
eta ) * this->
tau_0 / ( this->
Df * this->dw1 ) );
373 C1 = Dsig_dw1 / pow(dw_smooth, 2) - ( 2 * sig_dw1 ) / pow(dw_smooth, 3);
374 C2 = ( 3 * sig_dw1 ) / pow(dw_smooth, 2) - Dsig_dw1 / dw_smooth;
376 Cff = 3. *C1 *pow(x, 2) + 2. * C2 * x;
381 Cff *= fabs( cos(theta) ) * exp(theta * this->
f);
383 Cff *= ( 1. - omega );
385 sig_dw1 = this->
Vf * ( sqrt(4. * this->
Ef * ( 1. + this->
eta ) * this->dw1 * this->
tau_0 / this->
Df) - this->
Ef * ( 1. + this->
eta ) * this->dw1 / this->
Lf );
386 Dsig_dw1 = this->
Vf * ( sqrt( this->
Ef * ( 1. + this->
eta ) * this->
tau_0 / ( this->
Df * this->dw1 ) ) - this->
Ef * ( 1. + this->
eta ) / this->
Lf );
388 C1 = Dsig_dw1 / pow(dw_smooth, 2) - ( 2 * sig_dw1 ) / pow(dw_smooth, 3);
389 C2 = ( 3 * sig_dw1 ) / pow(dw_smooth, 2) - Dsig_dw1 / dw_smooth;
391 Cff = 3. *C1 *pow(x, 2) + 2. * C2 * x;
396 Cff *= fabs( cos(theta) ) * exp(theta * this->
f);
398 Cff *= ( 1. - omega );
400 factor = ( 1. - omega ) * this->
g * this->
Vf * this->
Lf / ( 2. * this->
Df );
402 sig_dw1 = factor * this->
tau_0 * ( 2. * sqrt(this->dw1 / this->
w_star) - this->dw1 / this->
w_star );
403 Dsig_dw1 = factor * this->
tau_0 * ( 1. / ( this->
w_star * sqrt(this->dw1 / this->
w_star) ) - 1. / this->
w_star );
405 C1 = Dsig_dw1 / pow(dw_smooth, 2) - ( 2 * sig_dw1 ) / pow(dw_smooth, 3);
406 C2 = ( 3 * sig_dw1 ) / pow(dw_smooth, 2) - Dsig_dw1 / dw_smooth;
408 Cff = 3. *C1 *pow(x, 2) + 2. * C2 * x;
414 Cff = ( this->
M * max_traction * Le / ( w_max - this->
dw0 ) ) * pow( ( w - this->
dw0 ) / ( w_max - this->
dw0 ), ( this->
M - 1 ) );
416 }
else if ( w_max == 0. ) {
420 Cff = this->
Vf * Le * sqrt( this->
Ef * ( 1. + this->
eta ) * this->
tau_0 / ( this->
Df * w_max ) );
423 Cff *= fabs( cos(theta) ) * exp(theta * this->
f);
425 Cff = this->
Vf * Le * ( sqrt( this->
Ef * ( 1. + this->
eta ) * this->
tau_0 / ( this->
Df * w_max ) ) - this->
Ef * ( 1. + this->
eta ) / this->
Lf );
428 Cff *= fabs( cos(theta) ) * exp(theta * this->
f);
430 factor = this->
g * this->
Vf * this->
Lf / ( 2. * this->
Df );
435 }
else if ( w == w_max ) {
437 Cff = this->
Vf * Le * sqrt( this->
Ef * ( 1. + this->
eta ) * this->
tau_0 / ( this->
Df * w_max ) );
439 Cff *= fabs( cos(theta) ) * exp(theta * this->
f);
442 Cff *= ( 1. - omega );
447 if ( w_max < this->
w_star ) {
448 Cff = ( 1. - omega ) * this->
Vf * Le * ( sqrt( this->
Ef * ( 1. + this->
eta ) * this->
tau_0 / ( this->
Df * w_max ) ) - this->
Ef * ( 1. + this->
eta ) / this->
Lf );
451 Cff *= fabs( cos(theta) ) * exp(theta * this->
f);
452 }
else if ( w_max <= this->
Lf / 2. ) {
453 factor = ( 1. - omega ) * this->
Vf * this->
Lf / this->
Df;
455 Cff = factor * this->
computeFiberBond(w_max) * ( 8. * w_max * Le / ( this->
Lf * this->
Lf ) - 4. * Le / this->
Lf );
458 Cff *= fabs( cos(theta) ) * exp(theta * this->
f);
464 factor = ( 1. - omega ) * this->
g * this->
Vf * this->
Lf / ( 2. * this->
Df );
466 if ( w_max < this->
w_star ) {
467 Cff = factor * this->
tau_0 * ( Le / ( this->w_star * sqrt(w_max / this->w_star) ) - Le / this->w_star );
468 }
else if ( w_max <= this->
Lf / 2. ) {
469 Cff = factor * this->
computeFiberBond(w_max) * ( 8. * w_max * Le / ( this->
Lf * this->
Lf ) - 4. * Le / this->
Lf );
480 Cff = ( this->
M * max_traction * Le / w_max ) * pow( ( w / w_max ), ( this->
M - 1 ) );
482 }
else if ( rMode == SecantStiffness ) {
484 if ( ( w_max < this->
dw0 ) || ( w < this->
dw0 ) ) {
486 }
else if ( ec == emax ) {
492 Cff = max_traction * pow( ( ( w - this->dw0 ) / ( w_max - this->dw0 ) ), this->
M ) / ec;
495 if ( ( w_max < 0. ) || ( w < 0. ) ) {
497 }
else if ( w_max == 0. ) {
498 w_max = 1.e-10 / Ncr;
503 }
else if ( ec == emax ) {
510 Cff = max_traction * pow( ( w / w_max ), this->
M ) / ec;
529 double dw, tau_tilde = 0.;
536 tau_s = this->
tau_0 * ( 1. +
sgn(this->
b0) * ( 1. - exp(-fabs(this->
b0) * w / this->
Df) ) );
538 tau_s = this->
tau_0 * ( 1 + this->
b1 * ( w / this->
Df ) + this->
b2 * ( w / this->
Df ) * ( w / this->
Df ) + this->
b3 * ( w / this->
Df ) * ( w / this->
Df ) * ( w / this->
Df ) );
543 tau_tilde = this->
tau_0 / ( ( 1. - this->w_star / this->
Lf ) * ( 1. - this->w_star / this->
Lf ) );
545 tau_tilde = this->
tau_0 * this->
Ef * ( 1. + this->
eta ) * this->
Df / ( this->
Ef * ( 1. + this->
eta ) * this->
Df - 2. * this->
Lf * this->
tau_0 );
548 tau_s = tau_tilde + this->
tau_0 * ( this->
b1 * ( dw / this->
Df ) +
549 this->
b2 * ( dw / this->
Df ) * ( dw / this->
Df ) +
550 this->
b3 * ( dw / this->
Df ) * ( dw / this->
Df ) * ( dw / this->
Df ) );
567 double traction_fc, traction_ff;
570 traction_fc *= ( 1. - this->
Vf );
575 return traction_fc + traction_ff;
587 double traction_ff = 0.;
589 double emax, Le, w_max, w, Ncr, omega, factor;
592 double sig_dw1, Dsig_dw1, x, dw_smooth, C1, C2;
620 if ( ( w_max < this->
dw0 ) || ( w < this->dw0 ) ) {
624 if ( ( w_max <= 0. ) || ( w <= 0. ) ) {
636 if ( ( this->
smoothen ) && ( w_max > this->
dw0 ) && ( w_max < this->
dw1 ) ) {
637 sig_dw1 = 2. *this->
Vf *sqrt(this->dw1 *this->
Ef * ( 1. + this->
eta ) *this->
tau_0 / this->
Df);
638 Dsig_dw1 = this->
Vf * sqrt( this->
Ef * ( 1. + this->
eta ) * this->
tau_0 / ( this->
Df * this->dw1 ) );
640 x = w_max - this->
dw0;
641 dw_smooth = this->dw1 - this->
dw0;
643 C1 = Dsig_dw1 / pow(dw_smooth, 2) - ( 2 * sig_dw1 ) / pow(dw_smooth, 3);
644 C2 = ( 3 * sig_dw1 ) / pow(dw_smooth, 2) - Dsig_dw1 / dw_smooth;
646 traction_ff = C1 * pow(x, 3) + C2 *pow(x, 2);
652 traction_ff = 2. *this->
Vf *sqrt(w_max *this->
Ef * ( 1. + this->
eta ) *this->
tau_0 / this->
Df);
656 traction_ff *= fabs( cos(theta) ) * exp(theta * this->
f);
660 traction_ff *= ( 1. - omega );
665 if ( ( this->
smoothen ) && ( w_max > this->
dw0 ) && ( w_max < this->
dw1 ) ) {
666 sig_dw1 = this->
Vf * ( sqrt(4. * this->
Ef * ( 1. + this->
eta ) * this->dw1 * this->
tau_0 / this->
Df) - this->
Ef * ( 1. + this->
eta ) * this->dw1 / this->
Lf );
667 Dsig_dw1 = this->
Vf * ( sqrt( this->
Ef * ( 1. + this->
eta ) * this->
tau_0 / ( this->
Df * this->dw1 ) ) - this->
Ef * ( 1. + this->
eta ) / this->
Lf );
669 x = w_max - this->
dw0;
670 dw_smooth = this->dw1 - this->
dw0;
672 C1 = Dsig_dw1 / pow(dw_smooth, 2) - ( 2 * sig_dw1 ) / pow(dw_smooth, 3);
673 C2 = ( 3 * sig_dw1 ) / pow(dw_smooth, 2) - Dsig_dw1 / dw_smooth;
675 traction_ff = C1 * pow(x, 3) + C2 *pow(x, 2);
678 traction_ff *= fabs( cos(theta) ) * exp(theta * this->
f);
680 traction_ff *= ( 1. - omega );
681 }
else if ( w_max < this->
w_star ) {
682 traction_ff = this->
Vf * ( sqrt(4. * this->
Ef * ( 1. + this->
eta ) * w_max * this->
tau_0 / this->
Df) - this->
Ef * ( 1. + this->
eta ) * w_max / this->
Lf );
685 traction_ff *= fabs( cos(theta) ) * exp(theta * this->
f);
687 traction_ff *= ( 1. - omega );
688 }
else if ( w_max <= this->
Lf / 2. ) {
689 factor = this->
Vf * this->
Lf / this->
Df;
691 traction_ff = factor * this->
computeFiberBond(w_max) * ( 1. - 2. * w_max / this->
Lf ) * ( 1. - 2. * w_max / this->
Lf );
694 traction_ff *= fabs( cos(theta) ) * exp(theta * this->
f);
696 traction_ff *= ( 1. - omega );
702 factor = ( 1. - omega ) * this->
g * this->
Vf * this->
Lf / ( 2. * this->
Df );
705 if ( ( this->
smoothen ) && ( w_max > this->
dw0 ) && ( w_max < this->
dw1 ) ) {
706 sig_dw1 = factor * this->
tau_0 * ( 2. * sqrt(this->dw1 / this->
w_star) - this->dw1 / this->
w_star );
707 Dsig_dw1 = factor * this->
tau_0 * ( 1. / ( this->
w_star * sqrt(this->dw1 / this->
w_star) ) - 1. / this->
w_star );
709 x = w_max - this->
dw0;
710 dw_smooth = this->dw1 - this->
dw0;
712 C1 = Dsig_dw1 / pow(dw_smooth, 2) - ( 2 * sig_dw1 ) / pow(dw_smooth, 3);
713 C2 = ( 3 * sig_dw1 ) / pow(dw_smooth, 2) - Dsig_dw1 / dw_smooth;
715 traction_ff = C1 * pow(x, 3) + C2 *pow(x, 2);
716 }
else if ( w_max < this->
w_star ) {
717 traction_ff = factor * this->
tau_0 * ( 2. * sqrt(w_max / this->w_star) - w_max / this->
w_star );
718 }
else if ( w_max <= this->
Lf / 2. ) {
719 traction_ff = factor * this->
computeFiberBond(w_max) * ( 1. - 2. * w_max / this->
Lf ) * ( 1. - 2. * w_max / this->
Lf );
730 traction_ff *= pow( ( w - this->
dw0 ) / ( w_max - this->
dw0 ), this->
M );
732 traction_ff *= pow(w / w_max, this->
M);
746 double D2_1, D2_2, D2;
757 if ( shearDirection == 4 ) {
760 }
else if ( shearDirection == 5 ) {
763 }
else if ( shearDirection == 6 ) {
767 OOFEM_ERROR(
"Unexpected value of index i (4, 5, 6 permitted only)");
778 beta_mf = D2 / ( D2 + G );
784 beta_mf = 1. / ( 1. + G * ( 1 / D2_1 + 1 / D2_2 ) );
786 D2 =
min(D2_1, D2_2);
787 beta_mf = D2 / ( D2 + G );
802 double cos_theta = 0.5;
811 if ( ( this->
isIntact(gp, icrack) ) || ( crackStrain <= 0. ) ) {
819 D2m *= ( 1. - this->
Vf );
824 D2f = ( 1. - omega ) * this->
Vf * cos_theta * this->
kfib * this->
Gfib / crackStrain;
836 double cos_theta = 0.5;
845 if ( ( this->
isIntact(gp, icrack) ) || ( crackStrain <= 0. ) ) {
853 D2m *= ( 1. - this->
Vf );
858 D2f = ( 1. - omega ) * this->
Vf * cos_theta * this->
kfib * this->
Gfib / crackStrain;
873 double gammaCrack = 0.;
875 double slip, opening;
881 for (
int i = 1; i <= numberOfActiveCracks; i++ ) {
888 gammaCrack =
max(gammaCrack, slip / opening);
924 double cos_theta = 0.5;
934 maxTau_m *= ( 1. - this->
Vf );
938 if ( shearDirection == 4 ) {
941 }
else if ( shearDirection == 5 ) {
944 }
else if ( shearDirection == 6 ) {
948 OOFEM_ERROR(
"Unexpected value of index i (4, 5, 6 permitted only)");
953 if ( mMode == _PlaneStress ) {
959 for (
int i = 1; i <= 2; i++ ) {
968 if ( ( this->
isIntact(gp, icrack) ) || ( crackStrain <= 0. ) ) {
969 minTau_f =
min(minTau_f, E * fcm_BIGNUMBER);
977 minTau_f =
min(minTau_f, gamma_cr * ( 1. - omega ) * this->
Vf * cos_theta * this->
kfib * this->
Gfib / crackStrain);
981 return maxTau_m + minTau_f;
994 x_CA = ( 1. - this->
Vf ) * this->
Ft * this->
Df / ( 4. * this->
Vf * this->
tau_0 );
999 x = 0.5 * sqrt(this->
Lf * this->
Lf - 4. * this->
Lf * x_CA);
1001 lambda = ( 2. /
M_PI ) * ( 4. + this->
f * this->
f ) / ( 1. + exp(
M_PI * f / 2.) );
1002 x = 0.5 * ( this->
Lf - sqrt(this->
Lf * this->
Lf - 2. *
M_PI * this->
Lf * lambda * x_CA) );
1016 if ( trialStress <= 0. ) {
1026 sigma_m = trialStress / ( 1. + this->
Vf * ( this->
Ef / Em - 1. ) );
1040 double factor_ij, D2_i, D2_j;
1046 factor_ij = D2_j / ( D2_i + D2_j );
1058 if ( type == IST_FiberStressLocal ) {
1062 }
else if ( type == IST_DamageScalar ) {
1075 double stiffness = 0.;
1080 stiffness = this->
Vf * this->
Ef + ( 1. - this->
Vf ) * Em;
1082 stiffness = this->
Vf * this->
Ef + ( 1. - this->
Vf ) * Em;
1084 stiffness = this->
Vf * this->
Ef + ( 1. - this->
Vf ) * Em;
1116 fprintf(file,
"damage status { ");
1117 if ( this->
damage > 0.0 ) {
1118 fprintf(file,
"damage %f ", this->
damage);
1120 fprintf(file,
"}\n");
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
bool multipleCrackShear
if true = takes shear compliance of all cracks, false = only dominant crack contribution, default value is false
virtual double computeShearSlipOnCrack(GaussPoint *gp, int i)
computes total shear slip on a given crack plane (i = 1, 2, 3); the slip is computed from the tempora...
#define _IFT_FRCFCM_gammaCrack
#define _IFT_FRCFCM_fiberType
#define _IFT_FRCFCM_orientationVector
virtual bool isStrengthExceeded(const FloatMatrix &base, GaussPoint *gp, TimeStep *tStep, int iCrack, double trialStress)
the method from fcm is overridden to consider stress split between the matrix and fibers ...
virtual double computeD2ModulusForCrack(GaussPoint *gp, int icrack)
shear modulus for a given crack plane (1, 2, 3)
double gammaCrackFail
shear strain at full fibers rupture
double crackSpacing
value of crack spacing (allows to "have" more parallel cracks in one direction if the element size ex...
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).
double kfib
fiber cross-sectional shear factor
virtual double computeCrackSpacing(void)
computes crack spacing based on composition of the fibre composite
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
double & at(int i)
Coefficient access function.
int max(int i, int j)
Returns bigger value form two given decimals.
FRCFCMStatus(int n, Domain *d, GaussPoint *g)
double sgn(double i)
Returns the signum of given value (if value is < 0 returns -1, otherwise returns 1) ...
#define _IFT_FRCFCM_fDamType
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
void setTempDamage(double newDamage)
Sets the temp damage level to given value.
#define _IFT_FRCFCM_fssType
Element * giveElement()
Returns corresponding element to receiver.
const FloatMatrix & giveCrackDirs()
returns crack directions
double f
snubbing factor "f"
double giveCharLength(int icrack) const
returns characteristic length associated with i-th crack direction
virtual double computeStressInFibersInCracked(GaussPoint *gp, double eps_cr, int i)
compute the nominal stress in fibers in the i-th crack
FiberShearStrengthType fiberShearStrengthType
MaterialMode
Type representing material mode of integration point.
virtual void initTempStatus()
initializes temporary status
virtual int read(int *data, int count)=0
Reads count integer values into array pointed by data.
MatResponseMode
Describes the character of characteristic material matrix.
double fibreActivationOpening
crack opening at which the crossing fibers begin to be activated
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)
FiberDamageType fiberDamageType
int M
Exponent in the unloading-reloading constitutive law.
virtual double computeOverallElasticStiffness(void)
according to the volume fraction of fibers and the Young's moduli estimates the overall stiffness of ...
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
double g
auxiliary parameter computed from snubbing factor "f"
double b0
micromechanical parameter for fiber shear according to Sajdlova
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)
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
saves current context(state) into stream
double w_star
transitional opening
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
This class implements a ConcreteFCM material in a finite element problem.
virtual int giveNumberOfTempCracks() const
returns temporary number of cracks
#define _IFT_FRCFCM_fibreActivationOpening
double b1
micromechanical parameter for fiber shear according to Kabele
double giveDamage()
Returns the last equilibrated damage level.
#define _IFT_IsotropicLinearElasticMaterial_e
ShearRetentionType shearType
double at(int i, int j) const
Coefficient access function.
virtual void updateYourself(TimeStep *tStep)
replaces equilibrated values with temporary values
double tempDamage
Non-equilibrated damage level of material.
FloatArray orientationVector
orientation of fibres
double Ef
fiber Young's modulus
virtual double giveNormalCrackingStress(GaussPoint *gp, double eps_cr, int i)
computes normal stress associated with i-th crack direction
double Ft
Tensile strenght.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
double tau_0
fiber shear strength at zero slip
virtual double computeEffectiveShearModulus(GaussPoint *gp, int i)
returns Geff which is necessary in the global stiffness matrix
Class representing vector of real numbers.
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 contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
restores context(state) from stream
const IntArray & giveTempCrackStatus()
returns vector of temporary crack statuses
Implementation of matrix containing floating point numbers.
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
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Writes information into the output file.
double giveMaxCrackStrain(int icrack)
returns maximum crack strain for the i-th crack (equilibrated value)
double giveCrackStrain(int icrack) const
returns i-th component of the crack strain vector (equilibrated)
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
virtual bool isIntactForShear(GaussPoint *gp, int i)
returns true for closed or no cracks associated to given shear direction (i = 4, 5, 6)
void zero()
Zeroes all coefficients of receiver.
#define _IFT_FRCFCM_computeCrackSpacing
#define _IFT_FRCFCM_tau_0
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 double computeShearStiffnessRedistributionFactor(GaussPoint *gp, int ithCrackPlane, int jthCrackDirection)
function calculating ratio used to split shear slips on two crack planes
void times(double s)
Multiplies receiver with scalar.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
virtual double estimateD2ModulusForCrack(GaussPoint *gp, int icrack)
estimate shear modulus for a given crack plane (1, 2, 3). Uses equilibrated value of damage...
virtual double giveCrackingModulus(MatResponseMode rMode, GaussPoint *gp, int i)
returns stiffness in the normal direction of the i-th crack
double dw0
smooth transition of the bridging stress if fibreActivationOpening is applied dw0 = distance from the...
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.
virtual double computeCrackFibreAngle(GaussPoint *gp, int i)
compute the angle between the fibre and i-th crack normal
REGISTER_Material(DummyMaterial)
double Gfib
fiber shear modulus
double giveTempMaxCrackStrain(int icrack)
returns maximum crack strain for the i-th crack (temporary value)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
This class manages the status of FRCFCM.
int giveSize() const
Returns the size of receiver.
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.
double giveYoungsModulus()
Returns Young's modulus.
int giveNumberOfRows() const
Returns number of rows of receiver.
virtual double computeTempDamage(GaussPoint *gp)
evaluates temporary value of damage caused by fibre shearing
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
virtual double computeOverallElasticShearModulus(void)
from the Poisson's ratio of matrix and the overall stiffness estimates G
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 double computeFiberBond(double w)
evaluates the fiber bond if w > w*
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
double Vf
volume fraction of fibers
double damage
Damage level of material.
IsotropicLinearElasticMaterial * giveLinearElasticMaterial()
void resize(int s)
Resizes receiver towards requested size.
virtual double giveTensileStrength(GaussPoint *gp)
returns tensile strength (can be random)