Parametrizations and conversions
Which five numbers describe a transversely isotropic material, how to move between the conventions, and how to go in and out of the Kelvin–Mandel matrix. The matrices themselves are on TI parametrizations.
The three TI conventions
| Constructor | Extractor | Parameters | Builds |
|---|---|---|---|
tens_TI | arg_TI | stiffness or compliance | |
tens_TI_eng | arg_TI_eng | compliance | |
tens_TI_Hoenig | arg_TI_Hoenig | compliance |
All three take the symmetry axis as their last argument and return a TensTI{4,T,5}.
using TensND, LinearAlgebra
n = [0.0, 0.0, 1.0]
𝕊 = tens_TI_eng(9.0, 140.0, 0.40, 0.30, 4.6, n) # a carbon/epoxy ply, GPa
ℂ = inv(𝕊)
arg_TI_eng(𝕊)(9.0, 140.0, 0.4000000000000001, 0.3, 4.6)Converting between them
Conversion is a round trip through the tensor: build with one constructor, read with another extractor. Because all three produce the same object, the conversion is exact rather than fitted.
arg_TI(𝕊) # the same compliance, in component form(0.1111111111111111, -0.04444444444444445, -0.002142857142857143, 0.007142857142857143, 0.05434782608695653)arg_TI_Hoenig(𝕊) # and in dimensionless Hoenig ratios(9.0, 0.4000000000000001, 0.019285714285714288, 15.555555555555557, 1.431111111111111)The engineering and Hoenig forms build a compliance
tens_TI_eng and tens_TI_Hoenig return
ℂ = inv(tens_TI_eng(E₁, E₃, ν₁₂, ν₃₁, G₃₁, n))Applying arg_TI_eng to a stiffness returns numbers that are not the engineering constants of that material.
Walpole coefficients
get_ℓ reads the six classical coefficients, get_ℓ8 all eight. Stiffness and compliance are inverse in the synthetic algebra, so their
ℓC, ℓS = get_ℓ(ℂ), get_ℓ(𝕊)
LC = [ℓC[1] ℓC[3]; ℓC[4] ℓC[2]]
LS = [ℓS[1] ℓS[3]; ℓS[4] ℓS[2]]
round.(LC * LS, digits = 12)2×2 Matrix{Float64}:
1.0 0.0
0.0 1.0round(ℓC[5] * ℓS[5], digits = 12), round(ℓC[6] * ℓS[6], digits = 12)(1.0, 1.0)Kelvin–Mandel round trips
| Function | Direction |
|---|---|
KM | tensor → matrix, canonical frame |
KM_material | TensOrtho → matrix, material frame |
inv_KM | matrix → tensor |
KM(ℂ)6×6 Matrix{Float64}:
10.8618 4.4332 4.58849 0.0 0.0 0.0
4.4332 10.8618 4.58849 0.0 0.0 0.0
4.58849 4.58849 142.753 0.0 0.0 0.0
0.0 0.0 0.0 9.2 0.0 0.0
0.0 0.0 0.0 0.0 9.2 0.0
0.0 0.0 0.0 0.0 0.0 6.42857norm(get_array(inv_KM(KM(ℂ))) - get_array(ℂ))0.0Parameters from a matrix, and back
Four exported aliases give direct access to the projection kernels, for when a
| Function | Does |
|---|---|
ti_params_from_KM(C) | |
KM_from_ti_params(ℓ…) | the five coefficients → |
ortho_params_from_KM(C) | |
KM_from_ortho_params(C…) | the nine constants → |
They assume the matrix is expressed in the frame where the symmetry axis is
ti_params_from_KM(KM(ℂ))(142.75309541150764, 15.294974508375821, 6.489108115768755, 6.42857142857143, 9.200000000000001)norm(KM_from_ti_params(ti_params_from_KM(KM(ℂ))...) - KM(ℂ))1.9860273225978185e-15For a matrix in an arbitrary frame, use proj_tens instead — it handles the rotation. See Projection.