C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_diagnostics_init.F,v 1.1 2004/12/19 00:02:47 jmc Exp $
C $Name:  $

#include "PTRACERS_OPTIONS.h"

CBOP
C     !ROUTINE: PTRACERS_DIAGNOSTICS_INIT
C     !INTERFACE:
      SUBROUTINE PTRACERS_DIAGNOSTICS_INIT( myThid )
C     !DESCRIPTION:
C     Routine to initialize pTracers diagnostics

C     !USES:
      IMPLICIT NONE
C     === Global variables ===
#include "SIZE.h"
#include "PTRACERS_SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "PTRACERS.h"
#include "GAD.h"

C     !INPUT/OUTPUT PARAMETERS:
C     === Routine arguments ===
C     myThid -  Number of this instance of PTRACERS_DIAGNOSTICS_INIT
      INTEGER myThid
CEOP

#ifdef ALLOW_DIAGNOSTICS
C     !LOCAL VARIABLES:
C     === Local variables ===
C     msgBuf      - Informational/error meesage buffer
c     CHARACTER*(MAX_LEN_MBUF) msgBuf

      INTEGER       diagNum
      CHARACTER*8   diagName
      CHARACTER*16  diagCode
      CHARACTER*16  diagUnits
      CHARACTER*(80) diagTitle

      INTEGER      iTrc, ilnb, tracerId
      CHARACTER*7  trcUnits
      CHARACTER*9  flxUnits, wUnits
      CHARACTER*30 locName
      CHARACTER*4  diagSufx
C     Functions ::
      INTEGER     ILNBLNK
      EXTERNAL    
      CHARACTER*4 GAD_DIAG_SUFX
      EXTERNAL    

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

C--   Add diagnostics to the (long) list

      IF ( usingPCoords ) THEN
         flxUnits = '.Pa.m^2/s'
         wUnits   = '.Pa/s    '
      ELSE
         flxUnits = '.m^3/s   '
         wUnits   = '.m/s     '
      ENDIF

      DO iTrc=1,MIN(99,PTRACERS_num)
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C--    Set default name & tracer Units:
       WRITE(locName,'(A,I2,A)') 'Tracer ',iTrc
       trcUnits  = '(kg/kg)'
C-     use name & units from data.ptracers :
       ilnb = ILNBLNK(PTRACERS_units(iTrc))
       IF ( ilnb.GE.1 ) THEN
         ilnb = LEN(trcUnits)
         trcUnits = PTRACERS_units(iTrc)(1:ilnb)
       ENDIF
       ilnb = ILNBLNK(PTRACERS_long_names(iTrc))
       IF ( ilnb.GE.1 ) THEN
         ilnb = MIN(LEN(locName),ilnb)
         WRITE(locName,'(A)') PTRACERS_long_names(iTrc)(1:ilnb)
       ELSE
         ilnb = ILNBLNK(PTRACERS_names(iTrc))
         IF ( ilnb.GE.1 ) THEN
           ilnb = MIN(LEN(locName),ilnb)
           WRITE(locName,'(A)') PTRACERS_names(iTrc)(1:ilnb)
         ENDIF
       ENDIF
       ilnb = MAX(ILNBLNK(locName),1)

C--    Add diagnostics of Tracer concentration & u,v,w Transport
       WRITE(diagName,'(A,I2.2,A)') 'TRAC',iTrc,'  '
       WRITE(diagTitle,'(2A)') 'Mass-Weighted ', locName(1:ilnb)
       diagUnits = trcUnits//'         '
       diagCode  = 'SM P    MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid )

       WRITE(diagName,'(A,I2.2,A)') 'UTRAC',iTrc,' '
       WRITE(diagTitle,'(2A)') 'Zonal Mass-Weighted Transp of ',
     &                 locName(1:ilnb)
       diagUnits = trcUnits//'.m/s   '
       WRITE(diagCode,'(A,I3.3,A)') 'UU   ',diagNum+2,'MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid )

       WRITE(diagName,'(A,I2.2,A)') 'VTRAC',iTrc,' '
       WRITE(diagTitle,'(2A)') 'Merid Mass-Weighted Transp of ',
     &                 locName(1:ilnb)
       diagUnits = trcUnits//'.m/s   '
       WRITE(diagCode,'(A,I3.3,A)') 'VV   ',diagNum,'MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid )

       WRITE(diagName,'(A,I2.2,A)') 'WTRAC',iTrc,' '
       WRITE(diagTitle,'(2A)') 'Vert  Mass-Weighted Transp of ',
     &                 locName(1:ilnb)
       diagUnits = trcUnits//wUnits
       diagCode  = 'WM      MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid )

C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C--    add diagnostics of advective & diffusive flux:
       diagUnits = trcUnits//flxUnits
       tracerId = iTrc + GAD_TR1 - 1
       diagSufx = GAD_DIAG_SUFX( tracerId, myThid )

C-     Advective flux:
       diagName  = 'ADVr'//diagSufx
       WRITE(diagTitle,'(2A)') 'Vertical   Advective Flux of ',
     &                 locName(1:ilnb)
       diagCode  = 'WM      LR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 
       diagName  = 'ADVx'//diagSufx
       WRITE(diagTitle,'(2A)') 'Zonal      Advective Flux of ',
     &                 locName(1:ilnb)
       WRITE(diagCode,'(A,I3.3,A)') 'UU   ',diagNum+2,'MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 
       diagName  = 'ADVy'//diagSufx
       WRITE(diagTitle,'(2A)') 'Meridional Advective Flux of ',
     &                 locName(1:ilnb)
       WRITE(diagCode,'(A,I3.3,A)') 'VV   ',diagNum,'MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 
C-     Diffusive flux:
       diagName  = 'DFrE'//diagSufx
       WRITE(diagTitle,'(2A)') 'Vertical Diffusive Flux of ',
     &                 locName(1:ilnb)//' (Explicit part)'
       diagCode  = 'WM      LR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 
       diagName  = 'DIFx'//diagSufx
       WRITE(diagTitle,'(2A)') 'Zonal      Diffusive Flux of ',
     &                 locName(1:ilnb)
       WRITE(diagCode,'(A,I3.3,A)') 'UU   ',diagNum+2,'MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 
       diagName  = 'DIFy'//diagSufx
       WRITE(diagTitle,'(2A)') 'Meridional Diffusive Flux of ',
     &                 locName(1:ilnb)
       WRITE(diagCode,'(A,I3.3,A)') 'VV   ',diagNum,'MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 

       diagName  = 'DFrI'//diagSufx
       WRITE(diagTitle,'(2A)') 'Vertical Diffusive Flux of ',
     &                 locName(1:ilnb)//' (Implicit part)'
       diagCode  = 'WM      LR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 

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

#endif /* ALLOW_DIAGNOSTICS */

      RETURN
      END