80 FloatArray reducedStrainVector, strainVector, principalStrain;
115 answer = reducedAnswer;
118 double minSofteningPrincStress = this->
Ft,
E, Le, CurrFt,
Ft,
Gf, Gf0, Gf1, e0, ef, ef2, damage;
120 for (
int i = 1; i <= 3; i++ ) {
122 if ( princStress.
at(i) < minSofteningPrincStress ) {
123 minSofteningPrincStress = princStress.
at(i);
139 e0 = principalStrain.
at(ipos);
140 Gf0 = -CurrFt * ef * ( exp(-status->
giveCrackStrain(ipos) / ef) - 1.0 );
143 ef2 = Gf1 / princStress.
at(ipos);
172 reducedSpaceStressVector.
times(1.0 - damage);
174 answer = reducedSpaceStressVector;
205 if ( ( rMode == TangentStiffness ) || ( rMode == SecantStiffness ) ) {
215 reducedAnswer.
times(dCoeff);
217 answer = reducedAnswer;
218 }
else if ( rMode == ElasticStiffness ) {
231 double damage = 1. - e0 / equivStrain *exp(-( equivStrain - e0 ) / ef2);
232 if ( damage > 1.0 ) {
243 FloatArray effStress, princEffStress, fullEffStress;
248 effStress.
beProductOf(De, reducedTotalStrainVector);
252 for (
int i = 1; i <= 3; i++ ) {
253 answer =
max( answer,
macbra( princEffStress.
at(i) ) );
291 double Ee,
Gf,
Ft, LeCrit;
297 LeCrit = 2.0 * Gf * Ee / ( Ft *
Ft );
298 return ( charLength < LeCrit );
318 Ft = sqrt(2. * Ee * Gf / charLength);
373 double crackStrain,
int i)
384 double Gf, Cf,
Ft, Le, ef;
397 ef = Gf / ( Le *
Ft );
399 if ( rMode == TangentStiffness ) {
403 Cf = -Ft / ef *exp(-crackStrain / ef);
429 double Gf,
Ft, Le, answer, ef;
435 ef = Gf / ( Le *
Ft );
440 answer = Ft * exp(-crackStrain / ef);
476 fprintf(file,
"status { ");
478 fprintf(file,
"mode :rc ");
481 for (
int i = 1; i <= 3; i++ ) {
490 strcpy(s,
"SOFTENING");
493 strcpy(s,
"RELOADING");
496 strcpy(s,
"UNLOADING");
499 strcpy(s,
"UNKNOWN");
503 fprintf( file,
"crack %d {status %s, normal to crackplane { %f %f %f }} ",
512 fprintf(file,
"}\n");
572 if ( !stream.
write(_mode) ) {
615 if ( !stream.
read(_mode) ) {
virtual void giveEffectiveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
static void computePrincipalValues(FloatArray &answer, const FloatArray &s, stressStrainPrincMode mode)
Common functions for convenience.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
void setTransitionEpsCoeff(double val)
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
virtual int checkSizeLimit(GaussPoint *gp, double)
double tempMaxEquivStrain
double computeCurrEquivStrain(GaussPoint *, const FloatArray &, double, TimeStep *)
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
For computing principal stresses.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
For computing principal strains from engineering strains.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
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.
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *, const FloatArray &, TimeStep *)
Computes the real stress vector for given total strain and integration point.
LinearElasticMaterial * linearElasticMaterial
double giveTempMaxEquivStrain()
virtual void giveEffectiveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
#define _IFT_RCSDEMaterial_sdtransitioncoeff
LinearElasticMaterial * giveLinearElasticMaterial()
const IntArray & giveTempCrackStatus()
virtual double computeStrength(GaussPoint *, double)
double giveCrackStrain(int icrack) const
double macbra(double x)
Returns the positive part of given float.
void setTempMode(__rcsdModeType mode)
Element * giveElement()
Returns corresponding element to receiver.
void setDs0Matrix(FloatMatrix &mtrx)
double giveTempDamageCoeff()
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...
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.
int & at(int i)
Coefficient access function.
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 giveTransitionEpsCoeff()
__rcsdModeType giveTempMode()
contextIOResultType storeYourself(DataStream &stream) const
#define OOFEM_LOG_RELEVANT(...)
void setEpsF2Coeff(double val)
static void giveFullSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the reduced unsymmetric Voigt vector (2nd order tensor) to full form.
RCSDEMaterial(int n, Domain *d)
This class implements associated Material Status to RCSDEMaterial.
This class implements a Rotating Crack Model for fracture in smeared fashion ( only material stiffnes...
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
static void giveReducedSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the full unsymmetric Voigt vector (2nd order tensor) to reduced form.
This class implements an isotropic linear elastic material in a finite element problem.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
int giveNumber()
Returns number of receiver.
This class implements associated Material Status to SmearedCrackingMaterail.
void times(double f)
Multiplies receiver by factor f.
__rcsdModeType tempRcsdMode
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
double computeDamageCoeff(double, double, double)
const FloatArray & giveCrackStrainVector() const
virtual void giveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
double at(int i, int j) const
Coefficient access function.
int giveTempAlreadyCrack() const
virtual double giveCrackingModulus(MatResponseMode rMode, GaussPoint *gp, double crackStrain, int i)
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
const FloatMatrix * giveDs0Matrix()
contextIOResultType restoreYourself(DataStream &stream)
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
virtual ~RCSDEMaterialStatus()
void setTempDamageCoeff(double val)
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
void setTempMaxEquivStrain(double val)
void giveRealPrincipalStressVector3d(FloatArray &answer, GaussPoint *, FloatArray &, FloatMatrix &, TimeStep *)
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
virtual double giveMinCrackStrainsForFullyOpenCrack(GaussPoint *gp, int i)
void times(double s)
Multiplies receiver with scalar.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
FloatMatrix crackDirs
Storing direction of cracks in columwise format.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
const FloatMatrix & giveTempCrackDirs()
virtual double giveNormalCrackingStress(GaussPoint *gp, double eps_cr, int i)
REGISTER_Material(DummyMaterial)
the oofem namespace is to define a context or scope in which all oofem names are defined.
#define pscm_SDTransitionCoeff
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
double giveTempMaxCrackStrain(int icrack)
static void transformStressVectorTo(FloatArray &answer, const FloatMatrix &base, const FloatArray &stressVector, bool transpose=false)
Transforms 3d stress vector into another coordinate system.
IntArray crackStatuses
One value from (pscm_NONE, pscm_OPEN, pscm_SOFTENING, pscm_RELOADING, pscm_UNLOADING, pscm_CLOSED.
double giveCharLength(int icrack) const
Class representing integration point in finite element program.
Class representing solution step.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
RCSDEMaterialStatus(int n, Domain *d, GaussPoint *g)
virtual void updateCrackStatus(GaussPoint *gp, const FloatArray &crackStrain)
void resize(int s)
Resizes receiver towards requested size.