C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_diagnostics_init.F,v 1.1 2004/12/16 22:28:43 jmc Exp $
C $Name:  $

#include "GAD_OPTIONS.h"

CBOP
C     !ROUTINE: GAD_INIT
C     !INTERFACE:
      SUBROUTINE GAD_DIAGNOSTICS_INIT( myThid )
C     !DESCRIPTION:
C     Routine to initialize Generic Advection/Diffusion diagnostics

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

C     !INPUT/OUTPUT PARAMETERS:
C     === Routine arguments ===
C     myThid -  Number of this instance of GAD_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

      CHARACTER*10  flxUnits
      CHARACTER*12  locName
      CHARACTER*4 GAD_DIAG_SUFX, diagSufx
c     EXTERNAL    GAD_DIAG_SUFX

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

C--   Add diagnostics to the (long) list
       IF ( usingPCoords ) THEN
         flxUnits = '.Pa.m^2/s '
       ELSE
         flxUnits = '.m^3/s    '
       ENDIF

C-     add diagnostics of advective & diffusive flux of Temp :
       IF ( fluidIsAir ) THEN
         WRITE(diagUnits,'(2A)') 'K',flxUnits
       ELSE
         WRITE(diagUnits,'(2A)') 'degC',flxUnits
       ENDIF
       diagSufx = GAD_DIAG_SUFX( GAD_TEMPERATURE, myThid )

C-     Advective flux:
       diagName  = 'ADVr'//diagSufx
       diagTitle = 'Vertical   Advective Flux of Pot.Temperature'
       diagCode  = 'WM      LR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 
       diagName  = 'ADVx'//diagSufx
       diagTitle = 'Zonal      Advective Flux of Pot.Temperature'
       WRITE(diagCode,'(A,I3.3,A)') 'UU   ',diagNum+2,'MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 
       diagName  = 'ADVy'//diagSufx
       diagTitle = 'Meridional Advective Flux of Pot.Temperature'
       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
       diagTitle = 'Vertical Diffusive Flux of Pot.Temperature'
     &           //' (Explicit part)'
       diagCode  = 'WM      LR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 
       diagName  = 'DIFx'//diagSufx
       diagTitle = 'Zonal      Diffusive Flux of Pot.Temperature'
       WRITE(diagCode,'(A,I3.3,A)') 'UU   ',diagNum+2,'MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 
       diagName  = 'DIFy'//diagSufx
       diagTitle = 'Meridional Diffusive Flux of Pot.Temperature'
       WRITE(diagCode,'(A,I3.3,A)') 'VV   ',diagNum,'MR      '
       CALL DIAGNOSTICS_ADD2LIST( diagNum,
     I              diagName, diagCode, diagUnits, diagTitle, myThid ) 

       diagName  = 'DFrI'//diagSufx
       diagTitle = 'Vertical Diffusive Flux of Pot.Temperature'
     &           //' (Implicit part)'
       diagCode  = 'WM      LR      '
       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 of Salt :
       IF ( fluidIsAir ) THEN
         locName = ' Water-Vapor'
         WRITE(diagUnits,'(2A)') 'g/kg',flxUnits
       ELSE
         locName = ' Salinity   '
         WRITE(diagUnits,'(2A)') 'psu',flxUnits
       ENDIF
       diagSufx = GAD_DIAG_SUFX( GAD_SALINITY, myThid )

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

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

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

#endif /* ALLOW_DIAGNOSTICS */

      RETURN
      END


C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP 0 C !ROUTINE: GAD_DIAG_SUFX C !INTERFACE: CHARACTER*4 FUNCTION GAD_DIAG_SUFX( tracerId, myThid ) C !DESCRIPTION: C *==========================================================* C | FUNCTION GAD_DIAG_SUFX C | o Return diagnostic suffix (4 character long) for the C | "tracerId" tracer (used to build diagnostic names). C *==========================================================* C !USES: IMPLICIT NONE #include "EEPARAMS.h" #include "GAD.h" C !INPUT PARAMETERS: C tracerId :: tracer identifier C myThid :: my thread Id number INTEGER tracerId INTEGER myThid CEOP C !LOCAL VARIABLES: C-- Set diagnostic suffix (4 character long) for the "tracerId" tracer IF ( tracerId.EQ.GAD_TEMPERATURE ) THEN GAD_DIAG_SUFX = '_TH ' ELSEIF( tracerId.EQ.GAD_SALINITY ) THEN GAD_DIAG_SUFX = '_SLT' ELSEIF( tracerId.GE.GAD_TR1 & .AND. tracerId.LT.100 ) THEN WRITE(GAD_DIAG_SUFX,'(A,I2.2)') 'Tr',tracerId + 1-GAD_TR1 ELSE GAD_DIAG_SUFX = 'aaaa' ENDIF RETURN END