      !***********************************************************************!
      SUBROUTINE  nrmerr(  gnrm2,  gnrmoo,  u,  u_exact,  tps  )
      !***********************************************************************!
!
      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 et erreur
      REAL(rp),  DIMENSION(2),  INTENT(OUT)  ::  gnrm2
!
!Norme Loo,  solution et erreur
      REAL(rp),  DIMENSION(2),  INTENT(OUT)  ::  gnrmoo
!
!Instant courant
      REAL(rp),  INTENT(IN)   ::  tps
!
!--Declaration des variales locales
!
!Composante temporelle
      REAL(rp)  ::  ut
!
!Valeurs temporaires
      REAL(rp),  DIMENSION(2)  ::  lnrm2
      REAL(rp),  DIMENSION(2)  ::  lnrmoo
!
!Compteurs
      INTEGER   ::  i,  j,  k
!
      !***********************************************************************!
!
!$OMP BARRIER
!
      CALL fctut( tps, ut )
!
      DO  i  =  1,  2
         lnrm2(i)  = zero
         lnrmoo(i) = zero
      END DO
!
!Calcul des quantites L2
      DO  k  =  kmin,  kmax
         DO  j  =  sy,  ey
            DO  i  =  sx,  ex
               lnrm2(1)  = lnrm2(1) + u(i,j,k)**2
               lnrm2(2)  = lnrm2(2) + ( u(i,j,k) - ut * u_exact(i,j,k) ) **2
               lnrmoo(1) = MAX( lnrmoo(1), ABS( u(i,j,k) ) )
               lnrmoo(2) = MAX( lnrmoo(2), ABS( u(i,j,k) - ut * u_exact(i,j,k) ) )
            END  DO
         END  DO
      END  DO
!
!$OMP CRITICAL
      gnrm2(1:2)  = gnrm2(1:2) + lnrm2(1:2)
      gnrmoo(1:2) = MAX( gnrmoo(1:2), lnrmoo(1:2) )
!$OMP END CRITICAL
!
!$OMP BARRIER
!
!$OMP MASTER
      gnrm2(1:2) = SQRT( gnrm2(1:2) / ( REAL(ntx, rp) * REAL(nty, rp) * REAL(ntz, rp ) ) )
!$OMP END MASTER
!
      RETURN
      END  SUBROUTINE  nrmerr
