91 return mode == _1dMat || mode == _PlaneStress || mode == _PlaneStrain;
114 answer.
at(1, 1) = lmat->
give(
'E', gp);
115 answer.
times(1.0 - om);
128 if ( tempKappa > kappa ) {
130 this->
computeEta(eta, totalStrain, gp, tStep);
131 answer.
at(1, 1) = eta.
at(1);
143 double E = lmat->
give(
'E', gp);
146 if ( tempDamage > damage ) {
150 answer.
times(gPrime);
163 if ( mode == ElasticStiffness ) {
167 if ( tempDamage > 0.0 ) {
173 answer.
times(1.0 - tempDamage);
182 if ( mode == TangentStiffness ) {
186 this->
computeEta(eta, totalStrain, gp, tStep);
187 answer.
at(1, 1) = eta.
at(1);
188 answer.
at(1, 2) = eta.
at(2);
189 answer.
at(1, 3) = eta.
at(3);
197 if ( mode == TangentStiffness ) {
205 answer.
at(1, 1) = stress.
at(1) / ( 1 - tempDamage );
206 answer.
at(2, 1) = stress.
at(2) / ( 1 - tempDamage );
207 answer.
at(3, 1) = stress.
at(3) / ( 1 - tempDamage );
208 answer.
times(gPrime);
218 if ( mode == ElasticStiffness ) {
222 if ( tempDamage > 0.0 ) {
228 answer.
times(1.0 - tempDamage);
240 this->
computeEta(eta, totalStrain, gp, tStep);
241 answer.
at(1, 1) = eta.
at(1);
242 answer.
at(1, 2) = eta.
at(2);
243 answer.
at(1, 3) = eta.
at(3);
244 answer.
at(1, 4) = eta.
at(4);
255 if ( tempDamage > damage ) {
259 answer.
at(1, 1) = stress.
at(1) / ( 1 - tempDamage );
260 answer.
at(2, 1) = stress.
at(2) / ( 1 - tempDamage );
261 answer.
at(3, 1) = stress.
at(3) / ( 1 - tempDamage );
262 answer.
at(4, 1) = stress.
at(4) / ( 1 - tempDamage );
263 answer.
times(gPrime);
273 answer.
at(1, 1) =
cl;
278 OOFEM_ERROR(
"computeGlobalCoordinates of GP failed");
282 answer.
at(1, 1) =
cl;
285 if ( mMode == _PlaneStress ) {
305 if ( sigPrinc.
at(1) > 0 ) {
306 if ( sigPrinc.
at(2) > 0 ) {
307 gamma =
beta + ( 1 -
beta ) * sigPrinc.
at(2) * sigPrinc.
at(2) / ( sigPrinc.
at(1) * sigPrinc.
at(1) );
320 double n11 = nPrinc.
at(1, 1);
321 double n12 = nPrinc.
at(1, 2);
322 double n21 = nPrinc.
at(2, 1);
323 double n22 = nPrinc.
at(2, 2);
325 answer.
at(1, 1) = l1 * l1 * n11 * n11 + l2 * l2 * n12 * n12;
326 answer.
at(1, 2) = l1 * l1 * n11 * n21 + l2 * l2 * n12 * n22;
327 answer.
at(2, 1) = l1 * l1 * n11 * n21 + l2 * l2 * n12 * n22;
328 answer.
at(2, 2) = l1 * l1 * n21 * n21 + l2 * l2 * n22 * n22;
340 if ( mMode == _PlaneStress ) {
343 if ( mode == TangentStiffness ) {
352 if ( sigPrinc.
at(1) > 0 ) {
353 if ( sigPrinc.
at(2) > 0 && sigPrinc.
at(1) != sigPrinc.
at(2) ) {
354 double gamma =
beta + ( 1 -
beta ) * sigPrinc.
at(2) * sigPrinc.
at(2) / ( sigPrinc.
at(1) * sigPrinc.
at(1) );
355 double dL2dS1 = 4. * gamma *
cl *
cl * (
beta - 1. ) * sigPrinc.
at(2) * sigPrinc.
at(2) / ( sigPrinc.
at(1) * sigPrinc.
at(1) * sigPrinc.
at(1) );
356 double dL2dS2 = 4. * gamma *
cl *
cl * ( 1. -
beta ) * sigPrinc.
at(2) / ( sigPrinc.
at(1) * sigPrinc.
at(1) );
357 double dLdN = ( gamma * gamma - 1. ) *
cl *
cl / ( sigPrinc.
at(2) - sigPrinc.
at(1) );
358 answer.
at(1, 1) = nPrinc.
at(1, 1);
359 answer.
at(1, 2) = nPrinc.
at(1, 2);
360 answer.
at(2, 1) = nPrinc.
at(2, 1);
361 answer.
at(2, 2) = nPrinc.
at(2, 2);
362 answer.
at(3, 3) = dL2dS1;
363 answer.
at(4, 4) = dL2dS2;
364 answer.
at(5, 5) = dLdN;
391 double f, equivStrain, tempKappa = 0.0, omega = 0.0;
406 f = nonlocalCumulatedStrain - status->
giveKappa();
414 this->
initDamaged(tempKappa, reducedTotalStrainVector, gp);
416 this->
computeDamageParam(omega, nonlocalCumulatedStrain, reducedTotalStrainVector, gp);
420 tempKappa = nonlocalCumulatedStrain;
423 if ( omega < status->giveDamage() ) {
429 OOFEM_ERROR(
"unsupported loading/uloading criteria");
434 de.
times(1.0 - omega);
436 answer2 = equivStrain;
539 give1dStressStiffMtrx(answer, mode, gp, tStep);
542 givePlaneStressStiffMtrx(answer, mode, gp, tStep);
545 givePlaneStrainStiffMtrx(answer, mode, gp, tStep);
558 give1dKappaMatrix(answer, mode, gp, tStep);
561 givePlaneStressKappaMatrix(answer, mode, gp, tStep);
564 givePlaneStrainKappaMatrix(answer, mode, gp, tStep);
577 give1dGprime(answer, mode, gp, tStep);
580 givePlaneStressGprime(answer, mode, gp, tStep);
583 givePlaneStrainGprime(answer, mode, gp, tStep);
596 giveInternalLength(answer, mode, gp, tStep);
599 giveInternalLength(answer, mode, gp, tStep);
602 giveInternalLength(answer, mode, gp, tStep);
615 giveInternalLengthDerivative(answer, mode, gp, tStep);
enum oofem::IsotropicDamageMaterial::loaUnloCriterium llcriteria
double giveDamage()
Returns the last equilibrated damage level.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
double le
Characteristic element length, computed when damage initialized from direction of maximum positive pr...
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
void giveInternalLength(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
GaussPoint * gp
Associated integration point.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Domain * domain
Link to domain object, useful for communicating with other FEM components.
double cl0
Initial(user defined) characteristic length of the nonlocal model (its interpretation depends on the ...
void givePlaneStrainGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void givePDGradMatrix_kk(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Right lower block.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Specialization of a floating point array for representing a stress state.
virtual void initDamaged(double kappa, FloatArray &totalStrainVector, GaussPoint *gp)
Performs initialization, when damage first appear.
double & at(int i)
Coefficient access function.
virtual void givePDGradMatrix_uu(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Left upper block.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir) const
Computes principal values and directions of receiver vector.
IDGMaterialStatus(int n, Domain *d, GaussPoint *g)
IDGMaterial(int n, Domain *d)
Constructor.
double cl
Characteristic length of the nonlocal model (its interpretation depends on the type of weight functio...
static MMAContainingElementProjection mapper
Mapper used to map internal variables in adaptivity.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
virtual void giveRealStressVectorGrad(FloatArray &answer1, double &answer2, GaussPoint *gp, const FloatArray &totalStrain, double nonlocalCumulatedStrain, TimeStep *tStep)
gradient - based giveRealStressVector
Element * giveElement()
Returns corresponding element to receiver.
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates new copy of associated status and inserts it into given integration point.
This class implements associated Material Status to IsotropicDamageMaterial1.
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 int read(int *data, int count)=0
Reads count integer values into array pointed by data.
MatResponseMode
Describes the character of characteristic material matrix.
This class is a abstract base class for all linear elastic material models in a finite element proble...
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
double beta
Parameters specifying how the length scale parameter l is adjusted.
Material status for gradient-enhanced isotropic damage model for concrete in tension.
virtual void givePDGradMatrix_LD(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Stress-based averaging.
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...
void give1dKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
virtual IRResultType initializeFrom(InputRecord *ir)
void setTempDamage(double newDamage)
Sets the temp damage level to given value.
double damageFunctionPrime(double kappa, GaussPoint *gp)
Returns the value of compliance parameter corresponding to a given value of the damage-driving variab...
double maxOmega
Maximum limit on omega. The purpose is elimination of a too compliant material which may cause conver...
virtual void updateYourself(TimeStep *)
Update equilibrium history variables according to temp-variables.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
double internalLength
Length scale parameter.
void times(double f)
Multiplies receiver by factor f.
virtual void computeDamageParam(double &omega, double kappa, const FloatArray &strain, GaussPoint *gp)
Computes the value of damage parameter omega, based on given value of equivalent strain.
Material interface for gradient material models.
double giveKappa()
Returns the last equilibrated scalar measure of the largest strain level.
void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
virtual void givePDGradMatrix_ku(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Left lower block.
virtual ~IDGMaterialStatus()
void givePlaneStressKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
void giveDistanceBasedCharacteristicLength(const FloatArray &gpCoords)
Provides the distance based interaction radius This function is called when averType is set to 1...
const FloatArray & giveTempStrainVector() const
Returns the const pointer to receiver's temporary strain vector.
virtual void computeEta(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes derivative of the equivalent strain with regards to strain.
int averType
Parameter specifiying averaging type(0 - classical, 1 - distance based, 2 - stress based) ...
double at(int i, int j) const
Coefficient access function.
LinearElasticMaterial * giveLinearElasticMaterial()
Returns reference to undamaged (bulk) material.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Abstract base class representing a material status information.
double giveTempKappa()
Returns the temp. scalar measure of the largest strain level.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Class representing vector of real numbers.
void givePlaneStressGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Implementation of matrix containing floating point numbers.
virtual void setNonlocalCumulatedStrain(double nonlocalCumulatedStrain)
IRResultType
Type defining the return values of InputRecord reading operations.
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
double giveTempDamage()
Returns the temp. damage level.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
void give1dGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void giveInternalLengthDerivative(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
This class implements a simple local isotropic damage model for concrete in tension.
virtual IRResultType initializeFrom(InputRecord *ir)
void zero()
Zeroes all coefficient of receiver.
int min(int i, int j)
Returns smaller value from two given decimals.
REGISTER_Material(DummyMaterial)
void givePlaneStrainKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver's temporary stress vector.
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
int giveNumberOfRows() const
Returns number of rows of receiver.
void setTempKappa(double newKappa)
Sets the temp scalar measure of the largest strain level to given value.
This class implements associated Material Status to IsotropicDamageMaterial.
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
virtual void computeEquivalentStrain(double &kappa, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes the equivalent strain measure from given strain vector (full form).
Class representing integration point in finite element program.
Class representing solution step.
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Computes the global coordinates from given element's local coordinates.
virtual void givePDGradMatrix_uk(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Right upper block.
const FloatArray & giveNaturalCoordinates()
Returns coordinate array of receiver.
virtual ~IDGMaterial()
Destructor.
void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
void resize(int s)
Resizes receiver towards requested size.
virtual double giveNonlocalCumulatedStrain()