C $Header: /u/gcmpack/MITgcm/pkg/diagnostics/diagnostics_is_on.F,v 1.4 2006/10/17 18:56:31 jmc Exp $
C $Name:  $

#include "DIAG_OPTIONS.h"

C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

CBOP 0
C     !ROUTINE: DIAGNOSTICS_IS_ON

C     !INTERFACE:
      LOGICAL FUNCTION DIAGNOSTICS_IS_ON( diagName, myThid )

C     !DESCRIPTION:
C     *==========================================================*
C     | FUNCTION DIAGNOSTIC_IS_ON
C     | o Return TRUE if diagnostics "diagName" is Active
C     *==========================================================*

C     !USES:
      IMPLICIT NONE
#include "EEPARAMS.h"
#include "SIZE.h"
#include "DIAGNOSTICS_SIZE.h"
#include "DIAGNOSTICS.h"

C     !INPUT PARAMETERS:
C     diagName   ::  diagnostic identificator name (8 characters long)
C     myThid     ::  my thread Id number
      CHARACTER*8  diagName
      INTEGER      myThid
CEOP

C     !LOCAL VARIABLES:
      INTEGER n,m
      INTEGER ip,iSp
      INTEGER bi,bj

      DIAGNOSTICS_IS_ON = .FALSE.
      bi = myBxLo(myThid)
      bj = myByLo(myThid)

C-    search for this diag. in the active 2D/3D diagnostics list
      DO n=1,nlists
       DO m=1,nActive(n)
        IF ( diagName.EQ.flds(m,n) .AND. idiag(m,n).NE.0 ) THEN
          ip = ABS(idiag(m,n))
          IF ( ndiag(ip,bi,bj).GE.0 ) DIAGNOSTICS_IS_ON = .TRUE.
        ENDIF
       ENDDO
      ENDDO

      IF ( .NOT.DIAGNOSTICS_IS_ON ) THEN
C-    search for this diag. in the active statistics-diagnostics list
       DO n=1,diagSt_nbLists
        DO m=1,diagSt_nbActv(n)
         IF ( diagName.EQ.diagSt_Flds(m,n)
     &               .AND.iSdiag(m,n).NE.0 ) THEN
           iSp = ABS(iSdiag(m,n))
           IF (qSdiag(0,0,iSp,bi,bj).GE.0.) DIAGNOSTICS_IS_ON = .TRUE.
         ENDIF
        ENDDO
       ENDDO
      ENDIF

      RETURN
      END