adv_split_u - zonal advection of 2D quantities

**INTERFACE:**

subroutine adv_split_u(dt,f,fi,Di,adv,U,DU, & #if defined(SPHERICAL) || defined(CURVILINEAR) dxu,dyu,arcd1, & #endif splitfac,scheme,AH, & mask_flux,mask_update) Note (KK): Keep in sync with interface in advection.F90

Executes an advection step in zonal direction for a 2D quantity. The 1D advection equation

is accompanied by an fractional step for the 1D continuity equation

Here, and denote values before and after this operation, respectively, denote intermediate values when other 1D advection steps come after this and denotes intermediate values when other 1D advection steps came before this. Furthermore, when this -directional split step is repeated during the total time step (Strang splitting), the time step denotes a fraction of the full time step.

The interfacial fluxes are calculated according to the third-order polynomial scheme (so-called P scheme), cast in Lax-Wendroff form by:

with the Courant number and

where

(76) |

and

(77) |

It should be noted, that for the original Lax-Wendroff scheme and for the first-oder upstream scheme can be recovered.

In order to obtain a monotonic and positive scheme, the factors are limited in the following way:

and, equivalently, for . This so-called PDM-limiter has been described in detail by Leonard (1991), who named the PDM-limited P scheme also ULTIMATE QUICKEST (quadratic upstream interpolation for convective kinematics with estimated stream terms).

Some simpler limiters which do not exploit the third-order polynomial properties of the discretisation (74) have been listed by Zalezak (1987). Among those are the MUSCL scheme by van Leer (1979),

and the Superbee scheme by Roe (1985),

The selector for the schemes is `scheme`:

scheme = UPSTREAM: |
first-order upstream (monotone) |

scheme = P2: |
third-order polynomial (non-monotone) |

scheme = SUPERBEE: |
second-order TVD (monotone) |

scheme = MUSCL: |
second-order TVD (monotone) |

scheme = P2_PDM: |
third-order ULTIMATE-QUICKEST (monotone) |

Furthermore, the horizontal diffusion in zonal direction
with the constant diffusion
coefficient `AH` is carried out here by means of a central difference
second-order scheme.
**USES:**

use domain, only: imin,imax,jmin,jmax #if !( defined(SPHERICAL) || defined(CURVILINEAR) ) use domain, only: dx,dy,ard1 #endif use advection, only: adv_interfacial_reconstruction use advection, only: UPSTREAM $ use omp_lib IMPLICIT NONE

Note (KK): in general dxu, dyu and mask_flux do only have valid data within (_IRANGE_HALO_-1,_JRANGE_HALO_). In some cases the original field extension may even be _IRANGE_HALO_. Then explicit declared array bounds _IRANGE_HALO_-1 require a provision of the corresponding subarray and will cause copying of the non-contiguously data into a temporarily array. Therefore they are declared as pointers here. This however requires, that the provided pointers already carry the correct bounds. REALTYPE,intent(in) :: dt,splitfac,AH REALTYPE,dimension(E2DFIELD),intent(in) :: f,U,DU #if defined(SPHERICAL) || defined(CURVILINEAR) REALTYPE,dimension(:,:),pointer,intent(in) :: dxu,dyu REALTYPE,dimension(E2DFIELD),intent(in) :: arcd1 #endif integer,intent(in) :: scheme logical,dimension(:,:),pointer,intent(in) :: mask_flux logical,dimension(E2DFIELD),intent(in) :: mask_update

REALTYPE,dimension(E2DFIELD),intent(inout) :: fi,Di,adv

REALTYPE,dimension(E2DFIELD) :: uflux logical :: use_limiter,use_AH integer :: i,j,isub REALTYPE :: dti,Dio,advn,cfl,fuu,fu,fd

Original author(s): Hans Burchard & Karsten Bolding

kklingbe 2017-10-02