59 return mode == _3dMat;
134 double tempDam,
beta, tempKappa, kappa;
135 FloatArray tempEffectiveStress, tempTensor2, prodTensor, plasFlowDirec;
136 FloatMatrix elasticity, compliance, SSaTensor, secondTerm, thirdTerm, tangentMatrix;
139 if ( mode == ElasticStiffness ) {
143 }
else if ( mode == SecantStiffness ) {
152 answer.
times(1.0 - tempDam);
153 }
else if ( mode == TangentStiffness ) {
157 if ( tempKappa > kappa ) {
169 secondTerm.
times(-( 1.0 - tempDam ) / beta);
171 tangentMatrix = SSaTensor;
172 tangentMatrix.
times(1.0 - tempDam);
173 tangentMatrix.
add(secondTerm);
174 if ( tempDam > status->
giveDam() ) {
180 thirdTerm.
times(gPrime);
182 tangentMatrix.
add(thirdTerm);
185 answer = tangentMatrix;
192 answer.
times(1.0 - tempDam);
199 tangentMatrix.
resize(6, 6);
200 tangentMatrix.
zero();
201 tangentMatrix.
at(1, 1) = tangentMatrix.
at(1, 2) = tangentMatrix.
at(1, 3) = 1;
202 tangentMatrix.
at(2, 1) = tangentMatrix.
at(2, 2) = tangentMatrix.
at(2, 3) = 1;
203 tangentMatrix.
at(3, 1) = tangentMatrix.
at(3, 2) = tangentMatrix.
at(3, 3) = 1;
204 tangentMatrix.
times(factor);
205 answer.
add(tangentMatrix);
219 if ( mode == TangentStiffness ) {
227 double dKappa = tempKappa - kappa;
229 if ( dKappa > 0.0 ) {
234 for (
int i = 1; i <= 6; i++ ) {
235 answer.
at(1, i) = prodTensor.
at(i);
238 answer.
times(1. / beta);
250 if ( mode == TangentStiffness ) {
252 double damage, tempDamage;
253 double nlKappa, kappa;
263 if ( ( tempDamage - damage ) > 0 ) {
265 for (
int i = 1; i <= 6; i++ ) {
266 answer.
at(i, 1) = tempEffStress.
at(i);
294 answer1.
beScaled(1 - tempDamage, tempEffStress);
301 answer1.
add(densStress);
320 kappa =
mParam * nlCumPlastStrain + ( 1 -
mParam ) * localCumPlastStrain;
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
virtual void computeCumPlastStrain(double &kappa, GaussPoint *gp, TimeStep *tStep)
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
virtual void giveRealStressVectorGrad(FloatArray &answer1, double &answer2, GaussPoint *gp, const FloatArray &totalStrain, double nonlocalCumulatedStrain, TimeStep *tStep)
gradient - based giveRealStressVector
void give3dKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
TrabBoneGrad3D(int n, Domain *d)
double beta
Parameter which multiplied with the interaction radius cl0 gives its minimum allowed value...
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
virtual void givePDGradMatrix_uk(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Right upper block.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
void computeDensificationStress(FloatArray &answer, GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep)
const FloatArray & giveTempEffectiveStress() const
void performPlasticityReturn(GaussPoint *gp, const FloatArray &totalStrain, TimeStep *tStep)
double & at(int i)
Coefficient access function.
virtual void givePDGradMatrix_kk(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Right lower block.
virtual void updateYourself(TimeStep *)
Update equilibrium history variables according to temp-variables.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
void giveInternalLength(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
double computeDamage(GaussPoint *gp, TimeStep *tStep)
void constructAnisoComplTensor(FloatMatrix &answer)
Construct anisotropic compliance tensor.
MaterialMode
Type representing material mode of integration point.
MatResponseMode
Describes the character of characteristic material matrix.
#define _IFT_TrabBoneGrad3D_m
void beScaled(double s, const FloatArray &b)
Sets receiver to be .
const char * __MaterialModeToString(MaterialMode _value)
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
void setSmtrx(FloatMatrix &smt)
void times(double f)
Multiplies receiver by factor f.
Material interface for gradient material models.
double computeDamageParam(double kappa)
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
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.
double computeDamageParamPrime(double kappa)
void setTempDam(double da)
double gammaL0
Densificator properties.
virtual void givePDGradMatrix_uu(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Left upper block.
virtual void givePDGradMatrix_LD(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Stress-based averaging.
Class representing vector of real numbers.
virtual void setNonlocalCumulatedStrain(double nonlocalCumulatedStrain)
TrabBoneGrad3DStatus(int n, Domain *d, GaussPoint *g)
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
const FloatArray & givePlasFlowDirec() const
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
const FloatMatrix & giveSSaTensor() const
void setTempEffectiveStress(FloatArray &sc)
void add(const FloatMatrix &a)
Adds matrix to the receiver.
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
void beDyadicProductOf(const FloatArray &vec1, const FloatArray &vec2)
Assigns to the receiver the dyadic product .
virtual double giveNonlocalCumulatedStrain()
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
#define _IFT_TrabBoneGrad3D_L
virtual ~TrabBoneGrad3DStatus()
This class implements associated Material Status to TrabBone3D (trabecular bone material).
void zero()
Zeroes all coefficient of receiver.
virtual void givePDGradMatrix_ku(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Left lower block.
REGISTER_Material(DummyMaterial)
the oofem namespace is to define a context or scope in which all oofem names are defined.
double nlKappa
Equivalent strain for avaraging.
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.
Gradient bone damage-plastic material status.
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
Class representing integration point in finite element program.
Class representing solution step.
void give3dGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
void add(const FloatArray &src)
Adds array src to receiver.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual ~TrabBoneGrad3D()