Dispatch to the requested remapping method.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | method |
REMAP_PCM, REMAP_PLM, REMAP_PPM, REMAP_PPM_H4, or REMAP_PQM |
||
| integer, | intent(in) | :: | nz | |||
| real(kind=wp), | intent(in) | :: | dz_old(nz) | |||
| real(kind=wp), | intent(in) | :: | dz_new(nz) | |||
| real(kind=wp), | intent(in) | :: | q_old(nz) | |||
| real(kind=wp), | intent(out) | :: | q_new(nz) | |||
| logical, | intent(in), | optional | :: | bnd_extrap |
Boundary extrapolation (MOM6 |
|
| logical, | intent(in), | optional | :: | nonunif |
Non-uniform-grid reconstruction weights
( |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | private | :: | be | ||||
| logical, | private | :: | nu |
pure subroutine remap_column(method, nz, dz_old, dz_new, q_old, q_new, bnd_extrap, nonunif) !$acc routine seq !! Dispatch to the requested remapping method. integer, intent(in) :: method !! REMAP_PCM, REMAP_PLM, REMAP_PPM, REMAP_PPM_H4, or REMAP_PQM integer, intent(in) :: nz real(wp), intent(in) :: dz_old(nz) real(wp), intent(in) :: dz_new(nz) real(wp), intent(in) :: q_old(nz) real(wp), intent(out) :: q_new(nz) logical, intent(in), optional :: bnd_extrap !! Boundary extrapolation (MOM6 `BOUNDARY_EXTRAPOLATION`). !! Absent or `.false.` (the default) ⇒ the boundary cells `k=1` !! and `k=nz` reconstruct as PCM, which is first-order there. !! `.true.` ⇒ `boundary_half_jump`, the linear-exact one-sided !! closure. Ignored by PCM (no reconstruction to close). logical, intent(in), optional :: nonunif !! Non-uniform-grid reconstruction weights !! (`&vcoord_nml remap_nonuniform_weights`). Absent or `.false.` !! (the default) ⇒ PLM's slope and PPM's edge estimate use their !! equal-thickness specialisations, which are linear-exact only on !! a uniform SOURCE column. `.true.` ⇒ the Colella & Woodward !! (1984) (1.6)-(1.8) thickness-weighted forms, linear-exact on any !! source column. Inert for PCM; reaches PPM_H4/PQM only through !! their small-`nz` fallbacks, their own stencils already being !! thickness-weighted. logical :: be, nu be = .false. if (present(bnd_extrap)) be = bnd_extrap nu = .false. if (present(nonunif)) nu = nonunif select case (method) case (REMAP_PCM) call remap_column_pcm(nz, dz_old, dz_new, q_old, q_new) case (REMAP_PLM) call remap_column_plm(nz, dz_old, dz_new, q_old, q_new, be, nu) case (REMAP_PPM) call remap_column_ppm(nz, dz_old, dz_new, q_old, q_new, be, nu) case (REMAP_PPM_H4) call remap_column_ppm_h4(nz, dz_old, dz_new, q_old, q_new, be, nu) case (REMAP_PQM) call remap_column_pqm(nz, dz_old, dz_new, q_old, q_new, be, nu) case default call remap_column_plm(nz, dz_old, dz_new, q_old, q_new, be, nu) end select end subroutine remap_column