51TrabBoneMaterial :: hasMaterialModeCapability(MaterialMode mode)
const
53 return mode == _1dMat;
65TrabBoneMaterial :: give1dStressStiffMtrx(MatResponseMode mode,
GaussPoint *gp,
TimeStep *tStep)
const
69 if ( mode == ElasticStiffness ) {
71 }
else if ( mode == SecantStiffness ) {
72 double dam = status->giveTempDam();
73 double matconstc = status->giveMatConstC();
75 return {( 1.0 - dam ) *
E0 + matconstc};
77 double epsnew = status->giveTempStrainVector().at(1);
78 auto &epsnewArray = status->giveTempStrainVector();
79 double epsp = status->giveTempPlasStrainVector().at(1);
80 double depsp = status->giveTempIncPlasStrainVector().at(1);
81 double alpha = status->giveTempAlpha();
82 double dam = status->giveTempDam();
83 double matconstc = status->giveMatConstC();
89 -
E0 *
E0 * ( epsnew - epsp ) / (
E0 +
Eil +
Ek ) *
adam * exp(-
adam * alpha) * depsp / fabs(depsp) + matconstc};
91 return {( 1.0 - dam ) *
E0 + matconstc};
102 double epsnew = totalStrain.
at(1);
103 double epsold = status->giveStrainVector().at(1);
104 double epsp = status->givePlasStrainVector().at(1);
105 double alpha = status->giveAlpha();
106 double sigp =
E0 * epsnew - (
E0 +
Ek ) * epsp;
116 if ( sigp / fabs(sigp) * sigp > sigY +
Eil * alpha +
Eie * ( 1 - exp(-
kie * alpha) ) ) {
117 depsp = epsnew - epsold;
118 double gNewton = sigp / fabs(sigp) * (
E0 * epsnew - (
E0 +
Ek ) * ( epsp + depsp ) ) - ( sigY +
Eil * ( alpha +
119 sigp / fabs(sigp) * depsp ) +
Eie * ( 1 - exp( -
kie * ( alpha + sigp / fabs(sigp) * depsp ) ) ) );
120 while ( fabs(gNewton) > 10.e-7 ) {
121 gNewton = sigp / fabs(sigp) * (
E0 * epsnew - (
E0 +
Ek ) * ( epsp + depsp ) ) - ( sigY +
Eil * ( alpha +
122 sigp / fabs(sigp) * depsp ) +
Eie * ( 1 - exp( -
kie * ( alpha + sigp / fabs(sigp) * depsp ) ) ) );
123 double dgNewton = -sigp / fabs(sigp) * ( (
E0 +
Ek ) +
Eil +
124 Eie *
kie * exp( -
kie * ( alpha + sigp / fabs(sigp) * depsp ) ) );
125 depsp += -gNewton / dgNewton;
133 alpha += fabs(depsp);
135 status->setTempEpsp(epsp);
136 status->setTempDepsp(depsp);
137 status->setTempAlpha(alpha);
145 double epsnew = totalStrain.
at(1);
146 double sigc, matconstc;
147 if ( epsnew >
EpsC ) {
152 matconstc =
Cc + 7 *
Cc2 * ( epsnew -
EpsC ) * ( epsnew -
EpsC ) * ( epsnew -
EpsC ) * ( epsnew -
EpsC ) * ( epsnew -
EpsC ) * ( epsnew -
EpsC );
155 status->setSigC(sigc);
156 status->setMatConstC(matconstc);
161TrabBoneMaterial :: computeDamageParam(
double alpha,
GaussPoint *gp)
const
165 dam = 1.0 - exp(-
adam * alpha);
199 double epsnew = totalStrain.
at(1);
201 double epsp = status->giveTempPlasStrainVector().at(1);
202 double sigc = status->giveSigC();
203 double sig = ( 1 - dam ) *
E0 * ( epsnew - epsp ) + sigc;
206 status->setTempDam(dam);
207 status->letTempStrainVectorBe(totalStrain);
208 status->letTempStressVectorBe(answer);
217 StructuralMaterial :: initializeFrom(ir);
243TrabBoneMaterialStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
245 StructuralMaterialStatus :: printOutputAt(file, tStep);
246 fprintf(file,
"status { ");
247 fprintf(file,
"plastrains %f, alpha %f, dam %f, Slope %f ", this->
tempEpsp.at(1),
248 this->tempAlpha, this->tempDam, this->slope);
249 fprintf(file,
"}\n");
254TrabBoneMaterialStatus :: initTempStatus()
256 StructuralMaterialStatus :: initTempStatus();
264TrabBoneMaterialStatus :: updateYourself(
TimeStep *tStep)
266 StructuralMaterialStatus :: updateYourself(tStep);
277 StructuralMaterialStatus :: saveContext(stream, mode);
289 StructuralMaterialStatus :: restoreContext(stream, mode);
297std::unique_ptr<MaterialStatus> TrabBoneMaterial :: CreateStatus(
GaussPoint *gp)
const
299 return std::make_unique<TrabBoneMaterialStatus>(gp);
#define REGISTER_Material(class)
double & at(std::size_t i)
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual void initTempStatus(GaussPoint *gp) const
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
StructuralMaterial(int n, Domain *d)
double giveTempAlpha() const
FloatArrayF< 1 > tempEpsp
double computeDamageParam(double alpha, GaussPoint *gp) const
void performPlasticityReturn(GaussPoint *gp, const FloatArray &totalStrain) const
void computeDensification(GaussPoint *gp, const FloatArray &totalStrain) const
double computeDamage(GaussPoint *gp, TimeStep *tStep) const
virtual double computeCumPlastStrain(GaussPoint *gp, TimeStep *tStep) const
#define _IFT_TrabBoneMaterial_E0
#define _IFT_TrabBoneMaterial_Eil
#define _IFT_TrabBoneMaterial_Cc
#define _IFT_TrabBoneMaterial_Eie
#define _IFT_TrabBoneMaterial_Cc2
#define _IFT_TrabBoneMaterial_adam
#define _IFT_TrabBoneMaterial_SigYn
#define _IFT_TrabBoneMaterial_SigYp
#define _IFT_TrabBoneMaterial_kie
#define _IFT_TrabBoneMaterial_Ek
#define _IFT_TrabBoneMaterial_EpsC