Constructing tensors
From an AbstractArray
julia> Vec{2}([1,2])
2-element Vec{2, Int64}: 1 2
julia> Vec{2,Float64}([1,2])
2-element Vec{2, Float64}: 1.0 2.0
julia> Mat{2,2}([1 2; 3 4])
2×2 Tensor{Tuple{2, 2}, Int64, 2, 4}: 1 2 3 4
julia> Mat{2,2,Float64}([1 2; 3 4])
2×2 Tensor{Tuple{2, 2}, Float64, 2, 4}: 1.0 2.0 3.0 4.0
julia> SymmetricSecondOrderTensor{2}([1 2; 3 4]) # InexactError
ERROR: InexactError: convert(SymmetricSecondOrderTensor{2}, [1 2; 3 4])
julia> SymmetricSecondOrderTensor{2}([1 2; 2 4])
2×2 SymmetricSecondOrderTensor{2, Int64, 3}: 1 2 2 4
From a function
julia> δ = one(Mat{2,2})
2×2 Tensor{Tuple{2, 2}, Float64, 2, 4}: 1.0 0.0 0.0 1.0
julia> I = SymmetricFourthOrderTensor{2}((i,j,k,l) -> (δ[i,k]*δ[j,l] + δ[i,l]*δ[j,k])/2)
2×2×2×2 SymmetricFourthOrderTensor{2, Float64, 9}: [:, :, 1, 1] = 1.0 0.0 0.0 0.0 [:, :, 2, 1] = 0.0 0.5 0.5 0.0 [:, :, 1, 2] = 0.0 0.5 0.5 0.0 [:, :, 2, 2] = 0.0 0.0 0.0 1.0
julia> I == one(SymmetricFourthOrderTensor{2})
true
Identity tensors
Base.one
— Functionone(TensorType)
Construct an identity tensor.
julia> δ = one(Mat{3,3})
3×3 Tensor{Tuple{3, 3}, Float64, 2, 9}:
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
julia> I = one(SymmetricFourthOrderTensor{3});
julia> inv(I) ≈ I
true
Zero tensors
Base.zero
— Functionzero(TensorType)
Construct a zero tensor.
julia> zero(Vec{2})
2-element Vec{2, Float64}:
0.0
0.0
julia> zero(Mat{2,3})
2×3 Mat{2, 3, Float64, 6}:
0.0 0.0 0.0
0.0 0.0 0.0
Macros
Tensorial.@Vec
— Macro@Vec [a, b, c, d]
@Vec [i for i in 1:2]
@Vec ones(2)
A convenient macro to construct Vec
.
Tensorial.@Mat
— Macro@Mat [a b c d]
@Mat [[a, b];[c, d]]
@Mat [i+j for i in 1:2, j in 1:2]
@Mat ones(2, 2)
A convenient macro to construct Mat
.
Tensorial.@Tensor
— Macro@Tensor [a b; c d]
@Tensor [[a, b];[c, d]]
@Tensor [i+j for i in 1:2, j in 1:2]
@Tensor ones(2, 2, 2)
A convenient macro to construct Tensor
with arbitrary dimension.
Other special tensors
Levi-Civita
Tensorial.levicivita
— Functionlevicivita(::Val{N} = Val(3))
Return N
dimensional Levi-Civita tensor.
Examples
julia> ϵ = levicivita()
3×3×3 Tensor{Tuple{3, 3, 3}, Int64, 3, 27}:
[:, :, 1] =
0 0 0
0 0 1
0 -1 0
[:, :, 2] =
0 0 -1
0 0 0
1 0 0
[:, :, 3] =
0 1 0
-1 0 0
0 0 0