Elasticipy.FourthOrderTensor module
- class Elasticipy.FourthOrderTensor.ComplianceTensor(C, **kwargs)[source]
Bases:
StiffnessTensorClass for manipulating compliance tensors
- C11_C12_factor = 2.0
- C46_C56_factor = 2.0
- Hill_average()[source]
Compute the (Voigt-Reuss-)Hill 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-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
fromCrystalSymmetryDefine a stiffness tensor, taking advantage of crystal symmetry
- classmethod orthotropic(**kwargs)[source]
Create a stiffness tensor corresponding to orthotropic symmetry, given the engineering constants.
- Parameters:
Ex (float) – Young modulus along the x axis
Ey (float) – Young modulus along the y axis
Ez (float) – Young modulus along the z axis
nu_xy (float) – Poisson ratio between x and y axes
nu_xz (float) – Poisson ratio between x and z axes
nu_yz (float) – Poisson ratio between y and z axes
Gxy (float) – Shear modulus in the x-y plane
Gxz (float) – Shear modulus in the x-z plane
Gyz (float) – Shear modulus in the y-z plane
kwargs (dict, optional) – Keyword arguments to pass to the StiffnessTensor constructor
- Return type:
See also
transverse_isotropiccreate a stiffness tensor for transverse-isotropic symmetry
- tensor_name = 'Compliance'
- classmethod transverse_isotropic(**kwargs)[source]
Create a stiffness tensor corresponding to the transverse isotropic symmetry, given the engineering constants.
- Parameters:
Ex (float) – Young modulus along the x axis
Ez (float) – Young modulus along the y axis
nu_xy (float) – Poisson ratio between x and y axes
nu_xz (float) – Poisson ratio between x and z axes
Gxz (float) – Shear modulus in the x-z plane
kwargs (dict) – Keyword arguments to pass to the StiffnessTensor constructor
- Return type:
See also
orthotropiccreate a stiffness tensor for orthotropic symmetry
- 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
- Christoffel_tensor(u)[source]
Create the Christoffel tensor along a given direction, or set or directions.
- Parameters:
u (list or np.ndarray) – 3D direction(s) to compute the Christoffel tensor along with
- Returns:
Gamma – Array of Christoffel tensor(s). if u is a list of directions, Gamma[i] is the Christoffel tensor for direction u[i].
- Return type:
np.ndarray
See also
wave_velocitycomputes the p- and s-wave velocities.
Notes
For a given stiffness tensor C and a given unit vector u, the Christoffel tensor is defined as [2] :
\[M_{ij} = C_{iklj}.u_k.u_l\]
- Hill_average()[source]
Compute the (Voigt-Reuss-)Hill 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-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
See also
transverse_isotropiccreate a transverse-isotropic tensor
Examples
On can check that the shear modulus for steel is around 82 GPa:
>>> from Elasticipy.FourthOrderTensor import StiffnessTensor >>> C=StiffnessTensor.isotropic(E=210e3, nu=0.28) >>> C.shear_modulus Hyperspherical function Min=82031.24999999991, Max=82031.24999999997
- classmethod orthotropic(*, Ex, Ey, Ez, nu_xy, nu_xz, nu_yz, Gxy, Gxz, Gyz, **kwargs)[source]
Create a stiffness tensor corresponding to orthotropic symmetry, given the engineering constants.
- Parameters:
Ex (float) – Young modulus along the x axis
Ey (float) – Young modulus along the y axis
Ez (float) – Young modulus along the z axis
nu_xy (float) – Poisson ratio between x and y axes
nu_xz (float) – Poisson ratio between x and z axes
nu_yz (float) – Poisson ratio between y and z axes
Gxy (float) – Shear modulus in the x-y plane
Gxz (float) – Shear modulus in the x-z plane
Gyz (float) – Shear modulus in the y-z plane
kwargs (dict, optional) – Keyword arguments to pass to the StiffnessTensor constructor
- Return type:
See also
transverse_isotropiccreate a stiffness tensor for transverse-isotropic symmetry
- property shear_modulus
Directional shear modulus
- Returns:
Shear modulus
- Return type:
- tensor_name = 'Stiffness'
- classmethod transverse_isotropic(*, Ex, Ez, nu_xy, nu_xz, Gxz, **kwargs)[source]
Create a stiffness tensor corresponding to the transverse isotropic symmetry, given the engineering constants.
- Parameters:
Ex (float) – Young modulus along the x axis
Ez (float) – Young modulus along the y axis
nu_xy (float) – Poisson ratio between x and y axes
nu_xz (float) – Poisson ratio between x and z axes
Gxz (float) – Shear modulus in the x-z plane
kwargs (dict) – Keyword arguments to pass to the StiffnessTensor constructor
- Return type:
See also
orthotropiccreate a stiffness tensor for orthotropic symmetry
- wave_velocity(rho)[source]
Compute the wave velocities, given the mass density.
- Parameters:
rho (float) – mass density. Its unit must be consistent with that of the stiffness tensor. See notes for hints.
See also
ChristoffelTensorComputes the Christoffel tensor along a given direction
- Returns:
c_p (SphericalFunction) – Velocity of the primary (compressive) wave
c_s1 (SphericalFunction) – Velocity of the fast secondary (shear) wave
c_s2 (SphericalFunction) – Velocity of the slow secondary (shear) wave
Notes
The estimation of the wave velocities is made by finding the eigenvalues of the Christoffel tensor [2].
One should double-check the units. The table below provides hints about the unit you get, depending on the units you use for stiffness and the mass density:
Stiffness
Mass density
Velocities
Notes
Pa (N/m²)
kg/m³
m/s
SI units
GPa (10⁹ Pa)
kg/dm³
km/s
Conversion factor
GPa (10³ N/mm²)
kg/mm³
m/s
Consistent units
MPa (10⁶ Pa)
kg/m³
km/s
Conversion factor
MPa (10³ N/mm²)
g/mm³
m/s
Consistent units
References
- class Elasticipy.FourthOrderTensor.SymmetricTensor(M, phase_name=None, 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
- C46_C56_factor = 1.0
- component_prefix = 'C'
- classmethod cubic(*, C11=0.0, C12=0.0, C44=0.0, phase_name=None)[source]
Create a fourth-order tensor from cubic symmetry.
- Parameters:
C11 (float)
C12 (float)
C44 (float)
phase_name (str, optional) – Phase name to display
- Return type:
See also
hexagonalcreate a tensor from hexagonal symmetry
orthorhombiccreate a tensor from orthorhombic symmetry
- classmethod fromCrystalSymmetry(symmetry='Triclinic', point_group=None, diad='y', phase_name=None, prefix=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
prefix (str, default None) – Define the prefix to use when providing the components. By default, it is ‘C’ for stiffness tensors, ‘S’ for compliance.
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. The behaviour can be overriten with the prefix option (see above)
- 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
[1] Nye, J. F. Physical Properties of Crystals. London: Oxford University Press, 1959.
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
- classmethod hexagonal(*, C11=0.0, C12=0.0, C13=0.0, C33=0.0, C44=0.0, phase_name=None)[source]
Create a fourth-order tensor from hexagonal symmetry.
- Parameters:
C11 (float)
C12 (float)
C13 (float)
C33 (float)
C44 (float)
phase_name (str, optional) – Phase name to display
- Return type:
FourthOrderTensor
See also
transverse_isotropiccreates a transverse-isotropic tensor from engineering parameters
cubiccreate a tensor from cubic symmetry
tetragonalcreate a tensor from tetragonal symmetry
- classmethod monoclinic(*, C11=0.0, C12=0.0, C13=0.0, C22=0.0, C23=0.0, C33=0.0, C44=0.0, C55=0.0, C66=0.0, C15=None, C25=None, C35=None, C46=None, C16=None, C26=None, C36=None, C45=None, phase_name=None)[source]
Create a fourth-order tensor from monoclinic symmetry. It automatically detects whether the components are given according to the Y or Z diad, depending on the input arguments.
For Diad || y, C15, C25, C35 and C46 must be provided. For Diad || z, C16, C26, C36 and C45 must be provided.
- Parameters:
C11 (float)
C12 (float)
C13 (float)
C22 (float)
C23 (float)
C33 (float)
C44 (float)
C55 (float)
C66 (float)
C15 (float, optional)
C25 (float, optional)
C35 (float, optional)
C46 (float, optional)
C16 (float, optional)
C26 (float, optional)
C36 (float, optional)
C45 (float, optional)
phase_name (str, optional) – Name to display
- Return type:
FourthOrderTensor
See also
tricliniccreate a tensor from triclinic symmetry
orthorhombiccreate a tensor from orthorhombic symmetry
- classmethod orthorhombic(*, C11=0.0, C12=0.0, C13=0.0, C22=0.0, C23=0.0, C33=0.0, C44=0.0, C55=0.0, C66=0.0, phase_name=None)[source]
Create a fourth-order tensor from orthorhombic symmetry.
- Parameters:
C11 (float)
C12 (float)
C13 (float)
C22 (float)
C23 (float)
C33 (float)
C44 (float)
C55 (float)
C66 (float)
phase_name (str, optional) – Phase name to display
- Return type:
FourthOrderTensor
See also
monocliniccreate a tensor from monoclinic symmetry
orthorhombiccreate a tensor from orthorhombic symmetry
- 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'
- classmethod tetragonal(*, C11=0.0, C12=0.0, C13=0.0, C33=0.0, C44=0.0, C16=0.0, C66=0.0, phase_name=None)[source]
Create a fourth-order tensor from tetragonal symmetry.
- Parameters:
C11 (float)
C12 (float)
C13 (float)
C33 (float)
C44 (float)
C66 (float)
C16 (float, optional) – 16 component in Voigt notation (for point groups 4, -4 and 4/m only)
phase_name (str, optional) – Phase name to display
- Return type:
FourthOrderTensor
See also
trigonalcreate a tensor from trigonal symmetry
orthorhombiccreate a tensor from orthorhombic symmetry
- classmethod triclinic(C11=0.0, C12=0.0, C13=0.0, C14=0.0, C15=0.0, C16=0.0, C22=0.0, C23=0.0, C24=0.0, C25=0.0, C26=0.0, C33=0.0, C34=0.0, C35=0.0, C36=0.0, C44=0.0, C45=0.0, C46=0.0, C55=0.0, C56=0.0, C66=0.0, phase_name=None)[source]
- Parameters:
C11 (float)
C12 (float)
C13 (float)
C14 (float)
C15 (float)
C16 (float)
C22 (float)
C23 (float)
C24 (float)
C25 (float)
C26 (float)
C33 (float)
C34 (float)
C35 (float)
C36 (float)
C44 (float)
C45 (float)
C46 (float)
C55 (float)
C56 (float)
C66 (float)
phase_name (str, optional) – Name to display
- Return type:
FourthOrderTensor
See also
monocliniccreate a tensor from monoclinic symmetry
orthorhombiccreate a tensor from orthorhombic symmetry
- classmethod trigonal(*, C11=0.0, C12=0.0, C13=0.0, C14=0.0, C33=0.0, C44=0.0, C15=0.0, phase_name=None)[source]
Create a fourth-order tensor from trigonal symmetry.
- Parameters:
C11 (float)
C12 (float)
C13 (float)
C14 (float)
C33 (float)
C44 (float)
C15 (float, optional)
phase_name (str, optional) – Phase name to display
- Return type:
FourthOrderTensor
See also
tetragonalcreate a tensor from tetragonal symmetry
orthorhombiccreate a tensor from orthorhombic symmetry
- 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.]])