Boundaries
PinCFlow.Boundaries
— ModuleBoundaries
Module for enforcing boundary conditions for different variable types and field dimensions.
Handles periodic boundaries in the horizontal and solid-wall boundaries in the vertical, as well as MPI communication in all dimensions.
See also
PinCFlow.Boundaries.AbstractBoundaryVariables
— TypeAbstractBoundaryVariables
Abstract type for boundary-variable categories.
PinCFlow.Boundaries.BoundaryFluxes
— TypeBoundaryFluxes <: AbstractBoundaryVariables
Boundary-variable category for flux fields.
PinCFlow.Boundaries.BoundaryPredictands
— TypeBoundaryPredictands <: AbstractBoundaryVariables
Boundary-variable category for predictand fields.
PinCFlow.Boundaries.BoundaryReconstructions
— TypeBoundaryReconstructions <: AbstractBoundaryVariables
Boundary-variable category for reconstruction fields.
PinCFlow.Boundaries.BoundaryWKBIntegrals
— TypeBoundaryWKBIntegrals <: AbstractBoundaryVariables
Boundary-variable category for gravity-wave-integral fields.
PinCFlow.Boundaries.BoundaryWKBTendencies
— TypeBoundaryWKBTendencies <: AbstractBoundaryVariables
Boundary-variable category for gravity-wave-tendency fields.
PinCFlow.Boundaries.set_boundaries!
— Functionset_boundaries!(state::State, variables::BoundaryPredictands)
Enforce all boundary conditions for predictand fields.
set_boundaries!(state::State, variables::BoundaryReconstructions)
Enforce all boundary conditions for reconstruction fields.
set_boundaries!(state::State, variables::BoundaryFluxes)
Enforce vertical boundary conditions for flux fields (horizontal boundaries are taken care of at the reconstruction stage).
set_boundaries!(state::State, variables::BoundaryWKBIntegrals)
Enforce all boundary conditions for gravity-wave-integral fields.
set_boundaries!(state::State, variables::BoundaryWKBTendencies)
Enforce all boundary conditions for gravity-wave-tendency fields.
Arguments
state
: Model state.variables
: Boundary-variable category.
See also
PinCFlow.Boundaries.set_compressible_meridional_boundaries!
— Functionset_compressible_meridional_boundaries!(state::State)
Enforce meridional boundary conditions for the mass-weighted potential temperature in compressible mode by dispatching to a model-specific method.
set_compressible_meridional_boundaries!(
state::State,
model::Union{Boussinesq, PseudoIncompressible},
)
Return in non-compressible modes.
set_compressible_meridional_boundaries!(state::State, model::Compressible)
Enforce meridional boundary conditions for the mass-weighted potential temperature in compressible mode.
Arguments
state
: Model state.model
: Dynamic equations.
See also
PinCFlow.Boundaries.set_compressible_vertical_boundaries!
— Functionset_compressible_vertical_boundaries!(
state::State,
variables::AbstractBoundaryVariables,
)
Enforce vertical boundary conditions for the specified variables in compressible mode by dispatching to a model-specific method.
set_compressible_vertical_boundaries!(
state::State,
variables::AbstractBoundaryVariables,
model::Union{Boussinesq, PseudoIncompressible},
)
Return in non-compressible modes.
set_compressible_vertical_boundaries!(
state::State,
variables::BoundaryPredictands,
model::Compressible,
)
Enforce vertical boundary conditions for the mass-weighted potential temperature in compressible mode (line reflection).
set_compressible_vertical_boundaries!(
state::State,
variables::BoundaryFluxes,
model::Compressible,
)
Enforce vertical boundary conditions for the vertical mass-weighted potential-temperature flux (no flux through boundaries).
Arguments
state
: Model state.variables
: Boundary-variable category.model
: Dynamic equations.
See also
PinCFlow.Boundaries.set_compressible_zonal_boundaries!
— Functionset_compressible_zonal_boundaries!(state::State)
Enforce zonal boundary conditions for the mass-weighted potential temperature in compressible mode by dispatching to a model-specific method.
set_compressible_zonal_boundaries!(
state::State,
model::Union{Boussinesq, PseudoIncompressible},
)
Return in non-compressible modes.
set_compressible_zonal_boundaries!(state, model::Compressible)
Enforce zonal boundary conditions for the mass-weighted potential temperature in compressible mode.
Arguments
state
: Model state.model
: Dynamic equations.
See also
PinCFlow.Boundaries.set_meridional_boundaries!
— Functionset_meridional_boundaries!(state::State, variables::BoundaryPredictands)
Enforce meridional boundary conditions for all predictand fields.
set_meridional_boundaries!(state::State, variables::BoundaryReconstructions)
Enforce meridional boundary conditions for all reconstruction fields.
set_meridional_boundaries!(state::State, variables::BoundaryWKBIntegrals)
Enforce meridional boundary conditions for gravity-wave-integral fields by dispatching to a WKB-mode-specific method.
set_meridional_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::Union{SteadyState, SingleColumn},
)
Enforce meridional boundary conditions for gravity-wave-integral fields needed in SingleColumn
and SteadyState
configurations.
set_meridional_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::MultiColumn,
)
Enforce meridional boundary conditions for gravity-wave-integral fields needed in MultiColumn
configurations.
set_meridional_boundaries!(state::State, variables::BoundaryWKBTendencies)
Enforce meridional boundary conditions for gravity-wave-tendency fields by dispatching to a WKB-mode-specific method.
set_meridional_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::Union{SteadyState, SingleColumn},
)
Enforce meridional boundary conditions for gravity-wave-tendency fields needed in SingleColumn
and SteadyState
configurations.
set_meridional_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::MultiColumn,
)
Enforce meridional boundary conditions for gravity-wave-tendency fields needed in MultiColumn
configurations.
Arguments
state
: Model state.variables
: Boundary-variable category.wkb_mode
: Approximations used by MSGWaM.
See also
PinCFlow.Boundaries.set_meridional_boundaries_of_field!
— Functionset_meridional_boundaries_of_field!(
field::AbstractMatrix{<:AbstractFloat},
namelists::Namelists,
domain::Domain,
)
Enforce meridional boundary conditions for a matrix.
Halo exchange is used for multi-process domains (npy > 1
), otherwise periodic boundaries are set by copying values from opposite domain edges.
set_meridional_boundaries_of_field!(
field::AbstractArray{<:Real, 3},
namelists::Namelists,
domain::Domain;
layers::NTuple{3, <:Integer} = (-1, -1, -1),
)
Enforce meridional boundary conditions for a 3D array.
Halo exchange is used in the same manner as in the method for matrices.
set_meridional_boundaries_of_field!(
field::AbstractArray{<:AbstractFloat, 5},
namelists::Namelists,
domain::Domain;
layers::NTuple{3, <:Integer} = (-1, -1, -1),
)
Enforce meridional boundary conditions for a 5D array.
Halo exchange is used in the same manner as in the methods for matrices and 3D arrays. The first three dimensions of the array are assumed to represent the dimensions of physical space.
Arguments
field
: Input array.namelists
: Namelists with all model parameters.domain
: Collection of domain-decomposition and MPI-communication parameters.
Keywords
layers
: The number of boundary layers in each dimension. Use-1
for the default values fromnamelists
.
See also
PinCFlow.Boundaries.set_tracer_meridional_boundaries!
— Functionset_tracer_meridional_boundaries!(
state::State,
variables::AbstractBoundaryVariables,
)
Enforce meridional boundary conditions for tracers by dispatching to a tracer-configuration-specific method.
set_tracer_meridional_boundaries!(
state::State,
variables::BoundaryPredictands,
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_meridional_boundaries!(
state::State,
variables::BoundaryPredictands,
tracer_setup::TracerOn,
)
Enforce meridional boundary conditions for tracers.
set_tracer_meridional_boundaries!(
state::State,
variables::BoundaryReconstructions,
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_meridional_boundaries!(
state::State,
variables::BoundaryReconstructions,
tracer_setup::TracerOn,
)
Enforce meridional boundary conditions for reconstructions of tracers.
set_tracer_meridional_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_model::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_meridional_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::TracerOn,
)
Enforce meridional boundary conditions for tracer-gravity-wave-integral fields.
set_tracer_meridional_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_meridional_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::TracerOn,
)
Enforce meridional boundary conditions for tracer-gravity-wave-tendency fields.
Arguments
state
: Model state.variables
: Boundary-variable category.tracer_setup
: General tracer-transport configuration.wkb_mode
: Approximations used by MSGWaM.
See also
PinCFlow.Boundaries.set_tracer_vertical_boundaries!
— Functionset_tracer_vertical_boundaries!(
state::State,
variables::AbstractBoundaryVariables,
)
Enforce vertical boundary conditions for tracers by dispatching to a tracer-configuration-specific method.
set_tracer_vertical_boundaries!(
state::State,
variables::BoundaryPredictands,
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_vertical_boundaries!(
state::State,
variables::BoundaryPredictands,
tracer_setup::TracerOn,
)
Enforce vertical boundary conditions for tracers.
set_tracer_vertical_boundaries!(
state::State,
variables::BoundaryReconstructions,
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_vertical_boundaries!(
state::State,
variables::BoundaryReconstructions,
tracer_setup::TracerOn,
)
Enforce vertical boundary conditions for reconstructions of tracers.
set_tracer_vertical_boundaries!(
state::State,
variables::BoundaryFluxes,
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_vertical_boundaries!(
state::State,
variables::BoundaryFluxes,
tracer_setup::TracerOn,
)
Set the vertical tracer fluxes at the vertical boundaries to zero.
set_tracer_vertical_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_vertical_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::TracerOn,
)
Enforce vertical boundary conditions for tracer-gravity-wave-integral fields.
set_tracer_vertical_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_vertical_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::TracerOn,
)
Enforce vertical boundary conditions for tracer-gravity-wave-tendency fields.
Arguments
state
: Model state.variables
: Boundary-variable category.tracer_setup
: General tracer-transport configuration.wkb_mode
: Approximations used by MSGWaM.
See also
PinCFlow.Boundaries.set_tracer_zonal_boundaries!
— Functionset_tracer_zonal_boundaries!(state::State, variables::AbstractBoundaryVariables)
Enforce zonal boundary conditions for tracers by dispatching to a tracer-configuration-specific method.
set_tracer_zonal_boundaries!(
state::State,
variables::BoundaryPredictands,
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_zonal_boundaries!(
state::State,
variables::BoundaryPredictands,
tracer_setup::TracerOn,
)
Enforce zonal boundary conditions for tracers.
set_tracer_zonal_boundaries!(
state::State,
variables::BoundaryReconstructions,
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_zonal_boundaries!(
state::State,
variables::BoundaryReconstructions,
tracer_setup::TracerOn,
)
Enforce zonal boundary conditions for reconstructions of tracers.
set_tracer_zonal_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_zonal_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::TracerOn,
)
Enforce zonal boundary conditions for tracer-gravity-wave-integral fields.
set_tracer_zonal_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::NoTracer,
)
Return for configurations without tracer transport.
set_tracer_zonal_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::Union{SteadyState, SingleColumn, MultiColumn},
tracer_setup::TracerOn,
)
Enforce zonal boundary conditions for tracer-gravity-wave-tendency fields.
Arguments
state
: Model state.variables
: Boundary-variable category.tracer_setup
: General tracer-transport configuration.wkb_mode
: Approximations used by MSGWaM.
See also
PinCFlow.Boundaries.set_vertical_boundaries!
— Functionset_vertical_boundaries!(state::State, variables::BoundaryPredictands)
Enforce vertical boundary conditions for all predictand fields.
The symmetry conditions are as follows:
Density-fluctuations fields (
rho
,rhop
): point reflection (-
)Vertical velocity (
w
): point reflection (-
) on the staggered gridHorizontal velocities (
u
,v
): line reflection (+
)Exner-pressure fluctuations (
pip
): line reflection (+
)
set_vertical_boundaries!(state::State, variables::BoundaryReconstructions)
Enforce vertical boundary conditions for all reconstruction fields.
set_vertical_boundaries!(state::State, variables::BoundaryFluxes)
Set the vertical fluxes at the vertical boundaries to zero.
set_vertical_boundaries!(state::State, variables::BoundaryWKBIntegrals)
Enforce vertical boundary conditions for gravity-wave-integral fields by dispatching to a WKB-mode-specific method.
set_vertical_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::Union{SteadyState, SingleColumn},
)
Enforce vertical boundary conditions for gravity-wave-integral fields needed in SingleColumn
and SteadyState
configurations, using line reflection.
set_vertical_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::MultiColumn,
)
Enforce vertical boundary conditions for gravity-wave-integral fields needed in MultiColumn
configurations, using line reflection.
set_vertical_boundaries!(state::State, variables::BoundaryWKBTendencies)
Enforce vertical boundary conditions for gravity-wave-tendency fields by dispatching to a WKB-mode-specific method.
set_vertical_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::Union{SteadyState, SingleColumn},
)
Enforce vertical boundary conditions for gravity-wave-tendency fields needed in SingleColumn
and SteadyState
configurations, using line reflection.
set_vertical_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::MultiColumn,
)
Enforce vertical boundary conditions for gravity-wave-tendency fields needed in MultiColumn
configurations, using line reflection.
Arguments
state
: Model state.variables
: Boundary-variable category.wkb_mode
: Approximations used by MSGWaM.
See also
PinCFlow.Boundaries.set_vertical_boundaries_of_field!
— Functionset_vertical_boundaries_of_field!(
field::AbstractArray{<:Real, 3},
namelists::Namelists,
domain::Domain,
mode::Function;
layers::NTuple{3, <:Integer} = (-1, -1, -1),
staggered = false,
)
Enforce vertical boundary conditions for a 3D array (assuming solid-wall boundaries).
Halo exchange is used for multi-process domains (npz > 1
). Use mode = +
(mode = -
) for line-reflected (point-reflected) ghost-cell values.
set_vertical_boundaries_of_field!(
field::AbstractArray{<:AbstractFloat, 5},
namelists::Namelists,
domain::Domain;
layers::NTuple{3, <:Integer} = (-1, -1, -1),
)
Exchange halo values of a 5D array if multiple processes are used in the vertical (npz > 1
).
This method is applied to reconstruction arrays. Vertical boundary conditions are not enforced for these but for the fluxes determined from them.
Arguments
field
: Input array.namelists
: Namelists with all model parameters.domain
: Collection of domain-decomposition and MPI-communication parameters.mode
: Method used for setting the boundary-cell values.
Keywords
layers
: The number of boundary layers in each dimension. Use-1
for the default values fromnamelists
.staggered
: A switch for whether or not the field is on the staggered vertical grid.
See also
PinCFlow.Boundaries.set_zonal_boundaries!
— Functionset_zonal_boundaries!(state::State, variables::BoundaryPredictands)
Enforce zonal boundary conditions for all predictand fields.
set_zonal_boundaries!(state::State, variables::BoundaryReconstructions)
Enforce zonal boundary conditions for all reconstruction fields.
set_zonal_boundaries!(state::State, variables::BoundaryWKBIntegrals)
Enforce zonal boundary conditions for gravity-wave-integral fields by dispatching to a WKB-mode-specific method.
set_zonal_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::Union{SteadyState, SingleColumn},
)
Enforce zonal boundary conditions for gravity-wave-integral fields needed in SingleColumn
and SteadyState
configurations.
set_zonal_boundaries!(
state::State,
variables::BoundaryWKBIntegrals,
wkb_mode::MultiColumn,
)
Enforce zonal boundary conditions for gravity-wave-integral fields needed in MultiColumn
configurations.
set_zonal_boundaries!(state::State, variables::BoundaryWKBTendencies)
Enforce zonal boundary conditions for gravity-wave-tendency fields by dispatching to a WKB-mode-specific method.
set_zonal_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::Union{SteadyState, SingleColumn},
)
Enforce zonal boundary conditions for gravity-wave-tendency fields needed in SingleColumn
and SteadyState
configurations.
set_zonal_boundaries!(
state::State,
variables::BoundaryWKBTendencies,
wkb_mode::MultiColumn,
)
Enforce zonal boundary conditions for gravity-wave-tendency fields needed in MultiColumn
configurations.
Arguments
state
: Model state.variables
: Boundary-variable category.wkb_mode
: Approximations used by MSGWaM.
See also
PinCFlow.Boundaries.set_zonal_boundaries_of_field!
— Functionset_zonal_boundaries_of_field!(
field::AbstractMatrix{<:AbstractFloat},
namelists::Namelists,
domain::Domain,
)
Enforce zonal boundary conditions for a matrix.
Halo exchange is used for multi-process domains (npx > 1
), otherwise periodic boundaries are set by copying values from opposite domain edges.
set_zonal_boundaries_of_field!(
field::AbstractArray{<:Real, 3},
namelists::Namelists,
domain::Domain;
layers::NTuple{3, <:Integer} = (-1, -1, -1),
)
Enforce zonal boundary conditions for a 3D array.
Halo exchange is used in the same manner as in the method for matrices.
set_zonal_boundaries_of_field!(
field::AbstractArray{<:AbstractFloat, 5},
namelists::Namelists,
domain::Domain;
layers::NTuple{3, <:Integer} = (-1, -1, -1),
)
Enforce zonal boundary conditions for a 5D array.
Halo exchange is used in the same manner as in the methods for matrices and 3D arrays. The first three dimensions of the array are assumed to represent the dimensions of physical space.
Arguments
field
: Input array.namelists
: Namelists with all model parameters.domain
: Collection of domain-decomposition and MPI-communication parameters.
Keywords
layers
: The number of boundary layers in each dimension. Use-1
for the default values fromnamelists
.
See also