Skip to content

Commit

Permalink
Enhance immersed boundary grid docs (#3505)
Browse files Browse the repository at this point in the history
* enhance immersed boundary grid docs

* revert to ib

* revert to ib

* clearer GridFittedBottom docstring

* elaborate bit more on immersed_condition
  • Loading branch information
navidcy committed Mar 14, 2024
1 parent 3bb62a6 commit f462e9f
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 14 deletions.
36 changes: 26 additions & 10 deletions src/ImmersedBoundaries/grid_fitted_bottom.jl
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,34 @@ struct InterfaceImmersedCondition end
Base.summary(::CenterImmersedCondition) = "CenterImmersedCondition"
Base.summary(::InterfaceImmersedCondition) = "InterfaceImmersedCondition"

"""
GridFittedBottom(bottom_height, [immersed_condition=CenterImmersedCondition()])
Return an immersed boundary with an irregular bottom fit to the underlying grid.
"""
struct GridFittedBottom{H, I} <: AbstractGridFittedBottom{H}
bottom_height :: H
immersed_condition :: I
end

const GFBIBG = ImmersedBoundaryGrid{<:Any, <:Any, <:Any, <:Any, <:Any, <:GridFittedBottom}

"""
GridFittedBottom(bottom_height, [immersed_condition=CenterImmersedCondition()])
Return a bottom immersed boundary.
Keyword Arguments
=================
* `bottom_height`: an array or function that gives the height of the
bottom in absolute ``z`` coordinates.
* `immersed_condition`: Determine whether the part of the domain that is
immersed are all the cell centers that lie below
`bottom_height` (`CenterImmersedCondition()`; default)
or all the cell faces that lie below `bottom_height`
(`InterfaceImmersedCondition()`). The only purpose of
`immersed_condition` to allow `GridFittedBottom` and
`PartialCellBottom` to have the same behavior when the
minimum fractional cell height for partial cells is set
to 0.
"""
GridFittedBottom(bottom_height) = GridFittedBottom(bottom_height, CenterImmersedCondition())

function Base.summary(ib::GridFittedBottom)
Expand Down Expand Up @@ -65,9 +81,9 @@ end
"""
ImmersedBoundaryGrid(grid, ib::GridFittedBottom)
Return a grid with `GridFittedBottom` immersed boundary.
Return a grid with `GridFittedBottom` immersed boundary (`ib`).
Computes ib.bottom_height and wraps in an array.
Computes `ib.bottom_height` and wraps it in a Field.
"""
function ImmersedBoundaryGrid(grid, ib::GridFittedBottom)
bottom_field = Field{Center, Center, Nothing}(grid)
Expand All @@ -81,16 +97,17 @@ end
@inline function _immersed_cell(i, j, k, underlying_grid, ib::GridFittedBottom{<:Any, <:InterfaceImmersedCondition})
z = znode(i, j, k+1, underlying_grid, c, c, f)
h = @inbounds ib.bottom_height[i, j, 1]
return z <= h
return z h
end

@inline function _immersed_cell(i, j, k, underlying_grid, ib::GridFittedBottom{<:Any, <:CenterImmersedCondition})
z = znode(i, j, k, underlying_grid, c, c, c)
h = @inbounds ib.bottom_height[i, j, 1]
return z <= h
return z h
end

@inline z_bottom(i, j, ibg::GFBIBG) = @inbounds ibg.immersed_boundary.bottom_height[i, j, 1]

on_architecture(arch, ib::GridFittedBottom) = GridFittedBottom(ib.bottom_height, ib.immersed_condition)

function on_architecture(arch, ib::GridFittedBottom{<:Field})
Expand All @@ -104,4 +121,3 @@ end

Adapt.adapt_structure(to, ib::GridFittedBottom) = GridFittedBottom(adapt(to, ib.bottom_height),
ib.immersed_condition)

1 change: 0 additions & 1 deletion src/ImmersedBoundaries/grid_fitted_boundary.jl
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,3 @@ on_architecture(arch, ib::GridFittedBoundary{<:Field}) = GridFittedBoundary(comp
on_architecture(arch, ib::GridFittedBoundary) = ib # need a workaround...

Adapt.adapt_structure(to, ib::AbstractGridFittedBoundary) = GridFittedBoundary(adapt(to, ib.mask))

6 changes: 3 additions & 3 deletions src/ImmersedBoundaries/immersed_boundary_condition.jl
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ Base.show(io::IO, ibc::IBC) =
"""
ImmersedBoundaryCondition(; interfaces...)
Return an ImmersedBoundaryCondition with conditions on individual
cell `interfaces ∈ (west, east, south, north, bottom, top)`
between the fluid and immersed boundary.
Return an `ImmersedBoundaryCondition` with conditions on individual cell
`interfaces ∈ (west, east, south, north, bottom, top)` between the fluid
and the immersed boundary.
"""
function ImmersedBoundaryCondition(; west = nothing,
east = nothing,
Expand Down

0 comments on commit f462e9f

Please sign in to comment.