weno_face_conc_x Function

private pure function weno_face_conc_x(nx, ny, nz, tr, wet_T, cc, jj, kk, d, avail_up, avail_down, rung_max, cfl) result(conc)

Swept-average WENO donor concentration at a zonal face. cc is the donor cell (i-index), d = +1 (u>0, downwind toward +i) or d = -1 (u<0, downwind toward -i). Gathers the mirrored/clamped stencil in downwind-positive order and dispatches to the coastal swept-average face helper at the highest feasible rung.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nx
integer, intent(in) :: ny
integer, intent(in) :: nz
real(kind=wp), intent(in) :: tr(nx,ny,nz)
real(kind=wp), intent(in) :: wet_T(nx,ny)
integer, intent(in) :: cc
integer, intent(in) :: jj
integer, intent(in) :: kk
integer, intent(in) :: d
integer, intent(in) :: avail_up
integer, intent(in) :: avail_down
integer, intent(in) :: rung_max
real(kind=wp), intent(in) :: cfl

Return Value real(kind=wp)


Calls

proc~~weno_face_conc_x~~CallsGraph proc~weno_face_conc_x weno_face_conc_x proc~plm_face_swept plm_face_swept proc~weno_face_conc_x->proc~plm_face_swept proc~ppm_mirror_h ppm_mirror_h proc~weno_face_conc_x->proc~ppm_mirror_h proc~recon_rung_for_face recon_rung_for_face proc~weno_face_conc_x->proc~recon_rung_for_face proc~weno5_face_swept weno5_face_swept proc~weno_face_conc_x->proc~weno5_face_swept proc~weno7_face_swept weno7_face_swept proc~weno_face_conc_x->proc~weno7_face_swept proc~weno9_face_swept weno9_face_swept proc~weno_face_conc_x->proc~weno9_face_swept

Called by

proc~~weno_face_conc_x~~CalledByGraph proc~weno_face_conc_x weno_face_conc_x proc~drain_swept_flux_x_weno drain_swept_flux_x_weno proc~drain_swept_flux_x_weno->proc~weno_face_conc_x proc~continuity_tracer_drain continuity_tracer_drain proc~continuity_tracer_drain->proc~drain_swept_flux_x_weno 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~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~continuity_tracer_drain 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->proc~ocean_dyn_step proc~engine_step->proc~ocean_dyn_step_split proc~rdb_ocean_set_tracer rdb_ocean_set_tracer proc~rdb_ocean_set_tracer->proc~ocean_dyn_flush_tracer_window 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

Variables

Type Visibility Attributes Name Initial
integer, private :: im
integer, private :: ip
real(kind=wp), private :: q0
real(kind=wp), private :: qm1
real(kind=wp), private :: qm2
real(kind=wp), private :: qm3
real(kind=wp), private :: qm4
real(kind=wp), private :: qp1
real(kind=wp), private :: qp2
real(kind=wp), private :: qp3
real(kind=wp), private :: qp4
integer, private :: rung

Source Code

   pure function weno_face_conc_x(nx, ny, nz, tr, wet_T, cc, jj, kk, d, &
                                  avail_up, avail_down, rung_max, cfl) result(conc)
      !! Swept-average WENO donor concentration at a zonal face.  `cc` is
      !! the donor cell (i-index), `d = +1` (u>0, downwind toward +i) or
      !! `d = -1` (u<0, downwind toward -i).  Gathers the mirrored/clamped
      !! stencil in downwind-positive order and dispatches to the coastal
      !! swept-average face helper at the highest feasible rung.
      !$acc routine seq
      integer, intent(in) :: nx, ny, nz, cc, jj, kk, d, avail_up, avail_down, rung_max
      real(wp), intent(in) :: tr(nx, ny, nz), wet_T(nx, ny)
      real(wp), intent(in) :: cfl
      real(wp) :: conc
      integer :: rung, ip, im
      real(wp) :: q0, qp1, qp2, qp3, qp4, qm1, qm2, qm3, qm4
      rung = recon_rung_for_face(avail_up, avail_down, rung_max)
      q0 = tr(cc, jj, kk)
      if (rung <= 0) then
         conc = q0                     ! donor cell (0th order)
         return
      end if
      ip = min(max(cc + d, 1), nx)
      im = min(max(cc - d, 1), nx)
      qp1 = ppm_mirror_h(tr(ip, jj, kk), q0, wet_T(ip, jj))
      qm1 = ppm_mirror_h(tr(im, jj, kk), q0, wet_T(im, jj))
      if (rung == 1) then
         conc = plm_face_swept(qm1, q0, qp1, cfl)
         return
      end if
      ip = min(max(cc + 2*d, 1), nx)
      im = min(max(cc - 2*d, 1), nx)
      qp2 = ppm_mirror_h(tr(ip, jj, kk), qp1, wet_T(ip, jj))
      qm2 = ppm_mirror_h(tr(im, jj, kk), qm1, wet_T(im, jj))
      if (rung == 2) then
         conc = weno5_face_swept(qm2, qm1, q0, qp1, qp2, cfl)
         return
      end if
      ip = min(max(cc + 3*d, 1), nx)
      im = min(max(cc - 3*d, 1), nx)
      qp3 = ppm_mirror_h(tr(ip, jj, kk), qp2, wet_T(ip, jj))
      qm3 = ppm_mirror_h(tr(im, jj, kk), qm2, wet_T(im, jj))
      if (rung == 3) then
         conc = weno7_face_swept(qm3, qm2, qm1, q0, qp1, qp2, qp3, cfl)
         return
      end if
      ip = min(max(cc + 4*d, 1), nx)
      im = min(max(cc - 4*d, 1), nx)
      qp4 = ppm_mirror_h(tr(ip, jj, kk), qp3, wet_T(ip, jj))
      qm4 = ppm_mirror_h(tr(im, jj, kk), qm3, wet_T(im, jj))
      conc = weno9_face_swept(qm4, qm3, qm2, qm1, q0, qp1, qp2, qp3, qp4, cfl)
   end function weno_face_conc_x