segment_geometry Subroutine

private subroutine segment_geometry(grid, edge, i0, j0, nx, ny, dest_i0, dest_j0, ierr)

Degenerate-axis + along-edge slab geometry for an OBC-segment registration. i0/j0/nx/ny are FILE-side (start, count); dest_i0/dest_j0 are where the slab lands in the consumer’s staging array.

Arguments

Type IntentOptional Attributes Name
type(hgrid_t), intent(in) :: grid
integer, intent(in) :: edge
integer, intent(out) :: i0
integer, intent(out) :: j0
integer, intent(out) :: nx
integer, intent(out) :: ny
integer, intent(out) :: dest_i0
integer, intent(out) :: dest_j0
integer, intent(out), optional :: ierr

Non-zero (OCEAN_STATUS_ERR_SETUP) on an unrecognised edge tag when present; absent behaves as today (error stop).


Calls

proc~~segment_geometry~~CallsGraph proc~segment_geometry segment_geometry proc~fail fail proc~segment_geometry->proc~fail to_string to_string proc~segment_geometry->to_string error error proc~fail->error proc~error_ring_push error_ring_push proc~fail->proc~error_ring_push

Called by

proc~~segment_geometry~~CalledByGraph proc~segment_geometry segment_geometry proc~ocean_data_input_register_segment_2d ocean_data_input_register_segment_2d proc~ocean_data_input_register_segment_2d->proc~segment_geometry proc~ocean_data_input_register_segment_3d ocean_data_input_register_segment_3d proc~ocean_data_input_register_segment_3d->proc~segment_geometry

Source Code

   subroutine segment_geometry(grid, edge, i0, j0, nx, ny, dest_i0, dest_j0, ierr)
      !! Degenerate-axis + along-edge slab geometry for an OBC-segment
      !! registration.  `i0`/`j0`/`nx`/`ny` are FILE-side (start, count);
      !! `dest_i0`/`dest_j0` are where the slab lands in the consumer's
      !! staging array.
      type(hgrid_t), intent(in) :: grid
      integer, intent(in) :: edge
      integer, intent(out) :: i0, j0, nx, ny, dest_i0, dest_j0
      integer, intent(out), optional :: ierr
         !! Non-zero (`OCEAN_STATUS_ERR_SETUP`) on an unrecognised `edge`
         !! tag when present; absent behaves as today (`error stop`).

      if (present(ierr)) ierr = OCEAN_STATUS_OK
      select case (edge)
      case (DATA_EDGE_WEST, DATA_EDGE_EAST)
         i0 = 1
         nx = 1
         j0 = grid%j_offset_global + 1
         ny = grid%ny_phys
         dest_i0 = 1
         dest_j0 = grid%nghost + 1
      case (DATA_EDGE_SOUTH, DATA_EDGE_NORTH)
         i0 = grid%i_offset_global + 1
         nx = grid%nx_phys
         j0 = 1
         ny = 1
         dest_i0 = grid%nghost + 1
         dest_j0 = 1
      case default
         call fail("ocean_data_input: unknown edge tag "//to_string(edge)// &
                   " (expected DATA_EDGE_WEST/EAST/SOUTH/NORTH)", ierr, OCEAN_STATUS_ERR_SETUP)
         return
      end select
   end subroutine segment_geometry