      !***********************************************************************!
      SUBROUTINE  scdmb(  b,  f1,  f2,  u,  tps,  rnudt2  )
      !***********************************************************************!
!
      USE numerics
!
      IMPLICIT  NONE
!
      INTERFACE
!
      INCLUDE    'i_pmv.h'
!
      INCLUDE    'i_fctft.h'
!
      END INTERFACE
!
!--Declaration  des  arguments
!
!Solution  u
      REAL(rp),  DIMENSION(sx-1:ex+1,sy-1:ey+1,sz-1:ez+1),  INTENT(IN)   ::  u
!
!Second  membre
      REAL(rp),  DIMENSION(sx-1:ex+1,sy-1:ey+1,sz-1:ez+1),  INTENT(OUT)  ::  b
!
!Forcage  exterieur
      REAL(rp),  DIMENSION(sx  :ex  ,sy  :ey  ,sz  :ez  ),  INTENT(IN)   ::  f1
      REAL(rp),  DIMENSION(sx  :ex  ,sy  :ey  ,sz  :ez  ),  INTENT(IN)   ::  f2
!
!Instant courant
      REAL(rp),  INTENT(IN)  ::  tps
!
!Scalaire  Crank  Nicholson
      REAL(rp),  INTENT(IN)  ::  rnudt2
!
!--Declaration  des  variables  locales
!
!Compteurs
      INTEGER   ::  i,  j,  k
!
!Scalaires Crank-Nicholson
      REAL(rp)  ::  dgt1 = zero
      REAL(rp)  ::  dgt2 = zero
      REAL(rp)  ::  gt1  = zero
      REAL(rp)  ::  gt2  = zero
!
      REAL(rp)  ::  c1,  c2
!
      !***********************************************************************!
!
!Contribution  u
      CALL fctft ( tps,      dgt1, gt1 )
!
      CALL fctft ( tps + dt, dgt2, gt2 )
!
      CALL pmv ( b,  u,  rnudt2 )
!
!Composantes  temporelles
      c1 = 0.5_rp * dt * ( dgt1 + dgt2 )
      c2 =    - rnudt2 * ( gt1  + gt2  )
!
!Forcage
      DO  k  =  sz,  ez
          DO  j  =  sy,  ey
              DO  i  =  sx,  ex
                  b(i,j,k) = b(i,j,k) + c1 * f1(i,j,k) + c2 * f2(i,j,k)
               END DO
            END DO
         END DO
!
      RETURN
      END  SUBROUTINE  scdmb
