Counted allocatable footprint of ONE registered diagnostic (0 for every buffer that is unallocated).
All four terms are device-mapped by ocean_diag_enter_data_impl
and, until this function existed, none of them appeared in any
bytes() total — the single largest hole in the startup estimate
(~3.2 GB for the default catalog at 1000x800x50, up to ~9.9 GB
with the optional diags). Conditionality rides arr_bytes:
layer_buffer is allocated only when output_vgrid /= LAYER,
accumulator only when time_op /= INSTANT, mask only when a
region was supplied at register time.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(diag_var_t), | intent(in) | :: | this |
pure function diag_var_bytes(this) result(nbytes) !! Counted allocatable footprint of ONE registered diagnostic !! (0 for every buffer that is unallocated). !! !! All four terms are device-mapped by `ocean_diag_enter_data_impl` !! and, until this function existed, none of them appeared in any !! `bytes()` total — the single largest hole in the startup estimate !! (~3.2 GB for the default catalog at 1000x800x50, up to ~9.9 GB !! with the optional diags). Conditionality rides `arr_bytes`: !! `layer_buffer` is allocated only when `output_vgrid /= LAYER`, !! `accumulator` only when `time_op /= INSTANT`, `mask` only when a !! region was supplied at register time. class(diag_var_t), intent(in) :: this integer(int64) :: nbytes nbytes = arr_bytes(this%output_buffer) & + arr_bytes(this%layer_buffer) & + arr_bytes(this%accumulator) if (allocated(this%mask)) nbytes = nbytes + this%mask%bytes() end function diag_var_bytes