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