Debug-gated diagnostic. Pulls h_layer + hTr_S from device
and prints max|hTr_S/h_layer - bcdiag_S_ref| over interior
columns. Early-returns when bcdiag_enabled = .false. or
after bcdiag_step_limit outer steps have completed.
Used to localise where the first 9e-5 dS jump enters during
one outer step of geostrophic_adjust under realistic β_S.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(multilayer_state_t), | intent(inout) | :: | ms | |||
| character(len=*), | intent(in) | :: | label | |||
| integer, | intent(in) | :: | stage | |||
| integer, | intent(in) | :: | outer_step |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | private | :: | dS | ||||
| integer, | private | :: | i | ||||
| integer, | private | :: | i0 | ||||
| integer, | private | :: | i1 | ||||
| integer, | private | :: | iS | ||||
| integer, | private | :: | ig | ||||
| integer, | private | :: | j | ||||
| integer, | private | :: | j0 | ||||
| integer, | private | :: | j1 | ||||
| integer, | private | :: | k | ||||
| real(kind=wp), | private | :: | max_dS |
subroutine probe_dS(grid, ms, label, stage, outer_step) !! Debug-gated diagnostic. Pulls `h_layer` + `hTr_S` from device !! and prints `max|hTr_S/h_layer - bcdiag_S_ref|` over interior !! columns. Early-returns when `bcdiag_enabled = .false.` or !! after `bcdiag_step_limit` outer steps have completed. !! !! Used to localise where the first 9e-5 dS jump enters during !! one outer step of `geostrophic_adjust` under realistic β_S. type(hgrid_t), intent(in) :: grid type(multilayer_state_t), intent(inout) :: ms character(len=*), intent(in) :: label integer, intent(in) :: stage, outer_step integer :: i, j, k, iS, ig, i0, i1, j0, j1 real(wp) :: max_dS, dS if (.not. bcdiag_enabled) return if (outer_step > bcdiag_step_limit) return if (ms%idx_salinity <= 0) return if (.not. allocated(ms%tracers)) return iS = ms%idx_salinity !$acc update self(ms%h_layer, ms%tracers(iS)%hTr) ig = grid%nghost i0 = ig + 1 i1 = grid%nx_total - ig j0 = ig + 1 j1 = grid%ny_total - ig max_dS = 0.0_wp do k = 1, ms%nz_ml do j = j0, j1 do i = i0, i1 if (ms%h_layer(i, j, k) > 0.0_wp) then dS = abs(ms%tracers(iS)%hTr(i, j, k)/ms%h_layer(i, j, k) - bcdiag_S_ref) if (dS > max_dS) max_dS = dS end if end do end do end do write (output_unit, '("[bcdiag] step=", i0, " stage=", i0, " ", a40, " max|dS|=", es12.4)') & outer_step, stage, label, max_dS flush (output_unit) end subroutine probe_dS