59LatticeSlip :: hasMaterialModeCapability(MaterialMode mode)
const
61 return ( mode == _3dLattice );
68 LatticeLinearElastic :: initializeFrom(ir);
83std::unique_ptr<MaterialStatus>
86 return std::make_unique<LatticeSlipStatus>(gp);
96 auto tempPlasticStrain = status->givePlasticLatticeStrain();
103 stress.
at(1) = ( totalStrain.
at(1) - tempPlasticStrain.at(1) ) * stiffnessMatrix.at(1, 1);
104 double f = fabs(stress.
at(1) ) -
tauZero;
108 tempPlasticStrain.at(1) = tempPlasticStrain.at(1) +
sgn(stress.
at(1) ) * f / stiffnessMatrix.at(1, 1);
109 stress.
at(1) = ( totalStrain.
at(1) - tempPlasticStrain.at(1) ) * stiffnessMatrix.at(1, 1);
111 status->setTempCrackFlag(1);
115 for (
int i = 2; i <= 6; i++ ) {
116 stress.
at(i) = stiffnessMatrix.at(i, i) * totalStrain.
at(i);
120 status->letTempPlasticLatticeStrainBe(tempPlasticStrain);
121 status->letTempLatticeStrainBe(totalStrain);
122 status->letTempLatticeStressBe(stress);
124 double tempDissipation = status->giveDissipation();
125 double tempDeltaDissipation;
129 tempDissipation += tempDeltaDissipation;
132 status->setTempDissipation(tempDissipation);
133 status->setTempDeltaDissipation(tempDeltaDissipation);
151LatticeSlipStatus :: initTempStatus()
153 LatticeMaterialStatus :: initTempStatus();
173 alpha, 0., 0., 0., 0., 0.
178LatticeSlipStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
180 LatticeMaterialStatus :: printOutputAt(file, tStep);
181 fprintf(file,
"plasticStrain %.8e, dissipation %f, deltaDissipation %f, crackFlag %d\n", this->
plasticLatticeStrain.at(1), this->dissipation, this->deltaDissipation, this->crackFlag);
191 const auto &tempPlasticStrain = status->giveTempPlasticLatticeStrain();
192 const auto &tempStress = status->giveTempLatticeStress();
194 return tempStress.
at(1) * ( tempPlasticStrain.at(1) - plasticStrain.at(1) );
207 LatticeMaterialStatus :: saveContext(stream, mode);
220 LatticeMaterialStatus :: restoreContext(stream, mode);
229LatticeSlipStatus :: updateYourself(
TimeStep *atTime)
231 LatticeMaterialStatus :: updateYourself(atTime);
245 if ( type == IST_CrackStatuses ) {
248 answer.
at(1) = status->giveCrackFlag();
250 }
else if ( type == IST_DissWork ) {
253 answer.
at(1) = status->giveDissipation();
255 }
else if ( type == IST_DeltaDissWork ) {
258 answer.
at(1) = status->giveDeltaDissipation();
260 }
else if ( type == IST_CharacteristicLength ) {
266 return LatticeLinearElastic :: giveIPValue(answer, gp, type, atTime);
double length(const Vector &a)
#define REGISTER_Material(class)
double & at(std::size_t i)
void zero()
Zeroes all coefficients of receiver.
Element * giveElement()
Returns corresponding element to receiver.
LatticeLinearElastic(int n, Domain *d)
double give(int aProperty, GaussPoint *gp) const override
MaterialStatus * giveStatus(GaussPoint *gp) const override
FloatMatrixF< 6, 6 > give3dLatticeStiffnessMatrix(MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) const override
FloatArrayF< 6 > plasticLatticeStrain
Equilibriated plastic lattice strain.
FloatArrayF< 6 > tempPlasticLatticeStrain
Non-equilibrated plastic lattice strain.
LatticeMaterialStatus(GaussPoint *g)
const FloatArrayF< 6 > & givePlasticLatticeStrain() const
Returns plastic lattice strain.
void initTempStatus() override
double computeDeltaDissipation(GaussPoint *gp, TimeStep *atTime) const
double alphaTwo
Ratio of torsion and normal modulus.
double tauZero
Strength for slip component.
double alphaOne
Ratio of shear and normal modulus.
virtual double giveLength()
#define _IFT_LatticeSlip_a2
#define _IFT_LatticeSlip_a1
#define _IFT_LatticeSlip_t0
double sgn(double i)
Returns the signum of given value (if value is < 0 returns -1, otherwise returns 1).