@@ -22,81 +22,7 @@ export Contravariant1Vector,
22
22
Contravariant23Vector,
23
23
Contravariant123Vector
24
24
25
- import LinearAlgebra
26
- """
27
- SimpleSymmetric
28
-
29
- A simple Symmetric matrix. `LinearAlgebra.Symmetric` has a field
30
- `uplo::Char`, which results in a failed `check_basetype(T, S)`.
31
- """
32
- struct SimpleSymmetric{T, S <: AbstractMatrix{<:T} } <: AbstractMatrix{T}
33
- data:: S
34
- function SimpleSymmetric {T, S} (data) where {T, S <: AbstractMatrix{<:T} }
35
- new {T, S} (data)
36
- end
37
- end
38
- SimpleSymmetric (A) = cc_symmetric_type (typeof (A))(A)
39
- 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
55
-
56
- """
57
- cc_symmetric_type(T::Type)
58
-
59
- The type of the object returned by `symmetric(::T, ::Symbol)`. For matrices, this is an
60
- appropriately typed `Symmetric`, for `Number`s, it is the original type. If `symmetric` is
61
- implemented for a custom type, so should be `cc_symmetric_type`, and vice versa.
62
- """
63
- cc_symmetric_type (:: Type{T} ) where {S, T <: AbstractMatrix{S} } =
64
- SimpleSymmetric{
65
- Union{S, Base. promote_op (transpose, S), cc_symmetric_type (S)},
66
- T,
67
- }
68
- cc_symmetric_type (:: Type{T} ) where {S <: Number , T <: AbstractMatrix{S} } =
69
- SimpleSymmetric{S, T}
70
- cc_symmetric_type (
71
- :: Type{T} ,
72
- ) where {S <: AbstractMatrix , T <: AbstractMatrix{S} } =
73
- SimpleSymmetric{AbstractMatrix, T}
74
- cc_symmetric_type (:: Type{T} ) where {T <: Number } = T
75
-
76
- Base. @propagate_inbounds function Base. getindex (
77
- A:: SimpleSymmetric ,
78
- i:: Integer ,
79
- j:: Integer ,
80
- )
81
- @boundscheck checkbounds (A, i, j)
82
- @inbounds if i == j
83
- data_ij = A. data[i, j]
84
- if data_ij isa AbstractMatrix
85
- return SimpleSymmetric (data_ij):: cc_symmetric_type (eltype (A. data))
86
- elseif data_ij isa Number
87
- return data_ij:: cc_symmetric_type (eltype (A. data))
88
- end
89
- elseif (i < j)
90
- return A. data[i, j]
91
- else
92
- return LinearAlgebra. transpose (A. data[j, i])
93
- end
94
- end
95
-
96
- Base. @propagate_inbounds Base. getindex (A:: SimpleSymmetric , i:: Integer ) =
97
- A. data[i]
98
-
99
-
25
+ include (" simple_symmetric.jl" )
100
26
include (" coordinates.jl" )
101
27
include (" axistensors.jl" )
102
28
include (" localgeometry.jl" )
0 commit comments