      !***********************************************************************!
      SUBROUTINE  nrmerr(  rnrm2,  rnrmoo,  rerr2,  rerroo,  u,  u_exact,  tps,  comm3d  )
      !***********************************************************************!
!
      USE MPI
!
      USE numerics
!
      IMPLICIT  NONE
!
      INCLUDE 'comthd.h'
!
      INTERFACE
!
      INCLUDE    'i_fctut.h'
!
      END INTERFACE
!Solution  u  a  l'instant tps
      REAL(rp),  DIMENSION(  sx-1:ex+1,  sy-1:ey+1,  sz-1:ez+1),  INTENT(IN)  ::  u
!
!Solution exacte
      REAL(rp),  DIMENSION(  sx-1:ex+1,  sy-1:ey+1,  sz-1:ez+1),  INTENT(IN)  ::  u_exact
!
!Norme L2,   solution
      REAL(rp),  INTENT(OUT)  ::  rnrm2
!
!Norme Loo,  solution
      REAL(rp),  INTENT(OUT)  ::  rnrmoo
!
!Norme L2,   erreur
      REAL(rp),  INTENT(OUT)  ::  rerr2
!
!Norme Loo,  erreur
      REAL(rp),  INTENT(OUT)  ::  rerroo
!
!Instant courant
      REAL(rp),  INTENT(IN)   ::  tps
!
! communicateur
      INTEGER,   INTENT(IN)   ::  comm3d
!
!--Declaration des variales locales
!
!Composante temporelle
      REAL(rp)  ::  ut = zero
!
!Tableau intermediaire
!
      REAL(rp)  ::  lnrm2, lerr2
      REAL(rp)  ::  lnrmoo, lerroo
!
      REAL(rp),  DIMENSION(2)  ::  lmax,  lsum
      REAL(rp),  DIMENSION(2)  ::  gmax,  gsum
!
!Compteurs
      INTEGER   ::  i,  j,  k
!
      !***********************************************************************!
!
!$OMP MASTER
      rnrm2 = zero
      rerr2 = zero
      rnrmoo = zero
      rerroo = zero
!
      CALL fctut( tps, ut )
!$OMP END MASTER
!
!$OMP BARRIER
!
      lnrm2 = zero
      lerr2 = zero
      lnrmoo = zero
      lerroo = zero
!
!Calcul des quantites L2 et Loo
      DO  k  =  kmin,  kmax
         DO  j  =  sy,  ey
            DO  i  =  sx,  ex
               lnrm2 = lnrm2 + u(i,j,k)**2
               lerr2 = lerr2 + ( u(i,j,k) - ut * u_exact(i,j,k) ) **2
               lnrmoo = MAX( lnrmoo, ABS( u(i,j,k) ) )
               lerroo = MAX( lerroo, ABS( u(i,j,k) - ut * u_exact(i,j,k) ) )
            END  DO
         END  DO
      END  DO
!
!$OMP CRITICAL
      rnrm2 = rnrm2 + lnrm2
      rerr2 = rerr2  + lerr2
      rnrmoo = MAX( rnrmoo, lnrmoo )
      rerroo = MAX( rerroo, lerroo )
!$OMP END CRITICAL
!
!$OMP BARRIER
!
!$OMP MASTER
      lsum(1) = rnrm2
      lsum(2) = rerr2
      lmax(1) = rnrmoo
      lmax(2) = rerroo
      DO k = 1, 2
         gsum(k) = zero
         gmax(k) = zero
      END DO
      CALL  MPI_ALLREDUCE(  lsum,  gsum,  2,  ITYPE_REAL,  &
                            MPI_SUM,  comm3d,  ierr  )
!
      CALL  MPI_ALLREDUCE(  lmax,  gmax,  2,  ITYPE_REAL,  &
                            MPI_MAX,  comm3d,  ierr  )
!
      rnrm2  = gsum(1)
      rerr2  = gsum(2)
      rnrmoo = gmax(1)
      rerroo = gmax(2)
!$OMP END MASTER
!
      RETURN
      END  SUBROUTINE  nrmerr
