From 7975244d4369195826f2a40691d2b811c89517ab Mon Sep 17 00:00:00 2001
From: Mohib <mohib.mustafa@gmail.com>
Date: Wed, 15 Mar 2023 18:53:40 +0100
Subject: [PATCH] Changes in torchANNBasedDG3DMaterialLaw

Added 4 new properties to the child class torchANNBasedDG3DMaterialLaw
that store mean and stdev of Radius and Cell size

Added a second constructor in the same class that uses the default constructor as a delegating constructor, and then initializes the additional
parameters.

Modified the default constructor so it initializes the extra properties
to -1, (consistency for legacy code)

Made corresponding changes in the swig constructor so it exposes both
constructors that can be used based on the number of arguments keeping
the name same (consistency for the legacy code)

Code compiles and previous example works.

Mohib
---
 dG3D/src/dG3DMaterialLaw.cpp | 31 +++++++++++++++++++++++++++++--
 dG3D/src/dG3DMaterialLaw.h   | 18 ++++++++++++++++++
 2 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/dG3D/src/dG3DMaterialLaw.cpp b/dG3D/src/dG3DMaterialLaw.cpp
index 630001205..d271db0cd 100644
--- a/dG3D/src/dG3DMaterialLaw.cpp
+++ b/dG3D/src/dG3DMaterialLaw.cpp
@@ -1907,7 +1907,8 @@ torchANNBasedDG3DMaterialLaw::torchANNBasedDG3DMaterialLaw(const int num, const
                 _EXXmean(EXXmean), _EXXstd(EXXstd), _EXYmean(EXYmean), _EXYstd(EXYstd), _EYYmean(EYYmean), _EYYstd(EYYstd), _EYZmean(EYZmean),
                 _EYZstd(EYZstd), _EZZmean(EZZmean), _EZZstd(EZZstd), _EZXmean(EZXmean), _EZXstd(EZXstd), _SXXmean(SXXmean), _SXXstd(SXXstd), _SXYmean(SXYmean),
                 _SXYstd(SXYstd), _SYYmean(SYYmean), _SYYstd(SYYstd), _SYZmean(SYZmean), _SYZstd(SYZstd), _SZZmean(SZZmean), _SZZstd(SZZstd),
-                _SZXmean(SZXmean), _SZXstd(SZXstd), _tangentByPerturbation(pert), _pertTol(tol), _kinematicInput(EGL)
+                _SZXmean(SZXmean), _SZXstd(SZXstd), _tangentByPerturbation(pert), _pertTol(tol), _kinematicInput(EGL),
+                _Radiusmean(-1.0), _Radiusstd(-1.0), _CellSizemean(-1.0), _CellSizestd(-1.0) // Constructor initializes these last 4 Class parameters, specific to Lattices on negative values @Mohib
 {
 #if defined(HAVE_TORCH)
     try{
@@ -1950,13 +1951,39 @@ torchANNBasedDG3DMaterialLaw::torchANNBasedDG3DMaterialLaw(const int num, const
 
 }
 
+// Constructor definition for Lattice based torch (.pt) model @Mohib
+torchANNBasedDG3DMaterialLaw::torchANNBasedDG3DMaterialLaw(const int num, const double rho,
+                                                           const int numberOfInput, const int numInternalVars, const char* nameTorch,
+                                                           const double Radiusmean, const double Radiusstd,
+                                                           const double CellSizemean, const double CellSizestd,
+                                                           const double EXXmean, const double EXXstd, const double EYYmean, const double EYYstd, const double EZZmean, const double EZZstd,
+                                                           const double EXYmean, const double EXYstd, const double EYZmean, const double EYZstd, const double EXZmean, const double EXZstd,
+                                                           const double SXXmean, const double SXXstd, const double SYYmean, const double SYYstd, const double SZZmean, const double SZZstd,
+                                                           const double SXYmean, const double SXYstd, const double SYZmean, const double SYZstd, const double SXZmean, const double SXZstd,
+                                                           bool pert, double tol): torchANNBasedDG3DMaterialLaw(num, rho, numberOfInput, numInternalVars, nameTorch,
+                                                                                                                EXXmean,  EXXstd,  EXYmean, EXYstd,  EYYmean,  EYYstd,
+                                                                                                                EYZmean,  EYZstd,  EZZmean, EZZstd, EXZmean,EXZstd,
+                                                                                                                SXXmean,  SXXstd,  SXYmean, SXYstd, SYYmean,  SYYstd,
+                                                                                                                SYZmean,  SYZstd,  SZZmean, SZZstd, SXZmean,SXZstd,
+                                                                                                                pert, tol)
+{
+
+  _Radiusmean = Radiusmean;
+  _Radiusstd = Radiusstd;
+  _CellSizemean = CellSizemean;
+  _CellSizestd = CellSizestd;
+
+}
+
+
 torchANNBasedDG3DMaterialLaw::torchANNBasedDG3DMaterialLaw(const torchANNBasedDG3DMaterialLaw& src):
       dG3DMaterialLaw(src), _numberOfInput(src._numberOfInput), _numberOfInternalVariables(src._numberOfInternalVariables),
                 _EXXmean(src._EXXmean), _EXXstd(src._EXXstd), _EXYmean(src._EXYmean), _EXYstd(src._EXYstd), _EYYmean(src._EYYmean), _EYYstd(src._EYYstd),
                 _EYZmean(src._EYZmean), _EYZstd(src._EYZstd), _EZZmean(src._EZZmean), _EZZstd(src._EZZstd), _EZXmean(src._EZXmean), _EZXstd(src._EZXstd),
                 _SXXmean(src._SXXmean), _SXXstd(src._SXXstd), _SXYmean(src._SXYmean), _SXYstd(src._SXYstd), _SYYmean(src._SYYmean), _SYYstd(src._SYYstd),
                 _SYZmean(src._SYZmean), _SYZstd(src._SYZstd), _SZZmean(src._SZZmean), _SZZstd(src._SZZstd), _SZXmean(src._SZXmean), _SZXstd(src._SZXstd),
-                _tangentByPerturbation(src._tangentByPerturbation),_pertTol(src._pertTol), _kinematicInput(src._kinematicInput)
+                _tangentByPerturbation(src._tangentByPerturbation),_pertTol(src._pertTol), _kinematicInput(src._kinematicInput),
+                _Radiusmean(src._Radiusmean), _Radiusstd(src._Radiusstd), _CellSizemean(src._CellSizemean), _CellSizestd(src._CellSizestd) // Constructor initializes these last 4 Class parameters, specific to Lattice based torch model @Mohib
 {
 #if defined(HAVE_TORCH)
        module = src.module;
diff --git a/dG3D/src/dG3DMaterialLaw.h b/dG3D/src/dG3DMaterialLaw.h
index 234321640..b327c39a3 100644
--- a/dG3D/src/dG3DMaterialLaw.h
+++ b/dG3D/src/dG3DMaterialLaw.h
@@ -502,6 +502,13 @@ class torchANNBasedDG3DMaterialLaw : public dG3DMaterialLaw{
     double _SZXmean;
     double _SZXstd;
 
+    // Lattice Parameter inside of torch (.pt) model @ Mohib
+    double _Radiusmean;
+    double _Radiusstd;
+
+    double _CellSizemean;
+    double _CellSizestd;
+
     bool _tangentByPerturbation;
     double _pertTol;
 #if defined(HAVE_TORCH)
@@ -527,6 +534,17 @@ class torchANNBasedDG3DMaterialLaw : public dG3DMaterialLaw{
                 const double SXYstd, const double SYYmean, const double SYYstd, const double SYZmean, const double SYZstd, const double SZZmean,
                 const double SZZstd, const double SZXmean, const double SZXstd, bool pert=false, double tol = 1e-5);
 
+        // Constructor declaration for Lattice based torch model @Mohib
+        torchANNBasedDG3DMaterialLaw(const int num, const double rho,
+                                     const int numberOfInput, const int numInternalVars, const char* nameTorch,
+                                     const double Radiusmean, const double Radiusstd,
+                                     const double CellSizemean, const double CellSizestd,
+                                     const double EXXmean, const double EXXstd, const double EYYmean, const double EYYstd, const double EZZmean, const double EZZstd,
+                                     const double EXYmean, const double EXYstd, const double EYZmean, const double EYZstd, const double EXZmean, const double EXZstd,
+                                     const double SXXmean, const double SXXstd, const double SYYmean, const double SYYstd, const double SZZmean, const double SZZstd,
+                                     const double SXYmean, const double SXYstd, const double SYZmean, const double SYZstd, const double SXZmean, const double SXZstd,
+                                     bool pert=false, double tol = 1e-5);
+
 		void setKinematicInput(const int i);
     #ifndef SWIG
 		torchANNBasedDG3DMaterialLaw(const torchANNBasedDG3DMaterialLaw& src);
-- 
GitLab