Colella & Woodward (1984) eq (1.7) — the thickness-weighted
second-order jump delta a across the cell, which eq (1.6)
consumes. Returned UNLIMITED, deliberately.
CW84 feeds (1.6) the (1.8)-limited delta_m a, and MOM6’s explicit
H4 edge estimate does not limit either. Here the unlimited estimate
is the right choice for two reasons: the Colella-Woodward limiter
this module already runs over the assembled edges (step 2 of
remap_column_ppm) does that job downstream, and leaving (1.7)
unlimited is what makes the whole non-uniform path reduce EXACTLY to
the shipped (7/12, -1/12) estimate on an equal-thickness column,
for ANY profile rather than only for a monotone one. That is the
property that bounds how far a shipped answer can move when the knob
is switched on: only by the non-uniformity it was introduced to fix.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | h_l |
Thickness of the cell below. |
||
| real(kind=wp), | intent(in) | :: | h_c |
Thickness of this cell. |
||
| real(kind=wp), | intent(in) | :: | h_r |
Thickness of the cell above. |
||
| real(kind=wp), | intent(in) | :: | q_l |
Cell mean below. |
||
| real(kind=wp), | intent(in) | :: | q_c |
Cell mean here. |
||
| real(kind=wp), | intent(in) | :: | q_r |
Cell mean above. |
||
| real(kind=wp), | intent(out) | :: | dq |
Full jump across the cell. |
pure subroutine ppm_jump_nonuniform(h_l, h_c, h_r, q_l, q_c, q_r, dq) !$acc routine seq !! Colella & Woodward (1984) eq (1.7) — the thickness-weighted !! second-order jump `delta a` across the cell, which eq (1.6) !! consumes. Returned UNLIMITED, deliberately. !! !! CW84 feeds (1.6) the (1.8)-limited `delta_m a`, and MOM6's explicit !! H4 edge estimate does not limit either. Here the unlimited estimate !! is the right choice for two reasons: the Colella-Woodward limiter !! this module already runs over the assembled edges (step 2 of !! `remap_column_ppm`) does that job downstream, and leaving (1.7) !! unlimited is what makes the whole non-uniform path reduce EXACTLY to !! the shipped `(7/12, -1/12)` estimate on an equal-thickness column, !! for ANY profile rather than only for a monotone one. That is the !! property that bounds how far a shipped answer can move when the knob !! is switched on: only by the non-uniformity it was introduced to fix. real(wp), intent(in) :: h_l !! Thickness of the cell below. real(wp), intent(in) :: h_c !! Thickness of this cell. real(wp), intent(in) :: h_r !! Thickness of the cell above. real(wp), intent(in) :: q_l !! Cell mean below. real(wp), intent(in) :: q_c !! Cell mean here. real(wp), intent(in) :: q_r !! Cell mean above. real(wp), intent(out) :: dq !! Full jump across the cell. dq = (h_c/(h_l + h_c + h_r + H_DIV_EPS))* & ((2.0_wp*h_l + h_c)/(h_c + h_r + H_DIV_EPS)*(q_r - q_c) & + (h_c + 2.0_wp*h_r)/(h_l + h_c + H_DIV_EPS)*(q_c - q_l)) end subroutine ppm_jump_nonuniform