From d1aa8eb17fe20dd80de64cad0a2bed70e2232726 Mon Sep 17 00:00:00 2001 From: cyrielle <l.noels@ulg.ac.be> Date: Tue, 4 Mar 2025 12:54:52 +0100 Subject: [PATCH 1/3] add energy --- dG3D/src/nonLocalDamageDG3DIPVariable.cpp | 5 +- dG3D/src/nonLocalDamageDG3DIPVariable.h | 26 +- dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp | 462 ++++++++++++++++++++- 3 files changed, 465 insertions(+), 28 deletions(-) diff --git a/dG3D/src/nonLocalDamageDG3DIPVariable.cpp b/dG3D/src/nonLocalDamageDG3DIPVariable.cpp index 5e559ed6b..68f1d2f51 100644 --- a/dG3D/src/nonLocalDamageDG3DIPVariable.cpp +++ b/dG3D/src/nonLocalDamageDG3DIPVariable.cpp @@ -286,6 +286,7 @@ nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable::nonLocalDamageTorchANNDG3DIP { localVar.resize(numNonlocal,0.); + _DirrEnergyDVar_nl.resize(numNonlocal,0.); _ipMeca = NULL; #if defined(HAVE_TORCH) _internalVars_stress = _initial_h*torch::ones({1, 1, _n_stress}); @@ -305,7 +306,7 @@ nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable::nonLocalDamageTorchANNDG3DIP _D(source._D), _nlD36comp(source._nlD36comp), _D36comp(source._D36comp), _DTensor43(source._DTensor43), _nlDTensor43(source._nlDTensor43), localVar(source.localVar), _internalVars_stress(source._internalVars_stress), _internalVars_elTang(source._internalVars_elTang), _internalVars_NonDamTang(source._internalVars_NonDamTang), _kinematicVariables(source._kinematicVariables),_irreversibleEnergy(source._irreversibleEnergy), _DirrEnergyDF(source._DirrEnergyDF),_DirrEnergyDVar_nl0(source._DirrEnergyDVar_nl0), _DirrEnergyDVar_nl1(source._DirrEnergyDVar_nl1), _plasticEnergy(source._plasticEnergy), - _defoEnergy(source._defoEnergy), _damageEnergy(source._damageEnergy), _ipMeca(NULL) + _defoEnergy(source._defoEnergy), _damageEnergy(source._damageEnergy), _ipMeca(NULL), _DirrEnergyDVar_nl(source._DirrEnergyDVar_nl) { for( std::vector< IPCLength * > ::const_iterator it=source.ipvCL.begin(); it!=source.ipvCL.end(); it++) @@ -364,6 +365,7 @@ nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable& nonLocalDamageTorchANNDG3DIP _DirrEnergyDF = psrc -> _DirrEnergyDF; //added for energy-based path Following _DirrEnergyDVar_nl0 = psrc -> _DirrEnergyDVar_nl0; //added for energy-based path Following _DirrEnergyDVar_nl1 = psrc -> _DirrEnergyDVar_nl1; //added for energy-based path Following + _DirrEnergyDVar_nl = psrc -> _DirrEnergyDVar_nl; if(psrc->_ipMeca!=NULL) { @@ -454,6 +456,7 @@ void nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable::restart() restartManager::restart(_defoEnergy); //added for energy-based path Following restartManager::restart(_damageEnergy); //added for energy-based path Following restartManager::restart(_plasticEnergy); //added for energy-based path Following + restartManager::restart(_DirrEnergyDVar_nl); //added for energy-based path Following _ipMeca->restart(); #else diff --git a/dG3D/src/nonLocalDamageDG3DIPVariable.h b/dG3D/src/nonLocalDamageDG3DIPVariable.h index 0698499f0..a2e9b1e2f 100644 --- a/dG3D/src/nonLocalDamageDG3DIPVariable.h +++ b/dG3D/src/nonLocalDamageDG3DIPVariable.h @@ -1611,8 +1611,10 @@ class nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable : public dG3DIPVariable double _damageEnergy; double _irreversibleEnergy; //added for energy-based path Following STensor3 _DirrEnergyDF; //added for energy-based path Following - double _DirrEnergyDVar_nl0; //added for energy-based path Following - double _DirrEnergyDVar_nl1; //added for energy-based path Following + double _DirrEnergyDVar_nl0; //added for energy-based path Following, should be removed + double _DirrEnergyDVar_nl1; //added for energy-based path Following, should be removed + + std::vector<double> _DirrEnergyDVar_nl; //added for energy-based path Following std::vector<double> localVar; @@ -1738,8 +1740,24 @@ class nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable : public dG3DIPVariable virtual double & getRefToIrreversibleEnergy() {return _irreversibleEnergy;}; //added for energy-based path Following virtual const STensor3 & getConstRefToDIrreversibleEnergyDF() const {return _DirrEnergyDF;}; //added for energy-based path Following virtual STensor3 & getRefToDIrreversibleEnergyDF() {return _DirrEnergyDF;}; //added for energy-based path Following - virtual const double & getConstRefToDIrreversibleEnergyDNonLocalVariable(const int i) const {if (i==0){return _DirrEnergyDVar_nl0;} else {return _DirrEnergyDVar_nl1;};} //added for energy-based path Following - virtual double & getRefToDIrreversibleEnergyDNonLocalVariable(const int i) {if (i==0){return _DirrEnergyDVar_nl0;} else {return _DirrEnergyDVar_nl1;};} //added for energy-based path Following + //virtual const double & getConstRefToDIrreversibleEnergyDNonLocalVariable(const int i) const {if (i==0){return _DirrEnergyDVar_nl0;} else {return _DirrEnergyDVar_nl1;};} //added for energy-based path Following, should be removed + //virtual double & getRefToDIrreversibleEnergyDNonLocalVariable(const int i) {if (i==0){return _DirrEnergyDVar_nl0;} else {return _DirrEnergyDVar_nl1;};} //added for energy-based path Following, should be removed + virtual const double & getConstRefToDIrreversibleEnergyDNonLocalVariable(const int idex) const + { + if (idex>=_numNonlocal){ + Msg::Error("Error in DIrreversibleEnergyDNonLocalVariable"); + }else{ + return _DirrEnergyDVar_nl[idex]; + }; + } + virtual double & getRefToDIrreversibleEnergyDNonLocalVariable(const int idex) + { + if (idex>=_numNonlocal){ + Msg::Error("Error in DIrreversibleEnergyDNonLocalVariable"); + }else{ + return _DirrEnergyDVar_nl[idex]; + }; + } virtual double & getRefToPlasticEnergy() {return _plasticEnergy;}; //added for energy-based path Following virtual const double & getConstRefToPlasticEnergy() const {return _plasticEnergy;}; //added for energy-based path Following virtual double & getRefToDefoEnergy() {return _defoEnergy;}; //added for energy-based path Following diff --git a/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp b/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp index b3ddfaf09..f489dde1c 100644 --- a/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp +++ b/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp @@ -3494,8 +3494,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I //end step 7.1 //beginning step 7.2: we retrieve the plastic strain reconstructed - ipvcur->getRefToEplastrec()=Eplast_rec; + ipvcur->getRefToEplastrec()=Eplast_rec; //end step 7.2 + + //beginning step 7.3: we retrieve the non local damage + ipvcur->getRefToNonLocalDamageTensor43()=D_rec; + //end step 7.3 //end step 7 //beginning step 8: we retrieve the computed values in the current internal variables @@ -3508,8 +3512,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I //end step 8.1 //beginning step 8.1.5: we compute the derivatives even if we do not retrieve them yet + const STensor3& Eplast0 = ipvprev->getConstRefToEplast(); + const STensor3& Eplast_rec0 = ipvprev->getConstRefToEplastrec(); std::vector<STensor3> M(_numNonlocalVar); std::vector<STensor3> K(_numNonlocalVar); + std::vector<double> DplastEnergDNonLocalVar(_numNonlocalVar); //for the energy-based path following int idx=0; if (_Id0000==1){ for (int k=0;k<3;k++){ @@ -3523,6 +3530,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id0100==1){ @@ -3537,6 +3550,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id0200==1){ @@ -3551,6 +3570,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id1100==1){ @@ -3565,6 +3590,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id1200==1){ @@ -3579,6 +3610,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id2200==1){ @@ -3593,6 +3630,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id0101==1){ @@ -3607,6 +3650,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id0201==1){ @@ -3621,6 +3670,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id1101==1){ @@ -3635,6 +3690,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id1201==1){ @@ -3649,6 +3710,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id2201==1){ @@ -3663,6 +3730,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id0202==1){ @@ -3677,6 +3750,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id1102==1){ @@ -3691,6 +3770,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id1202==1){ @@ -3705,6 +3790,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id2202==1){ @@ -3719,6 +3810,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id1111==1){ @@ -3733,6 +3830,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id1211==1){ @@ -3747,6 +3850,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id2211==1){ @@ -3761,6 +3870,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id1212==1){ @@ -3775,6 +3890,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id2212==1){ @@ -3789,6 +3910,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Id2222==1){ @@ -3803,6 +3930,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } idx+=1; } if (_Ie00==1){ @@ -3817,6 +3950,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B0(i,j); + } + } idx+=1; } if (_Ie01==1){ @@ -3831,6 +3970,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B1(i,j); + } + } idx+=1; } if (_Ie02==1){ @@ -3845,6 +3990,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B2(i,j); + } + } idx+=1; } if (_Ie11==1){ @@ -3859,6 +4010,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B3(i,j); + } + } idx+=1; } if (_Ie12==1){ @@ -3873,6 +4030,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B4(i,j); + } + } idx+=1; } if (_Ie22==1){ @@ -3887,6 +4050,12 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } } + DplastEnergDNonLocalVar[idx]=0.; + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B5(i,j); + } + } idx+=1; } //end step 8.1.5 @@ -3937,55 +4106,299 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I //end step 8.2 //step 9: for energy-based path Following - //beginning step 9.1: computation of the plastic energy - const STensor3& Eplast0 = ipvprev->getConstRefToEplast(); - const STensor3& Eplast_rec0 = ipvprev->getConstRefToEplastrec(); + //beginning step 9.1: computation of the deformation energy (or elastic energy) + //const STensor3& Eplast0 = ipvprev->getConstRefToEplast(); + //const STensor3& Eplast_rec0 = ipvprev->getConstRefToEplastrec(); double &defoEnergy=ipvcur->getRefToDefoEnergy(); defoEnergy=ipvprev->getConstRefToDefoEnergy(); + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + defoEnergy+=S_rec(i,j)*((E1Tensor(i,j)-Eplast_rec(i,j))-(E0Tensor(i,j)-Eplast_rec0(i,j))); + } + } + //end step 9.1 + + double &plasticEnergy=ipvcur->getRefToPlasticEnergy(); + plasticEnergy=ipvprev->getConstRefToPlasticEnergy(); + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + plasticEnergy+=S_rec(i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + } + } + + + //beginning step 9.2: computation of the damage energy + const STensor43& D_rec0 = ipvprev->getConstRefToNonLocalDamageTensor43(); + double& damageEnergy=ipvcur->getRefToDamageEnergy(); + damageEnergy=ipvprev->getConstRefToDamageEnergy(); + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + double s=0; + for (int p=0;p<3;p++){ + for (int q=0;q<3;q++){ + s+=(D_rec(i,j,p,q)-D_rec0(i,j,p,q))*NonDamTangPred(i,j,p,q)*(E1Tensor(p,q)-Eplast_rec(p,q)); + } + } + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*s; + } + } + /* + double& damageEnergy=ipvcur->getRefToDamageEnergy(); + damageEnergy=ipvprev->getConstRefToDefoEnergy(); + + int idx2=0; + if (_Id0000==1){ for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ - defoEnergy+=S_rec(i,j)*((E1Tensor(i,j)-Eplast_rec(i,j))-(E0Tensor(i,j)-Eplast_rec0(i,j))); + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(0,0,0,0)-D_rec0(0,0,0,0)); } - + } + idx2+=1; + } + if (_Id0100==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(0,1,0,0)-D_rec0(0,1,0,0)); + } + } + idx2+=1; + } + if (_Id0200==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(0,2,0,0)-D_rec0(0,2,0,0)); + } + } + idx2+=1; + } + if (_Id1100==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(1,1,0,0)-D_rec0(1,1,0,0)); + } + } + idx2+=1; + } + if (_Id1200==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(1,2,0,0)-D_rec0(1,2,0,0)); + } + } + idx2+=1; + } + if (_Id2200==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(2,2,0,0)-D_rec0(2,2,0,0)); + } + } + idx2+=1; + } + if (_Id0101==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(0,1,0,1)-D_rec0(0,1,0,1)); + } + } + idx2+=1; + } + if (_Id0201==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(0,2,0,1)-D_rec0(0,2,0,1)); + } + } + idx2+=1; + } + if (_Id1101==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(1,1,0,1)-D_rec0(1,1,0,1)); + } + } + idx2+=1; + } + if (_Id1201==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(1,2,0,1)-D_rec0(1,2,0,1)); + } + } + idx2+=1; + } + if (_Id2201==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(2,2,0,1)-D_rec0(2,2,0,1)); + } + } + idx2+=1; + } + if (_Id0202==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(0,2,0,2)-D_rec0(0,2,0,2)); + } + } + idx2+=1; + } + if (_Id1102==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(1,1,0,2)-D_rec0(1,1,0,2)); + } + } + idx2+=1; + } + if (_Id1202==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(1,2,0,2)-D_rec0(1,2,0,2)); + } + } + idx2+=1; + } + if (_Id2202==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(2,2,0,2)-D_rec0(2,2,0,2)); + } + } + idx2+=1; + } + if (_Id1111==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(1,1,1,1)-D_rec0(1,1,1,1)); + } + } + idx2+=1; + } + if (_Id1211==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(1,2,1,1)-D_rec0(1,2,1,1)); + } + } + idx2+=1; + } + if (_Id2211==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(2,2,1,1)-D_rec0(2,2,1,1)); + } + } + idx2+=1; + } + if (_Id1212==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(1,2,1,2)-D_rec0(1,2,1,2)); + } + } + idx2+=1; + } + if (_Id2212==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(2,2,1,2)-D_rec0(2,2,1,2)); + } + } + idx2+=1; + } + if (_Id2222==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + damageEnergy+=0.5*(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j)*(D_rec(2,2,2,2)-D_rec0(2,2,2,2)); + } + } + idx2+=1; + } + //end step 9.2 + + + //beginning step 9.3: computation of the plastic energy (must be done after computing the damage energy in the way coded currently) double & plasticEnergy = ipvcur->getRefToPlasticEnergy(); plasticEnergy = ipvprev->getConstRefToPlasticEnergy(); - for (int i=0;i<3;i++){ - for (int j=0;j<3;j++){ - //plasticEnergy+=S(i,j)*(Eplast(i,j)-Eplast0(i,j));; - plasticEnergy+=S_rec(i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j));; + if (_Ie00==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + plasticEnergy+=0.5*(B0(i,j)*S_rec(i,j)+(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j))*(Eplast_rec(0,0)-Eplast_rec0(0,0)); + } } + idx2+=1; } + if (_Ie01==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + plasticEnergy+=0.5*(B1(i,j)*S_rec(i,j)+(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j))*(Eplast_rec(0,1)-Eplast_rec0(0,1)); + } + } + idx2+=1; + } + if (_Ie02==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + plasticEnergy+=0.5*(B2(i,j)*S_rec(i,j)+(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j))*(Eplast_rec(0,2)-Eplast_rec0(0,2)); + } + } + idx2+=1; + } + if (_Ie11==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + plasticEnergy+=0.5*(B3(i,j)*S_rec(i,j)+(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j))*(Eplast_rec(1,1)-Eplast_rec0(1,1)); + } + } + idx2+=1; + } + if (_Ie12==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + plasticEnergy+=0.5*(B4(i,j)*S_rec(i,j)+(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j))*(Eplast_rec(1,2)-Eplast_rec0(1,2)); + } + } + idx2+=1; + } + if (_Ie22==1){ + for (int i=0;i<3;i++){ + for (int j=0;j<3;j++){ + plasticEnergy+=0.5*(B5(i,j)*S_rec(i,j)+(E1Tensor(i,j)-Eplast_rec(i,j))*M[idx2](i,j))*(Eplast_rec(2,2)-Eplast_rec0(2,2)); + } + } + idx2+=1; + } + //end step 9.3 + */ + + - //std::cout << "plastEnergyprev = " << _plasticEnergyprev << "\n"; - //std::cout << "plastEnergycur = " << _plasticEnergy << "\n"; - //end step 9.1 - - //beginning step 9.2: computation of DplastEnergDE + //beginning step ...: computation of DplastEnergDE (to redo) static STensor3 DplastEnergDE; for (int k=0;k<3;k++){ for (int l=0;l<3;l++){ DplastEnergDE(k,l)=0; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ - //DplastEnergDE(k,l)+=DSDETensor43(i,j,k,l)*(Eplast(i,j)-Eplast0(i,j))+S(i,j)*DEplastDE(i,j,k,l); DplastEnergDE(k,l) +=DS_nlDE(i,j,k,l)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); DplastEnergDE(k,l) +=S_rec(i,j)*DEplast_lDE(i,j,k,l); } } } } - if (ipvprev->getConstRefToPlasticEnergy()>plasticEnergy){ + /*if (ipvprev->getConstRefToPlasticEnergy()>plasticEnergy){ //std::cout << "warning: the plastic energy decreases" << "\n"; plasticEnergy=ipvprev->getConstRefToPlasticEnergy(); for (int k=0;k<3;k++) for (int l=0;l<3;l++) DplastEnergDE(k,l)=0.; - } + }*/ //computation of DplastEnergDNonLocalVar - double DplastEnergDNonLocalVar0=0.; + /*double DplastEnergDNonLocalVar0=0.; double DplastEnergDNonLocalVar1=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ @@ -3993,7 +4406,7 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I DplastEnergDNonLocalVar1+=M[1](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); } } - DplastEnergDNonLocalVar1+=S_rec(0,0); //for a case in which Eplast00 is NonLocalVar1, should be generalized + DplastEnergDNonLocalVar1+=S_rec(0,0);*/ //for a case in which Eplast00 is NonLocalVar1, should be generalized static STensor3 DdefoEnergDE; for (int k=0;k<3;k++){ @@ -4030,8 +4443,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I else if (this->getMacroSolver()->getPathFollowingLocalIncrementType() == pathFollowingManager::PLASTIC_ENERGY){ ipvcur->getRefToIrreversibleEnergy() = ipvcur->getConstRefToPlasticEnergy(); ipvcur->getRefToDIrreversibleEnergyDF() = DplastEnergDE; - ipvcur->getRefToDIrreversibleEnergyDNonLocalVariable(0) = DplastEnergDNonLocalVar0; - ipvcur->getRefToDIrreversibleEnergyDNonLocalVariable(1) = DplastEnergDNonLocalVar1; + for (int idx=0;idx<_numNonlocalVar;idx++){ + ipvcur->getRefToDIrreversibleEnergyDNonLocalVariable(idx) = DplastEnergDNonLocalVar[idx]; + } + //ipvcur->getRefToDIrreversibleEnergyDNonLocalVariable(0) = DplastEnergDNonLocalVar0; + //ipvcur->getRefToDIrreversibleEnergyDNonLocalVariable(1) = DplastEnergDNonLocalVar1; } else if (this->getMacroSolver()->getPathFollowingLocalIncrementType() == pathFollowingManager::DAMAGE_ENERGY){ ipvcur->getRefToIrreversibleEnergy() = ipvcur->getConstRefToDamageEnergy(); @@ -4051,7 +4467,7 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } //end step 9 - } + //} //end small strain case //end code with D0000 and Eplast00 as non local variables*/ -- GitLab From 82d3e6c81282428078c7eca95110077967ab3a06 Mon Sep 17 00:00:00 2001 From: cyrielle <l.noels@ulg.ac.be> Date: Sat, 8 Mar 2025 17:49:48 +0100 Subject: [PATCH 2/3] fix bug with restart --- dG3D/src/nonLocalDamageDG3DIPVariable.cpp | 8 ++- dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp | 68 ++++++++++++++++++++-- 2 files changed, 68 insertions(+), 8 deletions(-) diff --git a/dG3D/src/nonLocalDamageDG3DIPVariable.cpp b/dG3D/src/nonLocalDamageDG3DIPVariable.cpp index 68f1d2f51..87fb84ac7 100644 --- a/dG3D/src/nonLocalDamageDG3DIPVariable.cpp +++ b/dG3D/src/nonLocalDamageDG3DIPVariable.cpp @@ -437,8 +437,8 @@ void nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable::restart() for(int i=0;i<_n_NonDamTang;i++) _internalVars_NonDamTang[0][0][i] = restart_internalVars_NonDamTang(0,i); restartManager::restart(_nlD.getDataPtr(),_nlD.size1()*_nlD.size2()); restartManager::restart(_D.getDataPtr(),_nlD.size1()*_nlD.size2()); - restartManager::restart(_D36comp.getDataPtr(),_nlD36comp.size1()*_nlD36comp.size2()); - restartManager::restart(_D36comp.getDataPtr(),_nlD36comp.size1()*_nlD36comp.size2()); + restartManager::restart(_D36comp.getDataPtr(),_D36comp.size1()*_D36comp.size2()); + restartManager::restart(_nlD36comp.getDataPtr(),_nlD36comp.size1()*_nlD36comp.size2()); restartManager::restart(localVar); //plastic strain restartManager::restart(_Eplast); @@ -446,9 +446,11 @@ void nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable::restart() restartManager::restart(_Eplastrec); //elastic stiffness without damage restartManager::restart(_Cel); + restartManager::restart(_DTensor43); + restartManager::restart(_nlDTensor43); restartManager::restart(_DS_nlDE); //DStressreconstructedDStrain restartManager::restart(_DEplastDE); //DEplastDE - restartManager::restart(ipvCL); + //restartManager::restart(ipvCL); //why do we have to remove it in restart? (the simulation when it is killed does not start again with this line) restartManager::restart(_irreversibleEnergy); //added for energy-based path Following restartManager::restart(_DirrEnergyDF); //added for energy-based path Following restartManager::restart(_DirrEnergyDVar_nl0); //added for energy-based path Following diff --git a/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp b/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp index f489dde1c..2c1310627 100644 --- a/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp +++ b/dG3D/src/nonLocalDamageDG3DMaterialLaw.cpp @@ -3517,6 +3517,7 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I std::vector<STensor3> M(_numNonlocalVar); std::vector<STensor3> K(_numNonlocalVar); std::vector<double> DplastEnergDNonLocalVar(_numNonlocalVar); //for the energy-based path following + std::vector<double> DdefoEnergDNonLocalVar(_numNonlocalVar); //for the energy-based path following int idx=0; if (_Id0000==1){ for (int k=0;k<3;k++){ @@ -3531,9 +3532,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3551,9 +3554,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3571,9 +3576,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3591,9 +3598,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3611,9 +3620,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3631,9 +3642,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3651,9 +3664,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3671,9 +3686,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3691,9 +3708,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3711,9 +3730,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3731,9 +3752,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3751,9 +3774,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3771,9 +3796,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3791,9 +3818,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3811,9 +3840,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3831,9 +3862,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3851,9 +3884,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3871,9 +3906,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3891,9 +3928,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3911,9 +3950,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3931,9 +3972,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j)); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j))); } } idx+=1; @@ -3951,9 +3994,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B0(i,j); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j)))-S_rec(i,j)*B0(i,j); } } idx+=1; @@ -3971,9 +4016,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B1(i,j); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j)))-S_rec(i,j)*B1(i,j); } } idx+=1; @@ -3991,9 +4038,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B2(i,j); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j)))-S_rec(i,j)*B2(i,j); } } idx+=1; @@ -4011,9 +4060,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B3(i,j); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j)))-S_rec(i,j)*B3(i,j); } } idx+=1; @@ -4031,9 +4082,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B4(i,j); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j)))-S_rec(i,j)*B4(i,j); } } idx+=1; @@ -4051,9 +4104,11 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } } DplastEnergDNonLocalVar[idx]=0.; + DdefoEnergDNonLocalVar[idx]=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ DplastEnergDNonLocalVar[idx]+=M[idx](i,j)*(Eplast_rec(i,j)-Eplast_rec0(i,j))+S_rec(i,j)*B5(i,j); + DdefoEnergDNonLocalVar[idx]+=M[idx](i,j)*((E1Tensor(i,j)-E0Tensor(i,j))-(Eplast_rec(i,j)-Eplast_rec0(i,j)))-S_rec(i,j)*B5(i,j); } } idx+=1; @@ -4376,7 +4431,7 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I - //beginning step ...: computation of DplastEnergDE (to redo) + //beginning step ...: computation of DplastEnergDE static STensor3 DplastEnergDE; for (int k=0;k<3;k++){ for (int l=0;l<3;l++){ @@ -4421,7 +4476,7 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I } //computation of DdefoEnergDNonLocalVar (case with only two non local variables, should be generalized) - double DdefoEnergDNonLocalVar0=0.; + /*double DdefoEnergDNonLocalVar0=0.; double DdefoEnergDNonLocalVar1=0.; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ @@ -4429,15 +4484,18 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I DdefoEnergDNonLocalVar1+=M[1](i,j)*((E1Tensor(i,j)-Eplast_rec(i,j))-(E0Tensor(i,j)-Eplast_rec0(i,j))); } } - DdefoEnergDNonLocalVar1-=S_rec(0,0); //for a case in which Eplast00 is NonLocalVar1, should be generalized + DdefoEnergDNonLocalVar1-=S_rec(0,0);*/ //for a case in which Eplast00 is NonLocalVar1, should be generalized //end step 9.2 static STensor3 I2(1.); if (this->getMacroSolver()->getPathFollowingLocalIncrementType() == pathFollowingManager::DEFO_ENERGY){ ipvcur->getRefToIrreversibleEnergy() = ipvcur->getConstRefToDefoEnergy(); ipvcur->getRefToDIrreversibleEnergyDF() = DdefoEnergDE; - ipvcur->getRefToDIrreversibleEnergyDNonLocalVariable(0) = DdefoEnergDNonLocalVar0; - ipvcur->getRefToDIrreversibleEnergyDNonLocalVariable(1) = DdefoEnergDNonLocalVar1; + for (int idx=0;idx<_numNonlocalVar;idx++){ + ipvcur->getRefToDIrreversibleEnergyDNonLocalVariable(idx) = DdefoEnergDNonLocalVar[idx]; + } + //ipvcur->getRefToDIrreversibleEnergyDNonLocalVariable(0) = DdefoEnergDNonLocalVar0; + //ipvcur->getRefToDIrreversibleEnergyDNonLocalVariable(1) = DdefoEnergDNonLocalVar1; } else if (this->getMacroSolver()->getPathFollowingLocalIncrementType() == pathFollowingManager::PLASTIC_ENERGY){ -- GitLab From 194fb6864611b61356a77181febb5f0ea47cc9f6 Mon Sep 17 00:00:00 2001 From: cyrielle <l.noels@ulg.ac.be> Date: Sat, 15 Mar 2025 13:40:16 +0100 Subject: [PATCH 3/3] fix problem of memory leakage with torch at each step and at restart --- dG3D/src/dG3DIPVariable.cpp | 12 +++++-- dG3D/src/dG3DIPVariable.h | 1 - dG3D/src/nonLocalDamageDG3DIPVariable.cpp | 39 +++++++++++++++++++---- dG3D/src/nonLocalDamageDG3DIPVariable.h | 3 -- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/dG3D/src/dG3DIPVariable.cpp b/dG3D/src/dG3DIPVariable.cpp index d29ab2917..e76b8f55d 100644 --- a/dG3D/src/dG3DIPVariable.cpp +++ b/dG3D/src/dG3DIPVariable.cpp @@ -2303,7 +2303,7 @@ double StochDMNDG3DIPVariable::damageEnergy() const // Overloading for handling additional params at GP @Mohib torchANNBasedDG3DIPVariable::torchANNBasedDG3DIPVariable(const int n, const double initial_h, const bool createBodyForceHO, const bool oninter, const int extraInput, const std::vector<double> initialValue_Extra): - dG3DIPVariable(createBodyForceHO, oninter), _n(n), _initial_h(initial_h), restart_internalVars(1,n), _kinematicVariables(1,6), _extraVariables(1, extraInput) + dG3DIPVariable(createBodyForceHO, oninter), _n(n), _initial_h(initial_h), _kinematicVariables(1,6), _extraVariables(1, extraInput) { #if defined(HAVE_TORCH) _internalVars = _initial_h*torch::ones({1, 1, _n}); @@ -2324,7 +2324,12 @@ torchANNBasedDG3DIPVariable& torchANNBasedDG3DIPVariable::operator =(const IPVar const torchANNBasedDG3DIPVariable* psrc = dynamic_cast<const torchANNBasedDG3DIPVariable*>(&src); if (psrc!=NULL) { - _internalVars = psrc->_internalVars; + //_internalVars = psrc->_internalVars; + + auto Vars_a = _internalVars.accessor<float,3>(); + auto psrc_Vars_a = psrc->_internalVars.accessor<float,3>(); + for(int i=0;i<_n;i++) Vars_a[0][0][i] = psrc_Vars_a[0][0][i]; + _kinematicVariables = psrc->_kinematicVariables; _extraVariables = psrc->_extraVariables; // Include extra parameters at GP when using overloaded(=) @Mohib } @@ -2340,12 +2345,13 @@ void torchANNBasedDG3DIPVariable::restart() #if defined(HAVE_TORCH) auto Vars_a = _internalVars.accessor<float,3>(); + fullMatrix<double> restart_internalVars(1,_n); // internal variable for(int i=0;i<_n;i++) restart_internalVars(0,i) = Vars_a[0][0][i]; dG3DIPVariable::restart(); restartManager::restart(restart_internalVars.getDataPtr(),restart_internalVars.size1()*restart_internalVars.size2()); restartManager::restart(_kinematicVariables.getDataPtr(),_kinematicVariables.size1()*_kinematicVariables.size2()); - for(int i=0;i<_n;i++) _internalVars[0][0][i] = restart_internalVars(0,i); + for(int i=0;i<_n;i++) Vars_a[0][0][i] = restart_internalVars(0,i); #else Msg::Error("NOT COMPILED WITH TORCH"); #endif diff --git a/dG3D/src/dG3DIPVariable.h b/dG3D/src/dG3DIPVariable.h index 492538adb..2841cb2e5 100644 --- a/dG3D/src/dG3DIPVariable.h +++ b/dG3D/src/dG3DIPVariable.h @@ -2449,7 +2449,6 @@ class torchANNBasedDG3DIPVariable :public dG3DIPVariable double _internalVars; #endif fullMatrix<double> _kinematicVariables; // kinematic variable - fullMatrix<double> restart_internalVars; // internal variable fullMatrix<double> _extraVariables; // variables other than kinematic and hidden needed at GP @Mohib public: diff --git a/dG3D/src/nonLocalDamageDG3DIPVariable.cpp b/dG3D/src/nonLocalDamageDG3DIPVariable.cpp index 87fb84ac7..d8103d4ce 100644 --- a/dG3D/src/nonLocalDamageDG3DIPVariable.cpp +++ b/dG3D/src/nonLocalDamageDG3DIPVariable.cpp @@ -281,7 +281,7 @@ void nonLocalDamageDG3DIPVariable::restart() /* Beginning IPvariable for nonlocalDamageTorchANNDG3DIPVariable*/ nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable::nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable(const std::vector< CLengthLaw *> cll, const int n_stress, const int n_elTang, const int n_NonDamTang, const double initial_h, const int numNonlocal, const bool createBodyForceHO, const bool oninter): dG3DIPVariable(createBodyForceHO, oninter,numNonlocal), _n_stress(n_stress), _n_elTang(n_elTang), _n_NonDamTang(n_NonDamTang), _numNonlocal(numNonlocal), _initial_h(initial_h), _nlD(1,6), _D(1,6), _nlD36comp(6,6), _D36comp(6,6), - restart_internalVars_stress(1,n_stress), restart_internalVars_elTang(1,n_elTang), restart_internalVars_NonDamTang(1,n_NonDamTang), _kinematicVariables(1,6), + _kinematicVariables(1,6), _defoEnergy(0.), _plasticEnergy(0.), _damageEnergy(0.), _irreversibleEnergy(0.), _DirrEnergyDF(0.), _DirrEnergyDVar_nl0(0.), _DirrEnergyDVar_nl1(0.) { @@ -336,9 +336,27 @@ nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable& nonLocalDamageTorchANNDG3DIP const nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable* psrc = dynamic_cast<const nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable*>(&src); if (psrc!=NULL) { - _internalVars_stress = psrc->_internalVars_stress; - _internalVars_elTang = psrc->_internalVars_elTang; - _internalVars_NonDamTang = psrc->_internalVars_NonDamTang; + //_internalVars_stress = psrc->_internalVars_stress; + //_internalVars_elTang = psrc->_internalVars_elTang; + //_internalVars_NonDamTang = psrc->_internalVars_NonDamTang; + + + auto Vars_a = _internalVars_stress.accessor<float,3>(); + auto Vars_a_elTang = _internalVars_elTang.accessor<float,3>(); + auto Vars_a_NonDamTang = _internalVars_NonDamTang.accessor<float,3>(); + + + auto psrc_Vars_a = psrc->_internalVars_stress.accessor<float,3>(); + auto psrc_Vars_a_elTang = psrc->_internalVars_elTang.accessor<float,3>(); + auto psrc_Vars_a_NonDamTang = psrc->_internalVars_NonDamTang.accessor<float,3>(); + + for(int i=0;i<_n_stress;i++) Vars_a[0][0][i] = psrc_Vars_a[0][0][i]; + for(int i=0;i<_n_elTang;i++) Vars_a_elTang[0][0][i] = psrc_Vars_a_elTang[0][0][i]; + for(int i=0;i<_n_NonDamTang;i++) Vars_a_NonDamTang[0][0][i] = psrc_Vars_a_NonDamTang[0][0][i]; + + + + _kinematicVariables = psrc->_kinematicVariables; _n_stress = psrc->_n_stress; @@ -424,6 +442,9 @@ void nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable::restart() auto Vars_a = _internalVars_stress.accessor<float,3>(); auto Vars_a_elTang = _internalVars_elTang.accessor<float,3>(); auto Vars_a_NonDamTang = _internalVars_NonDamTang.accessor<float,3>(); + fullMatrix<double> restart_internalVars_stress(1,_n_stress); + fullMatrix<double> restart_internalVars_elTang(1,_n_elTang); + fullMatrix<double> restart_internalVars_NonDamTang(1,_n_NonDamTang); for(int i=0;i<_n_stress;i++) restart_internalVars_stress(0,i) = Vars_a[0][0][i]; for(int i=0;i<_n_elTang;i++) restart_internalVars_elTang(0,i) = Vars_a_elTang[0][0][i]; for(int i=0;i<_n_NonDamTang;i++) restart_internalVars_NonDamTang(0,i) = Vars_a_NonDamTang[0][0][i]; @@ -432,9 +453,13 @@ void nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable::restart() restartManager::restart(restart_internalVars_elTang.getDataPtr(),restart_internalVars_elTang.size1()*restart_internalVars_elTang.size2()); restartManager::restart(restart_internalVars_NonDamTang.getDataPtr(),restart_internalVars_NonDamTang.size1()*restart_internalVars_NonDamTang.size2()); restartManager::restart(_kinematicVariables.getDataPtr(),_kinematicVariables.size1()*_kinematicVariables.size2()); - for(int i=0;i<_n_stress;i++) _internalVars_stress[0][0][i] = restart_internalVars_stress(0,i); - for(int i=0;i<_n_elTang;i++) _internalVars_elTang[0][0][i] = restart_internalVars_elTang(0,i); - for(int i=0;i<_n_NonDamTang;i++) _internalVars_NonDamTang[0][0][i] = restart_internalVars_NonDamTang(0,i); + //for(int i=0;i<_n_stress;i++) _internalVars_stress[0][0][i] = restart_internalVars_stress(0,i); + //for(int i=0;i<_n_elTang;i++) _internalVars_elTang[0][0][i] = restart_internalVars_elTang(0,i); + //for(int i=0;i<_n_NonDamTang;i++) _internalVars_NonDamTang[0][0][i] = restart_internalVars_NonDamTang(0,i); + for(int i=0;i<_n_stress;i++) Vars_a[0][0][i] = restart_internalVars_stress(0,i); + for(int i=0;i<_n_elTang;i++) Vars_a_elTang[0][0][i] = restart_internalVars_elTang(0,i); + for(int i=0;i<_n_NonDamTang;i++) Vars_a_NonDamTang[0][0][i] = restart_internalVars_NonDamTang(0,i); + restartManager::restart(_nlD.getDataPtr(),_nlD.size1()*_nlD.size2()); restartManager::restart(_D.getDataPtr(),_nlD.size1()*_nlD.size2()); restartManager::restart(_D36comp.getDataPtr(),_D36comp.size1()*_D36comp.size2()); diff --git a/dG3D/src/nonLocalDamageDG3DIPVariable.h b/dG3D/src/nonLocalDamageDG3DIPVariable.h index a2e9b1e2f..d110afefb 100644 --- a/dG3D/src/nonLocalDamageDG3DIPVariable.h +++ b/dG3D/src/nonLocalDamageDG3DIPVariable.h @@ -1632,9 +1632,6 @@ class nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable : public dG3DIPVariable double _internalVars_NonDamTang; #endif fullMatrix<double> _kinematicVariables; // kinematic variable - fullMatrix<double> restart_internalVars_stress; // internal variable - fullMatrix<double> restart_internalVars_elTang; // internal variable - fullMatrix<double> restart_internalVars_NonDamTang; // internal variable public: nonLocalDamageTorchANNDG3DIPVariableDG3DIPVariable(const std::vector< CLengthLaw *> cll, const int n_stress, const int n_elTang, const int n_NonDamTang, const double initial_h, const int numNonlocal, const bool createBodyForceHO, const bool oninter); -- GitLab