Total tracer content: Σ over masked interior of hTr·areaT·weight
over k. hTr is thickness-weighted, so this is ∫(tracer·volume),
the conserved quantity. Public only for the unit-test suite.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(multilayer_state_t), | intent(in) | :: | ms | |||
| integer, | intent(in) | :: | it | |||
| type(diag_mask_t), | intent(in) | :: | mask | |||
| real(kind=wp), | intent(in) | :: | areaT(:,:) |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | private | :: | col_sum | ||||
| integer, | private | :: | i | ||||
| integer, | private | :: | j | ||||
| integer, | private | :: | k | ||||
| integer, | private | :: | nx | ||||
| integer, | private | :: | ny | ||||
| integer, | private | :: | nz | ||||
| real(kind=wp), | private | :: | w_dA |
pure function budget_total_tracer(ms, it, mask, areaT) result(total) !! Total tracer content: Σ over masked interior of `hTr·areaT·weight` !! over k. `hTr` is thickness-weighted, so this is ∫(tracer·volume), !! the conserved quantity. Public only for the unit-test suite. type(multilayer_state_t), intent(in) :: ms integer, intent(in) :: it type(diag_mask_t), intent(in) :: mask real(wp), intent(in) :: areaT(:, :) real(wp) :: total integer :: i, j, k, nx, ny, nz real(wp) :: w_dA, col_sum total = 0.0_wp if (it <= 0) return if (.not. allocated(ms%tracers)) return if (it > size(ms%tracers)) return if (.not. allocated(ms%tracers(it)%hTr)) return nx = min(mask%nx, size(ms%tracers(it)%hTr, 1)) ny = min(mask%ny, size(ms%tracers(it)%hTr, 2)) nz = ms%nz_ml do j = 1, ny do i = 1, nx w_dA = mask%weight(i, j)*areaT(i, j) if (w_dA <= 0.0_wp) cycle col_sum = 0.0_wp do k = 1, nz col_sum = col_sum + ms%tracers(it)%hTr(i, j, k) end do total = total + w_dA*col_sum end do end do end function budget_total_tracer