Boundaries

PinCFlow.BoundariesModule
Boundaries

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.set_boundaries!Function
set_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!Function
set_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!Function
set_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!Function
set_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!Function
set_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!Function
set_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 from namelists.

See also

PinCFlow.Boundaries.set_tracer_meridional_boundaries!Function
set_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!Function
set_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!Function
set_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!Function
set_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 grid

  • Horizontal 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!Function
set_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 from namelists.

  • staggered: A switch for whether or not the field is on the staggered vertical grid.

See also

PinCFlow.Boundaries.set_zonal_boundaries!Function
set_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!Function
set_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 from namelists.

See also