diff --git a/src/TensorValues/Operations.jl b/src/TensorValues/Operations.jl index a17424fe6..263ba69e5 100644 --- a/src/TensorValues/Operations.jl +++ b/src/TensorValues/Operations.jl @@ -193,9 +193,9 @@ end end # a_ilm = b_ij*c_jlm -@generated function dot(a::A,b::B) where {A<:MultiValue{Tuple{D,D}},B<:ThirdOrderTensorValue{D}} where D +@generated function dot(a::A,b::B) where {A<:MultiValue{Tuple{D,D}},B<:ThirdOrderTensorValue{D,D,L}} where {D,L} ss = String[] - for m in 1:D + for m in 1:L for l in 1:D for i in 1:D s = join([ "a[$i,$j]*b[$j,$l,$m]+" for j in 1:D]) @@ -204,8 +204,8 @@ end end end str = join(ss) - Meta.parse("ThirdOrderTensorValue{$D}($str)") -end + Meta.parse("ThirdOrderTensorValue{$D,$D,$L}($str)") +end const ⋅¹ = dot diff --git a/test/TensorValuesTests/OperationsTests.jl b/test/TensorValuesTests/OperationsTests.jl index d3b8d246e..20d5fd19e 100644 --- a/test/TensorValuesTests/OperationsTests.jl +++ b/test/TensorValuesTests/OperationsTests.jl @@ -224,6 +224,33 @@ c = a ⋅ st r = VectorValue(14,30,42) @test c == r +a1 = VectorValue(1,0) +b1 = VectorValue(1,2) + +t1 = ThirdOrderTensorValue{2,2,1}(1,2,3,4) +t2 = TensorValue(1,0,0,1) +t3 = TensorValue(1,2,0,0) + +c = a1 ⋅ t1 +@test isa(c,TensorValue{2,1,Int}) +r = TensorValue{2,1}(1,3) +@test c == r + +c = b1 ⋅ t1 +@test isa(c,TensorValue{2,1,Int}) +r = TensorValue{2,1}(5,11) +@test c == r + +c = t2 ⋅ t1 +@test isa(c,ThirdOrderTensorValue{2,2,1,Int,4}) +r = ThirdOrderTensorValue{2,2,1}(1,2,3,4) +@test c == r + +c = t3 ⋅ t1 +@test isa(c,ThirdOrderTensorValue{2,2,1,Int,4}) +r = ThirdOrderTensorValue{2,2,1}(1,2,3,6) +@test c == r + # Inner product (full contraction) c = 2 ⊙ 3