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 |
