From 7922e8b50587e21e2794782085689362b799c421 Mon Sep 17 00:00:00 2001 From: Van Dung Nguyen <vdg.nguyen@gmail.com> Date: Tue, 7 Nov 2017 14:36:34 +0100 Subject: [PATCH] time step --- .../nlsolver/nonLinearMechSolver.cpp | 15 ++--- .../nlsolver/nonLinearMechSolver.h | 7 ++- ...LocalDamageHyperelasticDG3DMaterialLaw.cpp | 9 +-- dG3D/src/dG3DMaterialLaw.cpp | 18 ++---- dG3D/src/dG3DMaterialLaw.h | 63 +++++++------------ dG3D/src/dG3DMultiscaleMaterialLaw.cpp | 5 +- dgshell/src/dgNonLinearShellMaterial.h | 3 +- 7 files changed, 44 insertions(+), 76 deletions(-) diff --git a/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp b/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp index 858844df3..80cabc8e2 100644 --- a/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp +++ b/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp @@ -131,7 +131,7 @@ _damageVolumeCenter(0.,0.,0.),_homogenizedCrackSurface(0.), _microBCOld(NULL),_microFailureBC(NULL), _failureBCIsSwitched(false), _pathFollowingSwitchCriterion(0.), _failureBasedOnPreviousState(true), - _currentTime(0.),_timeStep(1.) + _macroTime(0.),_macroTimeStep(1.),_macroStep(0.) { // check parallelization of dofManager #if defined(HAVE_MPI) @@ -2013,9 +2013,9 @@ void nonLinearMechSolver::setTimeForLaw(const double t,const double dt) for(std::map<int,materialLaw*>::iterator it=maplaw.begin(); it!=maplaw.end();++it) { if (_microFlag){ - double macroTime = _currentTime- (1-t)*_timeStep; - double tstep = dt*_timeStep; // because - it->second->setTime(macroTime,tstep); + double mtime = _macroTime- (1-t)*_macroTimeStep; + double tstep = dt*_macroTimeStep; // because + it->second->setTime(mtime,tstep); } else{ it->second->setTime(t,dt); @@ -11064,9 +11064,10 @@ double nonLinearMechSolver::solveMicroSolverForwardEuler(){ }; }; -void nonLinearMechSolver::setTime(const double ctime,const double dtime){ - _timeStep = dtime; - _currentTime = ctime; +void nonLinearMechSolver::setTime(const double ctime,const double dtime, const int curstep){ + _macroTimeStep = dtime; + _macroTime = ctime; + _macroStep = curstep; } double nonLinearMechSolver::microSolveStaticLinear(){ diff --git a/NonLinearSolver/nlsolver/nonLinearMechSolver.h b/NonLinearSolver/nlsolver/nonLinearMechSolver.h index f2ad270b2..5ff81fb39 100644 --- a/NonLinearSolver/nlsolver/nonLinearMechSolver.h +++ b/NonLinearSolver/nlsolver/nonLinearMechSolver.h @@ -708,8 +708,9 @@ class nonLinearMechSolver protected: #ifndef SWIG // time and time step - double _timeStep; // for law which works on increment. (Use only in so no getTimeStep function) - double _currentTime; // To save results vs time + double _macroTimeStep; // for law which works on increment. (Use only in so no getTimeStep function) + double _macroTime; // To save results vs time + int _macroStep; // current macroscopic step //for micro flag SYSTEM_TYPE _systemType; @@ -862,7 +863,7 @@ class nonLinearMechSolver #endif // SWIG public: #ifndef SWIG - void setTime(const double ctime,const double dtime); + void setTime(const double ctime,const double dtime, const int curstep); // RVE analysis newton raphson double microSolveStaticLinear(); double microSolveSNL(); diff --git a/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.cpp b/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.cpp index 6bb5446d0..de57e1bb3 100644 --- a/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.cpp +++ b/dG3D/src/NonLocalDamageHyperelasticDG3DMaterialLaw.cpp @@ -109,8 +109,7 @@ NonLocalDamagePowerYieldHyperDG3DMaterialLaw::NonLocalDamagePowerYieldHyperDG3DM }; void NonLocalDamagePowerYieldHyperDG3DMaterialLaw::setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _nldPowerYieldHyperlaw->setTime(t,dtime); } @@ -313,8 +312,7 @@ LocalDamagePowerYieldHyperDG3DMaterialLawWithFailure::LocalDamagePowerYieldHyper }; void LocalDamagePowerYieldHyperDG3DMaterialLawWithFailure::setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _localPowerYieldHyperlaw->setTime(t,dtime); } @@ -513,8 +511,7 @@ NonLocalDamagePowerYieldHyperDG3DMaterialLawWithFailure::NonLocalDamagePowerYiel }; void NonLocalDamagePowerYieldHyperDG3DMaterialLawWithFailure::setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _nldPowerYieldHyperlaw->setTime(t,dtime); } diff --git a/dG3D/src/dG3DMaterialLaw.cpp b/dG3D/src/dG3DMaterialLaw.cpp index 632f8ca84..fce62a2ae 100644 --- a/dG3D/src/dG3DMaterialLaw.cpp +++ b/dG3D/src/dG3DMaterialLaw.cpp @@ -892,8 +892,7 @@ NonLocalDamageDG3DMaterialLaw::NonLocalDamageDG3DMaterialLaw(const NonLocalDamag void NonLocalDamageDG3DMaterialLaw::setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _nldlaw->setTime(t,dtime); return; } @@ -1082,8 +1081,7 @@ dG3DMaterialLaw(src) }; void LocalDamageHyperelasticDG3DMaterialLaw::setTime(const double t,const double dtime) { - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _nlLaw->setTime(t,dtime); } @@ -1171,8 +1169,7 @@ dG3DMaterialLaw(src) }; void NonLocalDamageHyperelasticDG3DMaterialLaw::setTime(const double t,const double dtime) { - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _nlLaw->setTime(t,dtime); } @@ -1271,8 +1268,7 @@ NonLocalDamageIsotropicElasticityDG3DMaterialLaw::NonLocalDamageIsotropicElastic void NonLocalDamageIsotropicElasticityDG3DMaterialLaw::setTime(const double t,const double dtime) { - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _nldIsotropicElasticitylaw->setTime(t,dtime); } @@ -1386,8 +1382,7 @@ LocalDamageJ2HyperDG3DMaterialLaw::LocalDamageJ2HyperDG3DMaterialLaw(const Local void LocalDamageJ2HyperDG3DMaterialLaw::setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _nldJ2Hyperlaw->setTime(t,dtime); } @@ -1491,8 +1486,7 @@ void NonLocalDamageJ2HyperDG3DMaterialLaw::setStrainOrder(const int order){ void NonLocalDamageJ2HyperDG3DMaterialLaw::setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _nldJ2Hyperlaw->setTime(t,dtime); } diff --git a/dG3D/src/dG3DMaterialLaw.h b/dG3D/src/dG3DMaterialLaw.h index 0558fb639..663f96b8c 100644 --- a/dG3D/src/dG3DMaterialLaw.h +++ b/dG3D/src/dG3DMaterialLaw.h @@ -146,8 +146,7 @@ class J2SmallStrainDG3DMaterialLaw : public dG3DMaterialLaw } // set the time of _j2law virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _j2law.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _j2law.getType();} @@ -194,8 +193,7 @@ class J2LinearDG3DMaterialLaw : public dG3DMaterialLaw } // set the time of _j2law virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _j2law.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _j2law.getType();} @@ -237,8 +235,7 @@ class HyperViscoElasticDG3DMaterialLaw : public dG3DMaterialLaw{ virtual ~HyperViscoElasticDG3DMaterialLaw(){} // set the time of _j2law virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _viscoLaw.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _viscoLaw.getType();} @@ -288,8 +285,7 @@ class HyperViscoElastoPlasticPowerYieldDG3DMaterialLaw : public dG3DMaterialLaw HyperViscoElastoPlasticPowerYieldDG3DMaterialLaw(const HyperViscoElastoPlasticPowerYieldDG3DMaterialLaw& src); virtual ~HyperViscoElastoPlasticPowerYieldDG3DMaterialLaw(){}; virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _viscoLaw.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _viscoLaw.getType();} @@ -331,8 +327,7 @@ class ViscoelasticDG3DMaterialLaw : public dG3DMaterialLaw } virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _Vislaw.setTime(t,dtime); } @@ -387,8 +382,7 @@ class EOSDG3DMaterialLaw : public dG3DMaterialLaw } virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); maplaw.begin()->second->setTime(t,dtime); _EOSlaw.setTime(t,dtime); } @@ -427,8 +421,7 @@ class VUMATinterfaceDG3DMaterialLaw : public dG3DMaterialLaw VUMATinterfaceDG3DMaterialLaw(const VUMATinterfaceDG3DMaterialLaw &source); // set the time of _vumatlaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _vumatlaw.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _vumatlaw.getType();} @@ -462,8 +455,7 @@ class TransverseIsotropicDG3DMaterialLaw : public dG3DMaterialLaw virtual ~TransverseIsotropicDG3DMaterialLaw(){} // set the time of _tilaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _tilaw.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _tilaw.getType();} @@ -503,8 +495,7 @@ class TransverseIsoCurvatureDG3DMaterialLaw : public dG3DMaterialLaw virtual ~TransverseIsoCurvatureDG3DMaterialLaw(){} // set the time of _tilaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _tilaw.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _tilaw.getType();} @@ -598,8 +589,7 @@ class TransverseIsoYarnBDG3DMaterialLaw : public dG3DMaterialLaw // set the time of _tilaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _tilaw.setTime(t,dtime); } @@ -657,8 +647,7 @@ class AnisotropicDG3DMaterialLaw : public dG3DMaterialLaw virtual ~AnisotropicDG3DMaterialLaw(){} // set the time of _tilaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _tilaw.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _tilaw.getType();} @@ -692,8 +681,7 @@ class AnisotropicStochDG3DMaterialLaw : public dG3DMaterialLaw virtual ~AnisotropicStochDG3DMaterialLaw(){} // set the time of _tilaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _tilaw.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _tilaw.getType();} @@ -994,8 +982,7 @@ class NonLocalDamageGursonDG3DMaterialLaw : public dG3DMaterialLaw NonLocalDamageGursonDG3DMaterialLaw(const NonLocalDamageGursonDG3DMaterialLaw &source); // set the time of _nldlaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _nldGursonlaw->setTime(t,dtime); } virtual materialLaw::matname getType() const {return _nldGursonlaw->getType();} @@ -1040,8 +1027,7 @@ class LinearThermoMechanicsDG3DMaterialLaw : public dG3DMaterialLaw // public ma LinearThermoMechanicsDG3DMaterialLaw(const LinearThermoMechanicsDG3DMaterialLaw &source); // set the time of _nldlaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _lawLinearTM->setTime(t,dtime); } virtual materialLaw::matname getType() const {return _lawLinearTM->getType();} @@ -1086,8 +1072,7 @@ class J2ThermoMechanicsDG3DMaterialLaw : public dG3DMaterialLaw } // set the time of _j2law virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _j2law.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _j2law.getType();} @@ -1155,8 +1140,7 @@ class FullJ2ThermoMechanicsDG3DMaterialLaw : public dG3DMaterialLaw{ virtual double getExtraDofStoredEnergyPerUnitField(double T) const; // set the time of _nldlaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _j2FullThermo.setTime(t,dtime); } virtual materialLaw* clone() const{ return new FullJ2ThermoMechanicsDG3DMaterialLaw(*this);}; @@ -1195,8 +1179,7 @@ class mlawAnIsotropicTherMechDG3DMaterialLaw :public dG3DMaterialLaw mlawAnIsotropicTherMechDG3DMaterialLaw(const mlawAnIsotropicTherMechDG3DMaterialLaw &source); // set the time of _nldlaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _lawAnTM->setTime(t,dtime); } virtual materialLaw::matname getType() const {return _lawAnTM->getType();} @@ -1249,8 +1232,7 @@ class SMPDG3DMaterialLaw :public dG3DMaterialLaw // ,public mlawSMP SMPDG3DMaterialLaw(const SMPDG3DMaterialLaw &source); // set the time of _nldlaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _lawTMSMP->setTime(t,dtime); } virtual materialLaw::matname getType() const {return _lawTMSMP->getType();} @@ -1296,8 +1278,7 @@ class LinearElecTherMechDG3DMaterialLaw : public dG3DMaterialLaw // public mater LinearElecTherMechDG3DMaterialLaw(const LinearElecTherMechDG3DMaterialLaw &source); // set the time of _nldlaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _lawLinearETM->setTime(t,dtime); } virtual materialLaw::matname getType() const {return _lawLinearETM->getType();} @@ -1352,8 +1333,7 @@ class mlawAnIsotropicElecTherMechDG3DMaterialLaw :public dG3DMaterialLaw } // set the time of _nldlaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _lawETM->setTime(t,dtime); } virtual materialLaw::matname getType() const {return _lawETM->getType();} @@ -1413,8 +1393,7 @@ class mlawElecSMPDG3DMaterialLaw :public dG3DMaterialLaw mlawElecSMPDG3DMaterialLaw(const mlawElecSMPDG3DMaterialLaw &source); // set the time of _nldlaw virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dG3DMaterialLaw::setTime(t,dtime); _lawETMSMP->setTime(t,dtime); } virtual materialLaw::matname getType() const {return _lawETMSMP->getType();} diff --git a/dG3D/src/dG3DMultiscaleMaterialLaw.cpp b/dG3D/src/dG3DMultiscaleMaterialLaw.cpp index 6ca578a91..968dcfd1a 100644 --- a/dG3D/src/dG3DMultiscaleMaterialLaw.cpp +++ b/dG3D/src/dG3DMultiscaleMaterialLaw.cpp @@ -205,9 +205,7 @@ void dG3DMultiscaleMaterialLaw::stress(IPVariable* ipv, const IPVariable* ipvpre solver->getMicroBC()->setGradientOfDeformationGradient(G); } } - - solver->setTime(_currentTime,_timeStep); - // set tangent averaging flag + // set tangent averaging flag solver->tangentAveragingFlag(stiff); // solve micro problem double time = solver->microSolve(); @@ -1651,7 +1649,6 @@ void MultiscaleThermoMechanicsDG3DMaterialLaw::stress(IPVariable* ipv, const IPV solver->getMicroBC()->setConstitutiveExtraDofDiffusionGradient(0,gradT); solver->getMicroBC()->setConstitutiveExtraDofDiffusionValue(0,T); solver->tangentAveragingFlag(stiff); - solver->setTime(_currentTime,_timeStep); // solve microscopic problem double time =solver->microSolve(); diff --git a/dgshell/src/dgNonLinearShellMaterial.h b/dgshell/src/dgNonLinearShellMaterial.h index 1c5c8028d..1cf48a704 100644 --- a/dgshell/src/dgNonLinearShellMaterial.h +++ b/dgshell/src/dgNonLinearShellMaterial.h @@ -101,8 +101,7 @@ class J2linearShellLaw : public dgNonLinearShellMaterialLaw virtual ~J2linearShellLaw(){} // set the time of _j2law virtual void setTime(const double t,const double dtime){ - this->_timeStep = dtime; - this->_currentTime = t; + dgNonLinearShellMaterialLaw::setTime(t,dtime); _j2law.setTime(t,dtime); } virtual materialLaw::matname getType() const {return _j2law.getType();} -- GitLab