| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | private, | parameter | :: | BTC_H_NEGLECT | = | 1.0e-10_wp | |
| real(kind=wp), | private, | parameter | :: | BTC_VOL_CFL | = | 0.5_wp | |
| real(kind=wp), | private, | parameter | :: | VISC_REM_SUBROUNDOFF | = | 1.0e-30_wp |
The gravity of the free-surface term the slow layer PGF CARRIES,
i.e. −∂⟨PGF⟩/∂(∇η) for a uniform-density column (m/s²):
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_pressure_force_t), | intent(in) | :: | pgf |
Add the ice-shelf top-drag tendency into the already-summed
slow forcing. Separate from sum_slow_tendencies_into_F_slow
(rather than a sixth term in it) for one reason: the top-drag
slot is OPTIONAL all the way down the driver chain, and the sum
above must stay a single unconditional kernel with no present
branch inside its do concurrent.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(ocean_top_drag_t), | intent(in) | :: | td | |||
| type(multilayer_state_t), | intent(in) | :: | ms |
Replace the bt mode in the per-layer face velocities with the
barotropic-substep end-step value, adding Δu·wt_k to every layer,
Δu = u_bt_end − u_bt_at_n − dt·F_bt_u (same for v). Split-explicit
convention (Hallberg 2009): momentum uses the END-of-step barotropic
velocity; layer continuity earlier used the time-mean transports.
Both legs of the corrector use the same end-step anchor (mismatched
anchors overshoot the gravity-wave phase speed). Also rescales
h_layer uniformly so the column total matches H_ref + η_end.
hTr is deliberately NOT rescaled (would break exact tracer mass
conservation; T = hTr/h drifts by O((η_end−η*_slow)/H) per step).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(barotropic_workstate_t), | intent(in) | :: | bt_work | |||
| type(multilayer_state_t), | intent(inout) | :: | ms | |||
| real(kind=wp), | intent(in) | :: | dt | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
Curvilinear horizontal metrics — read by the bc-PGF
retro-correction ( |
||
| logical, | intent(in), | optional | :: | skip_h_rescale | ||
| type(hgrid_t), | intent(in), | optional | :: | grid | ||
| logical, | intent(in), | optional | :: | use_bc_pgf | ||
| logical, | intent(in), | optional | :: | use_visc_rem |
Weight the fold by |
|
| real(kind=wp), | intent(in), | optional | :: | scale |
Multiplier on the Δu correction (default 1, bit-identical).
The pred_corr PREDICTOR passes |
|
| integer, | intent(out), | optional | :: | n_nonfin |
Count of faces whose barotropic-correction Δ ( |
|
| integer, | intent(in), | optional | :: | n_inner |
Barotropic substeps per outer step. REQUIRED when
|
Per-face multiplicative damping factor for the BT-substep velocity
update (linear-drag branch):
bt_rem_face = Htot_face / (Htot_face + r·hbbl·dt_inner)
applied as ubt_new = bt_rem_u·(ubt_old + dt_inner·forces) each inner
step. When the bt_substep_drag knob is off this must NOT be called and
the workspace stays at 1 (no-op, bit-identical).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(multilayer_state_t), | intent(in) | :: | ms | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
REQUIRED (see |
||
| real(kind=wp), | intent(in) | :: | r_linear |
Linear drag rate at the bed (1/s) |
||
| real(kind=wp), | intent(in) | :: | hbbl |
BBL thickness over which drag acts (m) |
||
| real(kind=wp), | intent(in) | :: | dt_inner |
BT-substep dt (s) |
PR-2 (bt-rem-from-av-rem): build bt_rem_u/v from the SAME
viscous remnant the layered momentum solve uses, MOM6’s
barotropic solver. Dispatched the same way as
compute_bt_rem — a RESETTER, mutually exclusive at configure
with bt_substep_drag (D2, double-counted bed drag) and with
bt_halo > 0 (validate_config) — so this and compute_bt_rem/
reset_bt_rem never both run for the same stage; src/core/
ocean/README.md’s “exactly one resets, everything else
MULTIPLIES” contract gets this as its third resetter.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(multilayer_state_t), | intent(in) | :: | ms | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
REQUIRED — see |
||
| integer, | intent(in) | :: | n_inner |
Barotropic substeps per outer step (MOM6 |
MULTIPLIES the Egbert & Ray (2001) / Jayne & St Laurent (2001)
linear (Rayleigh) barotropic wave drag into bt_rem_u/v:
bt_rem_u *= Htot_face / (Htot_face + lwd_drag_u·dt_inner)
lwd_drag_u/v is a static, face-resident piston velocity [m/s]
built once at configure by configure_ocean_wave_drag. Uses the
IDENTICAL Htot_face expression as compute_bt_rem (reuse, not
a second H_tot). Composes with substep_drag exactly as MOM6
composes lin_drag_u with the viscous remnant. Htot_face <= 0
⇒ leave bt_rem unmodified (MOM6’s guard).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(multilayer_state_t), | intent(in) | :: | ms | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
REQUIRED. Under |
||
| real(kind=wp), | intent(in) | :: | dt_inner |
BT-substep dt (s) |
SSH anomaly = 0.5·(bt_eta_end + bt_eta) − eta_PF: the part of η the BT substep produced beyond what the slow PGF saw. Zero at steady state.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work |
Face-centred depth-weighted column averages of pbce (gtot_E/W/N/S).
Wall cells fall back to pbce(:,:,nz). By construction
Σ_k h_face(k)·(pbce(k) − gtot_face) = 0 per column, making the bc-PGF
Δu correction depth-mean zero – UNDER THE SAME h_face/weight
derive_bt_from_layers and apply_bt_correction’s folds use.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(multilayer_state_t), | intent(in) | :: | ms | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
REQUIRED, like every other frhat call site’s |
Per-face upstream column-sum thickness h_face_up_x/y(I,j) =
Σ_k h_layer(I_upstream,j,k) used by the BT chain when
use_upstream_h_face = .true.. First-order upwind pick by face-velocity
sign (sampled at the top of the outer step). Wall faces use the single
available cell. No-op when the knob is off.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(multilayer_state_t), | intent(in) | :: | ms | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
REQUIRED, for the reason |
Per-layer pressure-anomaly gravity coefficient (m/s²): the response of
layer k’s pressure to a unit change in η. Montgomery form, bottom-up
convention (k=1 bed, k=nz surface):
pbce(:,:,nz) = g·ρ_ref/ρ_0
do k = nz-1, 1, -1
g_prime_K = g·(rho_layer(k+1) − rho_layer(k))/ρ_0
pbce(:,:,k) = pbce(:,:,k+1) + g_prime_K·(e_top_of_k − e_bed)/H
Uniform-density column ⇒ pbce−gtot ≡ 0 ⇒ bc-PGF correction a no-op.
Reads pgf%e_face; requires pgf%variant == OPGF_VARIANT_FV_MOM6
(other variants don’t fill e_face). validate_config and
configure_ocean_pgf refuse correction_bc_pgf with any other
form, so the error stop below is a backstop for direct callers.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(ocean_pressure_force_t), | intent(in) | :: | pgf | |||
| type(multilayer_state_t), | intent(in) | :: | ms |
Populate bt_eta, bt_ubt, bt_vbt from the current multilayer
state. bt_H_ref must already be set.
bt_eta = Σ_k h_layer − H_ref; bt_ubt = Σ_k(u·h_face)/Σ_k h_face.
Face thickness averages the two abutting columns (wall faces use the
single cell). With use_upstream_h_face, the interior face-h is the
first-order upwind pick — consistent with compute_h_face_upstream.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(multilayer_state_t), | intent(in) | :: | ms | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
REQUIRED — and required on purpose. Under |
face_depth_mean_u with MOM6 wt_u weighting (&ocean_bt_nml
forcing_visc_rem): the weight is
h_face·visc_rem(k) instead of h_face, so layers the implicit
vertical-friction solve will immediately damp (grounded sliver
stacks under the BBL glue, visc_rem → 0) contribute nothing to
the barotropic forcing. Without this the spurious grounded-layer
PGF’s depth-mean drives the fast loop ballistically even after
the layer velocities themselves are glued (PGF_BUG.md §9).
Denominator falls back to zero-output on an all-remnant-zero
column (the substep should not force an immobilized column).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| real(kind=wp), | intent(in) | :: | F_3d(:,:,:) | |||
| real(kind=wp), | intent(in) | :: | h_layer(:,:,:) | |||
| real(kind=wp), | intent(in) | :: | rem(:,:,:) | |||
| real(kind=wp), | intent(out) | :: | F_mean_2d(:,:) | |||
| integer, | intent(in) | :: | nz | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
REQUIRED (see |
||
| integer, | intent(in) | :: | n_inner |
Barotropic substep count (MOM6 |
||
| real(kind=wp), | intent(in) | :: | href(:,:) | |||
| integer, | intent(in) | :: | scheme |
A |
Symmetric v-face counterpart of face_depth_mean_rem_u — same
MOM6 wt_u floor, ieee_is_finite-guarded the same way.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| real(kind=wp), | intent(in) | :: | F_3d(:,:,:) | |||
| real(kind=wp), | intent(in) | :: | h_layer(:,:,:) | |||
| real(kind=wp), | intent(in) | :: | rem(:,:,:) | |||
| real(kind=wp), | intent(out) | :: | F_mean_2d(:,:) | |||
| integer, | intent(in) | :: | nz | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
REQUIRED (see |
||
| integer, | intent(in) | :: | n_inner |
Barotropic substep count (MOM6 |
||
| real(kind=wp), | intent(in) | :: | href(:,:) | |||
| integer, | intent(in) | :: | scheme |
A |
Depth-average a u-face 3D field, weighted by the per-layer face
thickness frhat_h_face_step returns (&ocean_bt_nml
frhat_scheme; FRHAT_ARITHMETIC = the plain mean of the two
abutting cell columns’ h_layer values, today’s default; the
argument is otherwise unchanged). Writes to a 2D field at the
same u-face shape. Wall faces (i=1, nx+1) fall back to the
single available cell (frhat_h_face_step degenerates there for
either scheme — see its docstring).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| real(kind=wp), | intent(in) | :: | F_3d(:,:,:) | |||
| real(kind=wp), | intent(in) | :: | h_layer(:,:,:) | |||
| real(kind=wp), | intent(out) | :: | F_mean_2d(:,:) | |||
| integer, | intent(in) | :: | nz | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
REQUIRED. Under |
||
| real(kind=wp), | intent(in) | :: | href(:,:) |
Reference column depth (m), |
||
| integer, | intent(in) | :: | scheme |
A |
Symmetric v-face counterpart of face_depth_mean_u.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| real(kind=wp), | intent(in) | :: | F_3d(:,:,:) | |||
| real(kind=wp), | intent(in) | :: | h_layer(:,:,:) | |||
| real(kind=wp), | intent(out) | :: | F_mean_2d(:,:) | |||
| integer, | intent(in) | :: | nz | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
REQUIRED. See |
||
| real(kind=wp), | intent(in) | :: | href(:,:) | |||
| integer, | intent(in) | :: | scheme |
A |
Fold the static land face masks into the BT-substep damping factor
(bt_rem_u(land)=0 ⇒ no velocity across a land face). Runs every outer
step AFTER compute_bt_rem (which resets bt_rem each step, so the mask
must be re-applied). All-wet ⇒ wet_u/v≡1 ⇒ no-op (bit-identical).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work |
bt_rem_u/v ≡ 1 (the init value). bt_rem_u/v is otherwise reset
only by compute_bt_rem, which only runs when bt_substep_drag
is on. compute_bt_rem_wave_drag MULTIPLIES into bt_rem_u/v,
so when wave drag is on and bt_substep_drag is off, something
must still reset it to 1 each stage — otherwise it compounds
geometrically across outer steps (bt_rem = R^n after n stages),
silently annihilating the barotropic mode. See
src/core/ocean/README.md for the multiplicative-accumulator
contract this establishes.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work |
Fill bt_work%cor_ref_u/v — the barotropic velocity at which
subtract_fast_cor_ref evaluates the Coriolis/advection
reference it removes from the substep forcing (MOM6
ubt_Cor/vbt_Cor).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(multilayer_state_t), | intent(in) | :: | ms | |||
| logical, | intent(in) | :: | from_u_av |
|
||
| type(ocean_metrics_t), | intent(in) | :: | metrics |
The closed-face mask carrier, REQUIRED — see the paragraph
above, and |
||
| integer, | intent(in), | optional | :: | n_inner |
Barotropic substep count, forwarded to |
The barotropic substep’s frozen forcing under the MOM6 split
(&ocean_bt_nml bc_pgf_forcing, default on):
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| integer, | intent(in) | :: | nx | |||
| integer, | intent(in) | :: | ny | |||
| real(kind=wp), | intent(in) | :: | g_pf | |||
| real(kind=wp), | intent(in) | :: | eta_seam(nx,ny) | |||
| logical, | intent(in) | :: | use_seam |
Populate bt_work%BTCL_u/v — the per-face flux-closure coefficients
consumed by find_uhbt — from the current h_layer. Upstream-h-sum
approach: FA_u_W0=FA_u_E0=Σ_k h_face (centred); FA_u_WW=Σ_k h_layer(west)
and FA_u_EE=Σ_k h_layer(east) (saturated-regime upstream draw); uBT_WW/EE
= ±VOL_CFL·dx/dt_outer pin the saturation velocity; uh_crv/uh_* are the
C¹-matching coefficients (Hallberg & Adcroft 2009). No-op when
use_bt_cont_type = .false. (BTCL_u/v unallocated).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(multilayer_state_t), | intent(in) | :: | ms | |||
| real(kind=wp), | intent(in) | :: | dt_outer |
Snapshot bt_eta into eta_PF — the free-surface height the slow PGF
sees this stage. Later differenced by compute_e_anom.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work |
Subtract the fast-loop Coriolis + vector-invariant advection,
evaluated at the reference barotropic velocity
bt_work%cor_ref_u/cor_ref_v (filled by
set_cor_ref_velocity), from the substep forcing
F_bt_u_fast/F_bt_v_fast.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_metrics_t), | intent(in) | :: | metrics | |||
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| real(kind=wp), | intent(in) | :: | f_corner(grid%nx_total+1,grid%ny_total+1) | |||
| integer, | intent(in) | :: | bc_w |
Per-edge OBC tags (OBC_WALL when no bc present). |
||
| integer, | intent(in) | :: | bc_e |
Per-edge OBC tags (OBC_WALL when no bc present). |
||
| integer, | intent(in) | :: | bc_s |
Per-edge OBC tags (OBC_WALL when no bc present). |
||
| integer, | intent(in) | :: | bc_n |
Per-edge OBC tags (OBC_WALL when no bc present). |
||
| logical, | intent(in) | :: | has_w |
Physical-edge flags (.false. at an MPI seam). |
||
| logical, | intent(in) | :: | has_e |
Physical-edge flags (.false. at an MPI seam). |
||
| logical, | intent(in) | :: | has_s |
Physical-edge flags (.false. at an MPI seam). |
||
| logical, | intent(in) | :: | has_n |
Physical-edge flags (.false. at an MPI seam). |
Sum the per-kernel slow-tendency scratch buffers into a
single (bt_work%F_slow_u, bt_work%F_slow_v) field per face per
layer. Reads pgf%dpdx_face, cor%pv_flux_x, hv%du_visc,
bd%du_drag, ss%du_stress and their v counterparts —
all already at the matching u-face / v-face shape. Each
kernel must have run its compute step before this is called.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(barotropic_workstate_t), | intent(inout) | :: | bt_work | |||
| type(ocean_pressure_force_t), | intent(in) | :: | pgf | |||
| type(coriolis_adv_t), | intent(in) | :: | cor | |||
| type(ocean_horizontal_viscosity_t), | intent(in) | :: | hv | |||
| type(ocean_bottom_drag_t), | intent(in) | :: | bd | |||
| type(ocean_surface_stress_t), | intent(in) | :: | ss | |||
| type(multilayer_state_t), | intent(in) | :: | ms |
compute_bt_rem under &vcoord_nml zfixed_closed_faces: the
same H/(H + r·hbbl·dt_inner) with H = Σ_k h_face·open (the
OPEN-column centred face depth, the weight face_depth_mean_*
uses). A face whose every layer is closed has H = 0 and keeps
bt_rem = 1, exactly like a dry face on the original path (it
carries no barotropic transport: dy_cu_bt = 0 there).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | nx | |||
| integer, | intent(in) | :: | ny | |||
| integer, | intent(in) | :: | nz | |||
| real(kind=wp), | intent(in) | :: | h_layer(nx,ny,nz) | |||
| real(kind=wp), | intent(in) | :: | open_u(nx+1,ny,nz) | |||
| real(kind=wp), | intent(in) | :: | open_v(nx,ny+1,nz) | |||
| real(kind=wp), | intent(in) | :: | drag_dt |
|
||
| real(kind=wp), | intent(inout) | :: | bt_rem_u(nx+1,ny) | |||
| real(kind=wp), | intent(inout) | :: | bt_rem_v(nx,ny+1) |
compute_bt_rem_wave_drag under &vcoord_nml zfixed_closed_faces:
MULTIPLIES H/(H + r_H·dt_inner) into bt_rem with the OPEN-column
face depth H = Σ_k h_face·open (the bt_rem_open_impl depth).
H <= 0 (every layer closed) ⇒ unmodified, MOM6’s guard.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | nx | |||
| integer, | intent(in) | :: | ny | |||
| integer, | intent(in) | :: | nz | |||
| real(kind=wp), | intent(in) | :: | h_layer(nx,ny,nz) | |||
| real(kind=wp), | intent(in) | :: | open_u(nx+1,ny,nz) | |||
| real(kind=wp), | intent(in) | :: | open_v(nx,ny+1,nz) | |||
| real(kind=wp), | intent(in) | :: | lwd_u(nx+1,ny) | |||
| real(kind=wp), | intent(in) | :: | lwd_v(nx,ny+1) | |||
| real(kind=wp), | intent(in) | :: | dt_inner | |||
| real(kind=wp), | intent(inout) | :: | bt_rem_u(nx+1,ny) | |||
| real(kind=wp), | intent(inout) | :: | bt_rem_v(nx,ny+1) |
OPEN-column upstream face thickness, for upstream_h_face under
&vcoord_nml zfixed_closed_faces.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | nx | |||
| integer, | intent(in) | :: | ny | |||
| integer, | intent(in) | :: | nz | |||
| logical, | intent(in) | :: | use_por | |||
| real(kind=wp), | intent(in) | :: | h_layer(nx,ny,nz) | |||
| real(kind=wp), | intent(in) | :: | u_face(nx+1,ny,nz) | |||
| real(kind=wp), | intent(in) | :: | v_face(nx,ny+1,nz) | |||
| real(kind=wp), | intent(in) | :: | open_u(nx+1,ny,nz) | |||
| real(kind=wp), | intent(in) | :: | open_v(nx,ny+1,nz) | |||
| real(kind=wp), | intent(in) | :: | por_u(nx+1,ny,nz) | |||
| real(kind=wp), | intent(in) | :: | por_v(nx,ny+1,nz) | |||
| real(kind=wp), | intent(in) | :: | dy_cu(nx+1,ny) | |||
| real(kind=wp), | intent(in) | :: | dx_cv(nx,ny+1) | |||
| real(kind=wp), | intent(in) | :: | dy_cu_bt(nx+1,ny) | |||
| real(kind=wp), | intent(in) | :: | dx_cv_bt(nx,ny+1) | |||
| real(kind=wp), | intent(inout) | :: | h_up_x(nx+1,ny) | |||
| real(kind=wp), | intent(inout) | :: | h_up_y(nx,ny+1) |