Skip to content

Commit 591c0ce

Browse files
wip
1 parent e1e0879 commit 591c0ce

File tree

4 files changed

+61
-2
lines changed

4 files changed

+61
-2
lines changed

.buildkite/pipeline.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ steps:
140140
key: unit_rmul_with_projection
141141
command: "julia --color=yes --check-bounds=yes --project=.buildkite test/Geometry/rmul_with_projection.jl"
142142

143+
- label: "Unit: simple_symmetric"
144+
key: unit_simple_symmetric
145+
command: "julia --color=yes --check-bounds=yes --project=.buildkite test/Geometry/unit_simple_symmetric.jl"
146+
143147
- group: "Unit: Meshes"
144148
steps:
145149

src/Geometry/Geometry.jl

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export Contravariant1Vector,
2222
Contravariant23Vector,
2323
Contravariant123Vector
2424

25-
25+
import LinearAlgebra
2626
"""
2727
SimpleSymmetric
2828
@@ -36,8 +36,22 @@ struct SimpleSymmetric{T, S <: AbstractMatrix{<:T}} <: AbstractMatrix{T}
3636
end
3737
end
3838
SimpleSymmetric(A) = cc_symmetric_type(typeof(A))(A)
39-
4039
LinearAlgebra.transpose(A::SimpleSymmetric) = A
40+
Base.similar(::Type{SimpleSymmetric{T, S}}, ax) where {T, S} = SimpleSymmetric{T}(similar(S))
41+
42+
Base.size(A::SimpleSymmetric) = Base.size(A.data)
43+
Base.eltype(::SimpleSymmetric{T}) where {T} = T
44+
# Base.iterate(iter, state)
45+
Base.ndims(::SimpleSymmetric{T, S}) where {T, S} = Base.ndims(S)
46+
# Base.:*(A::SimpleSymmetric, B::SimpleSymmetric) = A * copyto!(similar(parent(B)), B)
47+
48+
# Base.:*(A::SimpleSymmetric, x::Number) = SimpleSymmetric(A.data*x)
49+
# Base.:*(x::Number, A::SimpleSymmetric) = SimpleSymmetric(x*A.data)
50+
# Base.:*(A::SimpleSymmetric, B::AbstractMatrix) = A.data * B
51+
# Base.:*(A::AbstractMatrix, B::SimpleSymmetric) = A * B.data
52+
# Base.:/(A::SimpleSymmetric, x::Number) = SimpleSymmetric(A.data / x)
53+
# Base.:/(A::SimpleSymmetric, B::AbstractMatrix) = A.data * B
54+
# Base.:/(A::AbstractMatrix, B::SimpleSymmetric) = A * B.data
4155

4256
"""
4357
cc_symmetric_type(T::Type)

src/Geometry/axistensors.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,8 +402,16 @@ end
402402
function Base.:*(x::AxisVector, y::AdjointAxisVector)
403403
AxisTensor((axes(x, 1), axes(y, 2)), components(x) * components(y))
404404
end
405+
import InteractiveUtils
405406
function Base.:*(A::Axis2TensorOrAdj, x::AxisVector)
406407
check_dual(axes(A, 2), axes(x, 1))
408+
c = components(A) * components(x)
409+
# @show typeof(A)
410+
# @show typeof(x)
411+
# s = InteractiveUtils.@which components(A) * components(x)
412+
# @show s
413+
# # @show typeof(x)
414+
# @show c
407415
return AxisVector(axes(A, 1), components(A) * components(x))
408416
end
409417
function Base.:*(A::Axis2TensorOrAdj, B::Axis2TensorOrAdj)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#=
2+
julia --project=.buildkite
3+
using Revise; include(joinpath("test", "Geometry", "unit_simple_symmetric.jl"))
4+
=#
5+
using Test
6+
using StaticArrays
7+
using LinearAlgebra: Symmetric
8+
9+
@testset "Symmetric" begin
10+
A = Symmetric([1 2; 3 4])
11+
@test A[1,1] == 1
12+
@test A[1,2] == 2
13+
@test A[2,1] == 2 # Do not access below diagonal
14+
@test A[2,2] == 4
15+
16+
B₀ = @SMatrix [1 2; 3 4]
17+
A = Symmetric(B₀)
18+
C = A * B₀
19+
@show typeof(C)
20+
@test C isa SMatrix
21+
@test C == B₀ * B₀
22+
23+
A = @SMatrix [1 2; 3 4]
24+
@test Symmetric(A) * 2 === Symmetric(A * 2)
25+
26+
A = @SMatrix [1 2; 3 4]
27+
@test Symmetric(A) / 2 === Symmetric(A / 2)
28+
29+
# Make sure * does not access below diagonal:
30+
A = @SMatrix [1 2; 3 4]
31+
S2 = Symmetric(A) * 2
32+
@test S2.data[2,1] == 3
33+
end

0 commit comments

Comments
 (0)