Mercurial > repos > public > sbplib_julia
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 |