comparison src/Grids/grid.jl @ 1427:26e168924cf1 feature/grids/curvilinear

Merge default
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 23 Aug 2023 15:51:32 +0200
parents 2ad518182b37
children 455e6b4c8b02
comparison
equal deleted inserted replaced
1426:9c689a627244 1427:26e168924cf1
19 """ 19 """
20 abstract type Grid{T,D} end 20 abstract type Grid{T,D} end
21 21
22 Base.ndims(::Grid{T,D}) where {T,D} = D 22 Base.ndims(::Grid{T,D}) where {T,D} = D
23 Base.eltype(::Type{<:Grid{T}}) where T = T 23 Base.eltype(::Type{<:Grid{T}}) where T = T
24
25 Base.getindex(g::Grid, I::CartesianIndex) = g[Tuple(I)...]
24 26
25 """ 27 """
26 coordinate_size(g) 28 coordinate_size(g)
27 29
28 The lenght of the coordinate vector of `Grid` `g`. 30 The lenght of the coordinate vector of `Grid` `g`.
72 # TBD: Can we implement a version here that accepts multiple ids and grouped boundaries? Maybe we need multiblock stuff? 74 # TBD: Can we implement a version here that accepts multiple ids and grouped boundaries? Maybe we need multiblock stuff?
73 75
74 """ 76 """
75 eval_on(g::Grid, f) 77 eval_on(g::Grid, f)
76 78
77 Lazy evaluation `f` on the grid. `f` can either be on the form `f(x,y,...)` 79 Lazy evaluation of `f` on the grid. `f` can either be on the form `f(x,y,...)`
78 with each coordinate as an argument, or on the form `f(x̄)` taking a 80 with each coordinate as an argument, or on the form `f(x̄)` taking a
79 coordinate vector. 81 coordinate vector.
80 82
81 For concrete array grid functions `map(f,g)` can be used instead. 83 For concrete array grid functions `map(f,g)` can be used instead.
82 """ 84 """
87 else 89 else
88 return LazyTensors.LazyFunctionArray((I...)->f(g[I...]...), size(g)) 90 return LazyTensors.LazyFunctionArray((I...)->f(g[I...]...), size(g))
89 end 91 end
90 end 92 end
91 93
94 """
95 eval_on(g::Grid, f::Number)
96
97 Lazy evaluation of a scalar `f` on the grid.
98 """
99 eval_on(g::Grid, f::Number) = return LazyTensors.LazyConstantArray(f, size(g))
100
92 _ncomponents(::Type{<:Number}) = 1 101 _ncomponents(::Type{<:Number}) = 1
93 _ncomponents(T::Type{<:SVector}) = length(T) 102 _ncomponents(T::Type{<:SVector}) = length(T)