From 489b10666a09aa6e3cd1d9b08ede3361b52f25a0 Mon Sep 17 00:00:00 2001
From: FLE_Knight <ujwalkishore.jinaga@uliege.be>
Date: Wed, 4 Jun 2025 19:34:12 +0200
Subject: [PATCH] [MINOR PATCH] Minor correction to a StochTMDMN euler angle
 function. Changed TMDMNIPvariable to ThermoMechanicsDG3DIPVariableBase to get
 tangents.

---
 dG3D/src/computeWithMaterialLaw.cpp |  8 ++++----
 dG3D/src/dG3DMaterialLaw.h          | 14 ++++++++++++--
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/dG3D/src/computeWithMaterialLaw.cpp b/dG3D/src/computeWithMaterialLaw.cpp
index 958b900b3..15fb46b8b 100644
--- a/dG3D/src/computeWithMaterialLaw.cpp
+++ b/dG3D/src/computeWithMaterialLaw.cpp
@@ -432,7 +432,7 @@ void computeMaterialLaw::getTangent_dPdF(fullMatrix<double>& _dPdF){
   _dPdF.resize(9,9); _dPdF.setAll(0.);
 
   IPVariable* ipv = _ips->getState(IPStateBase::current);
-  StochDMNDG3DIPVariable* ipvcur = dynamic_cast<StochDMNDG3DIPVariable*>(ipv);
+  ThermoMechanicsDG3DIPVariableBase* ipvcur = dynamic_cast<ThermoMechanicsDG3DIPVariableBase*>(ipv);
 
   const STensor43& dPdF = ipvcur->getConstRefToTangentModuli();
   for(int i=0; i<3; i++)
@@ -453,7 +453,7 @@ void computeMaterialLaw::getTangents_dPdT_dQdT_dQdF_dQdH_dPdH(fullVector<double>
     _dPdH.resize(9,3); _dPdH.setAll(0.);
     
     IPVariable* ipv = _ips->getState(IPStateBase::current);
-    StochTMDMNDG3DIPVariable* ipvcur = dynamic_cast<StochTMDMNDG3DIPVariable*>(ipv);
+    ThermoMechanicsDG3DIPVariableBase* ipvcur = dynamic_cast<ThermoMechanicsDG3DIPVariableBase*>(ipv);
 
     const STensor3& dPdT  = ipvcur->getConstRefTodPdT();
     const SVector3& dQdT  = ipvcur->getConstRefTodThermalFluxdT(); 
@@ -485,7 +485,7 @@ void computeMaterialLaw::getCombinedTangents_dPQdFHT_dPQdFH(fullMatrix<double>&
     _dPQdFH.resize(12,12); _dPQdFH.setAll(0.);
 
     IPVariable* ipv = _ips->getState(IPStateBase::current);
-    StochTMDMNDG3DIPVariable* ipvcur = dynamic_cast<StochTMDMNDG3DIPVariable*>(ipv);
+    ThermoMechanicsDG3DIPVariableBase* ipvcur = dynamic_cast<ThermoMechanicsDG3DIPVariableBase*>(ipv);
 
     const STensor43& dPdF = ipvcur->getConstRefToTangentModuli();
     const STensor3& dPdT  = ipvcur->getConstRefTodPdT();
@@ -553,7 +553,7 @@ double computeMaterialLaw::get3rdDependentVariable(){
 double computeMaterialLaw::getSpecificHeat(){
   if(!_flag_isothermal){
     IPVariable* ipv = _ips->getState(IPStateBase::current);
-    StochTMDMNDG3DIPVariable* ipvcur = dynamic_cast<StochTMDMNDG3DIPVariable*>(ipv);
+    ThermoMechanicsDG3DIPVariableBase* ipvcur = dynamic_cast<ThermoMechanicsDG3DIPVariableBase*>(ipv);
     return ipvcur->getConstRefToExtraDofFieldCapacityPerUnitField()(0);
   }
   else{
diff --git a/dG3D/src/dG3DMaterialLaw.h b/dG3D/src/dG3DMaterialLaw.h
index 1ca18fe93..506dcddc8 100644
--- a/dG3D/src/dG3DMaterialLaw.h
+++ b/dG3D/src/dG3DMaterialLaw.h
@@ -784,7 +784,12 @@ class StochDMNDG3DMaterialLaw : public dG3DMaterialLaw{
     virtual void reset_Parameter(const char* Para); 
     virtual void reset_Parameter(std::vector<double>& Para_EulerAngles);
     virtual void set_flag_DMN_response_rotation(const bool flag_rotation, const int type_of_R){_flag_rotation = flag_rotation; _type_of_R = type_of_R;};
-    virtual void set_euler_angles_user_input(const double alpha, const double beta, const double gamma){_alpha = alpha; _beta = beta; _gamma = gamma;};
+    virtual void set_euler_angles_user_input(const double alpha, const double beta, const double gamma){
+      if(_type_of_R == 2){_alpha = alpha; _beta = beta; _gamma = gamma;}
+      else{
+        Msg::Error("Use set_flag_DMN_response_rotation to set_type_of_R == 2 to use this feature.");
+      }
+    };
  };   
 
 // FLE
@@ -837,7 +842,12 @@ class StochTMDMNDG3DMaterialLaw : public StochDMNDG3DMaterialLaw{
     virtual void reset_Parameter(const char* Para);
     virtual void set_flag_DMN_response_rotation(const bool flag_rotation, const int type_of_R){_flag_rotation = flag_rotation; _type_of_R = type_of_R;};
     virtual void writeMatrixToCSV(const fullMatrix<double>& matrix, const double& nrows, const double& ncols, const std::string& filename);
-    virtual void set_euler_angles_user_input(const double alpha, const double beta, const double gamma){_alpha = alpha; _beta = beta; _gamma = gamma;};
+    virtual void set_euler_angles_user_input(const double alpha, const double beta, const double gamma){
+      if(_type_of_R == 2){_alpha = alpha; _beta = beta; _gamma = gamma;}
+      else{
+        Msg::Error("Use set_flag_DMN_response_rotation to set_type_of_R == 2 to use this feature.");
+      }
+    };
  }; 
 // FLE
 
-- 
GitLab