      !***********************************************************************!
      SUBROUTINE  prodscal(  rnorm,  a,  b  )
      !***********************************************************************!
!
      USE numerics
!
      IMPLICIT  NONE
!
      INCLUDE 'comthd.h'
!
!Valeur du produit scalaire
      REAL(rp),  INTENT(OUT)   ::  rnorm
!
!Solution  u  a  l'iteration  it  et  it+1
      REAL(rp),  DIMENSION(  sx-1:ex+1,  sy-1:ey+1,  sz-1:ez+1),  INTENT(IN)  ::  a
      REAL(rp),  DIMENSION(  sx-1:ex+1,  sy-1:ey+1,  sz-1:ez+1),  INTENT(IN)  ::  b
!
!--Declaration des variales locales
!
!Valeur locale
      REAL(rp)  ::  lnorm
!
!Compteurs
      INTEGER   ::  i,  j,  k
!
      !***********************************************************************!
!
!Calcul du produit scalaire local sur l'ensemble des threads OpenMP
      lnorm = zero
      DO  k  =  sz,  ez
         DO  j  =  sy,  ey
            DO  i  =  sx,  ex
               lnorm = lnorm + a(i,j,k) * b(i,j,k)
            END  DO
         END  DO
      END  DO
!
!$OMP ATOMIC
      rnorm = rnorm + lnorm
!
!$OMP BARRIER
!
      RETURN
      END  SUBROUTINE  prodscal
