C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_diagnostics_init.F,v 1.11 2014/07/18 22:17:28 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_PARAMS.h"
#include "GAD.h"
C !INPUT/OUTPUT PARAMETERS:
C === Routine arguments ===
C myThid :: my Thread Id. number
INTEGER myThid
CEOP
#ifdef ALLOW_DIAGNOSTICS
C !FUNCTIONS:
INTEGER ILNBLNK
EXTERNAL
CHARACTER*4 GAD_DIAG_SUFX
EXTERNAL
CHARACTER*16 DIAGS_MK_UNITS
EXTERNAL
C !LOCAL VARIABLES:
C === Local variables ===
C msgBuf :: Informational/error message buffer
c CHARACTER*(MAX_LEN_MBUF) msgBuf
INTEGER diagNum
INTEGER diagMate
CHARACTER*8 diagName
CHARACTER*16 diagCode
CHARACTER*16 diagUnits
CHARACTER*(80) diagTitle
INTEGER iTrc, ilnb, ilng, tracerId
CHARACTER*7 trcUnits
CHARACTER*9 flxUnits, wUnits
CHARACTER*30 locName
CHARACTER*60 longName
CHARACTER*4 diagSufx
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,PTRACERS_num
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C-- Set default name & tracer Units:
WRITE(locName,'(A,I4.4,A)') 'Tracer ',iTrc
trcUnits = 'kg/kg '
C- use units & names 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_names(iTrc))
IF ( ilnb.GE.1 ) THEN
ilnb = MIN(LEN(locName),ilnb)
WRITE(locName,'(A)') PTRACERS_names(iTrc)(1:ilnb)
ENDIF
ilnb = MAX(ILNBLNK(locName),1)
C- long name:
WRITE(longName,'(A)') locName
ilng = ILNBLNK(PTRACERS_long_names(iTrc))
IF ( ilng.GE.1 ) THEN
ilng = MIN(LEN(longName),ilng)
WRITE(longName,'(A)') PTRACERS_long_names(iTrc)(1:ilng)
ENDIF
ilng = MAX(ILNBLNK(longName),1)
C-- Add diagnostics of Tracer concentration & u,v,w Transport
WRITE(diagName,'(A4,A2,A2)') 'TRAC',PTRACERS_ioLabel(iTrc),' '
WRITE(diagTitle,'(2A)') longName(1:ilng), ' concentration'
WRITE(diagUnits,'(A)') trcUnits
diagCode = 'SMR MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
diagUnits = DIAGS_MK_UNITS( trcUnits//'.m/s', myThid )
WRITE(diagName,'(A5,A2,A1)') 'UTRAC',PTRACERS_ioLabel(iTrc),' '
WRITE(diagTitle,'(2A)') 'Zonal Mass-Weighted Transp of ',
& locName(1:ilnb)
diagCode = 'UUr MR '
diagMate = diagNum + 2
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
WRITE(diagName,'(A5,A2,A1)') 'VTRAC',PTRACERS_ioLabel(iTrc),' '
WRITE(diagTitle,'(2A)') 'Merid Mass-Weighted Transp of ',
& locName(1:ilnb)
diagCode = 'VVr MR '
diagMate = diagNum
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
diagUnits = DIAGS_MK_UNITS( trcUnits//wUnits, myThid )
WRITE(diagName,'(A5,A2,A1)') 'WTRAC',PTRACERS_ioLabel(iTrc),' '
WRITE(diagTitle,'(2A)') 'Vert Mass-Weighted Transp of ',
& locName(1:ilnb)
diagCode = 'WM MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
C-- add diagnostics for Forcing and Adams-Bashforth tendency increment
tracerId = iTrc + GAD_TR1 - 1
diagSufx = GAD_DIAG_SUFX( tracerId, myThid )
diagUnits = DIAGS_MK_UNITS( trcUnits//'/s', myThid )
diagName = 'Forc'//diagSufx
WRITE(diagTitle,'(2A)') locName(1:ilnb),
& ' forcing tendency'
diagCode = 'SMR MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
diagName = 'AB_g'//diagSufx
WRITE(diagTitle,'(2A)') locName(1:ilnb),
& ' tendency from Adams-Bashforth'
diagCode = 'SMR MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C-- Add diagnostics of advective & diffusive flux:
diagUnits = DIAGS_MK_UNITS( trcUnits//flxUnits, myThid )
C- Advective flux:
diagName = 'ADVr'//diagSufx
WRITE(diagTitle,'(2A)') 'Vertical Advective Flux of ',
& locName(1:ilnb)
diagCode = 'WM LR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
diagName = 'ADVx'//diagSufx
WRITE(diagTitle,'(2A)') 'Zonal Advective Flux of ',
& locName(1:ilnb)
diagCode = 'UU MR '
diagMate = diagNum + 2
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
diagName = 'ADVy'//diagSufx
WRITE(diagTitle,'(2A)') 'Meridional Advective Flux of ',
& locName(1:ilnb)
diagCode = 'VV MR '
diagMate = diagNum
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
C- Diffusive flux:
diagName = 'DFrE'//diagSufx
WRITE(diagTitle,'(2A)') 'Vertical Diffusive Flux of ',
& locName(1:ilnb)//' (Explicit part)'
diagCode = 'WM LR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
diagName = 'DFxE'//diagSufx
WRITE(diagTitle,'(2A)') 'Zonal Diffusive Flux of ',
& locName(1:ilnb)
diagCode = 'UU MR '
diagMate = diagNum + 2
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
diagName = 'DFyE'//diagSufx
WRITE(diagTitle,'(2A)') 'Meridional Diffusive Flux of ',
& locName(1:ilnb)
diagCode = 'VV MR '
diagMate = diagNum
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
diagName = 'DFrI'//diagSufx
WRITE(diagTitle,'(2A)') 'Vertical Diffusive Flux of ',
& locName(1:ilnb)//' (Implicit part)'
diagCode = 'WM LR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C-- Add diagnostics for other pkg contribution to ptracer solution
IF ( useKPP ) THEN
diagName = 'KPPg'//diagSufx
WRITE(diagTitle,'(2A)') 'KPP non-local Flux of ',
& locName(1:ilnb)
diagCode = 'WM LR '
diagUnits = DIAGS_MK_UNITS( trcUnits//flxUnits, myThid )
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
ENDIF
IF ( useDOWN_SLOPE ) THEN
diagName = 'DSLP'//diagSufx
WRITE(diagTitle,'(2A)') locName(1:ilnb),
& ' tendency from Down-Slope package'
diagCode = 'SMR MR '
diagUnits = DIAGS_MK_UNITS( trcUnits//'/s', myThid )
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
ENDIF
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
ENDDO
diagName = 'Add2EmP '
diagTitle = 'additional EmP from salt relaxation'
diagUnits = 'kg/m^2/s '
diagCode = 'SM U1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
#endif /* ALLOW_DIAGNOSTICS */
RETURN
END