C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_diagnostics_init.F,v 1.10 2013/06/11 01:34:47 jmc Exp $
C $Name: $
#include "THSICE_OPTIONS.h"
CBOP
C !ROUTINE: THSICE_DIAGNOSTICS_INIT
C !INTERFACE:
SUBROUTINE THSICE_DIAGNOSTICS_INIT( myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE THSICE_DIAGNOSTICS_INIT
C | o Routine to initialize list of all available diagnostics
C | for THSICE package
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C === Global variables ===
#include "EEPARAMS.h"
c #include "SIZE.h"
c #include "PARAMS.h"
#include "THSICE_SIZE.h"
c #include "THSICE_PARAMS.h"
C !INPUT/OUTPUT PARAMETERS:
C === Routine arguments ===
C myThid :: My Thread Id. number
INTEGER myThid
CEOP
#ifdef ALLOW_DIAGNOSTICS
C !LOCAL VARIABLES:
C === Local variables ===
C diagNum :: diagnostics number in the (long) list of available diag.
C diagMate :: diag. mate number in the (long) list of available diag.
C diagName :: local short name (8c) of a diagnostics
C diagCode :: local parser field with characteristics of the diagnostics
C cf head of S/R DIAGNOSTICS_INIT_EARLY or DIAGNOSTICS_MAIN_INIT
C diagUnits :: local string (16c): physical units of a diagnostic field
C diagTitle :: local string (80c): description of field in diagnostic
INTEGER diagNum
INTEGER diagMate
CHARACTER*8 diagName
CHARACTER*16 diagCode
CHARACTER*16 diagUnits
CHARACTER*(80) diagTitle
INTEGER numFract, numThick, numFrcFx
INTEGER n
LOGICAL flag
CHARACTER*16 locName
CHARACTER*4 THSICE_DIAG_SUFX, diagSufx
EXTERNAL
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
c IF ( useDiagnotics ) THEN
diagName = 'SI_Fract'
diagTitle = 'Sea-Ice fraction [0-1]'
diagUnits = '0-1 '
diagCode = 'SM P M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
numFract = diagNum
numFrcFx = diagNum
diagName = 'SI_Thick'
diagTitle = 'Sea-Ice thickness (area weighted average)'
diagUnits = 'm '
diagCode = 'SM PC M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numFract, myThid )
numThick = diagNum
diagName = 'SI_SnowH'
diagTitle = 'Snow thickness over Sea-Ice (area weighted)'
diagUnits = 'm '
diagCode = 'SM PC M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numFract, myThid )
diagName = 'SI_Tsrf '
diagTitle = 'Surface Temperature over Sea-Ice (area weighted)'
diagUnits = 'degC '
diagCode = 'SM C M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numFract, myThid )
diagName = 'SI_Tice1'
diagTitle = 'Sea-Ice Temperature, 1srt layer (area weighted)'
diagUnits = 'degC '
diagCode = 'SM C M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numFract, myThid )
diagName = 'SI_Tice2'
diagTitle = 'Sea-Ice Temperature, 2nd layer (area weighted)'
diagUnits = 'degC '
diagCode = 'SM C M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numFract, myThid )
diagName = 'SI_Qice1'
diagTitle = 'Sea-Ice enthalpy, 1srt layer (mass weighted)'
diagUnits = 'J/kg '
diagCode = 'SM C M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numThick, myThid )
diagName = 'SI_Qice2'
diagTitle = 'Sea-Ice enthalpy, 2nd layer (mass weighted)'
diagUnits = 'J/kg '
diagCode = 'SM C M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numThick, myThid )
diagName = 'SIsnwAge'
diagTitle = 'snow age over Sea-Ice'
diagUnits = 's '
diagCode = 'SM P M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
#ifdef OLD_THSICE_CALL_SEQUENCE
diagName = 'SI_FrcFx'
diagTitle = 'Sea-Ice fraction [0-1], synchro. with fluxes'
diagUnits = '0-1 '
diagCode = 'SM P M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
numFrcFx = diagNum
#endif /* OLD_THSICE_CALL_SEQUENCE */
diagName = 'SIalbedo'
diagTitle = 'Sea-Ice Albedo [0-1] (area weighted average)'
diagUnits = '0-1 '
diagCode = 'SM PC M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numFrcFx, myThid )
diagName = 'SIsnwPrc'
diagTitle = 'snow precip. (+=dw) over Sea-Ice (area weighted)'
diagUnits = 'kg/m^2/s '
diagCode = 'SM C M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numFrcFx, myThid )
diagName = 'SIflxAtm'
diagTitle = 'net heat flux from the Atmosphere (+=dw)'
diagUnits = 'W/m^2 '
diagCode = 'SM M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
diagName = 'SIfrwAtm'
diagTitle = 'fresh-water flux to the Atmosphere (+=up)'
diagUnits = 'kg/m^2/s '
diagCode = 'SM M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
diagName = 'SIflx2oc'
diagTitle = 'heat flux out of the ocean (+=up)'
diagUnits = 'W/m^2 '
diagCode = 'SM M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
diagName = 'SIfrw2oc'
diagTitle = 'fresh-water flux out of the ocean (+=up)'
diagUnits = 'kg/m^2/s '
diagCode = 'SM M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
diagName = 'SIsaltFx'
diagTitle = 'salt flux out of the ocean (+=up)'
diagUnits = 'psu.kg/m^2/s '
diagCode = 'SM M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
diagName = 'SItOcMxL'
diagTitle = 'ocean mixed layer temperature'
diagUnits = 'degC '
diagCode = 'SM M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
diagName = 'SIsOcMxL'
diagTitle = 'ocean mixed layer salinity'
diagUnits = 'psu '
diagCode = 'SM P M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
DO n=-5,-9,-1
flag = .TRUE.
IF ( n .EQ. GAD_SI_FRAC ) THEN
locName = 'SeaIce Fraction '
diagUnits = 'm^2/s '
ELSEIF ( n .EQ. GAD_SI_HSNOW ) THEN
locName = 'Snow Thickness '
diagUnits = 'm^3/s '
ELSEIF ( n .EQ. GAD_SI_HICE ) THEN
locName = 'SeaIce Thickness'
diagUnits = 'm^3/s '
ELSEIF ( n .EQ. GAD_SI_QICE1 ) THEN
locName = 'Ice enthalpy l=1'
diagUnits = 'J/kg.m^3/s '
c diagUnits = 'W.m^3/kg '
ELSEIF ( n .EQ. GAD_SI_QICE2 ) THEN
locName = 'Ice enthalpy l=2'
diagUnits = 'J/kg.m^3/s '
ELSE
flag = .FALSE.
ENDIF
IF ( flag ) THEN
C- Advective flux:
diagSufx = THSICE_DIAG_SUFX( n, myThid )
diagName = 'ADVx'//diagSufx
diagTitle = 'Zonal Advective Flux of '//locName
diagCode = 'UU M1 '
diagMate = diagNum + 2
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
diagName = 'ADVy'//diagSufx
diagTitle = 'Meridional Advective Flux of '//locName
diagCode = 'VV M1 '
diagMate = diagNum
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
ENDIF
ENDDO
#ifdef OLD_THSICE_CALL_SEQUENCE
C-- Intermediate State, just after advection:
locName = ' after advection'
#else /* OLD_THSICE_CALL_SEQUENCE */
C-- Intermediate State, just before advection:
locName = 'before advection'
#endif /* OLD_THSICE_CALL_SEQUENCE */
diagName = 'SI_AdvFr'
diagTitle = 'Sea-Ice fraction [0-1] ('//locName//')'
diagUnits = '0-1 '
diagCode = 'SM P M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
numFract = diagNum
diagName = 'SI_AdvHi'
diagTitle = 'Sea-Ice thickness ('//locName//')'
diagUnits = 'm '
diagCode = 'SM PC M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numFract, myThid )
numThick = diagNum
diagName = 'SI_AdvHs'
diagTitle = 'Snow thickness over Sea-Ice ('//locName//')'
diagUnits = 'm '
diagCode = 'SM PC M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numFract, myThid )
diagName = 'SI_AdvQ1'
diagTitle = 'Sea-Ice enthalpy, 1srt layer ('//locName//')'
diagUnits = 'J/kg '
diagCode = 'SM C M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numThick, myThid )
diagName = 'SI_AdvQ2'
diagTitle = 'Sea-Ice enthalpy, 2nd layer ('//locName//')'
diagUnits = 'J/kg '
diagCode = 'SM C M1 '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, numThick, myThid )
c ENDIF
#endif /* ALLOW_DIAGNOSTICS */
RETURN
END
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP 0
C !ROUTINE: THSICE_DIAG_SUFX
C !INTERFACE:
CHARACTER*4 FUNCTION THSICE_DIAG_SUFX( tracerId, myThid )
C !DESCRIPTION:
C *==========================================================*
C | FUNCTION THSICE_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 "THSICE_SIZE.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_SI_FRAC ) THEN
THSICE_DIAG_SUFX = 'SIfr'
ELSEIF( tracerId.EQ.GAD_SI_HSNOW ) THEN
THSICE_DIAG_SUFX = 'SIhs'
ELSEIF( tracerId.EQ.GAD_SI_HICE ) THEN
THSICE_DIAG_SUFX = 'SIhi'
ELSEIF( tracerId.EQ.GAD_SI_QICE1 ) THEN
THSICE_DIAG_SUFX = 'SIq1'
ELSEIF( tracerId.EQ.GAD_SI_QICE2 ) THEN
THSICE_DIAG_SUFX = 'SIq2'
ELSE
THSICE_DIAG_SUFX = 'iiii'
ENDIF
RETURN
END