68 return mode == _3dMat || mode == _PlaneStress || mode == _PlaneStrain;
91 FloatArray stressIncrement_l, stressVector_g, trialStress_g, trialStress_l, sigmaResid, sigmaElast_l, sigmaCrack_l;
94 FloatArray reducedStrain_g, reducedStrain_l, strainIncrement_g, strainIncrement_l, crackStrain, crackStrainIncrement, elasticStrain_l;
107 int index, indexCount;
108 bool exitWhileCond =
false;
109 bool cancelledStrainFlag =
false;
112 FloatArray crackStrainPlus, crackStrainMinus, residPlus, residMinus;
114 index = indexCount = 0;
133 answer = trialStress_g;
152 if ( nCr < nMaxCr ) {
161 trialStress_g.
add(stressVector_g);
165 for (
int iCrack = nCr + 1; iCrack <=
min(nMaxCr, this->
nAllowedCracks); iCrack++ ) {
185 if ( ( nCr == 0 ) || ( nCr == nMaxCr ) ) {
193 strainIncrement_l = strainIncrement_g;
196 reducedStrain_l = reducedStrain_g;
200 stressIncrement_l.
beProductOf(De, strainIncrement_l);
210 for (
int iter = 1; iter <= iterLimit; iter++ ) {
215 sigmaResid = stressIncrement_l;
224 crackStrain.
add(crackStrainIncrement);
233 elasticStrain_l = reducedStrain_l;
234 elasticStrain_l.
subtract(crackStrain);
240 for (
int i = 1; i <= crackStrain.
giveSize(); i++ ) {
241 sigmaCrack_l.
at(i) = Dcr.
at(i, i) * crackStrain.
at(i);
249 if ( sigmaCrack_l.
at(i) > maxTau ) {
250 sigmaCrack_l.
at(i) = maxTau;
260 if ( sigmaCrack_l.
at(i) > maxTau ) {
261 sigmaCrack_l.
at(i) = maxTau;
271 if ( sigmaCrack_l.
at(i) > maxTau ) {
272 sigmaCrack_l.
at(i) = maxTau;
283 sigmaResid = sigmaElast_l;
288 for (
int i = 1; i <= sigmaResid.
giveSize(); i++ ) {
289 if ( fabs( sigmaResid.
at(i) ) > maxErr ) {
290 maxErr = fabs( sigmaResid.
at(i) );
304 for (
int i = 1; i <= sigmaResid.
giveSize(); i++ ) {
305 if ( fabs( sigmaResid.
at(i) ) == maxErr ) {
308 exitWhileCond =
true;
312 cancelledStrainFlag =
false;
321 if ( exitWhileCond ) {
330 crackStrainPlus.
zero();
331 crackStrainMinus.
zero();
337 if ( indexCount > 10 ) {
338 OOFEM_WARNING(
"Fixed crack model: Local equilibrium not reached!, max. stress error %f", maxErr);
343 for (
int iter = 1; iter <= iterLimit; iter++ ) {
344 if ( iter == iterLimit ) {
345 OOFEM_WARNING(
"Fixed crack model: Local equilibrium not reached!, max. stress error %f", maxErr);
349 if ( ( iter == 1 ) && ( indexCount == 1 ) ) {
354 sigmaResid = stressIncrement_l;
360 if ( ( !plus ) || ( !minus ) ) {
369 crackStrain.
add(crackStrainIncrement);
378 elasticStrain_l = reducedStrain_l;
379 elasticStrain_l.
subtract(crackStrain);
385 for (
int i = 1; i <= crackStrain.
giveSize(); i++ ) {
386 sigmaCrack_l.
at(i) = Dcr.
at(i, i) * crackStrain.
at(i);
394 if ( sigmaCrack_l.
at(i) > maxTau ) {
395 sigmaCrack_l.
at(i) = maxTau;
405 if ( sigmaCrack_l.
at(i) > maxTau ) {
406 sigmaCrack_l.
at(i) = maxTau;
416 if ( sigmaCrack_l.
at(i) > maxTau ) {
417 sigmaCrack_l.
at(i) = maxTau;
428 sigmaResid = sigmaElast_l;
431 if ( sigmaResid.
at(index) > 0 ) {
433 residPlus = sigmaResid;
435 if ( sigmaResid.
at(index) < residPlus.
at(index) ) {
436 residPlus = sigmaResid;
440 crackStrainPlus = crackStrain;
444 residMinus = sigmaResid;
446 if ( sigmaResid.
at(index) > residMinus.
at(index) ) {
447 residMinus = sigmaResid;
451 crackStrainMinus = crackStrain;
457 for (
int i = 1; i <= sigmaResid.
giveSize(); i++ ) {
458 if ( fabs( sigmaResid.
at(i) ) > maxErr ) {
459 maxErr = fabs( sigmaResid.
at(i) );
469 crackStrain.
add(crackStrainMinus);
470 crackStrain.
add(crackStrainPlus);
471 crackStrain.
times(0.5);
481 elasticStrain_l = reducedStrain_l;
482 elasticStrain_l.
subtract(crackStrain);
488 for (
int i = 1; i <= crackStrain.
giveSize(); i++ ) {
489 sigmaCrack_l.
at(i) = Dcr.
at(i, i) * crackStrain.
at(i);
497 if ( sigmaCrack_l.
at(i) > maxTau ) {
498 sigmaCrack_l.
at(i) = maxTau;
508 if ( sigmaCrack_l.
at(i) > maxTau ) {
509 sigmaCrack_l.
at(i) = maxTau;
519 if ( sigmaCrack_l.
at(i) > maxTau ) {
520 sigmaCrack_l.
at(i) = maxTau;
531 sigmaResid = sigmaElast_l;
536 for (
int i = 1; i <= sigmaResid.
giveSize(); i++ ) {
537 if ( fabs( sigmaResid.
at(i) ) > maxErr ) {
538 maxErr = fabs( sigmaResid.
at(i) );
548 if ( sigmaResid.
at(index) > 0 ) {
549 if ( sigmaResid.
at(index) < residPlus.
at(index) ) {
550 residPlus = sigmaResid;
553 crackStrainPlus = crackStrain;
555 if ( sigmaResid.
at(index) > residMinus.
at(index) ) {
556 residMinus = sigmaResid;
559 crackStrainMinus = crackStrain;
563 if ( fabs( crackStrainMinus.
at(index) - crackStrainPlus.
at(index) ) < 1.e-18 ) {
565 crackStrain.
add(crackStrainMinus);
566 crackStrain.
add(crackStrainPlus);
567 crackStrain.
times(0.5);
570 crackStrain.
at(index) = 0.;
571 cancelledStrainFlag =
true;
575 if ( cancelledStrainFlag ) {
576 OOFEM_WARNING(
"Fixed crack model: cracking strain component %d set to zero", index);
588 OOFEM_WARNING(
"Fixed crack model: Local equilibrium not reached!, max. stress error %f", maxErr);
598 for (
int i = 1; i <= nMaxCr; i++ ) {
601 if ( crackStrain.
at(i) != crackStrain.
at(i) ) {
613 principalDirs.
zero();
622 principalDirs.
zero();
626 }
else if ( crackStrain.
at(i) < 0. ) {
641 answer = sigmaElast_l;
664 crackVector.
at(i) = base.
at(i, nCrack);
679 if ( ( mMode == _PlaneStress ) && ( nCrack == 2 ) ) {
685 if ( nCrack <= nMaxCracks ) {
687 if ( nMaxCracks == 3 ) {
688 base.
at(1, 3) = base.
at(2, 1) * base.
at(3, 2) - base.
at(3, 1) * base.
at(2, 2);
689 base.
at(2, 3) = base.
at(3, 1) * base.
at(1, 2) - base.
at(1, 1) * base.
at(3, 2);
690 base.
at(3, 3) = base.
at(1, 1) * base.
at(2, 2) - base.
at(2, 1) * base.
at(1, 2);
696 if ( mMode == _PlaneStress ) {
741 int normal_1, normal_2;
746 }
else if ( i == 5 ) {
749 }
else if ( i == 6 ) {
753 OOFEM_ERROR(
"Unexpected number for shear stress (must be either 4, 5 or 6).");
754 normal_1 = normal_2 = 0;
772 double crackOpening,
N;
791 double crackOpening,
N;
822 double gamma_cr_ij, gamma_cr_ik;
825 double factor_ij, factor_ik;
834 OOFEM_ERROR(
"Unexpected value of index i (4, 5, 6 permitted only)");
838 if ( ( mMode == _PlaneStress ) || ( mMode == _PlaneStrain ) ) {
840 if ( mMode == _PlaneStress ) {
864 slip = factor_ij * fabs(gamma_cr_ij) * status->
giveCharLength(icrack) / nCracks;
865 }
else if ( mMode == _3dMat ) {
872 }
else if ( icrack == 2 ) {
901 u_ij = factor_ij * fabs(gamma_cr_ij) * status->
giveCharLength(icrack) / nCracks;
902 u_ik = factor_ik * fabs(gamma_cr_ik) * status->
giveCharLength(icrack) / nCracks;
904 slip = sqrt( pow(u_ij, 2) + pow(u_ik, 2) );
933 factor_ij = D2_j / ( D2_i + D2_j );
943 double sigX, sigY, tau, sig2;
944 FloatArray trialStress, planeStress, princStress, crackingStrain, shearStrains, newShearStrains;
945 FloatMatrix sigmaG2L, princCrackDir, oldBase, princCrackDirExt;
949 trialStress = globalStress;
961 }
else if ( nCrack == 3 ) {
973 sigX = trialStress.
at(2);
974 sigY = trialStress.
at(3);
975 tau = trialStress.
at(4);
977 sig2 = ( sigX + sigY ) / 2. + sqrt( ( sigX - sigY ) * ( sigX - sigY ) / 4. + tau * tau );
984 planeStress.
at(1) = trialStress.
at(2);
985 planeStress.
at(2) = trialStress.
at(3);
986 planeStress.
at(3) = trialStress.
at(4);
993 princCrackDir.
at(1, 2) = -1. * princCrackDir.
at(2, 1);
994 princCrackDir.
at(2, 2) = princCrackDir.
at(1, 1);
999 princCrackDirExt.
resize(3, 3);
1000 princCrackDirExt.
zero();
1001 princCrackDirExt.
at(1, 1) = 1.;
1003 for (
int i = 1; i <= 2; i++ ) {
1004 for (
int j = 1; j <= 2; j++ ) {
1005 princCrackDirExt.
at(i + 1, j + 1) = princCrackDir.
at(i, j);
1099 shearStrains.
at(1) = crackingStrain.
at(6);
1100 shearStrains.
at(2) = crackingStrain.
at(5);
1106 newShearStrains.
beTProductOf(princCrackDir, shearStrains);
1108 crackingStrain.
at(5) = newShearStrains.
at(2);
1109 crackingStrain.
at(6) = newShearStrains.
at(1);
1123 newShearStrains.
beTProductOf(princCrackDir, shearStrains);
1160 for (
int i = 1; i <= nMaxCracks; i++ ) {
1164 if ( crackStrain.
at(i) >= maxCrackStrain.
at(i) ) {
1170 if ( i == nMaxCracks ) {
1172 }
else if ( nMaxCracks > i ) {
1186 }
else if ( crackStrain.
at(i) <= 0. ) {
1198 }
else if ( crackStrain.
at(i) < maxCrackStrain.
at(i) ) {
1201 OOFEM_ERROR(
"Unexpected value of cracking strain");
1207 for (
int i = nMaxCracks + 1; i <= crackStrain.
giveSize(); i++ ) {
1208 if ( fabs( crackStrain.
at(i) ) > maxCrackStrain.
at(i) ) {
1232 for (
int i = 1; i <= dim; i++ ) {
1264 int numberOfActiveCracks, nMaxCracks;
1265 double overallElasticStiffness;
1267 FloatMatrix D, De, DeHelp, Dcr, DcrHelp, DcrHelp2, inv, stiffnessL2G;
1272 if ( ( rMode == ElasticStiffness ) || ( numberOfActiveCracks == 0 ) ) {
1276 if ( overallElasticStiffness != ( this->
give(
'E', gp) ) ) {
1277 D.
times( overallElasticStiffness / ( this->
give(
'E', gp) ) );
1289 if ( overallElasticStiffness != ( this->
give(
'E', gp) ) ) {
1290 De.
times( overallElasticStiffness / ( this->
give(
'E', gp) ) );
1298 DeHelp.
resizeWithData(numberOfActiveCracks, numberOfActiveCracks);
1300 Dcr.
resize(numberOfActiveCracks, numberOfActiveCracks);
1303 for (
int i = 1; i <= numberOfActiveCracks; i++ ) {
1316 D.
resize(nMaxCracks, nMaxCracks);
1331 for (
int i = 4; i <= 6; i++ ) {
1387 if ( shearDirection == 4 ) {
1390 }
else if ( shearDirection == 5 ) {
1393 }
else if ( shearDirection == 6 ) {
1397 OOFEM_ERROR(
"Unexpected value of index i (4, 5, 6 permitted only)");
1398 crackA = crackB = 0;
1402 if ( this->
isIntact(gp, crackA) ) {
1413 D2 = D2_1 * D2_2 / ( D2_1 + D2_2 );
1415 D2 =
min(D2_1, D2_2);
1485 double spacing, L,
N;
1490 if ( ( spacing > L ) || ( spacing < 0. ) ) {
1493 N = ( L / spacing );
1509 }
else if ( i == 5 ) {
1512 }
else if ( i == 6 ) {
1516 OOFEM_ERROR(
"Unexpected value of index i (4, 5, 6 permitted only)");
1535 if ( type == IST_CrackVector ) {
1554 }
else if ( type == IST_2ndCrackVector ) {
1586 }
else if ( type == IST_3rdCrackVector ) {
1617 }
else if ( type == IST_CrackWidth ) {
1626 answer.
at(1) = width;
1628 }
else if ( type == IST_2ndCrackWidth ) {
1656 answer.
at(1) = width;
1658 }
else if ( type == IST_CrackDirs ) {
1661 for (
int i = 1; i <= 3; i++ ) {
1662 answer.
at(i) = help.
at(1, i);
1663 answer.
at(i + 3) = help.
at(2, i);
1664 answer.
at(i + 6) = help.
at(3, i);
1668 }
else if ( type == IST_CrackStatuses ) {
1671 for (
int i = 1; i <= 3; i++ ) {
1672 answer.
at(i) = crackStatus.
at(i);
1676 }
else if ( type == IST_CrackStrainTensor ) {
1724 crackStatuses(), tempCrackStatuses(),
1725 maxCrackStrains(), tempMaxCrackStrains(),
1726 crackStrainVector(), tempCrackStrainVector(),
1729 transMatrix_G2Lstress(), transMatrix_G2Lstrain(),
1730 transMatrix_L2Gstress(), transMatrix_L2Gstrain()
1745 for (
int i = 1; i <= this->
nMaxCracks; i++ ) {
1790 fprintf(file,
"status { ");
1798 strcpy(s,
"JUST_INIT");
1801 strcpy(s,
"SOFTENING");
1804 strcpy(s,
"UNLO_RELO");
1807 strcpy(s,
"CLOSED");
1810 strcpy(s,
"UNKNOWN");
1814 fprintf(file,
"crack %d {status %s, crackplane is normal to { ", i, s);
1820 fprintf(file,
"}}");
1825 fprintf(file,
" }\n");
1875 for (
int i = 1; i <= 3; i++ ) {
bool contains(int value) const
void setG2LStressVectorTransformationMtrx(FloatMatrix t)
sets transformation matrix for stress transformation from global to local coordinate system ...
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
contextIOResultType storeYourself(DataStream &stream) const
Stores array to output stream.
int giveNumberOfColumns() const
Returns number of columns 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...
void subtract(const FloatArray &src)
Subtracts array src to receiver.
static int giveVoigtSymVectorMask(IntArray &answer, MaterialMode mmode)
The same as giveVoigtVectorMask but returns a mask corresponding to a symmetric second order tensor...
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
virtual double computeOverallElasticStiffness(void)
returns overall Young's modulus
FCMMaterial(int n, Domain *d)
static void givePlaneStressVectorTranformationMtrx(FloatMatrix &answer, const FloatMatrix &base, bool transpose=false)
Computes 2d stress vector transformation matrix from standard vector transformation matrix...
FloatMatrix crackDirs
Storing direction of cracks (crack normals) in columwise format.
int nMaxCracks
number of maximum possible cracks (optional parameter)
virtual bool isStrengthExceeded(const FloatMatrix &base, GaussPoint *gp, TimeStep *tStep, int iCrack, double trialStress)
compares trial stress with strength. Returns true if the strength is exceeded. Function oveloaded in ...
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
void setL2GStrainVectorTransformationMtrx(FloatMatrix s)
sets transformation matrix for stress transformation from global to local coordinate system ...
virtual void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
void setMaxCrackStrain(int icrack, double val)
sets value of the maximum crack strain for the i-th crack (equilibrated value)
GaussPoint * gp
Associated integration point.
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
For computing principal stresses.
double crackSpacing
value of crack spacing (allows to "have" more parallel cracks in one direction if the element size ex...
virtual double giveCharacteristicElementLength(GaussPoint *gp, const FloatArray &crackPlaneNormal)
returns characteristic element length in given direction
virtual bool isIntact(GaussPoint *gp, int icrack)
returns true for closed or no crack (i = 1, 2, 3)
bool solveForRhs(const FloatArray &b, FloatArray &answer, bool transpose=false)
Solves the system of linear equations .
int nAllowedCracks
allowed number of cracks (user-defined)
This class implements associated Material Status to FCMMaterial (fixed crack material).
void setTempCrackStatus(int icrack, int val)
sets temporary value of status for of the i-th crack
const FloatMatrix & giveG2LStressVectorTransformationMtrx()
returns transformation matrix for stress transformation from global to local coordinate system ...
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
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
contextIOResultType storeYourself(DataStream &stream) const
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
virtual double maxShearStress(GaussPoint *gp, int i)=0
computes the maximum value of the shear stress; if the shear stress exceeds this value, it is cropped
void zero()
Sets all component to zero.
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 ...
virtual bool checkStrengthCriterion(FloatMatrix &newBase, const FloatArray &globalStress, GaussPoint *gp, TimeStep *tStep, int nCrack)
checks if the globalStress does not exceed strength in the direction of newBase for n-th crack ...
const FloatMatrix & giveG2LStrainVectorTransformationMtrx()
sets transformation matrix for strain transformation from global to local coordinate system ...
FloatArray charLengths
Characteristic lengths computed from the crack orientation and element geometry.
This class implements a structural material status information.
FloatArray maxCrackStrains
Max. crack strain reached in the entire previous history.
virtual int giveNumberOfCracks() const
returns number of cracks from the previous time step (equilibrated value)
Element * giveElement()
Returns corresponding element to receiver.
FloatArray tempCrackStrainVector
const FloatMatrix & giveCrackDirs()
returns crack directions
double giveCharLength(int icrack) const
returns characteristic length associated with i-th crack direction
static void giveStrainVectorTranformationMtrx(FloatMatrix &answer, const FloatMatrix &base, bool transpose=false)
Computes 3d strain vector transformation matrix from standard vector transformation matrix...
ElementCharSizeMethod ecsMethod
Method used for evaluation of characteristic element size.
#define _IFT_FCM_nAllowedCracks
virtual void initializeCrack(GaussPoint *gp, FloatMatrix &base, int nCrack)
void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector, TimeStep *tStep, ValueModeType mode)
Method for subtracting from reduced space strain vector its stress-independent parts (caused by tempe...
MaterialMode
Type representing material mode of integration point.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
static void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir, const FloatArray &s, stressStrainPrincMode mode)
Computes principal values and directions of stress or strain vector.
virtual double computeD2ModulusForCrack(GaussPoint *gp, int icrack)=0
shear modulus for a given crack plane (1, 2, 3)
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
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 giveCrackingModulus(MatResponseMode rMode, GaussPoint *gp, int i)=0
returns stiffness in the normal direction of the i-th crack
virtual void updateCrackStatus(GaussPoint *gp)
updates crack statuses
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Computes the real stress vector for given total strain and integration point.
contextIOResultType storeYourself(DataStream &stream) const
void rotatedWith(FloatMatrix &r, char mode)
Returns the receiver a rotated according the change-of-base matrix r.
virtual double computeTotalD2Modulus(GaussPoint *gp, int i)
shear modulus for a given shear direction (4, 5, 6)
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
static void giveFullSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the reduced unsymmetric Voigt vector (2nd order tensor) to full form.
const FloatArray & giveMaxCrackStrainVector()
returns vector with maximum cracking strains (max 3 components)
void setCrackDirs(FloatMatrix a)
sets matrix with crack directions (normal vectors)
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
virtual void initTempStatus()
initializes temporary status
const char * __MaterialModeToString(MaterialMode _value)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
double giveTempCrackStrain(int icrack) const
returns i-th component of the crack strain vector (temporary)
virtual void checkSnapBack(GaussPoint *gp, int crack)=0
checks possible snap-back
IntArray tempCrackStatuses
const FloatArray & giveTempCrackStrainVector()
return temporary crack strain vector (max 6 components)
void setTempCrackStrain(int icrack, double val)
sets temporary value of i-th cracking strain (max 6 components)
void setG2LStrainVectorTransformationMtrx(FloatMatrix s)
sets transformation matrix for strain transformation from global to local coordinate system ...
const FloatMatrix & giveL2GStressVectorTransformationMtrx()
sets transformation matrix for stress transformation from local to global coordinate system ...
void resizeWithData(int, int)
Checks size of receiver towards requested bounds.
virtual int giveNumberOfTempCracks() const
returns temporary number of cracks
void times(double f)
Multiplies receiver by factor f.
virtual double computeEffectiveShearModulus(GaussPoint *gp, int i)=0
returns Geff which is necessary in the global stiffness matrix
void rotatedWith(const FloatMatrix &r, char mode= 'n')
Returns the receiver 'a' transformed using give transformation matrix r.
contextIOResultType restoreYourself(DataStream &stream)
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
restores context(state) from stream
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
FloatArray tempMaxCrackStrains
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
FloatMatrix transMatrix_G2Lstress
transformation matrix converting stress from global to local coordinate system
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix^T and anArray.
double at(int i, int j) const
Coefficient access function.
void resize(int n)
Checks size of receiver towards requested bounds.
void setTempMaxCrackStrain(int icrack, double val)
sets value of the maximum crack strain for the i-th crack (temporary value)
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
contextIOResultType restoreYourself(DataStream &stream)
Restores array from image on stream.
void setTempCrackStrainVector(FloatArray a)
sets temporary vector of cracking strains (max 6 components)
virtual void giveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
void subtract(const FloatMatrix &a)
Subtracts matrix from the receiver.
contextIOResultType restoreYourself(DataStream &stream)
Class representing vector of real numbers.
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
Implementation of matrix containing floating point numbers.
const FloatArray & giveCrackStrainVector() const
return equilibrated crack strain vector (max 6 components)
IRResultType
Type defining the return values of InputRecord reading operations.
static void giveStressVectorTranformationMtrx(FloatMatrix &answer, const FloatMatrix &base, bool transpose=false)
Computes 3d stress vector transformation matrix from standard vector transformation matrix...
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
const FloatMatrix & giveL2GStrainVectorTransformationMtrx()
sets transformation matrix for stress transformation from global to local coordinate system ...
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
#define _IFT_FCM_multipleCrackShear
void add(const FloatMatrix &a)
Adds matrix to the receiver.
IntArray crackStatuses
crack statuses (none, just initialized, softenin, unlo-relo, closed)
void setL2GStressVectorTransformationMtrx(FloatMatrix t)
sets transformation matrix for stress transformation from local to global coordinate system ...
IsotropicLinearElasticMaterial * linearElasticMaterial
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 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.
virtual double giveCharacteristicLength(const FloatArray &normalToCrackPlane)
Returns the size of element in the given direction, in some cases adjusted (e.g.
virtual int giveMaxNumberOfCracks(GaussPoint *gp)
returns maximum number of cracks associated with current mode
virtual double giveTensileStrength(GaussPoint *gp)=0
comutes tensile strength
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
void times(double s)
Multiplies receiver with scalar.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Abstract base class for all "structural" constitutive models.
void zero()
Zeroes all coefficient of receiver.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
FloatArray crackStrainVector
Components of crack strain vector (normal as well as shear).
static void give2DStrainVectorTranformationMtrx(FloatMatrix &answer, const FloatMatrix &base, bool transpose=false)
Computes 2d strain vector transformation matrix from standard vector transformation matrix...
int min(int i, int j)
Returns smaller value from two given decimals.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
void setCharLength(int icrack, double val)
sets characteristic length for i-th crack
FloatMatrix transMatrix_G2Lstrain
transformation matrix converting strain from global to local coordinate system
FloatMatrix transMatrix_L2Gstrain
transformation matrix converting strain from local to global coordinate system
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 contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
the oofem namespace is to define a context or scope in which all oofem names are defined.
void setCrackStrainVector(FloatArray a)
sets equilibrated vector of cracking strains (max 6 components)
virtual void giveLocalCrackedStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
returns local stiffness matrix of the crack
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
int giveNumberOfRows() const
Returns number of rows of receiver.
FCMMaterialStatus(int n, Domain *d, GaussPoint *g)
int giveCrackStatus(int icrack) const
return equilibrated value of status associated with i-th crack direction
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
Class representing solution step.
void add(const FloatArray &src)
Adds array src to receiver.
IsotropicLinearElasticMaterial * giveLinearElasticMaterial()
static void giveReducedSymMatrixForm(FloatMatrix &answer, const FloatMatrix &full, MaterialMode matMode)
Converts the full unsymmetric Voigt matrix (4th order tensor) to reduced form.
FloatMatrix transMatrix_L2Gstress
transformation matrix converting stress from local to global coordinate system
#define _IFT_FCM_crackSpacing
void resize(int s)
Resizes receiver towards requested size.
virtual ~FCMMaterialStatus()
virtual double computeShearStiffnessRedistributionFactor(GaussPoint *gp, int ithCrackPlane, int jthCrackDirection)
function calculating ratio used to split shear slips on two crack planes