diff --git a/src/Geometry/conversions.jl b/src/Geometry/conversions.jl index eb2d7bedf6..7de85e24b8 100644 --- a/src/Geometry/conversions.jl +++ b/src/Geometry/conversions.jl @@ -7,7 +7,7 @@ ContravariantVector(u::ContravariantVector, ::LocalGeometry) = u CovariantVector(u::CovariantVector, ::LocalGeometry) = u LocalVector(u::LocalVector, ::LocalGeometry) = u - +# conversions between Covariant/Contravariant vectors and local vectors ContravariantVector( u::LocalVector{T, I}, local_geometry::LocalGeometry{I}, @@ -25,6 +25,29 @@ LocalVector( local_geometry::LocalGeometry{I}, ) where {T, I} = local_geometry.∂ξ∂x' * u +# conversions between Covariant and Contravariant vectors +Contravariant123Vector( + u::CovariantVector{T, (1, 2)}, + local_geometry::LocalGeometry{(1, 2, 3)}, +) where {T} = local_geometry.gⁱʲ * Covariant123Vector(u[1], u[2], zero(u[1])) + +Contravariant123Vector( + u::CovariantVector{T, (3,)}, + local_geometry::LocalGeometry{(1, 2, 3)}, +) where {T} = + local_geometry.gⁱʲ * Covariant123Vector(zero(u[1]), zero(u[1]), u[1]) + + +ContravariantVector( + u::CovariantVector{T, I}, + local_geometry::LocalGeometry{I}, +) where {T, I} = local_geometry.gⁱʲ * u + +CovariantVector( + u::ContravariantVector{T, I}, + local_geometry::LocalGeometry{I}, +) where {T, I} = local_geometry.gᵢⱼ * u + # Converting to specific dimension types (::Type{<:ContravariantVector{<:Any, I}})( u::ContravariantVector{<:Any, I}, diff --git a/src/Geometry/localgeometry.jl b/src/Geometry/localgeometry.jl index 2c045fa614..98010215c6 100644 --- a/src/Geometry/localgeometry.jl +++ b/src/Geometry/localgeometry.jl @@ -19,11 +19,22 @@ struct LocalGeometry{I, C <: AbstractPoint, FT, S} ∂ξ∂x::Axis2Tensor{FT, Tuple{ContravariantAxis{I}, LocalAxis{I}}, S} "Contravariant metric tensor (inverse of gᵢⱼ), transforms covariant to contravariant vector components" gⁱʲ::Axis2Tensor{FT, Tuple{ContravariantAxis{I}, ContravariantAxis{I}}, S} + "Covariant metric tensor (gᵢⱼ), transforms contravariant to covariant vector components" + gᵢⱼ::Axis2Tensor{FT, Tuple{CovariantAxis{I}, CovariantAxis{I}}, S} end @inline function LocalGeometry(coordinates, J, WJ, ∂x∂ξ) ∂ξ∂x = inv(∂x∂ξ) - return LocalGeometry(coordinates, J, WJ, inv(J), ∂x∂ξ, ∂ξ∂x, ∂ξ∂x * ∂ξ∂x') + return LocalGeometry( + coordinates, + J, + WJ, + inv(J), + ∂x∂ξ, + ∂ξ∂x, + ∂ξ∂x * ∂ξ∂x', + ∂x∂ξ' * ∂x∂ξ, + ) end """