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) \)