comparison src/Grids/manifolds.jl @ 1779:2a8a2b52a112 feature/grids/manifolds

Refactor Interval to its own type. This allows the user better control of the coordinate type of 1d grids
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 16 Sep 2024 08:33:43 +0200
parents e213bd857f3f
children 8ecdc5bb46be
comparison
equal deleted inserted replaced
1778:a93d2b668446 1779:2a8a2b52a112
19 """ 19 """
20 abstract type ParameterSpace{D} end 20 abstract type ParameterSpace{D} end
21 Base.ndims(::ParameterSpace{D}) where D = D 21 Base.ndims(::ParameterSpace{D}) where D = D
22 # TBD: Should implement domain_dim? 22 # TBD: Should implement domain_dim?
23 23
24 struct Interval{T} <: ParameterSpace{1}
25 a::T
26 b::T
27
28 function Interval(a,b)
29 a, b = promote(a, b)
30 new{typeof(a)}(a,b)
31 end
32 end
33
34 limits(i::Interval) = (i.a, i.b)
35
36 unitinterval(T=Float64) = Interval(zero(T), one(T))
37
38
24 struct HyperBox{T,D} <: ParameterSpace{D} 39 struct HyperBox{T,D} <: ParameterSpace{D}
25 a::SVector{D,T} 40 a::SVector{D,T}
26 b::SVector{D,T} 41 b::SVector{D,T}
27 end 42 end
28 43
29 function HyperBox(a,b) 44 function HyperBox(a,b)
30 T = SVector{length(a)} 45 T = SVector{length(a)}
31 HyperBox(convert(T,a), convert(T,b)) 46 HyperBox(convert(T,a), convert(T,b))
32 end 47 end
33 48
34 Interval{T} = HyperBox{T,1}
35 Rectangle{T} = HyperBox{T,2} 49 Rectangle{T} = HyperBox{T,2}
36 Box{T} = HyperBox{T,3} 50 Box{T} = HyperBox{T,3}
37 51
38 limits(box::HyperBox, d) = (box.a[d], box.b[d]) 52 limits(box::HyperBox, d) = (box.a[d], box.b[d])
39 limits(box::HyperBox) = (box.a, box.b) 53 limits(box::HyperBox) = (box.a, box.b)
40 54
41 unitinterval(T=Float64) = unithyperbox(T,1)
42 unitsquare(T=Float64) = unithyperbox(T,2) 55 unitsquare(T=Float64) = unithyperbox(T,2)
43 unitcube(T=Float64) = unithyperbox(T,3) 56 unitcube(T=Float64) = unithyperbox(T,3)
44 unithyperbox(T, D) = HyperBox((@SVector zeros(T,D)), (@SVector ones(T,D))) 57 unithyperbox(T, D) = HyperBox((@SVector zeros(T,D)), (@SVector ones(T,D)))
45 unithyperbox(D) = unithyperbox(Float64,D) 58 unithyperbox(D) = unithyperbox(Float64,D)
46 59