81 FloatArray reducedStrainVector, strainVector, principalStrain;
116 answer = reducedAnswer;
119 double minSofteningPrincStress = this->
Ft, dCoeff, CurrFt,
E, ep, ef, damage;
121 for (
int i = 1; i <= 3; i++ ) {
123 if ( princStress.
at(i) < minSofteningPrincStress ) {
124 minSofteningPrincStress = princStress.
at(i);
138 dCoeff = ( E / ( princStress.
at(ipos) / principalStrain.
at(ipos) ) );
155 double ep, ef,
E, dCoeff;
167 reducedSpaceStressVector.
times(1.0 - damage);
169 answer = reducedSpaceStressVector;
200 if ( ( rMode == TangentStiffness ) || ( rMode == SecantStiffness ) ) {
210 reducedAnswer.
times(dCoeff);
212 answer = reducedAnswer;
213 }
else if ( rMode == ElasticStiffness ) {
226 double damage = 1. - dStiffCoeff * ( 1. - ef / equivStrain ) / ( 1. - ef / ep );
227 if ( damage > 1.0 ) {
238 FloatArray effStress, princEffStress, fullEffStress;
243 effStress.
beProductOf(De, reducedTotalStrainVector);
247 for (
int i = 1; i <= 3; i++ ) {
248 answer =
max( answer,
macbra( princEffStress.
at(i) ) );
287 double Ee,
Gf,
Ft, LeCrit;
293 LeCrit = 2.0 * Gf * Ee / ( Ft *
Ft );
294 return ( charLength < LeCrit );
314 Ft = sqrt(2. * Ee * Gf / charLength);
337 return 2.0 * Gf / ( Le *
Ft );
366 double crackStrain,
int i)
377 double Cf,
Ft, Le, minEffStrainForFullyOpenCrack;
393 if ( rMode == TangentStiffness ) {
395 if ( ( crackStrain >= minEffStrainForFullyOpenCrack ) ||
401 Cf = -Ft / minEffStrainForFullyOpenCrack;
412 if ( ( crackStrain >= minEffStrainForFullyOpenCrack ) ||
437 double Cf,
Ft, Le, answer, minEffStrainForFullyOpenCrack;
446 if ( ( crackStrain >= minEffStrainForFullyOpenCrack ) ||
452 answer = Ft + Cf * crackStrain;
453 }
else if ( crackStrain <= 0. ) {
459 answer = crackStrain * Ft *
494 fprintf(file,
"status { ");
496 fprintf(file,
"mode :rc ");
499 for ( i = 1; i <= 3; i++ ) {
508 strcpy(s,
"SOFTENING");
511 strcpy(s,
"RELOADING");
514 strcpy(s,
"UNLOADING");
517 strcpy(s,
"UNKNOWN");
521 fprintf( file,
"crack %d {status %s, normal to crackplane { %f %f %f }} ",
530 fprintf(file,
"}\n");
588 if ( !stream.
write(mode) ) {
622 if ( !stream.
read(mode) ) {
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 setDs0Matrix(FloatMatrix &mtrx)
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
void setDamageEpsfCoeff(double val)
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.
double computeCurrEquivStrain(GaussPoint *, const FloatArray &, double, TimeStep *)
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 tempMaxEquivStrain
double & at(int i)
Coefficient access function.
int max(int i, int j)
Returns bigger value form two given decimals.
LinearElasticMaterial * linearElasticMaterial
virtual void giveEffectiveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
virtual double computeStrength(GaussPoint *, double)
LinearElasticMaterial * giveLinearElasticMaterial()
virtual double giveNormalCrackingStress(GaussPoint *gp, double eps_cr, int i)
const IntArray & giveTempCrackStatus()
void setDamageEpspCoeff(double val)
double macbra(double x)
Returns the positive part of given float.
double giveTempDamageCoeff()
RCSDMaterialStatus(int n, Domain *d, GaussPoint *g)
Element * giveElement()
Returns corresponding element to receiver.
virtual double giveMinCrackStrainsForFullyOpenCrack(GaussPoint *gp, int i)
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 int checkSizeLimit(GaussPoint *gp, double)
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.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
#define _IFT_RCSDMaterial_sdtransitioncoeff
contextIOResultType storeYourself(DataStream &stream) const
#define OOFEM_LOG_RELEVANT(...)
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
static void giveFullSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the reduced unsymmetric Voigt vector (2nd order tensor) to full form.
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'.
This class implements associated Material Status to RCSDMaterial.
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.
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *, const FloatArray &, TimeStep *)
Computes the real stress vector for given total strain and integration point.
This class implements an isotropic linear elastic material in a finite element problem.
virtual double giveCrackingModulus(MatResponseMode rMode, GaussPoint *gp, double crackStrain, int i)
int giveNumber()
Returns number of receiver.
double giveTempMaxEquivStrain()
void setTempMaxEquivStrain(double val)
This class implements associated Material Status to SmearedCrackingMaterail.
void times(double f)
Multiplies receiver by factor f.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
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 giveDamageEpsfCoeff()
double at(int i, int j) const
Coefficient access function.
void setTempMode(rcsdMode mode)
int giveTempAlreadyCrack() const
virtual ~RCSDMaterialStatus()
double giveDamageEpspCoeff()
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
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 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.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
void setTempDamageCoeff(double val)
void giveRealPrincipalStressVector3d(FloatArray &answer, GaussPoint *, FloatArray &, FloatMatrix &, TimeStep *)
double computeDamageCoeff(double, double, double, double)
virtual void giveEffectiveMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
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.
const FloatMatrix & giveTempCrackDirs()
const FloatMatrix * giveDs0Matrix()
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)
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
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.
double giveDamageStiffCoeff()
RCSDMaterial(int n, Domain *d)
Class representing solution step.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void updateCrackStatus(GaussPoint *gp, const FloatArray &crackStrain)
void setDamageStiffCoeff(double val)
void resize(int s)
Resizes receiver towards requested size.