Seam ghosts of the three per-cell ice->ocean flux diagnostics the
couplers hand to the ocean — salt_flux_diag, heat_flux_diag,
sw_thru_diag — one two-pass centre exchange each.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_sea_ice_t), | intent(inout) | :: | ice |
Live sea-ice slot ( |
||
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_bc_state_t), | intent(in) | :: | bc |
Supplies |
||
| logical, | intent(in), | optional | :: | device_resident |
Forwarded to the halo primitives. |
Make the sea-ice CATEGORY state valid in every ghost cell (X1 of
the sea-ice MPI plan): part_size, m_ice, m_snow,
enth_ice, sal_ice, enth_snow, one two-pass centre exchange
each, all categories (and ice layers) in one message per
direction, THEN the tripolar north fold of each (added with the
fold-seam fix below).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_sea_ice_t), | intent(inout) | :: | ice |
Live sea-ice slot ( |
||
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_bc_state_t), | intent(in) | :: | bc |
Supplies |
||
| logical, | intent(in), | optional | :: | device_resident |
Forwarded to the halo primitives; |
X4 of the sea-ice MPI plan: the seam ghosts every advective
substep of ice_transport_step reads — the cell-averaged
category masses mca_ice/mca_snow (the PPM donors, 5-point
stencil) and the riding intensive tracers m_ice, enth_ice,
sal_ice, enth_snow (the PCM donors). mca_* ghosts are
zeroed by the IST->CAS conversion and the ride/mass updates leave
the ghost band one substep old, so this runs at the top of EVERY
substep. On one rank with a periodic axis the primitives wrap.
Also carries the tripolar north fold of the same six fields
(plain-copy scalar contract) — without it the fold-seam row’s
advective stencil read a stale/unrelated mirror cell every
substep, which is how ice piled up without bound on that row.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_sea_ice_t), | intent(inout) | :: | ice |
Live sea-ice slot ( |
||
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_bc_state_t), | intent(in) | :: | bc |
Supplies |
||
| logical, | intent(in), | optional | :: | device_resident |
Forwarded to the halo primitives. |
Exchange ghost cells for the four multilayer prognostic field kinds via the O1 halo primitives:
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(multilayer_state_t), | intent(inout) | :: | ms |
Multilayer C-grid state whose ghost bands are to be filled. |
||
| logical, | intent(in), | optional | :: | device_resident |
Forwarded to every primitive call. Pass .false. for init-time host-side exchanges that occur before ocean_state_enter_data. Default (.true.) is the normal device-resident path. |
Make the surface-stress pair valid in every ghost cell, then
re-derive stress_mag from it.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_surface_stress_t), | intent(inout) | :: | ss |
Stress slot whose |
||
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_bc_state_t), | intent(in) | :: | bc |
Supplies |
||
| logical, | intent(in), | optional | :: | device_resident |
Forwarded to the halo primitives; |
Explicit-shape seam: a contiguous ice array of any rank (0:ncat
third bound, rank-4 category x layer) is handed in by sequence
association and exchanged as one (nxt, nyt, nz) centre field.
The generic ocean_halo_centre resolves on the DUMMY’s rank, so
the rank-4 actuals cannot call it directly.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(inout) | :: | fld(nxt,nyt,nz) | |||
| integer, | intent(in) | :: | nxt | |||
| integer, | intent(in) | :: | nyt | |||
| integer, | intent(in) | :: | nz | |||
| logical, | intent(in), | optional | :: | device_resident |