Skip to content

Commit

Permalink
Try #1392:
Browse files Browse the repository at this point in the history
  • Loading branch information
bors[bot] authored Jul 25, 2023
2 parents 4c61e33 + 52ab498 commit d4d9836
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
25 changes: 24 additions & 1 deletion src/Geometry/conversions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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},
Expand All @@ -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},
Expand Down
13 changes: 12 additions & 1 deletion src/Geometry/localgeometry.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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

"""
Expand Down

0 comments on commit d4d9836

Please sign in to comment.