INTERFACE:
subroutine do_spm()DESCRIPTION:
Here, one time step for the suspended matter equation is performed. First, preparations for the call to the advection schemes are made, i.e. calculating the necessary metric coefficients and the relevant vertical velocity, which is here composed of the grid-related vertical flow velocity and the settling velocity. Some lines of code allow here for consideration of flocculation processes. After the call to the advection schemes, which actually perform the advection (and horizontal diffusion) step as an operational split step, the fluxes between bottom SPM pool and the suspended matter in the water column are calculated. Afterwards, the tri-diagonal matrix for calculating the new suspended matter by means of a semi-implicit central scheme for the vertical diffusion is set up. There are no source terms on the right hand sides. The subroutine is completed by solving the tri-diagonal linear equation by means of a tri-diagonal solver.
Optionally, the density of the sediment-laden water may be corrected by the sediment density, see eq. (125).
Finally, some special settings for single test cases are made via compiler options. USES:
use advection_3d, only: do_advection_3d use variables_3d, only: dt,cnpar,hun,hvn,ho,nuh,uu,vv,ww #ifndef NO_BAROCLINIC use variables_3d, only: rho #endif use domain, only: dry_z IMPLICIT NONELOCAL VARIABLES:
integer :: i,j,k,rc REALTYPE,dimension(I3DFIELD) :: wwadv REALTYPE :: spmtot REALTYPE :: Res(0:kmax) REALTYPE :: auxn(1:kmax-1),auxo(1:kmax-1) REALTYPE :: a1(0:kmax),a2(0:kmax) REALTYPE :: a3(0:kmax),a4(0:kmax) REALTYPE :: bed_flux REALTYPE :: c REALTYPE :: volCmud,volCpart integer :: k2 logical :: patankar=.true. #ifdef TRACER_POSITIVE logical :: kk #endif