fold_v_3d Subroutine

private subroutine fold_v_3d(fld, nxt, nyf, nz, nx_phys, ny_phys, ng, device_resident)

y-face (v) 3D north fold (negate + fold-line projection).

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: fld(nxt,nyf,nz)

y-face field (nx_total, ny_total+1, nz).

integer, intent(in) :: nxt
integer, intent(in) :: nyf
integer, intent(in) :: nz
integer, intent(in) :: nx_phys
integer, intent(in) :: ny_phys
integer, intent(in) :: ng
logical, intent(in), optional :: device_resident

Exchange path only: .false. ⇒ host arrays.


Calls

proc~~fold_v_3d~~CallsGraph proc~fold_v_3d fold_v_3d interface~fold_north_v_face fold_north_v_face proc~fold_v_3d->interface~fold_north_v_face interface~ocean_fold_pack ocean_fold_pack proc~fold_v_3d->interface~ocean_fold_pack interface~ocean_fold_unpack ocean_fold_unpack proc~fold_v_3d->interface~ocean_fold_unpack proc~fold_stagger_nrows fold_stagger_nrows proc~fold_v_3d->proc~fold_stagger_nrows proc~ocean_fold_begin ocean_fold_begin proc~fold_v_3d->proc~ocean_fold_begin proc~ocean_fold_end ocean_fold_end proc~fold_v_3d->proc~ocean_fold_end proc~ocean_fold_exchange ocean_fold_exchange proc~fold_v_3d->proc~ocean_fold_exchange proc~ocean_fold_is_distributed ocean_fold_is_distributed proc~fold_v_3d->proc~ocean_fold_is_distributed proc~fold_north_v_face_2d fold_north_v_face_2d interface~fold_north_v_face->proc~fold_north_v_face_2d proc~fold_north_v_face_3d fold_north_v_face_3d interface~fold_north_v_face->proc~fold_north_v_face_3d proc~ocean_fold_pack_2d ocean_fold_pack_2d interface~ocean_fold_pack->proc~ocean_fold_pack_2d proc~ocean_fold_pack_3d ocean_fold_pack_3d interface~ocean_fold_pack->proc~ocean_fold_pack_3d proc~ocean_fold_unpack_2d ocean_fold_unpack_2d interface~ocean_fold_unpack->proc~ocean_fold_unpack_2d proc~ocean_fold_unpack_3d ocean_fold_unpack_3d interface~ocean_fold_unpack->proc~ocean_fold_unpack_3d proc~grow_buffers grow_buffers proc~ocean_fold_begin->proc~grow_buffers to_string to_string proc~ocean_fold_begin->to_string warning warning proc~ocean_fold_begin->warning comm_irecv_real_sp_array_n comm_irecv_real_sp_array_n proc~ocean_fold_exchange->comm_irecv_real_sp_array_n comm_isend_real_sp_array_n comm_isend_real_sp_array_n proc~ocean_fold_exchange->comm_isend_real_sp_array_n proc~comm_env_compute_comm comm_env_compute_comm proc~ocean_fold_exchange->proc~comm_env_compute_comm waitall waitall proc~ocean_fold_exchange->waitall comm_world comm_world proc~comm_env_compute_comm->comm_world local local proc~fold_north_v_face_2d->local proc~fold_north_v_face_3d->local proc~ocean_fold_pack_2d->proc~ocean_fold_pack_3d proc~ocean_fold_pack_3d->proc~fold_stagger_nrows proc~fold_stagger_family fold_stagger_family proc~ocean_fold_pack_3d->proc~fold_stagger_family proc~ocean_fold_unpack_2d->proc~ocean_fold_unpack_3d proc~ocean_fold_unpack_3d->proc~fold_stagger_nrows proc~ocean_fold_unpack_3d->proc~fold_stagger_family

Called by

proc~~fold_v_3d~~CalledByGraph proc~fold_v_3d fold_v_3d interface~ocean_fold_north_v_face ocean_fold_north_v_face interface~ocean_fold_north_v_face->proc~fold_v_3d proc~barotropic_substep_nonlinear barotropic_substep_nonlinear proc~barotropic_substep_nonlinear->interface~ocean_fold_north_v_face proc~continuity_gm_apply continuity_gm_apply proc~continuity_gm_apply->interface~ocean_fold_north_v_face proc~continuity_tracer_step_split continuity_tracer_step_split proc~continuity_tracer_step_split->interface~ocean_fold_north_v_face proc~barotropic_substep_nonlinear_interior barotropic_substep_nonlinear_interior proc~barotropic_substep_nonlinear_interior->proc~barotropic_substep_nonlinear proc~bt_wide_substep bt_wide_substep proc~bt_wide_substep->proc~barotropic_substep_nonlinear proc~run_continuity_chain run_continuity_chain proc~run_continuity_chain->proc~continuity_tracer_step_split proc~run_gm_step run_gm_step proc~run_gm_step->proc~continuity_gm_apply proc~run_stage run_stage proc~run_stage->proc~continuity_tracer_step_split proc~ocean_dyn_step ocean_dyn_step proc~ocean_dyn_step->proc~run_stage proc~ocean_dyn_step_split ocean_dyn_step_split 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_stage_split->proc~barotropic_substep_nonlinear_interior proc~run_stage_split->proc~bt_wide_substep proc~run_stage_split->proc~run_continuity_chain proc~engine_step engine_step proc~engine_step->proc~ocean_dyn_step proc~engine_step->proc~ocean_dyn_step_split

Source Code

   subroutine fold_v_3d(fld, nxt, nyf, nz, nx_phys, ny_phys, ng, device_resident)
      !! y-face (v) 3D north fold (negate + fold-line projection).
      integer, intent(in) :: nxt, nyf, nz, nx_phys, ny_phys, ng
      real(wp), intent(inout) :: fld(nxt, nyf, nz)
         !! y-face field (nx_total, ny_total+1, nz).
      logical, intent(in), optional :: device_resident
         !! Exchange path only: `.false.` ⇒ host arrays.

      if (ocean_fold_is_distributed()) then
         call ocean_fold_begin(fold_stagger_nrows(FOLD_STAG_V, fx_ng)*nz)
         call ocean_fold_pack(fld, nxt, nyf, nz, FOLD_STAG_V, device_resident)
         call ocean_fold_exchange(device_resident)
         call ocean_fold_unpack(fld, nxt, nyf, nz, FOLD_STAG_V, .true., device_resident)
         call ocean_fold_end()
      else
         call fold_north_v_face(fld, nxt, nyf, nz, nx_phys, ny_phys, ng)
      end if
   end subroutine fold_v_3d