ocean_diag_set_output_sigma_levels Subroutine

private subroutine ocean_diag_set_output_sigma_levels(this, sigma, ierr)

Configure the terrain-following (SIGMA) output grid — cumulative sigma fractions (0..1, monotone shallow->deep). Stored copy; must be called BEFORE any register with output_vgrid == DIAG_VGRID_SIGMA so the manager knows the output buffer shape.

Type Bound

ocean_diag_t

Arguments

Type IntentOptional Attributes Name
class(ocean_diag_t), intent(inout) :: this
real(kind=wp), intent(in) :: sigma(:)
integer, intent(out), optional :: ierr

Calls

proc~~ocean_diag_set_output_sigma_levels~~CallsGraph proc~ocean_diag_set_output_sigma_levels ocean_diag_t%ocean_diag_set_output_sigma_levels proc~fail fail proc~ocean_diag_set_output_sigma_levels->proc~fail error error proc~fail->error proc~error_ring_push error_ring_push proc~fail->proc~error_ring_push

Called by

proc~~ocean_diag_set_output_sigma_levels~~CalledByGraph proc~ocean_diag_set_output_sigma_levels ocean_diag_t%ocean_diag_set_output_sigma_levels proc~engine_configure_diag engine_configure_diag proc~engine_configure_diag->proc~ocean_diag_set_output_sigma_levels proc~engine_setup engine_setup proc~engine_setup->proc~engine_configure_diag proc~complete_ocean_create complete_ocean_create proc~complete_ocean_create->proc~engine_setup proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_setup proc~driver_validate driver_validate proc~driver_validate->proc~engine_setup proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean proc~rdb_ocean_create_finalize rdb_ocean_create_finalize proc~rdb_ocean_create_finalize->proc~complete_ocean_create proc~rdb_ocean_create_from_string rdb_ocean_create_from_string proc~rdb_ocean_create_from_string->proc~complete_ocean_create

Source Code

   subroutine ocean_diag_set_output_sigma_levels(this, sigma, ierr)
      !! Configure the terrain-following (SIGMA) output grid — cumulative
      !! sigma fractions (0..1, monotone shallow->deep).  Stored copy; must
      !! be called BEFORE any `register` with `output_vgrid ==
      !! DIAG_VGRID_SIGMA` so the manager knows the output buffer shape.
      class(ocean_diag_t), intent(inout) :: this
      real(wp), intent(in) :: sigma(:)
      integer, intent(out), optional :: ierr
      if (present(ierr)) ierr = OCEAN_STATUS_OK
      if (.not. this%is_init) return
      if (size(sigma) > NZ_STACK_MAX) then
         call fail("set_output_sigma_levels: number of sigma levels "// &
                   "exceeds NZ_STACK_MAX; raise NZ_STACK_MAX or use fewer levels", &
                   ierr, OCEAN_STATUS_ERR_SETUP)
         return
      end if
      if (allocated(this%sigma_out)) deallocate (this%sigma_out)
      this%n_sigma_out = size(sigma)
      allocate (this%sigma_out(this%n_sigma_out), source=sigma)
   end subroutine ocean_diag_set_output_sigma_levels