Skip to content

Commit b4e7154

Browse files
authored
Merge pull request #16 from MineralsCloud:invariants
Fix src/invariants.jl
2 parents 1d1ae6a + bf00a7f commit b4e7154

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/invariants.jl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,22 @@ principal_values(x::Union{TensorStress,TensorStrain}) = _eigen(x).values
88

99
principal_axes(x::Union{TensorStress,TensorStrain}) = _eigen(x).vectors
1010

11-
principal_invariants(x::Union{TensorStress,TensorStrain}) = stress_invariants(parent(x))
11+
principal_invariants(x::Union{TensorStress,TensorStrain}) = stress_invariants(_tensor(x))
1212

1313
main_invariants(x::Union{TensorStress,TensorStrain}) =
14-
deviatoric_stress_invariants(parent(x))
14+
deviatoric_stress_invariants(_tensor(x))
1515

1616
for T in (:TensorStress, :TensorStrain)
1717
@eval begin
18-
hydrostatic(x::$T) = $T(vol(SymmetricSecondOrderTensor{3}(float(x))))
19-
deviatoric(x::$T) = $T(dev(SymmetricSecondOrderTensor{3}(float(x))))
18+
hydrostatic(x::$T) = $T(vol(_tensor(x)))
19+
deviatoric(x::$T) = $T(dev(_tensor(x)))
2020
end
2121
end
2222

23+
_tensor(x) = SymmetricSecondOrderTensor{3}(float(x))
24+
2325
function _eigen(x)
24-
unitless = @. x / oneunit(x)
25-
eg = eigen(unitless)
26-
return Eigen(eg.values * oneunit(x[1]), eg.vectors)
26+
x′ = @. x / oneunit(x) # Dimensionless
27+
eg = eigen(Matrix(x′))
28+
return Eigen(eg.values * oneunit(eltype(x)), eg.vectors)
2729
end

0 commit comments

Comments
 (0)