remap_column Subroutine

public pure subroutine remap_column(method, nz, dz_old, dz_new, q_old, q_new, bnd_extrap, nonunif)

Dispatch to the requested remapping method.

Arguments

Type IntentOptional 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 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.


Calls

proc~~remap_column~~CallsGraph proc~remap_column remap_column proc~remap_column_pcm remap_column_pcm proc~remap_column->proc~remap_column_pcm proc~remap_column_plm remap_column_plm proc~remap_column->proc~remap_column_plm proc~remap_column_ppm remap_column_ppm proc~remap_column->proc~remap_column_ppm proc~remap_column_ppm_h4 remap_column_ppm_h4 proc~remap_column->proc~remap_column_ppm_h4 proc~remap_column_pqm remap_column_pqm proc~remap_column->proc~remap_column_pqm proc~boundary_half_jump boundary_half_jump proc~remap_column_plm->proc~boundary_half_jump proc~plm_slope_nonuniform plm_slope_nonuniform proc~remap_column_plm->proc~plm_slope_nonuniform proc~remap_column_ppm->proc~remap_column_plm proc~remap_column_ppm->proc~boundary_half_jump proc~ppm_edge_nonuniform ppm_edge_nonuniform proc~remap_column_ppm->proc~ppm_edge_nonuniform proc~ppm_edge_two_cell ppm_edge_two_cell proc~remap_column_ppm->proc~ppm_edge_two_cell proc~ppm_jump_nonuniform ppm_jump_nonuniform proc~remap_column_ppm->proc~ppm_jump_nonuniform proc~remap_column_ppm_h4->proc~remap_column_plm proc~remap_column_ppm_h4->proc~boundary_half_jump proc~remap_column_pqm->proc~remap_column_ppm proc~remap_column_pqm->proc~boundary_half_jump proc~pqm_end_value_h4 pqm_end_value_h4 proc~remap_column_pqm->proc~pqm_end_value_h4 proc~pqm_solve_diag_dominant pqm_solve_diag_dominant proc~remap_column_pqm->proc~pqm_solve_diag_dominant

Called by

proc~~remap_column~~CalledByGraph proc~remap_column remap_column proc~ocean_remap_tracer_column ocean_remap_tracer_column proc~ocean_remap_tracer_column->proc~remap_column proc~ocean_remap_tracer_field ocean_remap_tracer_field proc~ocean_remap_tracer_field->proc~remap_column proc~remap_layer_to_density_impl remap_layer_to_density_impl proc~remap_layer_to_density_impl->proc~remap_column proc~remap_layer_to_vcoord_impl remap_layer_to_vcoord_impl proc~remap_layer_to_vcoord_impl->proc~remap_column proc~remap_tracer_grounded remap_tracer_grounded proc~remap_tracer_grounded->proc~remap_column proc~remap_x_face_grounded remap_x_face_grounded proc~remap_x_face_grounded->proc~remap_column proc~remap_x_face_velocity remap_x_face_velocity proc~remap_x_face_velocity->proc~remap_column proc~remap_y_face_grounded remap_y_face_grounded proc~remap_y_face_grounded->proc~remap_column proc~remap_y_face_velocity remap_y_face_velocity proc~remap_y_face_velocity->proc~remap_column proc~ocean_apply_ale_remap_centres ocean_apply_ale_remap_centres proc~ocean_apply_ale_remap_centres->proc~ocean_remap_tracer_field proc~ocean_apply_ale_remap_faces ocean_apply_ale_remap_faces proc~ocean_apply_ale_remap_faces->proc~remap_x_face_velocity proc~ocean_apply_ale_remap_faces->proc~remap_y_face_velocity proc~ocean_apply_ale_remap_step ocean_apply_ale_remap_step proc~ocean_apply_ale_remap_step->proc~ocean_remap_tracer_field proc~ocean_apply_ale_remap_step->proc~remap_x_face_velocity proc~ocean_apply_ale_remap_step->proc~remap_y_face_velocity proc~ocean_apply_conservative_min_thickness ocean_apply_conservative_min_thickness proc~ocean_apply_conservative_min_thickness->proc~remap_tracer_grounded proc~ocean_apply_conservative_min_thickness->proc~remap_x_face_grounded proc~ocean_apply_conservative_min_thickness->proc~remap_y_face_grounded proc~remap_layer_to_density remap_layer_to_density proc~remap_layer_to_density->proc~remap_layer_to_density_impl proc~remap_layer_to_sigma remap_layer_to_sigma proc~remap_layer_to_sigma->proc~remap_layer_to_vcoord_impl proc~remap_layer_to_z remap_layer_to_z proc~remap_layer_to_z->proc~remap_layer_to_vcoord_impl proc~remap_layer_to_zstar remap_layer_to_zstar proc~remap_layer_to_zstar->proc~remap_layer_to_vcoord_impl proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~ocean_apply_ale_remap_step proc~run_stage_split run_stage_split proc~ocean_dyn_step_split->proc~run_stage_split proc~run_continuity_chain run_continuity_chain proc~run_continuity_chain->proc~ocean_apply_conservative_min_thickness proc~engine_step engine_step proc~engine_step->proc~ocean_dyn_step_split proc~run_stage_split->proc~run_continuity_chain proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_step proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step

Variables

Type Visibility Attributes Name Initial
logical, private :: be
logical, private :: nu

Source Code

   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