rdb_ocean_vertical_advection Module


Uses

  • module~~rdb_ocean_vertical_advection~~UsesGraph module~rdb_ocean_vertical_advection rdb_ocean_vertical_advection iso_fortran_env iso_fortran_env module~rdb_ocean_vertical_advection->iso_fortran_env module~rdb_constants rdb_constants module~rdb_ocean_vertical_advection->module~rdb_constants module~rdb_grid rdb_grid module~rdb_ocean_vertical_advection->module~rdb_grid module~rdb_mem_report rdb_mem_report module~rdb_ocean_vertical_advection->module~rdb_mem_report module~rdb_multilayer_state rdb_multilayer_state module~rdb_ocean_vertical_advection->module~rdb_multilayer_state module~rdb_scratch_3d rdb_scratch_3d module~rdb_ocean_vertical_advection->module~rdb_scratch_3d module~rdb_tracer rdb_tracer module~rdb_ocean_vertical_advection->module~rdb_tracer pic_types pic_types module~rdb_constants->pic_types module~rdb_grid->module~rdb_constants module~rdb_mem_report->iso_fortran_env module~rdb_mem_report->module~rdb_constants pic_logger pic_logger module~rdb_mem_report->pic_logger pic_strings pic_strings module~rdb_mem_report->pic_strings module~rdb_multilayer_state->iso_fortran_env module~rdb_multilayer_state->module~rdb_constants module~rdb_multilayer_state->module~rdb_grid module~rdb_multilayer_state->module~rdb_mem_report module~rdb_multilayer_state->module~rdb_tracer module~rdb_efp rdb_efp module~rdb_multilayer_state->module~rdb_efp module~rdb_error_ring rdb_error_ring module~rdb_multilayer_state->module~rdb_error_ring module~rdb_multilayer_state->pic_logger module~rdb_scratch_3d->iso_fortran_env module~rdb_scratch_3d->module~rdb_constants module~rdb_scratch_3d->module~rdb_mem_report module~rdb_tracer->iso_fortran_env module~rdb_tracer->module~rdb_constants module~rdb_tracer->module~rdb_grid module~rdb_tracer->module~rdb_mem_report module~rdb_efp->iso_fortran_env ieee_arithmetic ieee_arithmetic module~rdb_efp->ieee_arithmetic module~rdb_error_ring->pic_logger

Used by

  • module~~rdb_ocean_vertical_advection~~UsedByGraph module~rdb_ocean_vertical_advection rdb_ocean_vertical_advection module~rdb_ocean_dyn rdb_ocean_dyn module~rdb_ocean_dyn->module~rdb_ocean_vertical_advection module~rdb_ocean_state rdb_ocean_state module~rdb_ocean_state->module~rdb_ocean_vertical_advection module~rdb_ocean_state->module~rdb_ocean_dyn module~rdb_driver rdb_driver module~rdb_driver->module~rdb_ocean_dyn module~rdb_driver->module~rdb_ocean_state module~rdb_ocean_engine rdb_ocean_engine module~rdb_driver->module~rdb_ocean_engine module~rdb_handle rdb_handle module~rdb_handle->module~rdb_ocean_state module~rdb_handle->module~rdb_ocean_engine module~rdb_ocean_api rdb_ocean_api module~rdb_ocean_api->module~rdb_ocean_dyn module~rdb_ocean_api->module~rdb_handle module~rdb_ocean_diag_derived rdb_ocean_diag_derived module~rdb_ocean_api->module~rdb_ocean_diag_derived module~rdb_ocean_diag_fills rdb_ocean_diag_fills module~rdb_ocean_api->module~rdb_ocean_diag_fills module~rdb_ocean_api->module~rdb_ocean_engine module~rdb_ocean_diag_derived->module~rdb_ocean_state module~rdb_ocean_diag_derived->module~rdb_ocean_diag_fills module~rdb_ocean_diag_fills->module~rdb_ocean_state module~rdb_ocean_engine->module~rdb_ocean_dyn module~rdb_ocean_engine->module~rdb_ocean_state module~rdb_ocean_engine->module~rdb_ocean_diag_derived module~rdb_ocean_engine->module~rdb_ocean_diag_fills module~rdb_ocean_setup rdb_ocean_setup module~rdb_ocean_engine->module~rdb_ocean_setup module~rdb_ocean_setup->module~rdb_ocean_dyn module~rdb_ocean_setup->module~rdb_ocean_state

Derived Types

type, public ::  ocean_vertical_advection_t

Components

Type Visibility Attributes Name Initial
type(scratch_3d_buffer_t), public :: F_face

Per-step vertical tracer-flux at interfaces. Shape (nx, ny, nz_ml+1). Two-pass design: tracer impl first fills F_face from hTr + w_interface (read-only), then applies the divergence onto hTr. This avoids the do-concurrent race that a single-pass version would have (each layer reads its neighbour’s hTr while another iteration writes it). Reused across all tracers in one call.

logical, public :: enforce_bed_bc = .true.

When true the bed interface w is forced to zero before integration regardless of what compute_w_from_continuity is handed. Disable only when the caller wants to inject a sub-bed flow source (test instrumentation).

logical, public :: is_init = .false.

True between init and destroy.

Type-Bound Procedures

procedure, public, non_overridable :: bytes => ocean_vertical_advection_bytes
procedure, public, non_overridable :: destroy => ocean_vert_adv_destroy
procedure, public, non_overridable :: enter_data => ocean_vert_adv_enter_data
procedure, public, non_overridable :: exit_data => ocean_vert_adv_exit_data
procedure, public, non_overridable :: init => ocean_vert_adv_init

Functions

private pure function ocean_vertical_advection_bytes(this) result(nbytes)

Counted allocatable footprint of the vertical advection slot (0 when unallocated).

Arguments

Type IntentOptional Attributes Name
class(ocean_vertical_advection_t), intent(in) :: this

Return Value integer(kind=int64)


Subroutines

public pure subroutine compute_w_from_continuity(grid, this, ms)

Fill ms%w_interface by integrating the horizontal- continuity residual upward from the bed. Eulerian z:

Read more…

Arguments

Type IntentOptional Attributes Name
type(hgrid_t), intent(in) :: grid
type(ocean_vertical_advection_t), intent(in) :: this
type(multilayer_state_t), intent(inout) :: ms

public subroutine tracer_advect_vertical(grid, this, ms, dt, active)

Apply first-order upwind-in-z vertical advection to every registered tracer, then update h_layer by the same vertical mass-flux divergence. Updating h is what makes the kernel CWC-consistent — uniform T = hTr/h stays uniform regardless of how divergent the w field is.

Read more…

Arguments

Type IntentOptional Attributes Name
type(hgrid_t), intent(in) :: grid
type(ocean_vertical_advection_t), intent(inout) :: this
type(multilayer_state_t), intent(inout) :: ms
real(kind=wp), intent(in) :: dt
logical, intent(in), optional :: active

Optional gate (thermo cadence). Absent ⇒ kernel runs; present-and-false ⇒ early return.

private pure subroutine apply_w_to_h_layer(nx, ny, nz, dt, w_interface, h_layer)

h_layer(k) += dt * (w(k) - w(k+1)) per cell. Bed and surface interfaces feed through whatever w the caller set (zero for the bed by default after compute_w_from_continuity with enforce_bed_bc = true). No h-floor — plain accumulation; the caller is responsible for guarding against negative thickness if the prescribed w + dt is large.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nx
integer, intent(in) :: ny
integer, intent(in) :: nz
real(kind=wp), intent(in) :: dt
real(kind=wp), intent(in) :: w_interface(nx,ny,nz+1)
real(kind=wp), intent(inout) :: h_layer(nx,ny,nz)

private subroutine ocean_vert_adv_destroy(this)

Arguments

Type IntentOptional Attributes Name
class(ocean_vertical_advection_t), intent(inout) :: this

private subroutine ocean_vert_adv_enter_data(this)

Type-bound wrapper — delegates to the non-polymorphic impl so the device-attach map base is the heap object, not a polymorphic stack box (AMD libomptarget cross-slot-overlap fix).

Arguments

Type IntentOptional Attributes Name
class(ocean_vertical_advection_t), intent(inout) :: this

private subroutine ocean_vert_adv_enter_data_impl(this)

Arguments

Type IntentOptional Attributes Name
type(ocean_vertical_advection_t), intent(inout) :: this

private subroutine ocean_vert_adv_exit_data(this)

Arguments

Type IntentOptional Attributes Name
class(ocean_vertical_advection_t), intent(inout) :: this

private subroutine ocean_vert_adv_exit_data_impl(this)

Arguments

Type IntentOptional Attributes Name
type(ocean_vertical_advection_t), intent(inout) :: this

private subroutine ocean_vert_adv_init(this, grid, nz_ml)

Arguments

Type IntentOptional Attributes Name
class(ocean_vertical_advection_t), intent(inout) :: this
type(hgrid_t), intent(in) :: grid
integer, intent(in), optional :: nz_ml

private pure subroutine tracer_advect_vertical_one_impl(nx, ny, nz, dt, h, w_interface, hTr, F_face, budget)

Flat-impl first-order upwind-in-z vertical advection for one tracer. Two passes:

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nx
integer, intent(in) :: ny
integer, intent(in) :: nz
real(kind=wp), intent(in) :: dt
real(kind=wp), intent(in) :: h(nx,ny,nz)
real(kind=wp), intent(in) :: w_interface(nx,ny,nz+1)
real(kind=wp), intent(inout) :: hTr(nx,ny,nz)
real(kind=wp), intent(inout) :: F_face(nx,ny,nz+1)
real(kind=wp), intent(inout), optional :: budget(nx,ny,nz)