recovery_props.hpp
Overview
Functions for recovering material properties from stiffness/compliance tensors. Identifies material symmetry and extracts engineering constants (Young’s moduli, Poisson’s ratios, shear moduli).
API Reference
-
void check_symetries(const arma::mat &L, std::string &umat_type, int &axis, arma::vec &props, int &maj_sym, const double &tol = 0.)
Check the symmetries of a stiffness matrix \( \mathbf{L} \), and fill the vector of material properties.
Depending on the symmetry found, the string umat_type, the axis of symmetry (if applicable) the vector of material properties, and the major symmetry maj_sym \( L_{ij} = L_{ji} \) ?. If the major symmetry condition is not fulfilled, the check of symmetries if performed on the symmetric part of \( \mathbf{L} \). For fully anisotropic and monoclinic symmetries, the vector of parameters is not returned (the full stiffness tensor is generally directly utilized)
Material Symmetries considered:
Symmetry
umat_type
axis
size of props
Fully anisotropic
ELANI
0
N/A
Monoclinic
ELMON
1,2 or 3
N/A
Orthotropic
ELORT
0
9
Cubic
ELCUB
0
3
Transversely isotropic
ELITR
1,2 or 3
5
Isotropic
ELISO
0
2
Example:
mat L; std::string umat_name; int axis; vec props; int maj_sym; check_symetries(L, umat_name, axis, props, maj_sym);
- Parameters:
L – [in] : The stiffness matrix
umat_type – [out] : The material symmetry type
axis – [out] : The axis of symmetry (if applicable)
props – [out] : The material properties vector
maj_sym – [out] : The major symmetry condition (L_ij = L_ji ?).
tol – [in] : The tolerance utilized to check the symetries. If less than the global simcoon::limit (1.E-8), simcoon::limit is utilized. Default is 0. (so simcoon::limit is utilized by default)
-
arma::vec L_iso_props(const arma::mat &L)
Provides material parameters of a linear isotropic material from a stiffness matrix.
Returns a vector containing the Young’s modulus and the Poisson ratio : \( \left(E, \nu \right) \) of a linear elastic isotropic material, providing the stiffness matrix : \( \mathbf{L} \). Note that an averaging over the component is operated (usefull when the provided matrix do not exactly correspond to an isotropic material)
Example:
mat L = L_iso(70000., 0.3, 'Enu'); vec eliso_props = L_iso_props(L);
- Parameters:
L – (6x6 arma::mat) A stiffness tensor
- Returns:
(arma::vec) the vector of parameters \( \left(E, \nu \right) \)
-
arma::vec M_iso_props(const arma::mat &M)
Provides material parameters of a linear isotropic material from a compliance matrix.
Returns a vector containing the Young’s modulus and the Poisson ratio : \( \left(E, \nu \right) \) of a linear elastic isotropic material, providing the compliance matrix : \( \mathbf{M} \). Note that an averaging over the component is operated (usefull when the provided matrix do not exactly correspond to an isotropic material)
Example:
mat M = M_iso(70000., 0.3, 'Enu'); vec eliso_props = L_iso_props(L);
- Parameters:
M – (6x6 arma::mat) A compliance tensor
- Returns:
(arma::vec) the vector of parameters \( \left(E, \nu \right) \)
-
arma::vec L_isotrans_props(const arma::mat &L, const int &axis)
Provides material parameters of a linear transversely isotropic material from a stiffness matrix.
Returns a vector containing the parameters \( \left(E_L, E_T, \nu_{TL}, \nu_{TT}, G_{LT} \right) \) of a linear elastic transversely isotropic material, providing the stiffness matrix : \( \mathbf{L} \). Note that an averaging over the component is operated (usefull when the provided matrix do not exactly correspond to an isotropic material)
Example:
int axis = 1; double E_L = 4500; double E_T = 2300; double nu_TL = 0.05; double nu_TT = 0.3; double G_LT = 2700; mat L = L_isotrans(E_L, E_T, nu_TL, nu_TT, G_LT., axis); vec isotrans_props = L_isotrans_props(L, axis);
- Parameters:
L – (6x6 arma::mat) A stiffness tensor
axis – axis of symetry for the linear transversely isotropic material
- Returns:
(arma::vec) the vector of parameters \( \left(E_L, E_T, \nu_{TL}, \nu_{TT}, G_{LT} \right) \)
-
arma::vec M_isotrans_props(const arma::mat &M, const int &axis)
Provides material parameters of a linear transversely isotropic material from a compliance matrix.
Returns a vector containing the parameters \( \left(E_L, E_T, \nu_{TL}, \nu_{TT}, G_{LT} \right) \) of a linear elastic transversely isotropic material, providing the compliance matrix : \( \mathbf{M} \). Note that an averaging over the component is operated (usefull when the provided matrix do not exactly correspond to an isotropic material)
Example:
int axis = 1; double E_L = 4500; double E_T = 2300; double nu_TL = 0.05; double nu_TT = 0.3; double G_LT = 2700; mat M = M_isotrans(E_L, E_T, nu_TL, nu_TT, G_LT., axis); vec isotrans_props = M_isotrans_props(M, axis);
- Parameters:
M – (6x6 arma::mat) A compliance tensor
axis – axis of symetry for the linear transversely isotropic material
- Returns:
(arma::vec) the vector of parameters \( \left(E_L, E_T, \nu_{TL}, \nu_{TT}, G_{LT} \right) \)
-
arma::vec L_cubic_props(const arma::mat &L)
Provides material parameters of a cubic material from a stiffness matrix.
Returns a vector containing the parameters \( \left(E, \nu, G \right) \) of a linear cubic material, providing the stiffness matrix : \( \mathbf{L} \). Note that an averaging over the component is operated (usefull when the provided matrix do not exactly correspond to an isotropic material)
Example:
mat L = L_cubic(185000., 158000., 39700., 'Cii') //C11, C12, C44 vec cubic_props = L_cubic_props(L);
- Parameters:
L – (6x6 arma::mat) A stiffness tensor
- Returns:
(arma::vec) the vector of parameters \( \left(E, \nu, G \right) \)
-
arma::vec M_cubic_props(const arma::mat &M)
Provides material parameters of a cubic material from a compliance matrix.
Returns a vector containing the parameters \( \left(E, \nu, G \right) \) of a linear cubic material, providing the compliance matrix : \( \mathbf{M} \). Note that an averaging over the component is operated (usefull when the provided matrix do not exactly correspond to an isotropic material)
Example:
mat M = M_cubic(185000., 158000., 39700., 'Cii') //C11, C12, C44 vec cubic_props = M_cubic_props(M);
- Parameters:
M – (6x6 arma::mat) A compliance tensor
- Returns:
(arma::vec) the vector of parameters \( \left(E, \nu, G \right) \)
-
arma::vec L_ortho_props(const arma::mat &L)
Provides material parameters of an orthotropic material from a stiffness matrix.
Returns a vector containing the parameters \( \left(E_1, E_1, E_3, \nu_{12} \nu_{13}, \nu_{23}, G_{12}, G_{13}, G_{23} \right) \) of a linear orthotropic material, providing the stiffness matrix : \( \mathbf{L} \). Note that an averaging over the component is operated (usefull when the provided matrix do not exactly correspond to an isotropic material)
Example:
double E_1 = 4500; double E_2 = 2300; double E_3 = 2700; double nu_12 = 0.06; double nu_13 = 0.08; double nu_23 = 0.3; double G_12 = 2200; double G_13 = 2100; double G_23 = 2400; mat L = L_ortho(E_1, E_2, E_3, nu_12, nu_13, nu_23, G_12, G_13, G_23); vec ortho_props = L_ortho_props(L);
- Parameters:
L – (6x6 arma::mat) A stiffness tensor
- Returns:
(arma::vec) the vector of parameters \( \left(E_1, E_1, E_3, \nu_{12} \nu_{13}, \nu_{23}, G_{12}, G_{13}, G_{23} \right) \)
-
arma::vec M_ortho_props(const arma::mat &M)
Provides material parameters of an orthotropic material from a compliance matrix.
Returns a vector containing the parameters \( \left(E_1, E_1, E_3, \nu_{12} \nu_{13}, \nu_{23}, G_{12}, G_{13}, G_{23} \right) \) of a linear orthotropic material, providing the compliance matrix : \( \mathbf{M} \). Note that an averaging over the component is operated (usefull when the provided matrix do not exactly correspond to an isotropic material)
Example:
double E_1 = 4500; double E_2 = 2300; double E_3 = 2700; double nu_12 = 0.06; double nu_13 = 0.08; double nu_23 = 0.3; double G_12 = 2200; double G_13 = 2100; double G_23 = 2400; mat M = M_ortho(E_1, E_2, E_3, nu_12, nu_13, nu_23, G_12, G_13, G_23); vec ortho_props = M_ortho_props(M);
- Parameters:
M – (6x6 arma::mat) A compliance tensor
- Returns:
(arma::vec) the vector of parameters \( \left(E_1, E_1, E_3, \nu_{12} \nu_{13}, \nu_{23}, G_{12}, G_{13}, G_{23} \right) \)
-
arma::vec M_aniso_props(const arma::mat &M)
Provides material parameters of an anisotropic material from a compliance matrix.
Returns a vector containing the parameters \( \left(E_1, E_1, E_3, \nu_{12} \nu_{13}, \nu_{23}, G_{12}, G_{13}, G_{23}, \eta_{14}, \eta_{15}, \eta_{16}, \eta_{24}, \eta_{25}, \eta_{26}, \eta_{34}, \eta_{35}, \eta_{36}, \eta_{45}, \eta_{46}, \eta_{56} \right) \) of a linear anisotropic material, providing the compliance matrix : \( \mathbf{M} \). Note that an averaging over the component is operated (usefull when the provided matrix do not exactly correspond to an isotropic material)
\[ \begin{align}\begin{aligned}\begin{split}\begin{eqnarray*} E_1 & = & \frac{1}{M_{11}} \\ E_2 & = & \frac{1}{M_{22}} \\ E_3 & = & \frac{1}{M_{33}} \\ \nu_{12} & = & - \frac{1}{2} E_1 \left( M_{12} + M_{21} \right) \\ \nu_{13} & = & - \frac{1}{2} E_1 \left( M_{13} + M_{31} \right) \\ \nu_{23} & = & - \frac{1}{2} E_2 \left( M_{23} + M_{32} \right) \\ G_{12} & = & \frac{1}{M_{44}} \\ G_{13} & = & \frac{1}{M_{55}} \\ G_{23} & = & \frac{1}{M_{66}} \\ \end{split}\\\begin{split} \eta_{14} & = & \frac{1}{2} E_1 \left( M_{14} + M_{41} \right) \\ \eta_{25} & = & \frac{1}{2} E_1 \left( M_{15} + M_{51} \right) \\ \eta_{26} & = & \frac{1}{2} E_1 \left( M_{16} + M_{61} \right) \\\end{split}\\\begin{split} \eta_{24} & = & \frac{1}{2} E_2 \left( M_{24} + M_{42} \right) \\ \eta_{25} & = & \frac{1}{2} E_2 \left( M_{25} + M_{52} \right) \\ \eta_{26} & = & \frac{1}{2} E_2 \left( M_{26} + M_{62} \right) \\\end{split}\\\begin{split} \eta_{34} & = & \frac{1}{2} E_3 \left( M_{34} + M_{43} \right) \\ \eta_{35} & = & \frac{1}{2} E_3 \left( M_{35} + M_{53} \right) \\ \eta_{36} & = & \frac{1}{2} E_3 \left( M_{36} + M_{63} \right) \\\end{split}\\\begin{split} \eta_{45} & = & \frac{1}{2} G_{12} \left( M_{45} + M_{54} \right) \\ \eta_{46} & = & \frac{1}{2} G_{12} \left( M_{46} + M_{64} \right) \\ \eta_{56} & = & \frac{1}{2} G_{12} \left( M_{56} + M_{65} \right) \end{eqnarray*}\end{split}\end{aligned}\end{align} \]Example:
mat A(6, 6, fill::randu); mat M = A.t() * A; vec aniso_props = M_aniso_props(M);
- Parameters:
M – (6x6 arma::mat) A compliance tensor
- Returns:
(arma::vec) the vector of parameters \( \left(E_1, E_1, E_3, \nu_{12} \nu_{13}, \nu_{23}, G_{12}, G_{13}, G_{23}, \eta_{14}, \eta_{15}, \eta_{16}, \eta_{24}, \eta_{25}, \eta_{26}, \eta_{34}, \eta_{35}, \eta_{36}, \eta_{45}, \eta_{46}, \eta_{56} \right) \)