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 | Intent | Optional | 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 ( |
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