material

Object

Number of independent parameters

Adjustable alignment

Isotropic

2

no

TransversalIsotropic

5

yes

Orthotropic

9

no


class mechkit.material.Isotropic(auxetic=False, **kwargs)[source]

Representation of homogeneous isotropic material.

Use cases:

  • Create an instance of this class and

    • use the instance as an container representing the material

    • access most common material parameters as attributes or dict-like (implementation of [wikipedia_conversion_table])

    • do arithemtic on eigenvalues using the operators +, -, * with numbers.

Quickstart:

# Create instance
mat = mechkit.material.Isotropic(E=2e6, nu=0.3)

# Use attributes
G = mat.G
stiffness = mat.stiffness_mandel6

Two independent material parameters uniquely define an isotropic material [1] (chapter 4.1.2). Therefore, exactly two material parameters have to be passed to the constructor of this class.

The following primary arguments and aliases are case-insensitive keyword arguments of the constructor:

  • K : Compression modulus

    Aliases : compression_modulus

  • G : Shear modulus

    Aliases : mu, shear_modulus, second_lame, lame_2, C44_voigt, C55_voigt, C66_voigt, C2323, C1313, C1212

  • E : Youngs modulus

    Aliases : youngs_modulus, elastic_modulus

  • la: First Lame parameter

    Aliases : lambd, first_lame, lame_1, C23_voigt, C13_voigt, C12_voigt, C2233, C1133, C1122, C3322, C3311, C2211

  • nu: Poission’s ratio

    Aliases : poisson, poisson_ratio

  • M : Constrained modulus or P-wave modulus

    Aliases : p_wave_modulus, longitudinal_modulus, constrained modulus, C11_voigt, C22_voigt, C33_voigt, C1111, C2222, C3333

with (See Definition of Stiffness Components)

  • C<ij>_voigt : Component of stiffness matrix in Voigt notation

  • C<ijkl> : Component of stiffness in tensor notation

Attributes: ( Accessible both as attributes and dict-like mat['E'] )

  • K : Bulk modulus

  • G, mu : Shear modulus

  • E : Young’s modulus

  • nu, poisson : Poissons ratio

  • la : Lame’s first parameter

  • stiffness : Stiffness in tensor notation

  • stiffness_mandel6 : Stiffness in Mandel6 notation

  • stiffness_voigt : Stiffness in Voigt notation

  • compliance : Compliance in tensor notation

  • compliance_mandel6 : Compliance in Mandel6 notation

  • compliance_voigt : Compliance in Voigt notation

Warning

Using parameters E and M leads to an ambiguity as the poisson’s ratio can be positive or negative.

  • Use auxetic=False if you expect a positive poissons ratio.

  • Use auxetic=True if you expect a negative poissons ratio.

Note

Isotropic linear elasticity:

\[\begin{split}\begin{align*} \boldsymbol{\sigma} &= \mathbb{C} \left[ \boldsymbol{\varepsilon} \right] \\ &= \left( 3 K \mathbb{P}_{\text{1}} + 2 G \mathbb{P}_{\text{2}} \right) \left[ \boldsymbol{\varepsilon} \right] \\ &= \left( 2 \mu \mathbb{I}^{\text{S}} + \lambda \mathbf{I} \otimes \mathbf{I} \right) \left[ \boldsymbol{\varepsilon} \right] \end{align*}\end{split}\]

with (See mechkit.tensors.Basic for details and definitions)

\[\begin{split}\begin{alignat}{2} \mathbb{I}^{\text{S}} &= \begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{1}{2} & 0 & 0 \\ 0 & 0 & 0 & 0 & \frac{1}{2} & 0 \\ 0 & 0 & 0 & 0 & 0 & \frac{1}{2} \end{bmatrix}_{[\text{Voigt}]} \hspace{-10mm} \scriptsize{ \boldsymbol{V}_{\alpha} \otimes \boldsymbol{V}_{\beta} } &= \begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 \\ \end{bmatrix}_{[\text{Mandel6}]} \hspace{-15mm} \scriptsize{ \boldsymbol{B}_{\alpha} \otimes \boldsymbol{B}_{\beta} } \\ \mathbf{I} \otimes \mathbf{I} &= \begin{bmatrix} 1 & 1 & 1 & 0 & 0 & 0 \\ 1 & 1 & 1 & 0 & 0 & 0 \\ 1 & 1 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ \end{bmatrix}_{[\text{Voigt}]} \hspace{-10mm} \scriptsize{ \boldsymbol{V}_{\alpha} \otimes \boldsymbol{V}_{\beta} } &= \begin{bmatrix} 1 & 1 & 1 & 0 & 0 & 0 \\ 1 & 1 & 1 & 0 & 0 & 0 \\ 1 & 1 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ \end{bmatrix}_{[\text{Mandel6}]} \hspace{-15mm} \scriptsize{ \boldsymbol{B}_{\alpha} \otimes \boldsymbol{B}_{\beta} } \end{alignat}\end{split}\]

Therefore, with \(\mu = G\) and \(M = 2G + \lambda\) the isotropic stiffness is

\[\begin{split}\begin{align*} \mathbb{C}_{\text{isotropic}} &= \begin{bmatrix} C_{11} & C_{12} & C_{13} & 0 & 0 & 0 \\ C_{12} & C_{22} & C_{23} & 0 & 0 & 0 \\ C_{13} & C_{23} & C_{33} & 0 & 0 & 0 \\ 0 & 0 & 0 & C_{44} & 0 & 0 \\ 0 & 0 & 0 & 0 & C_{55} & 0 \\ 0 & 0 & 0 & 0 & 0 & C_{66} \end{bmatrix}_{[\text{Voigt}]} \hspace{-10mm} \scriptsize{ \boldsymbol{V}_{\alpha} \otimes \boldsymbol{V}_{\beta} } \\ &= \begin{bmatrix} M & \lambda & \lambda & 0 & 0 & 0 \\ \lambda & M & \lambda & 0 & 0 & 0 \\ \lambda & \lambda & M & 0 & 0 & 0 \\ 0 & 0 & 0 & G & 0 & 0 \\ 0 & 0 & 0 & 0 & G & 0 \\ 0 & 0 & 0 & 0 & 0 & G \end{bmatrix}_{[\text{Voigt}]} \hspace{-10mm} \scriptsize{ \boldsymbol{V}_{\alpha} \otimes \boldsymbol{V}_{\beta} } \\ &= \begin{bmatrix} C_{11} & C_{12} & C_{13} & 0 & 0 & 0 \\ C_{12} & C_{22} & C_{23} & 0 & 0 & 0 \\ C_{13} & C_{23} & C_{33} & 0 & 0 & 0 \\ 0 & 0 & 0 & 2C_{44} & 0 & 0 \\ 0 & 0 & 0 & 0 & 2C_{55} & 0 \\ 0 & 0 & 0 & 0 & 0 & 2C_{66} \end{bmatrix}_{[\text{Mandel6}]} \hspace{-15mm} \scriptsize{ \boldsymbol{B}_{\alpha} \otimes \boldsymbol{B}_{\beta} } \\ &= \begin{bmatrix} M & \lambda & \lambda & 0 & 0 & 0 \\ \lambda & M & \lambda & 0 & 0 & 0 \\ \lambda & \lambda & M & 0 & 0 & 0 \\ 0 & 0 & 0 & 2G & 0 & 0 \\ 0 & 0 & 0 & 0 & 2G & 0 \\ 0 & 0 & 0 & 0 & 0 & 2G \end{bmatrix}_{[\text{Mandel6}]} \hspace{-15mm} \scriptsize{ \boldsymbol{B}_{\alpha} \otimes \boldsymbol{B}_{\beta} } \end{align*}\end{split}\]

Examples

>>> import mechkit
>>> # Create instance
>>> mat = mechkit.material.Isotropic(E=2e6, nu=0.3)
>>> mat = mechkit.material.Isotropic(E=2e6, K=1e6)
>>> # Access attributes
>>> mat.G
857142
>>> mat['E']
2000000
>>> # More examples
>>> mat1 = mechkit.material.Isotropic(M=15, G=5)
>>> mat2 = mechkit.material.Isotropic(C11_voigt=20, C44_voigt=5)
>>> mat1.stiffness_voigt
[[15.  5.  5.  0.  0.  0.]
 [ 5. 15.  5.  0.  0.  0.]
 [ 5.  5. 15.  0.  0.  0.]
 [ 0.  0.  0.  5.  0.  0.]
 [ 0.  0.  0.  0.  5.  0.]
 [ 0.  0.  0.  0.  0.  5.]]
>>> mat2['stiffness_voigt']
[[20. 10. 10.  0.  0.  0.]
 [10. 20. 10.  0.  0.  0.]
 [10. 10. 20.  0.  0.  0.]
 [ 0.  0.  0.  5.  0.  0.]
 [ 0.  0.  0.  0.  5.  0.]
 [ 0.  0.  0.  0.  0.  5.]]
>>> (0.5*mat1 + 0.5*mat2)['stiffness_voigt']
[[17.5  7.5  7.5  0.   0.   0. ]
 [ 7.5 17.5  7.5  0.   0.   0. ]
 [ 7.5  7.5 17.5  0.   0.   0. ]
 [ 0.   0.   0.   5.   0.   0. ]
 [ 0.   0.   0.   0.   5.   0. ]
 [ 0.   0.   0.   0.   0.   5. ]]
>>> mat1['stiffness_mandel6']
[[15.  5.  5.  0.  0.  0.]
 [ 5. 15.  5.  0.  0.  0.]
 [ 5.  5. 15.  0.  0.  0.]
 [ 0.  0.  0. 10.  0.  0.]
 [ 0.  0.  0.  0. 10.  0.]
 [ 0.  0.  0.  0.  0. 10.]]
>>> mat1['compliance_mandel6']
[[ 0.08 -0.02 -0.02  0.    0.    0.  ]
 [-0.02  0.08 -0.02  0.    0.    0.  ]
 [-0.02 -0.02  0.08  0.    0.    0.  ]
 [ 0.   -0.   -0.    0.1  -0.   -0.  ]
 [ 0.    0.    0.    0.    0.1   0.  ]
 [ 0.    0.    0.    0.    0.    0.1 ]]
class mechkit.material.TransversalIsotropic(principal_axis=[1, 0, 0], **kwargs)[source]

Representation of homogeneous transversal isotropic material.

Quickstart:

# Create instance
mat = mechkit.material.TransversalIsotropic(
    E_l=100.0, E_t=20.0, nu_lt=0.3, G_lt=10.0, G_tt=7.0,
    principal_axis=[1, 1, 0]
)

# Use attributes
stiffness = mat.stiffness_mandel6

Five independent material parameters uniquely define a transversal isotropic material [1] (chapter 4.1.2). Therefore, exactly five material parameters have to be passed to the constructor of this class.

See definitions of Engineering Constants.

Coordinate-free indices are used

  • l : longitudinal, i.e. in direction of principal axis

  • t : transversal, i.e. perpendicular to principal axis

and the direction of the principal axis can be given in vector format as principal_axis. The default principal axis is the x-axis. The vector does not have to be normalized.

Valid keyword arguments of the constructor are:

  • E_l

  • E_t

  • G_lt

  • G_tt

  • nu_lt

  • nu_tl

  • nu_tt

Only four combinations of these arguments are valid:

  • E_l, E_t, G_lt, G_tt, nu_lt

  • E_l, E_t, G_lt, G_tt, nu_tl

  • E_l, E_t, G_lt, nu_lt, nu_tt

  • E_l, E_t, G_lt, nu_tl, nu_tt

Attributes are:

  • E_l, E_t, G_lt, G_tt, nu_lt, nu_tl, nu_tt

  • stiffness : Stiffness in tensor notation

  • stiffness_mandel6 : Stiffness in Mandel6 notation

  • stiffness_voigt : Stiffness in Voigt notation

  • compliance : Compliance in tensor notation

  • compliance_mandel6 : Compliance in Mandel6 notation

  • compliance_voigt : Compliance in Voigt notation

Examples

>>> import mechkit
>>> # Create instance
>>> mat = mechkit.material.TransversalIsotropic(
        E_l=100.0, E_t=20.0, nu_lt=0.3, G_lt=10.0, G_tt=7.0,
        principal_axis=[0, 1, 0]
    )
>>> # Access attributes
>>> mat.compliance_voigt
[[ 0.05  -0.003 -0.021  0.     0.     0.   ]
 [-0.003  0.01  -0.003  0.     0.     0.   ]
 [-0.021 -0.003  0.05   0.     0.     0.   ]
 [ 0.    -0.    -0.     0.1   -0.    -0.   ]
 [ 0.     0.     0.     0.     0.143  0.   ]
 [ 0.     0.     0.     0.     0.     0.1  ]]
>>> mat.stiffness_mandel6
[[ 25.68  11.21  11.68   0.     0.     0.  ]
 [ 11.21 106.72  11.21   0.     0.     0.  ]
 [ 11.68  11.21  25.68   0.     0.     0.  ]
 [  0.     0.     0.    20.     0.     0.  ]
 [  0.     0.     0.     0.    14.     0.  ]
 [  0.     0.     0.     0.     0.    20.  ]]
class mechkit.material.Orthotropic(E1, E2, E3, nu12, nu13, nu23, G12, G13, G23)[source]

Representation of homogeneous orthotropic material.

Nine independent material parameters uniquely define an orthotropic material [1] (chapter 4.1.2), aligned with the coordinate axes.

See definitions of Engineering Constants.

Attributes are:

  • E1, E2, E3, nu12, nu13, nu23, G12, G13, G23

  • stiffness : Stiffness in tensor notation

  • stiffness_mandel6 : Stiffness in Mandel6 notation

  • stiffness_voigt : Stiffness in Voigt notation

  • compliance : Compliance in tensor notation

  • compliance_mandel6 : Compliance in Mandel6 notation

  • compliance_voigt : Compliance in Voigt notation

Compliance

\[\begin{split}\begin{align*} \mathbb{C}^{-1}_{\text{orthotropic}} &= \begin{bmatrix} \frac{1}{E_1} & -\frac{\nu_{21}}{E_2} & -\frac{\nu_{31}}{E_3} & 0 & 0 & 0 \\ -\frac{\nu_{12}}{E_1} & \frac{1}{E_2} & -\frac{\nu_{32}}{E_3} & 0 & 0 & 0 \\ -\frac{\nu_{13}}{E_1} & -\frac{\nu_{23}}{E_2} & \frac{1}{E_3} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{1}{G_{23}} & 0 & 0 \\ 0 & 0 & 0 & 0 & \frac{1}{G_{31}} & 0 \\ 0 & 0 & 0 & 0 & 0 & \frac{1}{G_{12}} \end{bmatrix}_{[\text{Voigt}]} \\ &= \begin{bmatrix} \frac{1}{E_1} & -\frac{\nu_{12}}{E_1} & -\frac{\nu_{13}}{E_1} & 0 & 0 & 0 \\ & \frac{1}{E_2} & -\frac{\nu_{23}}{E_2} & 0 & 0 & 0 \\ & &\frac{1}{E_3} & 0 & 0 & 0 \\ & & & \frac{1}{G_{23}} & 0 & 0 \\ & sym & & & \frac{1}{G_{31}} & 0 \\ & & & & & \frac{1}{G_{12}} \end{bmatrix}_{[\text{Voigt}]} \end{align*}\end{split}\]