Back to home page

MITgcm

 
 

    


File indexing completed on 2021-04-08 05:11:54 UTC

view on githubraw file Latest commit ba0b0470 on 2021-04-08 01:06:32 UTC
81c8d7b9aa Jean*0001 #include "GAD_OPTIONS.h"
                0002 
                0003 CBOP
e888dc319e Jean*0004 C     !ROUTINE: GAD_DIAGNOSTICS_INIT
81c8d7b9aa Jean*0005 C     !INTERFACE:
                0006       SUBROUTINE GAD_DIAGNOSTICS_INIT( myThid )
                0007 C     !DESCRIPTION:
                0008 C     Routine to initialize Generic Advection/Diffusion diagnostics
                0009 
                0010 C     !USES:
                0011       IMPLICIT NONE
                0012 C     === Global variables ===
                0013 #include "SIZE.h"
                0014 #include "EEPARAMS.h"
                0015 #include "PARAMS.h"
                0016 #include "GAD.h"
                0017 
                0018 C     !INPUT/OUTPUT PARAMETERS:
                0019 C     === Routine arguments ===
e888dc319e Jean*0020 C     myThid   :: My Thread Id. number
81c8d7b9aa Jean*0021       INTEGER myThid
                0022 CEOP
                0023 
                0024 #ifdef ALLOW_DIAGNOSTICS
65d3db6a48 Jean*0025 C     ! FUNCTIONS:
                0026       CHARACTER*4  GAD_DIAG_SUFX
                0027       CHARACTER*16 DIAGS_MK_UNITS
                0028       CHARACTER*80 DIAGS_MK_TITLE
238ffd2f6f Patr*0029       EXTERNAL     GAD_DIAG_SUFX
65d3db6a48 Jean*0030       EXTERNAL     DIAGS_MK_UNITS
                0031       EXTERNAL     DIAGS_MK_TITLE
                0032 
81c8d7b9aa Jean*0033 C     !LOCAL VARIABLES:
                0034 C     === Local variables ===
e888dc319e Jean*0035 C     msgBuf   :: Informational/error meesage buffer
81c8d7b9aa Jean*0036 c     CHARACTER*(MAX_LEN_MBUF) msgBuf
                0037 
65d3db6a48 Jean*0038       INTEGER        diagNum
                0039       INTEGER        diagMate
                0040       CHARACTER*8    diagName
                0041       CHARACTER*16   diagCode
                0042       CHARACTER*16   diagUnits
81c8d7b9aa Jean*0043       CHARACTER*(80) diagTitle
                0044 
65d3db6a48 Jean*0045       CHARACTER*10  flxUnits, trUnits
81c8d7b9aa Jean*0046       CHARACTER*12  locName
65d3db6a48 Jean*0047       CHARACTER*4   diagSufx
81c8d7b9aa Jean*0048 
                0049 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0050 
                0051 C--   Add diagnostics to the (long) list
                0052        IF ( usingPCoords ) THEN
                0053          flxUnits = '.Pa.m^2/s '
                0054        ELSE
                0055          flxUnits = '.m^3/s    '
                0056        ENDIF
                0057 
                0058 C-     add diagnostics of advective & diffusive flux of Temp :
                0059        IF ( fluidIsAir ) THEN
65d3db6a48 Jean*0060          trUnits = 'K'
81c8d7b9aa Jean*0061        ELSE
65d3db6a48 Jean*0062          trUnits = 'degC'
81c8d7b9aa Jean*0063        ENDIF
65d3db6a48 Jean*0064        diagUnits = DIAGS_MK_UNITS( trUnits//flxUnits, myThid )
81c8d7b9aa Jean*0065        diagSufx = GAD_DIAG_SUFX( GAD_TEMPERATURE, myThid )
                0066 
                0067 C-     Advective flux:
                0068        diagName  = 'ADVr'//diagSufx
                0069        diagTitle = 'Vertical   Advective Flux of Pot.Temperature'
                0070        diagCode  = 'WM      LR      '
65d3db6a48 Jean*0071        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0072      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
81c8d7b9aa Jean*0073        diagName  = 'ADVx'//diagSufx
                0074        diagTitle = 'Zonal      Advective Flux of Pot.Temperature'
65d3db6a48 Jean*0075        diagCode  = 'UU      MR      '
                0076        diagMate  = diagNum + 2
                0077        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0078      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
81c8d7b9aa Jean*0079        diagName  = 'ADVy'//diagSufx
                0080        diagTitle = 'Meridional Advective Flux of Pot.Temperature'
65d3db6a48 Jean*0081        diagCode  = 'VV      MR      '
                0082        diagMate  = diagNum
                0083        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0084      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
81c8d7b9aa Jean*0085 C-     Diffusive flux:
                0086        diagName  = 'DFrE'//diagSufx
                0087        diagTitle = 'Vertical Diffusive Flux of Pot.Temperature'
                0088      &           //' (Explicit part)'
                0089        diagCode  = 'WM      LR      '
65d3db6a48 Jean*0090        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0091      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
f68e77b60d Jean*0092        diagName  = 'DFxE'//diagSufx
81c8d7b9aa Jean*0093        diagTitle = 'Zonal      Diffusive Flux of Pot.Temperature'
65d3db6a48 Jean*0094        diagCode  = 'UU      MR      '
                0095        diagMate  = diagNum + 2
                0096        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0097      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
f68e77b60d Jean*0098        diagName  = 'DFyE'//diagSufx
81c8d7b9aa Jean*0099        diagTitle = 'Meridional Diffusive Flux of Pot.Temperature'
65d3db6a48 Jean*0100        diagCode  = 'VV      MR      '
                0101        diagMate  = diagNum
                0102        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0103      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
81c8d7b9aa Jean*0104 
                0105        diagName  = 'DFrI'//diagSufx
                0106        diagTitle = 'Vertical Diffusive Flux of Pot.Temperature'
                0107      &           //' (Implicit part)'
                0108        diagCode  = 'WM      LR      '
65d3db6a48 Jean*0109        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0110      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
                0111 
6e23417f74 Jean*0112 #ifdef GAD_ALLOW_TS_SOM_ADV
65d3db6a48 Jean*0113        diagUnits = DIAGS_MK_UNITS( trUnits, myThid )
                0114 
                0115        diagName  = 'SM_x'//diagSufx
                0116        diagTitle = 'Pot.Temp.   1rst Order Moment Sx'
                0117        diagCode  = 'UM      MR      '
                0118        diagMate  = diagNum + 2
                0119        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0120      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0121        diagName  = 'SM_y'//diagSufx
                0122        diagTitle = 'Pot.Temp.   1rst Order Moment Sy'
                0123        diagCode  = 'VM      MR      '
                0124        diagMate  = diagNum
                0125        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0126      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0127        diagName  = 'SM_z'//diagSufx
                0128        diagTitle = 'Pot.Temp.   1rst Order Moment Sz'
                0129        diagCode  = 'SM      MR      '
                0130        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0131      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
                0132 
                0133        diagName  = 'SMxx'//diagSufx
                0134        diagTitle = 'Pot.Temp.   2nd Order Moment Sxx'
                0135        diagCode  = 'UM      MR      '
                0136        diagMate  = diagNum + 2
                0137        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0138      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0139        diagName  = 'SMyy'//diagSufx
                0140        diagTitle = 'Pot.Temp.   2nd Order Moment Syy'
                0141        diagCode  = 'VM      MR      '
                0142        diagMate  = diagNum
                0143        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0144      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0145        diagName  = 'SMzz'//diagSufx
                0146        diagTitle = 'Pot.Temp.   2nd Order Moment Szz'
                0147        diagCode  = 'SM      MR      '
                0148        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0149      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
                0150 
                0151        diagName  = 'SMxy'//diagSufx
                0152        diagTitle = 'Pot.Temp.   2nd Order Moment Sxy'
                0153        diagCode  = 'SM      MR      '
                0154        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0155      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
                0156        diagName  = 'SMxz'//diagSufx
                0157        diagTitle = 'Pot.Temp.   2nd Order Moment Sxz'
                0158        diagCode  = 'UM      MR      '
                0159        diagMate  = diagNum + 2
                0160        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0161      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0162        diagName  = 'SMyz'//diagSufx
                0163        diagTitle = 'Pot.Temp.   2nd Order Moment Syz'
                0164        diagCode  = 'VM      MR      '
                0165        diagMate  = diagNum
                0166        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0167      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0168 
                0169        diagUnits = DIAGS_MK_UNITS( '('//trUnits//')^2', myThid )
                0170        diagName  = 'SM_v'//diagSufx
                0171        diagTitle = 'Pot.Temp.   sub-grid variance'
                0172        diagCode  = 'SM P    MR      '
                0173        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0174      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
6e23417f74 Jean*0175 #endif /* GAD_ALLOW_TS_SOM_ADV */
81c8d7b9aa Jean*0176 
                0177 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0178 
                0179 C-     add diagnostics of advective & diffusive flux of Salt :
                0180        IF ( fluidIsAir ) THEN
65d3db6a48 Jean*0181          locName = 'Water-Vapor '
74fbbed394 Jean*0182          IF ( useAIM ) THEN
                0183            trUnits = 'g/kg'
                0184          ELSE
                0185            trUnits = 'kg/kg'
                0186          ENDIF
81c8d7b9aa Jean*0187        ELSE
65d3db6a48 Jean*0188          locName = 'Salinity    '
ba0b047096 Mart*0189          trUnits = 'g/kg'
81c8d7b9aa Jean*0190        ENDIF
65d3db6a48 Jean*0191        diagUnits = DIAGS_MK_UNITS( trUnits//flxUnits, myThid )
81c8d7b9aa Jean*0192        diagSufx = GAD_DIAG_SUFX( GAD_SALINITY, myThid )
                0193 
                0194 C-     Advective flux:
                0195        diagName  = 'ADVr'//diagSufx
65d3db6a48 Jean*0196        diagTitle = 'Vertical   Advective Flux of '//locName
81c8d7b9aa Jean*0197        diagCode  = 'WM      LR      '
65d3db6a48 Jean*0198        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0199      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
81c8d7b9aa Jean*0200        diagName  = 'ADVx'//diagSufx
65d3db6a48 Jean*0201        diagTitle = 'Zonal      Advective Flux of '//locName
                0202        diagCode  = 'UU      MR      '
                0203        diagMate  = diagNum + 2
                0204        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0205      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
81c8d7b9aa Jean*0206        diagName  = 'ADVy'//diagSufx
65d3db6a48 Jean*0207        diagTitle = 'Meridional Advective Flux of '//locName
                0208        diagCode  = 'VV      MR      '
                0209        diagMate  = diagNum
                0210        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0211      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
81c8d7b9aa Jean*0212 C-     Diffusive flux:
                0213        diagName  = 'DFrE'//diagSufx
65d3db6a48 Jean*0214        diagTitle = 'Vertical Diffusive Flux of '//locName
                0215      &           // '(Explicit part)'
81c8d7b9aa Jean*0216        diagCode  = 'WM      LR      '
65d3db6a48 Jean*0217        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0218      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
f68e77b60d Jean*0219        diagName  = 'DFxE'//diagSufx
65d3db6a48 Jean*0220        diagTitle = 'Zonal      Diffusive Flux of '//locName
                0221        diagCode  = 'UU      MR      '
                0222        diagMate  = diagNum + 2
                0223        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0224      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
f68e77b60d Jean*0225        diagName  = 'DFyE'//diagSufx
65d3db6a48 Jean*0226        diagTitle = 'Meridional Diffusive Flux of '//locName
                0227        diagCode  = 'VV      MR      '
                0228        diagMate  = diagNum
                0229        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0230      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
81c8d7b9aa Jean*0231 
                0232        diagName  = 'DFrI'//diagSufx
65d3db6a48 Jean*0233        diagTitle = 'Vertical Diffusive Flux of '//locName
                0234      &           //'(Implicit part)'
81c8d7b9aa Jean*0235        diagCode  = 'WM      LR      '
65d3db6a48 Jean*0236        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0237      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
81c8d7b9aa Jean*0238 
12838c4aff Andr*0239        diagName  = 'SALTFILL'
65d3db6a48 Jean*0240        diagTitle = 'Filling of Negative Values of '//locName
12838c4aff Andr*0241        diagCode  = 'SM      MR      '
65d3db6a48 Jean*0242        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0243      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
                0244 
6e23417f74 Jean*0245 #ifdef GAD_ALLOW_TS_SOM_ADV
65d3db6a48 Jean*0246 
                0247        diagUnits = DIAGS_MK_UNITS( trUnits, myThid )
                0248 
                0249        diagName  = 'SM_x'//diagSufx
                0250        diagTitle = locName//'1rst Order Moment Sx'
                0251        diagCode  = 'UM      MR      '
                0252        diagMate  = diagNum + 2
                0253        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0254      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0255        diagName  = 'SM_y'//diagSufx
                0256        diagTitle = locName//'1rst Order Moment Sy'
                0257        diagCode  = 'VM      MR      '
                0258        diagMate  = diagNum
                0259        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0260      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0261        diagName  = 'SM_z'//diagSufx
                0262        diagTitle = locName//'1rst Order Moment Sz'
                0263        diagCode  = 'SM      MR      '
                0264        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0265      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
                0266 
                0267        diagName  = 'SMxx'//diagSufx
                0268        diagTitle = locName//'2nd Order Moment Sxx'
                0269        diagCode  = 'UM      MR      '
                0270        diagMate  = diagNum + 2
                0271        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0272      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0273        diagName  = 'SMyy'//diagSufx
                0274        diagTitle = locName//'2nd Order Moment Syy'
                0275        diagCode  = 'VM      MR      '
                0276        diagMate  = diagNum
                0277        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0278      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0279        diagName  = 'SMzz'//diagSufx
                0280        diagTitle = locName//'2nd Order Moment Szz'
                0281        diagCode  = 'SM      MR      '
                0282        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0283      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
                0284 
                0285        diagName  = 'SMxy'//diagSufx
                0286        diagTitle = locName//'2nd Order Moment Sxy'
                0287        diagCode  = 'SM      MR      '
                0288        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0289      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
                0290        diagName  = 'SMxz'//diagSufx
                0291        diagTitle = locName//'2nd Order Moment Sxz'
                0292        diagCode  = 'UM      MR      '
                0293        diagMate  = diagNum + 2
                0294        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0295      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0296        diagName  = 'SMyz'//diagSufx
                0297        diagTitle = locName//'2nd Order Moment Syz'
                0298        diagCode  = 'VM      MR      '
                0299        diagMate  = diagNum
                0300        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0301      I      diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
                0302 
                0303        diagUnits = DIAGS_MK_UNITS( '('//trUnits//')^2', myThid )
                0304        diagName  = 'SM_v'//diagSufx
                0305        diagTitle = locName//'sub-grid variance'
                0306        diagCode  = 'SM P    MR      '
                0307        CALL DIAGNOSTICS_ADDTOLIST( diagNum,
                0308      I      diagName, diagCode, diagUnits, diagTitle, 0, myThid )
6e23417f74 Jean*0309 #endif /* GAD_ALLOW_TS_SOM_ADV */
12838c4aff Andr*0310 
81c8d7b9aa Jean*0311 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0312 
                0313 #endif /* ALLOW_DIAGNOSTICS */
                0314 
                0315       RETURN
                0316       END
                0317 
                0318 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0319 
                0320 CBOP 0
                0321 C     !ROUTINE: GAD_DIAG_SUFX
                0322 
                0323 C     !INTERFACE:
                0324       CHARACTER*4 FUNCTION GAD_DIAG_SUFX( tracerId, myThid )
                0325 
                0326 C     !DESCRIPTION:
                0327 C     *==========================================================*
                0328 C     | FUNCTION GAD_DIAG_SUFX
                0329 C     | o Return diagnostic suffix (4 character long) for the
                0330 C     |   "tracerId" tracer (used to build diagnostic names).
                0331 C     *==========================================================*
                0332 
                0333 C     !USES:
                0334       IMPLICIT NONE
8aa8d99107 Jean*0335 #include "SIZE.h"
81c8d7b9aa Jean*0336 #include "EEPARAMS.h"
                0337 #include "GAD.h"
01111eb599 Jean*0338 #ifdef ALLOW_PTRACERS
                0339 c#include "PARAMS.h"
                0340 # include "PTRACERS_SIZE.h"
                0341 # include "PTRACERS_PARAMS.h"
                0342 #endif /* ALLOW_PTRACERS */
81c8d7b9aa Jean*0343 
                0344 C     !INPUT PARAMETERS:
                0345 C     tracerId   ::  tracer identifier
                0346 C     myThid     ::  my thread Id number
                0347       INTEGER      tracerId
                0348       INTEGER      myThid
                0349 CEOP
                0350 
                0351 C     !LOCAL VARIABLES:
                0352 
                0353 C--   Set diagnostic suffix (4 character long) for the "tracerId" tracer
                0354       IF ( tracerId.EQ.GAD_TEMPERATURE ) THEN
                0355         GAD_DIAG_SUFX = '_TH '
                0356       ELSEIF( tracerId.EQ.GAD_SALINITY ) THEN
                0357         GAD_DIAG_SUFX = '_SLT'
01111eb599 Jean*0358 #ifdef ALLOW_PTRACERS
                0359 c     ELSEIF( usePTRACERS
                0360 c       .AND. tracerId.GE.GAD_TR1
81c8d7b9aa Jean*0361       ELSEIF( tracerId.GE.GAD_TR1
01111eb599 Jean*0362      &  .AND. tracerId.LT.GAD_TR1+PTRACERS_num ) THEN
                0363 c       WRITE(GAD_DIAG_SUFX,'(A,A2)')
                0364 c    &                  'Tr', PTRACERS_ioLabel( tracerId+1-GAD_TR1 )
                0365         GAD_DIAG_SUFX = 'Tr'//PTRACERS_ioLabel( tracerId+1-GAD_TR1 )
                0366 #endif /* ALLOW_PTRACERS */
81c8d7b9aa Jean*0367       ELSE
                0368         GAD_DIAG_SUFX = 'aaaa'
                0369       ENDIF
                0370 
                0371       RETURN
                0372       END