comparison src/Grids/tensor_grid.jl @ 1954:b0915f43b122 feature/sbp_operators/laplace_curvilinear

Merge feature/grids/geometry_functions
author Jonatan Werpers <jonatan@werpers.com>
date Sat, 08 Feb 2025 09:38:58 +0100
parents b1eb33e62d1e
children
comparison
equal deleted inserted replaced
1953:835b1dcee38e 1954:b0915f43b122
45 Base.IteratorSize(::Type{<:TensorGrid{<:Any, D}}) where D = Base.HasShape{D}() 45 Base.IteratorSize(::Type{<:TensorGrid{<:Any, D}}) where D = Base.HasShape{D}()
46 Base.length(g::TensorGrid) = prod(length, g.grids) 46 Base.length(g::TensorGrid) = prod(length, g.grids)
47 Base.size(g::TensorGrid) = LazyTensors.concatenate_tuples(size.(g.grids)...) 47 Base.size(g::TensorGrid) = LazyTensors.concatenate_tuples(size.(g.grids)...)
48 Base.size(g::TensorGrid, d) = size(g)[d] 48 Base.size(g::TensorGrid, d) = size(g)[d]
49 49
50 function spacing(g::TensorGrid)
51 relevant_grids = filter(g->!isa(g,ZeroDimGrid),g.grids)
52 return spacing.(relevant_grids)
53 end
50 54
51 function min_spacing(g::TensorGrid) 55 function min_spacing(g::TensorGrid)
52 relevant_grids = filter(g->!isa(g,ZeroDimGrid),g.grids) 56 relevant_grids = filter(g->!isa(g,ZeroDimGrid),g.grids)
53 d = min_spacing.(relevant_grids) 57 d = min_spacing.(relevant_grids)
54 return minimum(d) 58 return minimum(d)
88 local_boundary_grid = boundary_grid(g.grids[grid_id(id)], boundary_id(id)) 92 local_boundary_grid = boundary_grid(g.grids[grid_id(id)], boundary_id(id))
89 new_grids = Base.setindex(g.grids, local_boundary_grid, grid_id(id)) 93 new_grids = Base.setindex(g.grids, local_boundary_grid, grid_id(id))
90 return TensorGrid(new_grids...) 94 return TensorGrid(new_grids...)
91 end 95 end
92 96
97
98 function boundary_indices(g::TensorGrid{<:Any, 1}, id::TensorGridBoundary)
99 return boundary_indices(g.grids[grid_id(id)], boundary_id(id))
100 end
93 function boundary_indices(g::TensorGrid, id::TensorGridBoundary) 101 function boundary_indices(g::TensorGrid, id::TensorGridBoundary)
94 per_grid_ind = map(g.grids) do g 102 local_b_ind = boundary_indices(g.grids[grid_id(id)], boundary_id(id))
95 ntuple(i->:, ndims(g))
96 end
97 103
98 local_b_ind = boundary_indices(g.grids[grid_id(id)], boundary_id(id)) 104 b_ind = Base.setindex(map(eachindex, g.grids), local_b_ind, grid_id(id))
99 b_ind = Base.setindex(per_grid_ind, local_b_ind, grid_id(id))
100 105
101 return LazyTensors.concatenate_tuples(b_ind...) 106 return view(eachindex(g), b_ind...)
102 end 107 end
103 108
104 function combined_coordinate_vector_type(coordinate_types...) 109 function combined_coordinate_vector_type(coordinate_types...)
105 combined_coord_length = mapreduce(_ncomponents, +, coordinate_types) 110 combined_coord_length = mapreduce(_ncomponents, +, coordinate_types)
106 combined_coord_type = mapreduce(eltype, promote_type, coordinate_types) 111 combined_coord_type = mapreduce(eltype, promote_type, coordinate_types)