finalise_accumulator Subroutine

private subroutine finalise_accumulator(v)

Copy the accumulator into output_buffer. Called at cadence-fire BEFORE log / NetCDF emission consumes output_buffer.

MEAN -> accumulator / dt_accum (dt-weighted time mean) INTEGRAL -> accumulator (raw cumulative integral) MAX/MIN -> accumulator (running extremum)

Arguments

Type IntentOptional Attributes Name
type(diag_var_t), intent(inout) :: v

Calls

proc~~finalise_accumulator~~CallsGraph proc~finalise_accumulator finalise_accumulator proc~finalise_copy_impl finalise_copy_impl proc~finalise_accumulator->proc~finalise_copy_impl proc~finalise_scale_impl finalise_scale_impl proc~finalise_accumulator->proc~finalise_scale_impl

Called by

proc~~finalise_accumulator~~CalledByGraph proc~finalise_accumulator finalise_accumulator proc~ocean_diag_step ocean_diag_t%ocean_diag_step proc~ocean_diag_step->proc~finalise_accumulator proc~engine_step_finalize engine_step_finalize proc~engine_step_finalize->proc~ocean_diag_step proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_step_finalize proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step_finalize proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean

Variables

Type Visibility Attributes Name Initial
real(kind=wp), private, parameter :: TINY_DT = 1.0e-12_wp

Source Code

   subroutine finalise_accumulator(v)
      !! Copy the accumulator into `output_buffer`.  Called at
      !! cadence-fire BEFORE log / NetCDF emission consumes
      !! `output_buffer`.
      !!
      !! MEAN     -> `accumulator / dt_accum`  (dt-weighted time mean)
      !! INTEGRAL -> `accumulator`             (raw cumulative integral)
      !! MAX/MIN  -> `accumulator`             (running extremum)
      type(diag_var_t), intent(inout) :: v
      real(wp), parameter :: TINY_DT = 1.0e-12_wp
      if (.not. allocated(v%accumulator)) return
      if (v%n_accum == 0) return
      select case (v%time_op)
      case (DIAG_OP_MEAN)
         if (v%dt_accum < TINY_DT) return
         call finalise_scale_impl(v%output_buffer, v%accumulator, &
                                  1.0_wp/v%dt_accum)
      case (DIAG_OP_INTEGRAL, DIAG_OP_MAX, DIAG_OP_MIN)
         call finalise_copy_impl(v%output_buffer, v%accumulator)
      case default
         return
      end select
   end subroutine finalise_accumulator