55 LatticeDamage :: initializeFrom(ir);
62 double timeFactor = 0.;
65 double E28 = 1. / rheoMat->
computeCreepFunction(timeFactor * 28.01, timeFactor * 28., NULL, NULL);
71std::unique_ptr<MaterialStatus>
72LatticeDamageViscoelastic :: CreateStatus(
GaussPoint *gp)
const
74 return std::make_unique<LatticeDamageViscoelasticStatus>(gp);
89 GaussPoint *rChGP = status->giveSlaveGaussPointVisco();
111 auto elasticStiffnessMatrix = LatticeLinearElastic :: give3dLatticeStiffnessMatrix(ElasticStiffness, gp, tStep);
114 if ( itercount > 100 ) {
115 printf(
"tolerance = %e and itercount = %d\n",
tolerance, itercount);
120 reducedStrain = totalStrain;
126 FloatArrayF< 6 >tempDamageLatticeStrain = status->giveTempDamageLatticeStrain();
132 for (
int i = 1; i <= 6; i++ ) {
133 quasiReducedStrain.
at(i) = tempStress.
at(i) / elasticStiffnessMatrix.at(i, i);
136 quasiReducedStrain += tempDamageLatticeStrain;
138 LatticeDamage :: performDamageEvaluation(gp, quasiReducedStrain);
139 double tempDamage = status->giveTempDamage();
141 for (
int i = 1; i <= 6; i++ ) {
142 stress.
at(i) = elasticStiffnessMatrix.at(i, i) * quasiReducedStrain.
at(i) * ( 1. - tempDamage );
150 status->letTempLatticeStrainBe(totalStrain);
151 status->letTempLatticeStressBe(tempStress);
152 status->letTempReducedLatticeStrainBe(quasiReducedStrain);
160LatticeDamageViscoelastic :: give3dLatticeStiffnessMatrix(MatResponseMode rmode,
175 auto answer = LatticeLinearElastic :: give3dLatticeStiffnessMatrix(ElasticStiffness, gp, tStep);
183LatticeDamageViscoelastic :: give2dLatticeStiffnessMatrix(MatResponseMode rmode,
198 auto answer = LatticeLinearElastic :: give2dLatticeStiffnessMatrix(ElasticStiffness, gp, tStep);
213 if ( ( type == IST_DryingShrinkageTensor ) ||
214 ( type == IST_AutogenousShrinkageTensor ) ||
215 ( type == IST_TotalShrinkageTensor ) ||
216 ( type == IST_CreepStrainTensor ) ||
217 ( type == IST_DryingShrinkageTensor ) ||
218 ( type == IST_ThermalStrainTensor ) ) {
225 return LatticeDamage :: giveIPValue(answer, gp, type, tStep);
229int LatticeDamageViscoelastic :: checkConsistency()
234 OOFEM_ERROR(
"a1 must be set to the same value in both master and viscoelastic slave materials");
238 OOFEM_ERROR(
"a2 must be set to the same value in both master and viscoelastic slave materials");
243 OOFEM_ERROR(
"tAlpha must be set to 0. in slave viscoelastic material");
246 return FEMComponent :: checkConsistency();
250LatticeDamageViscoelasticStatus :: LatticeDamageViscoelasticStatus(
GaussPoint *g) :
256LatticeDamageViscoelasticStatus :: initTempStatus()
258 LatticeDamageStatus :: initTempStatus();
268LatticeDamageViscoelasticStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
270 LatticeDamageStatus :: printOutputAt(file, tStep);
271 fprintf(file,
"\nViscoelastic material:");
280LatticeDamageViscoelasticStatus :: updateYourself(
TimeStep *tStep)
284 LatticeDamageStatus :: updateYourself(tStep);
291 LatticeDamageStatus :: saveContext(stream, mode);
300 LatticeDamageStatus :: restoreContext(stream, mode);
#define REGISTER_Material(class)
Domain * domain
Link to domain object, useful for communicating with other FEM components.
double & at(std::size_t i)
Index giveSize() const
Returns the size of receiver.
GaussPoint * gp
Associated integration point.
LatticeDamageStatus(GaussPoint *g)
GaussPoint * giveSlaveGaussPointVisco() const
std ::unique_ptr< GaussPoint > slaveGpVisco
int viscoMat
'slave' (= viscoelastic) material model number.
LatticeDamage(int n, Domain *d)
double give(int aProperty, GaussPoint *gp) const override
double e0Mean
max effective strain at peak
double eNormalMean
Normal modulus.
MaterialStatus * giveStatus(GaussPoint *gp) const override
virtual void initTempStatus()
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual double give(int aProperty, GaussPoint *gp) const
void initTempStatus() override
virtual double giveEModulus(GaussPoint *gp, TimeStep *tStep) const =0
Evaluation of the incremental modulus.
double giveAlphaTwo() const
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
virtual double computeCreepFunction(double t, double t_prime, GaussPoint *gp, TimeStep *tStep) const =0
Evaluation of the creep compliance function at time t when loading is acting from time t_prime.
double giveAlphaOne() const
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
virtual FloatArray computeStressIndependentStrainVector(GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const
#define _IFT_LatticeDamageViscoelastic_timeFactor
#define _IFT_LatticeDamageViscoelastic_viscoMat
double norm(const FloatArray &x)