###

do_spm - suspended matter equation

**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 NONE

**LOCAL 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