ocean_diag_set_output_density_levels Subroutine

private subroutine ocean_diag_set_output_density_levels(this, rho, ierr)

Configure the isopycnal (DENSITY) output grid — monotone-increasing target potential densities (kg/m³). Stored copy; must be called BEFORE any register with output_vgrid == DIAG_VGRID_DENSITY so the manager knows the output buffer shape (one cell per target).

Type Bound

ocean_diag_t

Arguments

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

Calls

proc~~ocean_diag_set_output_density_levels~~CallsGraph proc~ocean_diag_set_output_density_levels ocean_diag_t%ocean_diag_set_output_density_levels proc~fail fail proc~ocean_diag_set_output_density_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_density_levels~~CalledByGraph proc~ocean_diag_set_output_density_levels ocean_diag_t%ocean_diag_set_output_density_levels proc~engine_configure_diag engine_configure_diag proc~engine_configure_diag->proc~ocean_diag_set_output_density_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_density_levels(this, rho, ierr)
      !! Configure the isopycnal (DENSITY) output grid — monotone-increasing
      !! target potential densities (kg/m³).  Stored copy; must be called
      !! BEFORE any `register` with `output_vgrid == DIAG_VGRID_DENSITY` so
      !! the manager knows the output buffer shape (one cell per target).
      class(ocean_diag_t), intent(inout) :: this
      real(wp), intent(in) :: rho(:)
      integer, intent(out), optional :: ierr
      if (present(ierr)) ierr = OCEAN_STATUS_OK
      if (.not. this%is_init) return
      if (size(rho) > NZ_STACK_MAX) then
         call fail("set_output_density_levels: number of density bins "// &
                   "exceeds NZ_STACK_MAX; raise NZ_STACK_MAX or use fewer bins", &
                   ierr, OCEAN_STATUS_ERR_SETUP)
         return
      end if
      if (allocated(this%rho_out)) deallocate (this%rho_out)
      this%n_rho_out = size(rho)
      allocate (this%rho_out(this%n_rho_out), source=rho)
   end subroutine ocean_diag_set_output_density_levels