diff --git a/NonLinearSolver/materialLaw/mlawGenericTM.cpp b/NonLinearSolver/materialLaw/mlawGenericTM.cpp index 34284fd4dc895c48a7fd3aaee4615c5d3383f3f0..37e849bdd7b04b50a7edd3396950444e5ad57599 100644 --- a/NonLinearSolver/materialLaw/mlawGenericTM.cpp +++ b/NonLinearSolver/materialLaw/mlawGenericTM.cpp @@ -28,7 +28,7 @@ mlawGenericTM::mlawGenericTM(const int num, _cp = new constantScalarFunction(cp); - // Euler angles to Rotation Matrix -> ZXZ convention + // Euler angles to Extrinsic Rotation Matrix -> ZXZ convention STensor3 R; //3x3 rotation matrix double c1,c2,c3,s1,s2,s3; double s1c2, c1c2; diff --git a/dG3D/src/dG3DMaterialLaw.cpp b/dG3D/src/dG3DMaterialLaw.cpp index 6b0ed3fbddcbcc351c12a6fa8d6bac4925d07bf7..7a3edfaab6e9e6c65941e73ce65322ffbc0da681 100644 --- a/dG3D/src/dG3DMaterialLaw.cpp +++ b/dG3D/src/dG3DMaterialLaw.cpp @@ -3634,7 +3634,7 @@ double torchANNBasedDG3DMaterialLaw::soundSpeed() const StochDMNDG3DMaterialLaw::StochDMNDG3DMaterialLaw(const int num, const double rho, const double E,const double nu, const char *ParaFile, const bool ReadTree, const bool porous,const double tol, const bool flag_isothermal): - dG3DMaterialLaw(num,rho,false), _ReadTree(ReadTree), _porous(porous),_tol(tol), _flag_isothermal(flag_isothermal), _flag_rotation(false), _type_of_R(0){ + dG3DMaterialLaw(num,rho,false), _ReadTree(ReadTree), _porous(porous),_tol(tol), _flag_isothermal(flag_isothermal), _flag_rotation(false), _type_of_R(0), _alpha(0.), _beta(0.), _gamma(0.){ if(_flag_isothermal){ if(_ReadTree){ @@ -3654,7 +3654,7 @@ StochDMNDG3DMaterialLaw::StochDMNDG3DMaterialLaw(const StochDMNDG3DMaterialLaw & _NInterface(src._NInterface), _N_Node(src._N_Node), _NPara_Wt(src._NPara_Wt), _NPara_Norm(src._NPara_Norm), _Dim(src._Dim), _Vf(src._Vf), _tol(src._tol), _Nv(src._Nv), _NTV(src._NTV), _V(src._V), _Para_Wt(src._Para_Wt), _Para_Norm(src._Para_Norm), _VA(src._VA), _VI(src._VI), _mapLaw(src._mapLaw), _flag_isothermal(src._flag_isothermal), _flag_rotation(src._flag_rotation), _NPara_EulerAngles(src._NPara_EulerAngles), _Para_EulerAngles(src._Para_EulerAngles), - _type_of_R(src._type_of_R), _R_user_input(src._R_user_input){} + _type_of_R(src._type_of_R), _R_user_input(src._R_user_input), _alpha(src._alpha), _beta(src._beta), _gamma(src._gamma){} StochDMNDG3DMaterialLaw::~StochDMNDG3DMaterialLaw(){}; @@ -4347,6 +4347,9 @@ void StochDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev, c else if (_type_of_R == 1){ R = _R_user_input; } + else if (_type_of_R == 2){ + StochDMNDG3DMaterialLaw::eulerZXZToRotationMatrix(_alpha,_beta,_gamma,R); // user input euler angles + } static STensor3 RT; STensorOperation::zero(RT); STensorOperation::transposeSTensor3(R,RT); @@ -4462,11 +4465,6 @@ void StochDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev, c } } - if (_flag_rotation){ - const STensor3& R = ipvcur->getConstReftoRotationMatrix(); - STensorOperation::multSTensor3InPlace2nd(R,P); - } - if(stiff){ NTVC.mult(_I, dRdF); Jacobian.mult(dRdF, dadF); // Eq. 68 in Ling's draft @@ -5782,6 +5780,9 @@ void StochTMDMNDG3DMaterialLaw::stress(IPVariable*ipv, const IPVariable*ipvprev, else if (_type_of_R == 1){ R = _R_user_input; } + else if (_type_of_R == 2){ + StochDMNDG3DMaterialLaw::eulerZXZToRotationMatrix(_alpha,_beta,_gamma,R); // user input euler angles + } static STensor3 RT; STensorOperation::zero(RT); STensorOperation::transposeSTensor3(R,RT); diff --git a/dG3D/src/dG3DMaterialLaw.h b/dG3D/src/dG3DMaterialLaw.h index 5a1bb7636502a8eb198fffb6173901264857ea30..1ca18fe93870c22d14c71b1c4998fdac061c14c9 100644 --- a/dG3D/src/dG3DMaterialLaw.h +++ b/dG3D/src/dG3DMaterialLaw.h @@ -711,7 +711,7 @@ class StochDMNDG3DMaterialLaw : public dG3DMaterialLaw{ std::vector<SPoint2> _Para_Wt; // vector of weights std::vector<SPoint3> _Para_Norm; // vector of normals - std::vector<double> _Para_EulerAngles; // vector of rotation parameters + std::vector<double> _Para_EulerAngles; // vector of rotation parameters - traineable, not user defined fullMatrix<double> _ParaAngle; std::vector<dG3DMaterialLaw*> _mapLaw; @@ -725,7 +725,8 @@ class StochDMNDG3DMaterialLaw : public dG3DMaterialLaw{ fullMatrix<double> _C; fullMatrix<double> Jacobian; - STensor3 _R_user_input; + double _alpha, _beta, _gamma; // user defined euler angles + STensor3 _R_user_input; // user defined rotation matrix int _type_of_R; // type of rotation matrix bool _flag_isothermal, _flag_rotation; @@ -783,7 +784,7 @@ 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 setEulerAngles_DMN_response_rotation(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){_alpha = alpha; _beta = beta; _gamma = gamma;}; }; // FLE @@ -836,6 +837,7 @@ 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;}; }; // FLE