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