ppm_mirror_h Function

public pure elemental function ppm_mirror_h(h_nbr, h_loc, w_nbr) result(h_out)

Mirror-h at a land neighbour (spec §14 C2 / MOM6’s reflected-coast PPM): substitute the LOCAL cell’s thickness (or tracer) for a LAND neighbour’s held floor value so the PPM parabola sees a flat, reflected coast and the wet-side face value is not biased by the dry column. Branchless: h_out = w_nbr·h_nbr + (1-w_nbr)·h_loc. Wet neighbour (w_nbr=1) ⇒ h_out = h_nbr (literal no-op); land neighbour (w_nbr=0) ⇒ h_out = h_loc.

Consumer: rdb_ice_transport (sea-ice PR 4b) reuses this verbatim for the category-summed ice/snow PPM parabola — SIS2’s mask2dT substitution (SIS_continuity.F90:1478-1479).

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: h_nbr

neighbour value

real(kind=wp), intent(in) :: h_loc

local-cell value (the mirror target)

real(kind=wp), intent(in) :: w_nbr

neighbour wet mask (0/1)

Return Value real(kind=wp)


Called by

proc~~ppm_mirror_h~~CalledByGraph proc~ppm_mirror_h ppm_mirror_h proc~continuity_compute_fluxes continuity_compute_fluxes proc~continuity_compute_fluxes->proc~ppm_mirror_h proc~continuity_compute_fluxes_barotropic continuity_compute_fluxes_barotropic proc~continuity_compute_fluxes_barotropic->proc~ppm_mirror_h proc~continuity_meridional_flux continuity_meridional_flux proc~continuity_meridional_flux->proc~ppm_mirror_h proc~continuity_zonal_flux continuity_zonal_flux proc~continuity_zonal_flux->proc~ppm_mirror_h proc~drain_parabola_x drain_parabola_x proc~drain_parabola_x->proc~ppm_mirror_h proc~drain_parabola_y drain_parabola_y proc~drain_parabola_y->proc~ppm_mirror_h proc~ice_cat_flux_x_impl ice_cat_flux_x_impl proc~ice_cat_flux_x_impl->proc~ppm_mirror_h proc~ice_cat_flux_y_impl ice_cat_flux_y_impl proc~ice_cat_flux_y_impl->proc~ppm_mirror_h proc~tracer_advect_meridional_one_impl tracer_advect_meridional_one_impl proc~tracer_advect_meridional_one_impl->proc~ppm_mirror_h proc~tracer_advect_one_impl tracer_advect_one_impl proc~tracer_advect_one_impl->proc~ppm_mirror_h proc~tracer_advect_zonal_one_impl tracer_advect_zonal_one_impl proc~tracer_advect_zonal_one_impl->proc~ppm_mirror_h proc~weno_face_conc_x weno_face_conc_x proc~weno_face_conc_x->proc~ppm_mirror_h proc~weno_face_conc_y weno_face_conc_y proc~weno_face_conc_y->proc~ppm_mirror_h proc~continuity_step_split continuity_step_split proc~continuity_step_split->proc~continuity_meridional_flux proc~continuity_step_split->proc~continuity_zonal_flux proc~continuity_tracer_drain continuity_tracer_drain proc~continuity_tracer_drain->proc~drain_parabola_x proc~continuity_tracer_drain->proc~drain_parabola_y proc~drain_swept_flux_x_weno drain_swept_flux_x_weno proc~continuity_tracer_drain->proc~drain_swept_flux_x_weno proc~drain_swept_flux_y_weno drain_swept_flux_y_weno proc~continuity_tracer_drain->proc~drain_swept_flux_y_weno proc~continuity_tracer_step_split continuity_tracer_step_split proc~continuity_tracer_step_split->proc~continuity_meridional_flux proc~continuity_tracer_step_split->proc~continuity_zonal_flux proc~tracer_advect_meridional tracer_advect_meridional proc~continuity_tracer_step_split->proc~tracer_advect_meridional proc~tracer_advect_zonal tracer_advect_zonal proc~continuity_tracer_step_split->proc~tracer_advect_zonal proc~drain_swept_flux_x_weno->proc~weno_face_conc_x proc~drain_swept_flux_y_weno->proc~weno_face_conc_y proc~gm_tracer_advect_x gm_tracer_advect_x proc~gm_tracer_advect_x->proc~tracer_advect_zonal_one_impl proc~gm_tracer_advect_y gm_tracer_advect_y proc~gm_tracer_advect_y->proc~tracer_advect_meridional_one_impl proc~ice_pass_x ice_pass_x proc~ice_pass_x->proc~ice_cat_flux_x_impl proc~ice_pass_y ice_pass_y proc~ice_pass_y->proc~ice_cat_flux_y_impl proc~ocean_dyn_step_barotropic ocean_dyn_step_barotropic proc~ocean_dyn_step_barotropic->proc~continuity_compute_fluxes_barotropic proc~tracer_advect tracer_advect proc~tracer_advect->proc~tracer_advect_one_impl proc~tracer_advect_meridional->proc~tracer_advect_meridional_one_impl proc~tracer_advect_zonal->proc~tracer_advect_zonal_one_impl proc~continuity_gm_apply continuity_gm_apply proc~continuity_gm_apply->proc~gm_tracer_advect_x proc~continuity_gm_apply->proc~gm_tracer_advect_y proc~ice_transport_step ice_transport_step proc~ice_transport_step->proc~ice_pass_x proc~ice_transport_step->proc~ice_pass_y proc~ocean_dyn_flush_tracer_window ocean_dyn_flush_tracer_window proc~ocean_dyn_flush_tracer_window->proc~continuity_tracer_drain proc~ocean_dyn_step ocean_dyn_step proc~ocean_dyn_step->proc~continuity_tracer_drain proc~run_stage run_stage proc~ocean_dyn_step->proc~run_stage proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~continuity_tracer_drain proc~run_gm_step run_gm_step proc~ocean_dyn_step_split->proc~run_gm_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~continuity_tracer_step_split proc~run_stage->proc~continuity_tracer_step_split proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~ocean_dyn_flush_tracer_window proc~engine_step engine_step proc~driver_run_ocean->proc~engine_step proc~engine_step_ice engine_step_ice proc~driver_run_ocean->proc~engine_step_ice proc~engine_step->proc~ocean_dyn_step proc~engine_step->proc~ocean_dyn_step_split proc~engine_step_ice->proc~ice_transport_step proc~rdb_ocean_set_tracer rdb_ocean_set_tracer proc~rdb_ocean_set_tracer->proc~ocean_dyn_flush_tracer_window proc~run_gm_step->proc~continuity_gm_apply proc~run_stage_split->proc~run_continuity_chain proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step proc~rdb_ocean_step->proc~engine_step_ice

Source Code

   pure elemental function ppm_mirror_h(h_nbr, h_loc, w_nbr) result(h_out)
      !$acc routine seq
      !! Mirror-h at a land neighbour (spec §14 C2 / MOM6's
      !! reflected-coast PPM): substitute the LOCAL cell's
      !! thickness (or tracer) for a LAND neighbour's held floor value
      !! so the PPM parabola sees a flat, reflected coast and the
      !! wet-side face value is not biased by the dry column.  Branchless:
      !!   `h_out = w_nbr·h_nbr + (1-w_nbr)·h_loc`.
      !! Wet neighbour (`w_nbr=1`) ⇒ `h_out = h_nbr` (literal no-op);
      !! land neighbour (`w_nbr=0`) ⇒ `h_out = h_loc`.
      !!
      !! Consumer: `rdb_ice_transport` (sea-ice PR 4b) reuses this
      !! verbatim for the category-summed ice/snow PPM parabola —
      !! SIS2's mask2dT substitution (`SIS_continuity.F90:1478-1479`).
      real(wp), intent(in) :: h_nbr  !! neighbour value
      real(wp), intent(in) :: h_loc  !! local-cell value (the mirror target)
      real(wp), intent(in) :: w_nbr  !! neighbour wet mask (0/1)
      real(wp) :: h_out
      h_out = w_nbr*h_nbr + (1.0_wp - w_nbr)*h_loc
   end function ppm_mirror_h