From 5f6ccb7ca31efa3830f98af573dc40443c4b41a3 Mon Sep 17 00:00:00 2001 From: Hridya Dilip Date: Tue, 9 Feb 2021 12:17:42 +1100 Subject: [PATCH 1/3] Adding a new method for dot function for third order tensor values. --- src/TensorValues/Operations.jl | 14 ++++++++++++ test/TensorValuesTests/OperationsTests.jl | 27 +++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/TensorValues/Operations.jl b/src/TensorValues/Operations.jl index a17424fe6..9e00855b0 100644 --- a/src/TensorValues/Operations.jl +++ b/src/TensorValues/Operations.jl @@ -207,6 +207,20 @@ end Meta.parse("ThirdOrderTensorValue{$D}($str)") end +@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: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]) + push!(ss,s[1:(end-1)]*", ") + end + end + end + str = join(ss) + Meta.parse("ThirdOrderTensorValue{$D,$D,$L}($str)") +end + const ⋅¹ = dot ############################################################### diff --git a/test/TensorValuesTests/OperationsTests.jl b/test/TensorValuesTests/OperationsTests.jl index d3b8d246e..80691bd64 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 +a = VectorValue(1,0) +b = VectorValue(1,2) + +t = ThirdOrderTensorValue{2,2,1}(1,2,3,4) +t1 = TensorValue(1,0,0,1) +t2 = TensorValue(1,2,0,0) + +c = a ⋅ t +@test isa(c,TensorValue{2,1,Int}) +r = TensorValue{2,1}(1,3) +@test c == r + +c = b ⋅ t +@test isa(c,TensorValue{2,1,Int}) +r = TensorValue{2,1}(5,11) +@test c == r + +c = t1 ⋅ t +@test isa(c,ThirdOrderTensorValue{2,2,1,Int,4}) +r = ThirdOrderTensorValue{2,2,1}(1,2,3,4) +@test c == r + +c = t2 ⋅ t +@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 From 13d5e9fd01d8be5ec0344e915ea8c80037e7fee1 Mon Sep 17 00:00:00 2001 From: Hridya Dilip Date: Tue, 9 Feb 2021 18:38:31 +1100 Subject: [PATCH 2/3] Removed the older method for dot. --- src/TensorValues/Operations.jl | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/TensorValues/Operations.jl b/src/TensorValues/Operations.jl index 9e00855b0..263ba69e5 100644 --- a/src/TensorValues/Operations.jl +++ b/src/TensorValues/Operations.jl @@ -193,20 +193,6 @@ 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 - ss = String[] - for m in 1:D - for l in 1:D - for i in 1:D - s = join([ "a[$i,$j]*b[$j,$l,$m]+" for j in 1:D]) - push!(ss,s[1:(end-1)]*", ") - end - end - end - str = join(ss) - Meta.parse("ThirdOrderTensorValue{$D}($str)") -end - @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:L From 29b881b139b2a6a004dd9840c9f49b10ebd36615 Mon Sep 17 00:00:00 2001 From: Hridya Dilip Date: Tue, 9 Feb 2021 22:05:14 +1100 Subject: [PATCH 3/3] Corrected errors in tests. --- test/TensorValuesTests/OperationsTests.jl | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/TensorValuesTests/OperationsTests.jl b/test/TensorValuesTests/OperationsTests.jl index 80691bd64..20d5fd19e 100644 --- a/test/TensorValuesTests/OperationsTests.jl +++ b/test/TensorValuesTests/OperationsTests.jl @@ -224,29 +224,29 @@ c = a ⋅ st r = VectorValue(14,30,42) @test c == r -a = VectorValue(1,0) -b = VectorValue(1,2) +a1 = VectorValue(1,0) +b1 = VectorValue(1,2) -t = ThirdOrderTensorValue{2,2,1}(1,2,3,4) -t1 = TensorValue(1,0,0,1) -t2 = TensorValue(1,2,0,0) +t1 = ThirdOrderTensorValue{2,2,1}(1,2,3,4) +t2 = TensorValue(1,0,0,1) +t3 = TensorValue(1,2,0,0) -c = a ⋅ t +c = a1 ⋅ t1 @test isa(c,TensorValue{2,1,Int}) r = TensorValue{2,1}(1,3) @test c == r -c = b ⋅ t +c = b1 ⋅ t1 @test isa(c,TensorValue{2,1,Int}) r = TensorValue{2,1}(5,11) @test c == r -c = t1 ⋅ t +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 = t2 ⋅ t +c = t3 ⋅ t1 @test isa(c,ThirdOrderTensorValue{2,2,1,Int,4}) r = ThirdOrderTensorValue{2,2,1}(1,2,3,6) @test c == r