next up previous
Next: advset.F Up: The Proudman Oceanographic Laboratory Previous: advpu.F



subroutine advpuv (ua, hin, hout)


The subroutine performs advection of any variable defined on velocity points in the $v$ (or $y$) direction by PPM (the piecewise parabolic method). This method ensures positivity and conservation with a minimum of numerical diffusion. Hence momentum is conserved, neglecting density variations (consistent with the Boussinesq approximation). The routine is directionally split, first advecting in the $v$ direction, then in the vertical. The routine returns new values of the scalar at the original $\sigma $ or $s$ levels and a new total depth. The vertical advection is performed by considering control volumes, which are remapped on to the original $\sigma $ or $s$ levels. An alternative (`new') method is chosen if the CFL condition is violated in the vertical; this method allows any value of vertical Courant number.

When preceded by advpuu, which advects in the $u$ (or $x$) direction, followed by a further vertical advection, a complete directionally split advection cycle has been performed, and a final total depth has been returned. The routine advect_vel controls the order of advection in the two horizontal directions: this may alternate on successive time steps.

A laplacian horizontal diffusive flux can be included at the intermediate stage, with either a fixed or Smagorinsky diffusity (see htmlrefhorizdiffusivityhorizdiffusivity)

This routine requires the input variable ua to have an uptodate halo

Numerical Equations

see advpbu for the numerics of parabola fitting.

Subroutine Arguments

ua value of advected variable, returns new value
hin initial depth
hout final depth

Local variables

b2 intermediate value of advected variable
bl,br value of parabola at left and right of interval
d2b value of $\delta^2 b$
dba difference of $ba$
dfl2 flux difference
dmb value of $\delta_m b$
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,jcg grid indices
tagua,tagdba,tagdmb,tagd2b,tagv,tagh,taghu,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)
eti,ett variables used in steepening option
e1,e2,eps parameters used in steepening option
aip mask variable used in flux calculations
ui 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
ivi 0 or 1 whether or not vertical Courant number is $< 1$
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
HD imposed horizontal diffusive flux

Logical units

Only used in debugging option.

Global variables changed


Order of Things

  1. Calculate parabolas in horizontal
  2. Steepen (optional) and monotonise parabolas
  3. Calculate horizontal fluxes and intermediate $\sigma $ levels
  4. Calculate parabolas in vertical
  5. Steepen (optional) and monotonise parabolas
  6. Calculate intermediate value of ba with horizontal diffusion if required.
  7. Redistribute on to original $\sigma $ or $s$ levels


Exch3DS, Exch3DR

Called By


Options - Logical

adv_bc advective boundary conditions

Options - Compiler

DEBUG, DEBUG_ADV outputs debugging information
TIMING_ADV timing of advection routines
SCOORD $\sigma $-level spacing varies horizontally
NOSTEEP turns off steepening during horizontal calculation
NOSTEEPZ turns off steepening during vertical calculation
HORIZ_DIF Horizontal diffusion of u and v on $\sigma $-levels

Known Issues

Limitations of directional splitting

next up previous
Next: advset.F Up: The Proudman Oceanographic Laboratory Previous: advpu.F
The AMMP Project 2005-04-20