Skip to content
Snippets Groups Projects
Commit cb1547e3 authored by Ludovic Noels's avatar Ludovic Noels
Browse files

reject the step directly if strain increment too big

parent 3c741e70
No related branches found
No related tags found
No related merge requests found
......@@ -2560,7 +2560,7 @@ NonlocalDamageTorchANNBasedDG3DMaterialLaw::NonlocalDamageTorchANNBasedDG3DMater
_SZXmean(SZXmean), _SZXstd(SZXstd),
_elTangCompxxxxmean(elTangCompxxxxmean), _elTangCompxxxxstd(elTangCompxxxxstd), _elTangCompyyxxmean(elTangCompyyxxmean), _elTangCompyyxxstd(elTangCompyyxxstd), _elTangCompzzxxmean(elTangCompzzxxmean), _elTangCompzzxxstd(elTangCompzzxxstd), _elTangCompxyxymean(elTangCompxyxymean), _elTangCompxyxystd(elTangCompxyxystd), _elTangCompxzxzmean(elTangCompxzxzmean), _elTangCompxzxzstd(elTangCompxzxzstd), _elTangCompyyyymean(elTangCompyyyymean), _elTangCompyyyystd(elTangCompyyyystd), _elTangCompzzyymean(elTangCompzzyymean), _elTangCompzzyystd(elTangCompzzyystd), _elTangCompyzyzmean(elTangCompyzyzmean), _elTangCompyzyzstd(elTangCompyzyzstd), _elTangCompzzzzmean(elTangCompzzzzmean), _elTangCompzzzzstd(elTangCompzzzzstd),
_NonDamTangCompxxxxmean(NonDamTangCompxxxxmean), _NonDamTangCompxxxxstd(NonDamTangCompxxxxstd), _NonDamTangCompyyxxmean(NonDamTangCompyyxxmean), _NonDamTangCompyyxxstd(NonDamTangCompyyxxstd), _NonDamTangCompzzxxmean(NonDamTangCompzzxxmean), _NonDamTangCompzzxxstd(NonDamTangCompzzxxstd), _NonDamTangCompxyxymean(NonDamTangCompxyxymean), _NonDamTangCompxyxystd(NonDamTangCompxyxystd), _NonDamTangCompxzxzmean(NonDamTangCompxzxzmean), _NonDamTangCompxzxzstd(NonDamTangCompxzxzstd), _NonDamTangCompyyyymean(NonDamTangCompyyyymean), _NonDamTangCompyyyystd(NonDamTangCompyyyystd), _NonDamTangCompzzyymean(NonDamTangCompzzyymean), _NonDamTangCompzzyystd(NonDamTangCompzzyystd), _NonDamTangCompyzyzmean(NonDamTangCompyzyzmean), _NonDamTangCompyzyzstd(NonDamTangCompyzyzstd), _NonDamTangCompzzzzmean(NonDamTangCompzzzzmean), _NonDamTangCompzzzzstd(NonDamTangCompzzzzstd),
_tangentByPerturbation(pert), _pertTol(tol), _kinematicInput(EGL),_NeedExtraNorm(false),_DoubleInput(false),_RNN(true),_Ie00(1), _Ie01(1), _Ie02(1), _Ie11(1), _Ie12(1), _Ie22(1), _Id0000(1), _Id0100(1), _Id0200(1), _Id1100(1), _Id1200(1), _Id2200(1), _Id0101(1), _Id0201(1), _Id1101(1), _Id1201(1), _Id2201(1), _Id0202(1), _Id1102(1), _Id1202(1), _Id2202(1), _Id1111(1), _Id1211(1), _Id2211(1), _Id1212(1), _Id2212(1), _Id2222(1), _incrlimit(0.0004)
_tangentByPerturbation(pert), _pertTol(tol), _kinematicInput(EGL),_NeedExtraNorm(false),_DoubleInput(false),_RNN(true),_Ie00(1), _Ie01(1), _Ie02(1), _Ie11(1), _Ie12(1), _Ie22(1), _Id0000(1), _Id0100(1), _Id0200(1), _Id1100(1), _Id1200(1), _Id2200(1), _Id0101(1), _Id0201(1), _Id1101(1), _Id1201(1), _Id2201(1), _Id0202(1), _Id1102(1), _Id1202(1), _Id2202(1), _Id1111(1), _Id1211(1), _Id2211(1), _Id1212(1), _Id2212(1), _Id2222(1), _incrlimit(0.0004), _tooBigStep(false)
{
_mecalocalLaw = NULL;
cLLaw.resize(_numNonlocalVar);
......@@ -2653,7 +2653,7 @@ NonlocalDamageTorchANNBasedDG3DMaterialLaw::NonlocalDamageTorchANNBasedDG3DMater
_SYZmean(src._SYZmean), _SYZstd(src._SYZstd), _SZZmean(src._SZZmean), _SZZstd(src._SZZstd), _SZXmean(src._SZXmean), _SZXstd(src._SZXstd),
_elTangCompxxxxmean(src._elTangCompxxxxmean), _elTangCompxxxxstd(src._elTangCompxxxxstd), _elTangCompyyxxmean(src._elTangCompyyxxmean), _elTangCompyyxxstd(src._elTangCompyyxxstd), _elTangCompzzxxmean(src._elTangCompzzxxmean), _elTangCompzzxxstd(src._elTangCompzzxxstd), _elTangCompxyxymean(src._elTangCompxyxymean), _elTangCompxyxystd(src._elTangCompxyxystd), _elTangCompxzxzmean(src._elTangCompxzxzmean), _elTangCompxzxzstd(src._elTangCompxzxzstd), _elTangCompyyyymean(src._elTangCompyyyymean), _elTangCompyyyystd(src._elTangCompyyyystd), _elTangCompzzyymean(src._elTangCompzzyymean), _elTangCompzzyystd(src._elTangCompzzyystd), _elTangCompyzyzmean(src._elTangCompyzyzmean), _elTangCompyzyzstd(src._elTangCompyzyzstd), _elTangCompzzzzmean(src._elTangCompzzzzmean), _elTangCompzzzzstd(src._elTangCompzzzzstd),
_NonDamTangCompxxxxmean(src._NonDamTangCompxxxxmean), _NonDamTangCompxxxxstd(src._NonDamTangCompxxxxstd), _NonDamTangCompyyxxmean(src._NonDamTangCompyyxxmean), _NonDamTangCompyyxxstd(src._NonDamTangCompyyxxstd), _NonDamTangCompzzxxmean(src._NonDamTangCompzzxxmean), _NonDamTangCompzzxxstd(src._NonDamTangCompzzxxstd), _NonDamTangCompxyxymean(src._NonDamTangCompxyxymean), _NonDamTangCompxyxystd(src._NonDamTangCompxyxystd), _NonDamTangCompxzxzmean(src._NonDamTangCompxzxzmean), _NonDamTangCompxzxzstd(src._NonDamTangCompxzxzstd), _NonDamTangCompyyyymean(src._NonDamTangCompyyyymean), _NonDamTangCompyyyystd(src._NonDamTangCompyyyystd), _NonDamTangCompzzyymean(src._NonDamTangCompzzyymean), _NonDamTangCompzzyystd(src._NonDamTangCompzzyystd), _NonDamTangCompyzyzmean(src._NonDamTangCompyzyzmean), _NonDamTangCompyzyzstd(src._NonDamTangCompyzyzstd), _NonDamTangCompzzzzmean(src._NonDamTangCompzzzzmean), _NonDamTangCompzzzzstd(src._NonDamTangCompzzzzstd),
_tangentByPerturbation(src._tangentByPerturbation),_pertTol(src._pertTol), _kinematicInput(src._kinematicInput),_NeedExtraNorm(src._NeedExtraNorm),_DoubleInput(src._DoubleInput), _mecalocalLaw(NULL), _RNN(src._RNN),_Ie00(src._Ie00), _Ie01(src._Ie01), _Ie02(src._Ie02), _Ie11(src._Ie11), _Ie12(src._Ie12), _Ie22(src._Ie22), _Id0000(src._Id0000), _Id0100(src._Id0100), _Id0200(src._Id0200), _Id1100(src._Id1100), _Id1200(src._Id1200), _Id2200(src._Id2200), _Id0101(src._Id0101), _Id0201(src._Id0201), _Id1101(src._Id1101), _Id1201(src._Id1201), _Id2201(src._Id2201), _Id0202(src._Id0202), _Id1102(src._Id1102), _Id1202(src._Id1202), _Id2202(src._Id2202), _Id1111(src._Id1111), _Id1211(src._Id1211), _Id2211(src._Id2211), _Id1212(src._Id1212), _Id2212(src._Id2212), _Id2222(src._Id2222), _incrlimit(src._incrlimit)
_tangentByPerturbation(src._tangentByPerturbation),_pertTol(src._pertTol), _kinematicInput(src._kinematicInput),_NeedExtraNorm(src._NeedExtraNorm),_DoubleInput(src._DoubleInput), _mecalocalLaw(NULL), _RNN(src._RNN),_Ie00(src._Ie00), _Ie01(src._Ie01), _Ie02(src._Ie02), _Ie11(src._Ie11), _Ie12(src._Ie12), _Ie22(src._Ie22), _Id0000(src._Id0000), _Id0100(src._Id0100), _Id0200(src._Id0200), _Id1100(src._Id1100), _Id1200(src._Id1200), _Id2200(src._Id2200), _Id0101(src._Id0101), _Id0201(src._Id0201), _Id1101(src._Id1101), _Id1201(src._Id1201), _Id2201(src._Id2201), _Id0202(src._Id0202), _Id1102(src._Id1102), _Id1202(src._Id1202), _Id2202(src._Id2202), _Id1111(src._Id1111), _Id1211(src._Id1211), _Id2211(src._Id2211), _Id1212(src._Id1212), _Id2212(src._Id2212), _Id2222(src._Id2222), _incrlimit(src._incrlimit), _tooBigStep(src._tooBigStep)
{
#if defined(HAVE_TORCH)
module_stress = src.module_stress;
......@@ -3552,6 +3552,9 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::stress(IPVariable* ipv, const I
//beginning step 8.1: we retrieve the stress
STensor3& P = ipvcur->getRefToFirstPiolaKirchhoffStress();
P=S_rec;
if (_tooBigStep){ //added on 13/06/2025 to reject the step if the strain increment is too big
P(0,0)=P(1,1)=P(2,2)=sqrt(-1);
}
//end step 8.1
//beginning step 8.1.5: we compute the derivatives even if we do not retrieve them yet
......@@ -5477,6 +5480,7 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::compute_local_values(const nonL
}
}
//beginning of finding the maximal strain increment
double max_incr=0.;
for (int i=0;i<3;i++){
......@@ -5489,11 +5493,16 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::compute_local_values(const nonL
//end of finding the maximal strain increment
int nb_substep=ceil(max_incr/_incrlimit); //the number of substeps
if(nb_substep >100)
{
_tooBigStep = false;
if(nb_substep >100){
Msg::Info("substep reaches the maximum number, %d",nb_substep);
if (nb_substep > 500){ //added on 13/06/2025 to reject the step when the strain increment is too big
_tooBigStep=true;
}
nb_substep=100;
}
STensor3 dEsubstep;
for (int i=0;i<3;i++){
for (int j=0;j<3;j++){
......@@ -5560,13 +5569,13 @@ void NonlocalDamageTorchANNBasedDG3DMaterialLaw::RNNstress_stiff(const STensor3&
dEyy=E1Tensor(1,1)-E0Tensor(1,1);
dExy=E1Tensor(0,1)-E0Tensor(0,1);
if (abs(dExx)>_incrlimit){
//std::cout << "Warning: beyond the limit increment for epsilon_XX: " << dExx << "\n";
//std::cout << "Warning: beyond the limit increment for epsilon_XX: " << dExx << "\n"; //commented on 12/06/25 because the nb of substeps is limited and we can a bit beyond the limit increment
}
if (abs(dEyy)>_incrlimit){
//std::cout << "Warning: beyond the limit increment for epsilon_YY: " << dEyy << "\n";
//std::cout << "Warning: beyond the limit increment for epsilon_YY: " << dEyy << "\n"; //commented on 12/06/25 because the nb of substeps is limited and we can a bit beyond the limit increment
}
if (abs(dExy)>_incrlimit){
//std::cout << "Warning: beyond the limit increment for epsilon_XY: " << dExy << "\n";
//std::cout << "Warning: beyond the limit increment for epsilon_XY: " << dExy << "\n"; //commented on 12/06/25 because the nb of substeps is limited and we can a bit beyond the limit increment
}
//end check for strain increments
......
......@@ -913,6 +913,7 @@ class NonlocalDamageTorchANNBasedDG3DMaterialLaw : public dG3DMaterialLaw{
bool _DoubleInput;
int _numNonlocalVar;
double _incrlimit; //the maximal strain increment with which your RNN trained can predict
bool _tooBigStep; //(added on 13/06/25) becomes true when the strain step is so big that it would need a lot of substeps to compute the stress corresponding correctly, in that case, the step is rejected
std::vector< CLengthLaw * > cLLaw;
materialLaw *_mecalocalLaw;
bool _RNN;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment