59LargeStrainMasterMaterialGrad :: hasMaterialModeCapability(MaterialMode mode)
const
61 return mode == _3dMat;
65std::unique_ptr<MaterialStatus>
66LargeStrainMasterMaterialGrad :: CreateStatus(
GaussPoint *gp)
const
68 return std::make_unique<LargeStrainMasterMaterialStatus>(gp, this->
giveDomain(),
slaveMat);
88 answer = LargeStrainMasterMaterial :: give3dMaterialStiffnessMatrix(mode, gp, tStep);
91 OOFEM_ERROR(
"unknown mode (%s)", __MaterialModeToString(mMode) );
104 OOFEM_ERROR(
"unknown mode (%s)", __MaterialModeToString(mMode) );
117 OOFEM_ERROR(
"unknown mode (%s)", __MaterialModeToString(mMode) );
134 if ( graddpmat == NULL ) {
140 gPrime.
at(4, 1) = 2. * gPrime.
at(4, 1);
141 gPrime.
at(5, 1) = 2. * gPrime.
at(5, 1);
142 gPrime.
at(6, 1) = 2. * gPrime.
at(6, 1);
154 if ( graddpmat == NULL ) {
160 kappaMatrix.
at(1, 4) = 2. * kappaMatrix.
at(1, 4);
161 kappaMatrix.
at(1, 5) = 2. * kappaMatrix.
at(1, 5);
162 kappaMatrix.
at(1, 6) = 2. * kappaMatrix.
at(1, 6);
170LargeStrainMasterMaterialGrad :: giveNonlocalInternalForces_N_factor(
double &answer,
double nlDamageDrivingVariable,
GaussPoint *gp,
TimeStep *tStep)
172 answer = nlDamageDrivingVariable;
178 answer = nlDamageDrivingVariable_grad;
184LargeStrainMasterMaterialGrad :: computeLocalDamageDrivingVariable(
double &answer,
GaussPoint *gp,
TimeStep *tStep)
198 if ( mode == _3dMat ) {
203 if ( sMat == NULL ) {
210 OOFEM_ERROR(
"Material doesn't implement the required DpGrad interface!");
214 double lambda1, lambda2, lambda3, E1, E2, E3;
215 FloatArray eVals, SethHillStrainVector, stressVector, stressM;
223 C.
jaco_(eVals, eVecs, 40);
225 lambda1 = eVals.
at(1);
226 lambda2 = eVals.
at(2);
227 lambda3 = eVals.
at(3);
229 E1 = 1. / 2. * log(lambda1);
230 E2 = 1. / 2. * log(lambda2);
231 E3 = 1. / 2. * log(lambda3);
233 E1 = 1. / ( 2. *
m ) * ( pow(lambda1,
m) - 1. );
234 E2 = 1. / ( 2. *
m ) * ( pow(lambda2,
m) - 1. );
235 E3 = 1. / ( 2. *
m ) * ( pow(lambda3,
m) - 1. );
238 SethHillStrain.
resize(3, 3);
239 for (
int i = 1; i < 4; i++ ) {
240 for (
int j = 1; j < 4; j++ ) {
241 SethHillStrain.
at(i, j) = E1 * eVecs.
at(i, 1) * eVecs.
at(j, 1) + E2 *eVecs.
at(i, 2) * eVecs.
at(j, 2) + E3 *eVecs.
at(i, 3) * eVecs.
at(j, 3);
251 stressVector.
at(4) = 2 * stressVector.
at(4);
252 stressVector.
at(5) = 2 * stressVector.
at(5);
253 stressVector.
at(6) = 2 * stressVector.
at(6);
257 stressM.
at(4) = 1. / 2. * stressM.
at(4);
258 stressM.
at(5) = 1. / 2. * stressM.
at(5);
259 stressM.
at(6) = 1. / 2. * stressM.
at(6);
268 stressVector.
at(4) = 0.5 * stressVector.
at(4);
269 stressVector.
at(5) = 0.5 * stressVector.
at(5);
270 stressVector.
at(6) = 0.5 * stressVector.
at(6);
275 TL.beTProductOf(T, junk);
289 LargeStrainMasterMaterial :: initializeFrom(ir);
#define REGISTER_Material(class)
Domain * giveDomain() const
virtual Interface * giveInterface(InterfaceType t)
Domain * domain
Link to domain object, useful for communicating with other FEM components.
void beSymVectorFormOfStrain(const FloatMatrix &aMatrix)
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void resize(Index rows, Index cols)
void beProductTOf(const FloatMatrix &a, const FloatMatrix &b)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
bool jaco_(FloatArray &eval, FloatMatrix &v, int nf)
void zero()
Zeroes all coefficient of receiver.
void beMatrixForm(const FloatArray &aArray)
double at(std::size_t i, std::size_t j) const
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
GradientDamageMaterialExtensionInterface(Domain *d)
virtual void giveRealStressVectorGradientDamage(FloatArray &answer1, double &answer2, GaussPoint *gp, const FloatArray &totalStrain, double nonlocalDamageDrivningVariable, TimeStep *tStep)
gradient - based giveRealStressVector
virtual void giveGradientDamageStiffnessMatrix_du(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Left lower block.
virtual void giveGradientDamageStiffnessMatrix_ud(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)=0
Right upper block.
void give3dKappaMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Interface * giveInterface(InterfaceType t) override
void give3dGprime(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
void setPmatrix(const FloatMatrixF< 6, 6 > &values)
const FloatMatrixF< 6, 6 > & givePmatrix() const
void setTLmatrix(const FloatMatrixF< 6, 6 > &values)
double m
Specifies the strain tensor.
int slaveMat
'slave' material model number.
LargeStrainMasterMaterial(int n, Domain *d)
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual void initTempStatus(GaussPoint *gp) const
void letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
#define OOFEM_WARNING(...)
@ GradientDamageMaterialExtensionInterfaceType