| 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 |
|||
| logical, | public | :: | enforce_bed_bc | = | .true. |
When true the bed interface w is forced to zero before
integration regardless of what |
|
| logical, | public | :: | is_init | = | .false. |
True between |
| 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 |
Counted allocatable footprint of the vertical advection slot (0 when unallocated).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ocean_vertical_advection_t), | intent(in) | :: | this |
Fill ms%w_interface by integrating the horizontal-
continuity residual upward from the bed. Eulerian z:
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_vertical_advection_t), | intent(in) | :: | this | |||
| type(multilayer_state_t), | intent(inout) | :: | ms |
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.
| Type | Intent | Optional | 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. |
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.
| Type | Intent | Optional | 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) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ocean_vertical_advection_t), | intent(inout) | :: | 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).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ocean_vertical_advection_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_vertical_advection_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ocean_vertical_advection_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_vertical_advection_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ocean_vertical_advection_t), | intent(inout) | :: | this | |||
| type(hgrid_t), | intent(in) | :: | grid | |||
| integer, | intent(in), | optional | :: | nz_ml |
Flat-impl first-order upwind-in-z vertical advection for one tracer. Two passes:
| Type | Intent | Optional | 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) |