54 StructuralMaterial :: initializeFrom(ir);
65 StructuralMaterial :: giveInputRecord(ir);
66 D.giveInputRecord(ir);
72std::unique_ptr<MaterialStatus>
75 return std::make_unique<TutorialMaterialStatus>(gp);
86 auto strain = totalStrain - thermalStrain;
88 auto trialElastStrain = strain - status->givePlasticStrain();
91 const auto &elasticStiffness =
D.giveTangent();
92 auto trialStress =
dot(elasticStiffness, trialElastStrain);
96 auto devTrialStress = tmp.first;
97 auto meanTrialStress = tmp.second;
100 double effectiveTrialStress = sqrt(3 * J2);
103 double k = status->giveK();
104 double phiTrial = effectiveTrialStress - ( this->
sig0 +
H * k );
107 if ( phiTrial < 0.0 ) {
108 stress = trialStress;
110 status->letTempPlasticStrainBe(status->givePlasticStrain());
112 double G =
D.giveShearModulus();
113 double mu = phiTrial / ( 3.0 * G +
H );
115 auto devStress = ( 1.0 - 3.0*G*mu/effectiveTrialStress) * devTrialStress;
119 auto plasticStrain = status->givePlasticStrain();
121 plasticStrain += (mu * 3. / (2. * effectiveTrialStress)) * dPlStrain;
122 status->letTempPlasticStrainBe(plasticStrain);
126 status->letTempStrainVectorBe(totalStrain);
127 status->letTempStressVectorBe(stress);
128 status->letTempKBe(k);
129 status->letTempDevTrialStressBe(devTrialStress);
135TutorialMaterial :: give3dMaterialStiffnessMatrix(MatResponseMode mode,
GaussPoint *gp,
TimeStep *tStep)
const
141 double effectiveTrialStress = sqrt(3 * J2);
144 double k = status->giveK();
145 double phiTrial = effectiveTrialStress - ( this->
sig0 +
H * k );
147 const auto &elasticStiffness =
D.giveTangent();
149 if ( phiTrial < 0.0 ) {
150 return elasticStiffness;
152 double G =
D.giveShearModulus();
155 double h = 3.0 * G +
H;
156 double mu = phiTrial / h;
157 auto nu = ( 3.0/2.0 / effectiveTrialStress ) * devTrialStress;
159 auto correction =
dyad(nu, nu) * (2.0 * G / h * ( this->
sig0 +
H * k ));
160 correction += (mu * 3.0 * G) *
I_dev6;
161 correction *= 2.0 * G / effectiveTrialStress;
162 return elasticStiffness - correction;
170 return D.giveAlpha();
178 if ( type == IST_PlasticStrainTensor ) {
182 return StructuralMaterial :: giveIPValue(answer, gp, type, tStep);
190TutorialMaterialStatus :: TutorialMaterialStatus(
GaussPoint * g) :
200TutorialMaterialStatus :: initTempStatus()
218TutorialMaterialStatus :: updateYourself(
TimeStep *tStep)
223 StructuralMaterialStatus :: updateYourself(tStep);
#define REGISTER_Material(class)
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
FloatArray tempPVector
Temporary first Piola-Kirchhoff stress vector (to find balanced state).
FloatArray tempFVector
Temporary deformation gradient in reduced form (to find balanced state).
StructuralMaterialStatus(GaussPoint *g)
Constructor. Creates new StructuralMaterialStatus with IntegrationPoint g.
FloatArray tempStrainVector
Temporary strain vector in reduced form (to find balanced state).
FloatArray tempStressVector
Temporary stress vector in reduced form (increments are used mainly in nonlinear analysis).
FloatArray stressVector
Equilibrated stress vector in reduced form.
FloatArray PVector
Equilibrated first Piola-Kirchhoff stress vector.
FloatArray strainVector
Equilibrated strain vector in reduced form.
FloatArray FVector
Equilibrated deformation gradient in reduced form.
static FloatArrayF< 6 > computeDeviatoricVolumetricSum(const FloatArrayF< 6 > &dev, double mean)
static FloatArrayF< 6 > applyDeviatoricElasticCompliance(const FloatArrayF< 6 > &stress, double EModulus, double nu)
StructuralMaterial(int n, Domain *d)
static double computeSecondStressInvariant(const FloatArrayF< 6 > &s)
static std::pair< FloatArrayF< 6 >, double > computeDeviatoricVolumetricSplit(const FloatArrayF< 6 > &s)
FloatArrayF< 6 > computeStressIndependentStrainVector_3d(GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const
FloatArrayF< 6 > tempDevTrialStress
FloatArrayF< 6 > plasticStrain
Last equilibriated plastic strain (end of last time step).
const FloatArrayF< 6 > & givePlasticStrain() const
const FloatArrayF< 6 > & giveTempDevTrialStress() const
FloatArrayF< 6 > tempPlasticStrain
Temporary plastic strain (the given iteration).
double H
Hardening modulus.
IsotropicLinearElasticMaterial D
double sig0
Initial (uniaxial) yield stress.
FloatMatrixF< N, M > dyad(const FloatArrayF< N > &a, const FloatArrayF< M > &b)
Computes the dyadic product .
const FloatMatrixF< 6, 6 > I_dev6
I_dev matrix in Voigt (stress) form.
double dot(const FloatArray &x, const FloatArray &y)
FloatArrayF< N > zeros()
For more readable code.
#define _IFT_TutorialMaterial_hardeningmoduli
#define _IFT_TutorialMaterial_yieldstress