comparison src/Grids/manifolds.jl @ 1780:8ecdc5bb46be feature/grids/manifolds

Allow mixed types in constructors for HyperBox and Simplex
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 16 Sep 2024 08:58:12 +0200
parents 2a8a2b52a112
children a73838c9ef94
comparison
equal deleted inserted replaced
1779:2a8a2b52a112 1780:8ecdc5bb46be
40 a::SVector{D,T} 40 a::SVector{D,T}
41 b::SVector{D,T} 41 b::SVector{D,T}
42 end 42 end
43 43
44 function HyperBox(a,b) 44 function HyperBox(a,b)
45 T = SVector{length(a)} 45 ET = promote_type(eltype(a),eltype(b))
46 T = SVector{length(a),ET}
46 HyperBox(convert(T,a), convert(T,b)) 47 HyperBox(convert(T,a), convert(T,b))
47 end 48 end
48 49
49 Rectangle{T} = HyperBox{T,2} 50 Rectangle{T} = HyperBox{T,2}
50 Box{T} = HyperBox{T,3} 51 Box{T} = HyperBox{T,3}
60 61
61 struct Simplex{T,D,NV} <: ParameterSpace{D} 62 struct Simplex{T,D,NV} <: ParameterSpace{D}
62 verticies::NTuple{NV,SVector{D,T}} 63 verticies::NTuple{NV,SVector{D,T}}
63 end 64 end
64 65
65 Simplex(verticies::Vararg{AbstractArray}) = Simplex(Tuple(SVector(v...) for v ∈ verticies)) 66 function Simplex(verticies::Vararg{AbstractArray})
67 ET = mapreduce(eltype,promote_type,verticies)
68 T = SVector{length(verticies[1]),ET}
69
70 return Simplex(Tuple(convert(T,v) for v ∈ verticies))
71 end
66 72
67 verticies(s::Simplex) = s.verticies 73 verticies(s::Simplex) = s.verticies
68 74
69 Triangle{T} = Simplex{T,2} 75 Triangle{T} = Simplex{T,2}
70 Tetrahedron{T} = Simplex{T,3} 76 Tetrahedron{T} = Simplex{T,3}