Skip to content

Commit b772f73

Browse files
simone-silvestrinavidcysiddharthabishnu
authored
Fix a couple of bugs for immersed cubed sphere (#4574)
* correct getregion for an immersed boundary grid * fix show for a multiregion grid * active cells map for CSG * add a small test for IBG construction on CSG * fix test * bugfix * try this out * we cannot pass it because it is not inlined? * Attempt to fix GPU error * Compact code * Update test_multi_region_cubed_sphere.jl * try this out --------- Co-authored-by: Navid C. Constantinou <[email protected]> Co-authored-by: Sid <[email protected]>
1 parent 51a77cc commit b772f73

File tree

3 files changed

+44
-12
lines changed

3 files changed

+44
-12
lines changed

src/ImmersedBoundaries/immersed_boundary_grid.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,16 @@ function ImmersedBoundaryGrid(grid::AbstractUnderlyingGrid, ib::AbstractImmersed
4747
materialized_ib = materialize_immersed_boundary(grid, ib)
4848

4949
# Create the cells map on the CPU, then switch it to the GPU
50-
interior_active_cells = if active_cells_map
51-
build_active_cells_map(grid, materialized_ib)
50+
if active_cells_map
51+
@apply_regionally interior_active_cells = build_active_cells_map(grid, materialized_ib)
5252
else
53-
nothing
53+
interior_active_cells = nothing
5454
end
5555

56-
active_z_columns = if active_z_columns
57-
build_active_z_columns(grid, materialized_ib)
56+
if active_z_columns
57+
@apply_regionally active_z_columns = build_active_z_columns(grid, materialized_ib)
5858
else
59-
nothing
59+
active_z_columns = nothing
6060
end
6161

6262
TX, TY, TZ = topology(grid)

src/MultiRegion/multi_region_grid.jl

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ struct MultiRegionGrid{FT, TX, TY, TZ, CZ, P, C, G, D, Arch} <: AbstractUnderlyi
2020
new{FT, TX, TY, TZ, CZ, P, C, G, D, A}(arch, partition, connectivity, region_grids, devices)
2121
end
2222

23-
const ImmersedMultiRegionGrid = ImmersedBoundaryGrid{<:Any, <:Any, <:Any, <:Any, <:MultiRegionGrid}
23+
const ImmersedMultiRegionGrid{FT, TX, TY, TZ} = ImmersedBoundaryGrid{FT, TX, TY, TZ, <:MultiRegionGrid}
2424

25-
const MultiRegionGrids = Union{MultiRegionGrid, ImmersedMultiRegionGrid}
25+
const MultiRegionGrids{FT, TX, TY, TZ} = Union{MultiRegionGrid{FT, TX, TY, TZ}, ImmersedMultiRegionGrid{FT, TX, TY, TZ}}
2626

2727
@inline isregional(mrg::MultiRegionGrids) = true
2828
@inline getdevice(mrg::MultiRegionGrid, i) = getdevice(mrg.region_grids, i)
@@ -194,8 +194,15 @@ reconstruct_global_immersed_boundary(g::GridFittedBottom{<:Field}) = GridFit
194194
reconstruct_global_immersed_boundary(g::PartialCellBottom{<:Field}) = PartialCellBottom(reconstruct_global_field(g.bottom_height), g.minimum_fractional_cell_height)
195195
reconstruct_global_immersed_boundary(g::GridFittedBoundary{<:Field}) = GridFittedBoundary(reconstruct_global_field(g.mask))
196196

197-
@inline getregion(mrg::ImmersedMultiRegionGrid{FT, TX, TY, TZ}, r) where {FT, TX, TY, TZ} = ImmersedBoundaryGrid{TX, TY, TZ}(_getregion(mrg.underlying_grid, r), _getregion(mrg.immersed_boundary, r))
198-
@inline _getregion(mrg::ImmersedMultiRegionGrid{FT, TX, TY, TZ}, r) where {FT, TX, TY, TZ} = ImmersedBoundaryGrid{TX, TY, TZ}( getregion(mrg.underlying_grid, r), getregion(mrg.immersed_boundary, r))
197+
@inline getregion(mrg::ImmersedMultiRegionGrid{FT, TX, TY, TZ}, r) where {FT, TX, TY, TZ} = ImmersedBoundaryGrid{TX, TY, TZ}(_getregion(mrg.underlying_grid, r),
198+
_getregion(mrg.immersed_boundary, r),
199+
_getregion(mrg.interior_active_cells, r),
200+
_getregion(mrg.active_z_columns, r))
201+
202+
@inline _getregion(mrg::ImmersedMultiRegionGrid{FT, TX, TY, TZ}, r) where {FT, TX, TY, TZ} = ImmersedBoundaryGrid{TX, TY, TZ}(getregion(mrg.underlying_grid, r),
203+
getregion(mrg.immersed_boundary, r),
204+
getregion(mrg.interior_active_cells, r),
205+
getregion(mrg.active_z_columns, r))
199206

200207
"""
201208
multi_region_object_from_array(a::AbstractArray, mrg::MultiRegionGrid)
@@ -238,10 +245,10 @@ function on_architecture(::CPU, mrg::MultiRegionGrid{FT, TX, TY, TZ, CZ}) where
238245
return MultiRegionGrid{FT, TX, TY, TZ, CZ}(CPU(), mrg.partition, mrg.connectivity, new_grids, devices)
239246
end
240247

241-
Base.summary(mrg::MultiRegionGrid{FT, TX, TY, TZ}) where {FT, TX, TY, TZ} =
248+
Base.summary(mrg::MultiRegionGrids{FT, TX, TY, TZ}) where {FT, TX, TY, TZ} =
242249
"MultiRegionGrid{$FT, $TX, $TY, $TZ} with $(summary(mrg.partition)) on $(string(typeof(mrg.region_grids[1]).name.wrapper))"
243250

244-
Base.show(io::IO, mrg::MultiRegionGrid{FT, TX, TY, TZ}) where {FT, TX, TY, TZ} =
251+
Base.show(io::IO, mrg::MultiRegionGrids{FT, TX, TY, TZ}) where {FT, TX, TY, TZ} =
245252
print(io, "$(grid_name(mrg)){$FT, $TX, $TY, $TZ} partitioned on $(architecture(mrg)): \n",
246253
"├── grids: $(summary(mrg.region_grids[1])) \n",
247254
"├── partitioning: $(summary(mrg.partition)) \n",

test/test_multi_region_cubed_sphere.jl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,31 @@ panel_sizes = ((8, 8, 1), (9, 9, 2))
263263
end
264264
end
265265

266+
@testset "Immersed Cubed sphere construction" begin
267+
for FT in float_types
268+
for arch in archs
269+
Nx, Ny, Nz = 10, 10, 10
270+
271+
@info " Testing immersed cubed sphere grid [$FT, $(typeof(arch))]..."
272+
grid = ConformalCubedSphereGrid(arch, FT; panel_size = (Nx, Ny, Nz), z = (-1, 0), radius = 1)
273+
@inline bottom(x, y) = ifelse(abs(y) < 30, - 2, 0)
274+
275+
# Test that the grid is constructed correctly
276+
grid = ImmersedBoundaryGrid(grid, GridFittedBottom(bottom); active_cells_map = true)
277+
278+
for panel in 1:6
279+
region_grid = getregion(grid, panel)
280+
281+
if panel == 3 || panel == 6 # North and South panels should be completely immersed
282+
@test isempty(region_grid.interior_active_cells)
283+
else # Other panels should have some active cells
284+
@test !isempty(region_grid.interior_active_cells)
285+
end
286+
end
287+
end
288+
end
289+
end
290+
266291
#=
267292
# TODO
268293
@testset "Testing conformal cubed sphere metric/coordinate halo filling" begin

0 commit comments

Comments
 (0)