Elasticipy.FourthOrderTensor module
- class Elasticipy.FourthOrderTensor.ComplianceTensor(C, **kwargs)[source]
Bases:
StiffnessTensorClass for manipulating compliance tensors
- C11_C12_factor = 2.0
- Hill_average()[source]
Compute the (Voigt-Reuss-)Hill average ofthe stiffness tensor. If the tensor contains no orientation, we assume isotropic behaviour. Otherwise, the mean is computed over all orientations.
- Parameters:
orientations (np.ndarray or None) – Set of m orientation matrices, defined as a [m, 3, 3] array. If None, uniform distribution is assumed, resulting in isotropic tensor
- Returns:
Voigt-Reuss-Hill average of tensor
- Return type:
See also
Voigt_averagecompute the Voigt average
Reuss_averagecompute the Reuss average
- Reuss_average()[source]
Compute the Reuss average of the stiffness tensor. If the tensor contains no orientation, we assume isotropic behaviour. Otherwise, the mean is computed over all orientations.
- Returns:
Reuss average of stiffness tensor
- Return type:
See also
Voigt_averagecompute the Voigt average
Hill_averagecompute the Voigt-Reuss-Hill average
- Voigt_average()[source]
Compute the Voigt average of the stiffness tensor. If the tensor contains no orientation, we assume isotropic behaviour. Otherwise, the mean is computed over all orientations.
- Returns:
Voigt average of stiffness tensor
- Return type:
See also
Reuss_averagecompute the Reuss average
Hill_averagecompute the Voigt-Reuss-Hill average
- component_prefix = 'S'
- classmethod isotropic(**kwargs)[source]
Create an isotropic compliance tensor for either E, nu, lame1 or lame2. Exactly two of these parameters must be provided.
- Parameters:
kwargs (keyword arguments) – E, nu, lame1 or lame2, passed to the StiffnessTensor.isotropic constructor
See also
StressTensor.isotropic
- tensor_name = 'Compliance'
- voigt_map = array([[1., 1., 1., 2., 2., 2.], [1., 1., 1., 2., 2., 2.], [1., 1., 1., 2., 2., 2.], [2., 2., 2., 4., 4., 4.], [2., 2., 2., 4., 4., 4.], [2., 2., 2., 4., 4., 4.]])
- class Elasticipy.FourthOrderTensor.StiffnessTensor(S, **kwargs)[source]
Bases:
SymmetricTensorClass for manipulating fourth-order stiffness tensors.
- C11_C12_factor = 0.5
- Hill_average()[source]
Compute the (Voigt-Reuss-)Hill average ofthe stiffness tensor. If the tensor contains no orientation, we assume isotropic behaviour. Otherwise, the mean is computed over all orientations.
- Parameters:
orientations (np.ndarray or None) – Set of m orientation matrices, defined as a [m, 3, 3] array. If None, uniform distribution is assumed, resulting in isotropic tensor
- Returns:
Voigt-Reuss-Hill average of tensor
- Return type:
See also
Voigt_averagecompute the Voigt average
Reuss_averagecompute the Reuss average
- property Poisson_ratio
Directional Poisson’s ratio
- Returns:
Poisson’s ratio
- Return type:
- Reuss_average()[source]
Compute the Reuss average of the stiffness tensor. If the tensor contains no orientation, we assume isotropic behaviour. Otherwise, the mean is computed over all orientations.
- Returns:
Reuss average of stiffness tensor
- Return type:
See also
Voigt_averagecompute the Voigt average
Hill_averagecompute the Voigt-Reuss-Hill average
- Voigt_average()[source]
Compute the Voigt average of the stiffness tensor. If the tensor contains no orientation, we assume isotropic behaviour. Otherwise, the mean is computed over all orientations.
- Returns:
Voigt average of stiffness tensor
- Return type:
See also
Reuss_averagecompute the Reuss average
Hill_averagecompute the Voigt-Reuss-Hill average
- property Young_modulus
Directional Young’s modulus
- Returns:
Young’s modulus
- Return type:
- classmethod isotropic(E=None, nu=None, lame1=None, lame2=None, phase_name=None)[source]
Create an isotropic stiffness tensor from two elasticity coefficients, namely: E, nu, lame1, or lame2. Exactly two of these coefficients must be provided.
- Parameters:
E (float, None) – Young modulus
nu (float, None) – Poisson ratio
lame1 (float, None) – First Lamé coefficient
lame2 (float, None) – Second Lamé coefficient
phase_name (str, None) – Name to print
- Return type:
Corresponding isotropic stiffness tensor
Examples
On can check that the shear modulus for steel is around 80 GPa: >>> C=StiffnessTensor.isotropic(E=210e3, nu=0.28)
… C.shear_modulus Hyperspherical function Min=82031.24999999991, Max=82031.24999999997
- property shear_modulus
Directional shear modulus
- Returns:
Shear modulus
- Return type:
- tensor_name = 'Stiffness'
- class Elasticipy.FourthOrderTensor.SymmetricTensor(M, phase_name='', symmetry='Triclinic', orientations=None)[source]
Bases:
objectTemplate class for manipulating symmetric fourth-order tensors.
- matrix
(6,6) matrix gathering all the components of the tensor, using the Voigt notation.
- Type:
np.ndarray
- symmetry
Symmetry of the tensor
- Type:
str
- C11_C12_factor = 0.5
- component_prefix = 'C'
- classmethod fromCrystalSymmetry(symmetry='Triclinic', point_group=None, diad='x', phase_name=None, **kwargs)[source]
Create a fourth-order tensor from limited number of components, taking advantage of crystallographic symmetries
- Parameters:
symmetry (str, default Triclinic) – Name of the crystallographic symmetry
point_group (str) – Point group of the considered crystal. Only used (and mandatory) for tetragonal and trigonal symmetries.
diad (str {'x', 'y'}, default 'x') – Alignment convention. Sets whether x||a or y||b. Only used for monoclinic symmetry.
phase_name (str, default None) – Name to use when printing the tensor
kwargs – Keywords describing all the necessary components, depending on the crystal’s symmetry and the type of tensor. For Stiffness, they should be named as ‘Cij’ (e.g. C11=…, C12=…). For Comliance, they should be named as ‘Sij’ (e.g. S11=…, S12=…). See examples below.
- Return type:
FourthOrderTensor
See also
StiffnessTensor.isotropiccreates an isotropic stiffness tensor from two paremeters (e.g. E and v).
Notes
The relationships between the tensor’s components depend on the crystallogrpahic symmetry [1].
References
Examples
>>> from Elasticipy.FourthOrderTensor import StiffnessTensor
>>> StiffnessTensor.fromCrystalSymmetry(symmetry='monoclinic', diad='y', phase_name='TiNi', ... C11=231, C12=127, C13=104, ... C22=240, C23=131, C33=175, ... C44=81, C55=11, C66=85, ... C15=-18, C25=1, C35=-3, C46=3) Stiffness tensor (in Voigt notation) for TiNi: [[231. 127. 104. 0. -18. 0.] [127. 240. 131. 0. 1. 0.] [104. 131. 175. 0. -3. 0.] [ 0. 0. 0. 81. 0. 3.] [-18. 1. -3. 0. 11. 0.] [ 0. 0. 0. 3. 0. 85.]] Symmetry: monoclinic
>>> from Elasticipy.FourthOrderTensor import ComplianceTensor
>>> ComplianceTensor.fromCrystalSymmetry(symmetry='monoclinic', diad='y', phase_name='TiNi', ... S11=8, S12=-3, S13=-2, ... S22=8, S23=-5, S33=10, ... S44=12, S55=116, S66=12, ... S15=14, S25=-8, S35=0, S46=0) Compliance tensor (in Voigt notation) for TiNi: [[ 8. -3. -2. 0. 14. 0.] [ -3. 8. -5. 0. -8. 0.] [ -2. -5. 10. 0. 0. 0.] [ 0. 0. 0. 12. 0. 0.] [ 14. -8. 0. 0. 116. 0.] [ 0. 0. 0. 0. 0. 12.]] Symmetry: monoclinic
- full_tensor()[source]
Returns the full (unvoigted) tensor, as a [3, 3, 3, 3] array
- Returns:
Full tensor (4-index notation)
- Return type:
np.ndarray
- rotate(rotation)[source]
Apply a single rotation to a tensor, and return its component into the rotated frame.
- Parameters:
rotation (Rotation) – Rotation to apply
- Returns:
Rotated tensor
- Return type:
- tensor_name = 'Symmetric'
- voigt_map = array([[1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.], [1., 1., 1., 1., 1., 1.]])