advpbu_n.F

subroutine advpbu_n (ba,nv,hin,hout)

The routine is similar to advpbu except that the simultaneous advection of several scalars saves recalculation of such variables as volume fluxes and control volume displacements. This is particularly useful when there is a large number of scalar variables, as in spm (suspended particulate matter) or ecological models.

When followed by advpbv_n, which advects in the
(or ) direction, followed by a further vertical advection, a complete
directionally split advection cycle has been performed, and a final total
depth has been returned. Since advection is performed on the longer baroclinic
time step **DT**, the final depth, which is given by the volume fluxes,
should be equal to the final depth over the
corresponding number of barotropic time steps. This is ensured by making the
volume fluxes used equal to the sum of barotropic volume fluxes. The calling
routine controls the order of advection in the two horizontal
directions: this may alternate on successive time steps.

**ba**value of scalar variable, returns new value**nv**number of scalar variables**hin**initial depth**hout**final depth

**b2**intermediate value of advected scalar**bl,br**value of parabola at left and right of interval**d2b**value of**dba**difference of**dfl2**flux difference**dmb**value of**ds2**difference between intermediate sigma levels**dsig**difference between intermediate and original sigma levels**fba**scalar flux**fuu**volume flux**sigo3**intermediate sigma levels**i,j,k,icg,jcg,ilb,iub**grid indices**iv**counter for scalars**tagba,tagdba,tagdmb,tagd2b,tagu,tagh,tagbr,tagbl ,tagfu,tagfba**integers used in Exch3DS and Exch3DR routines**a1,a2,a3,b6,bdl,bdr,delb,delb2,delb6**variables used in parabola calculations (see above description)**f1,f2**used in vertical advection calculation**eti,ett**variables used in steepening option**e1,e2,eps**parameters used in steepening option**aip**mask variable used in flux calculations**rcdal**length of grid box side in lat-long coordinates**xdb**used in setting parabolas in vertical with uneven grid spacing**xi**length over which parabola is integrated to give flux**advmask**logical variable based on mask**ivi**0 or 1 whether or not vertical Courant number is**k1,k0,ka,kb,kc**vertical indices used in `new' vertical advection scheme**dsi**sigma coordinate differences used in `new' vertical advection scheme**baa,bab,bat**variables used in `new' vertical advection scheme**inv3,inv6**1/3,1/6

- none

- Calculate parabolas in horizontal
- Steepen (optional) and monotonise parabolas
- Calculate horizontal fluxes and intermediate levels
- Calculate parabolas in vertical
- Steepen (optional) and monotonise parabolas
- Redistribute on to original or levels

- Exch3DS, Exch3DR
- MPI_GatherV

- advect_spm or other cross-discipline code

- adv_bc advective boundary conditions

- DEBUG, DEBUG_ADV outputs debugging information
- TIMING_ADV timing of advection routines
- SCOORD -level spacing varies horizontally
- NOSTEEP turns off steepening during horizontal calculation
- NOSTEEPZ turns off steepening during vertical calculation