C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_diagnostics_init.F,v 1.45 2017/05/23 16:23:46 mlosch Exp $ C $Name: $ #include "SEAICE_OPTIONS.h" C-- File seaice_diagnostics_init.F: Routines initialize SEAICE diagnostics C-- Contents C-- o SEAICE_DIAGNOSTICS_INIT C-- o SEAICE_DIAG_SUFX C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP C !ROUTINE: SEAICE_DIAGNOSTICS_INIT C !INTERFACE: SUBROUTINE SEAICE_DIAGNOSTICS_INIT( myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE SEAICE_DIAGNOSTICS_INIT C | o Routine to initialize list of all available diagnostics C | for SEAICE package C *==========================================================* C \ev C !USES: IMPLICIT NONE C === Global variables === #include "EEPARAMS.h" #include "SIZE.h" #include "SEAICE_SIZE.h" #include "SEAICE_PARAMS.h" #include "SEAICE_TRACER.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 see head of S/R DIAGNOSTICS_INIT_EARLY or DIAGNOSTICS_MAIN_INIT C for a list of options 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 #ifdef ALLOW_SITRACER INTEGER iTr, ilnb, numMateTr, numMateTrPreTh CHARACTER*8 locUnitTr CHARACTER*30 locNameTr #endif INTEGER numArea,numAreaPreTh,numHeff,numHeffPreTh CHARACTER*9 flxUnits CHARACTER*15 locName CHARACTER*4 SEAICE_DIAG_SUFX, diagSufx EXTERNAL C Functions :: INTEGER ILNBLNK EXTERNAL C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| C=============== state variables ============ diagName = 'SIarea ' diagTitle = 'SEAICE fractional ice-covered area [0 to 1]' diagUnits = 'm^2/m^2 ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) numArea = diagNum diagName = 'SIareaPR' diagTitle = 'SIarea preceeding ridging process' diagUnits = 'm^2/m^2 ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIareaPT' diagTitle = 'SIarea preceeding thermodynamic growth/melt' diagUnits = 'm^2/m^2 ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) numAreaPreTh = diagNum diagName = 'SIheff ' diagTitle = 'SEAICE effective ice thickness' diagUnits = 'm ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) numHeff = diagNum diagName = 'SIheffPT' diagTitle = 'SIheff preceeeding thermodynamic growth/melt' diagUnits = 'm ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) numHeffPreTh = diagNum diagName = 'SIhsnow ' diagTitle = 'SEAICE effective snow thickness' diagUnits = 'm ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIhsnoPT' diagTitle = 'SIhsnow preceeeding thermodynamic growth/melt' diagUnits = 'm ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIhsalt ' diagTitle = 'SEAICE effective salinity' diagUnits = 'g/m^2 ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) #ifdef ALLOW_SITRACER DO iTr = 1, SItrNumInUse C-- Set default name & tracer Units: WRITE(locNameTr,'(A,I4.4,A)') 'sea ice tracer no. ',iTr if (SItrMate(iTr).EQ.'HEFF') then locUnitTr = '(kg/kg) ' numMateTr = numHeff numMateTrPreTh = numHeffPreTh else locUnitTr = '(kg/m^2)' numMateTr = numArea numMateTrPreTh = numAreaPreTh endif C- use name & units from data.seaice : ilnb = ILNBLNK(SItrUnit(iTr)) IF ( ilnb.GE.1 ) THEN ilnb = LEN(locUnitTr) locUnitTr = SItrUnit(iTr)(1:ilnb) ENDIF ilnb = ILNBLNK(SItrNameLong(iTr)) IF ( ilnb.GE.1 ) THEN ilnb = MIN(LEN(locNameTr),ilnb) WRITE(locNameTr,'(A)') SItrNameLong(iTr)(1:ilnb) ELSE ilnb = ILNBLNK(SItrName(iTr)) IF ( ilnb.GE.1 ) THEN ilnb = MIN(LEN(locNameTr),ilnb) WRITE(locNameTr,'(2A)') SItrName(iTr)(1:ilnb),' tracer' ENDIF ENDIF ilnb = MAX(ILNBLNK(locNameTr),1) WRITE(diagName,'(A4,I2.2,A2)') 'SItr',iTr,' ' WRITE(diagTitle,'(4A)') locNameTr(1:ilnb), & ' (associated with ',SItrMate(iTr),')' diagUnits = locUnitTr//' ' diagCode = 'SM C M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, diagName, I diagCode, diagUnits, diagTitle, numMateTr, myThid ) WRITE(diagName,'(A4,I2.2,A2)') 'SItr',iTr,'PT' WRITE(diagTitle,'(A4,I2.2,2A)') 'SItr',iTr, & ' preceeeding thermodynamic growth/melt' diagUnits = locUnitTr//' ' diagCode = 'SM C M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, diagName, I diagCode, diagUnits, diagTitle, numMateTrPreTh, myThid ) ENDDO #endif diagName = 'SItices ' diagTitle = 'Surface Temperature over Sea-Ice (area weighted)' diagUnits = 'K ' diagCode = 'SM C M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, numArea, myThid ) diagName = 'SIuice ' diagTitle = 'SEAICE zonal ice velocity, >0 from West to East' diagUnits = 'm/s ' #ifdef SEAICE_CGRID diagCode = 'UU M1 ' #else diagCode = 'UZ M1 ' #endif diagMate = diagNum + 2 CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) diagName = 'SIvice ' diagTitle = 'SEAICE merid. ice velocity, >0 from South to North' diagUnits = 'm/s ' #ifdef SEAICE_CGRID diagCode = 'VV M1 ' #else diagCode = 'VZ M1 ' #endif diagMate = diagNum CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) C=============== momentum, heat and fresh water forcing ============ C pkg/diagnostics SIfu and oceTAUX, dumpfreq FU, and tavefreq FUtave C are identical but they differ from pkg/diagnostics EXFtaux, which C is stress before impact of ice. Also when using exf bulk C formulae, EXFtaux is defined on tracer rather than uvel points. c diagName = 'SIfu ' c diagTitle = 'SEAICE zonal surface wind stress, >0 increases uVel ' c diagUnits = 'N/m^2 ' c diagCode = 'UU U1 ' c diagMate = diagNum + 2 c CALL DIAGNOSTICS_ADDTOLIST( diagNum, c I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) C pkg/diagnostics SIfv and oceTAUY, dumpfreq FV, and tavefreq FVtave C are identical but they differ from pkg/diagnostics EXFtauy, which C is stress before impact of ice. Also when using exf bulk C formulae, EXFtauy is defined on tracer rather than vvel points. c diagName = 'SIfv ' c diagTitle = 'SEAICE merid. surface wind stress, >0 increases vVel' c diagUnits = 'N/m^2 ' c diagCode = 'VV U1 ' c diagMate = diagNum c CALL DIAGNOSTICS_ADDTOLIST( diagNum, c I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) diagName = 'SItaux ' diagTitle = 'SEAICE zonal surface wind stress, >0 increases uIce' diagUnits = 'N/m^2 ' diagCode = 'UU U1 ' diagMate = diagNum + 2 CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) diagName = 'SItauy ' diagTitle = 'SEAICE merid surface wind stress, >0 increases vIce' diagUnits = 'N/m^2 ' diagCode = 'VV U1 ' diagMate = diagNum CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) diagName = 'SIatmTx ' diagTitle = 'Zonal surface wind stress over Ocean+SeaIce' diagUnits = 'N/m^2 ' diagCode = 'UU U1 ' diagMate = diagNum + 2 CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) diagName = 'SIatmTy ' diagTitle = 'Merid surface wind stress over Ocean+SeaIce' diagUnits = 'N/m^2 ' diagCode = 'VV U1 ' diagMate = diagNum CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) c diagName = 'SIuwind ' c diagTitle = 'SEAICE zonal 10-m wind speed, >0 increases uVel' c diagUnits = 'm/s ' c diagCode = 'UM U1 ' c diagMate = diagNum + 2 c CALL DIAGNOSTICS_ADDTOLIST( diagNum, c I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) c diagName = 'SIvwind ' c diagTitle = 'SEAICE meridional 10-m wind speed, >0 increases uVel' c diagUnits = 'm/s ' c diagCode = 'VM U1 ' c diagMate = diagNum c CALL DIAGNOSTICS_ADDTOLIST( diagNum, c I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) C SIqnet, Qnet, and QNETtave are identical. C With #undef NONLIN_FRSURF SIqnet is identical to -(TFLUX-TRELAX). C Except over land and under sea ice, SIqnet is also identical to C EXFlwnet+EXFswnet-EXFhl-EXFhs. diagName = 'SIqnet ' diagTitle = 'Ocean surface heatflux, turb+rad, >0 decreases theta' diagUnits = 'W/m^2 ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) C SIqsw, Qsw, and QSWtave are identical. C Except under sea ice, SIqsw is also identical to EXFswnet. diagName = 'SIqsw ' diagTitle = 'Ocean surface shortwave radiat., >0 decreases theta' diagUnits = 'W/m^2 ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIatmQnt' diagTitle = 'Net atmospheric heat flux, >0 decreases theta' diagUnits = 'W/m^2 ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SItflux ' diagTitle = 'Same as TFLUX but incl seaice (>0 incr T decr H)' diagUnits = 'W/m^2 ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) #ifndef SEAICE_DISABLE_HEATCONSFIX diagName = 'SIaaflux' diagTitle = 'conservative ocn<->seaice adv. heat flux adjust.' diagUnits = 'W/m^2 ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) #endif diagName = 'SIhl ' diagTitle = 'Latent heat flux into ocean, >0 increases theta' diagUnits = 'W/m^2 ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIqneto ' diagTitle = 'Open Ocean Part of SIqnet, turb+rad, >0 decr theta' diagUnits = 'W/m^2 ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIqneti ' diagTitle = 'Ice Covered Part of SIqnet, turb+rad, >0 decr theta' diagUnits = 'W/m^2 ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) C pkg/diagnostics SIempmr, dumpfreq EmPmR, and tavefreq EmPmRtave C are identical but they differ from pkg/diagnostics EXFempmr, which C is EmPmR before impact of ice. diagName = 'SIempmr ' diagTitle = 'Ocean surface freshwater flux, > 0 increases salt' diagUnits = 'kg/m^2/s ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIatmFW ' diagTitle = 'Net freshwater flux from atmosphere & land (+=down)' diagUnits = 'kg/m^2/s ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIsnPrcp' diagTitle = 'Snow precip. (+=dw) over Sea-Ice (area weighted)' diagUnits = 'kg/m^2/s ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIfwSubl' diagTitle ='Potential sublimation freshwater flux, >0 decr. ice' diagUnits = 'kg/m^2/s ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIacSubl' diagTitle = 'Actual sublimation freshwater flux, >0 decr. ice' diagUnits = 'kg/m^2/s ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIrsSubl' diagTitle = 'Residual subl. freshwater flux, >0 taken from ocn' diagUnits = 'kg/m^2/s ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIactLHF' diagTitle = 'Actual latent heat flux over ice' diagUnits = 'W/m^2 ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SImaxLHF' diagTitle = 'Maximum latent heat flux over ice' diagUnits = 'W/m^2 ' diagCode = 'SM U1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) #ifdef ALLOW_SITRACER DO iTr = 1, SItrNumInUse IF (SItrMate(iTr).EQ.'HEFF') then C-- Set default name & tracer Units: WRITE(diagUnits,'(A)') 'kg/m^2/s' C-- use units from data.seaice : ilnb = ILNBLNK(SItrUnit(iTr)) IF ( ilnb.GE.1 ) THEN WRITE(diagUnits,'(2A)') SItrUnit(iTr)(1:ilnb),'.kg/m^2/s' ENDIF C-- WRITE(diagName,'(A4,I2.2,A2)') 'SItr',iTr,'Fx' WRITE(diagTitle,'(A4,I2.2,A)') 'SItr',iTr, I ' flux out of ice pack (that may enter ocean)' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, diagName, I diagCode, diagUnits, diagTitle, 0, myThid ) ENDIF ENDDO #endif C============== ice growth/melt ============== diagName = 'SIaQbOCN' diagTitle = 'Potential HEFF rate of change by ocean ice flux' diagUnits = 'm/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIaQbATC' diagTitle = 'Potential HEFF rate of change by atm flux over ice' diagUnits = 'm/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIaQbATO' diagTitle = 'Potential HEFF rate of change by open ocn atm flux' diagUnits = 'm/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIdHbOCN' diagTitle = 'HEFF rate of change by ocean ice flux' diagUnits = 'm/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIdSbATC' diagTitle = 'HSNOW rate of change by atm flux over sea ice' diagUnits = 'm/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIdSbOCN' diagTitle = 'HSNOW rate of change by ocean ice flux' diagUnits = 'm/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIdHbATC' diagTitle = 'HEFF rate of change by atm flux over sea ice' diagUnits = 'm/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIdHbATO' diagTitle = 'HEFF rate of change by open ocn atm flux' diagUnits = 'm/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIdHbFLO' diagTitle = 'HEFF rate of change by flooding snow' diagUnits = 'm/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) #ifdef SEAICE_GREASE diagName = 'SIgrsLT ' diagTitle = 'actual grease ice layer thickness' diagUnits = 'm ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) #endif C=============== expansion/contraction ============ diagName = 'SIdAbATO' diagTitle = 'Potential AREA rate of change by open ocn atm flux' diagUnits = 'm^2/m^2/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIdAbATC' diagTitle = 'Potential AREA rate of change by atm flux over ice' diagUnits = 'm^2/m^2/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIdAbOCN' diagTitle = 'Potential AREA rate of change by ocean ice flux' diagUnits = 'm^2/m^2/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIdA' diagTitle = 'AREA rate of change (net)' diagUnits = 'm^2/m^2/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) C============== advection/diffusion ============ C effective thickness flxUnits = '.m^2/s ' locName = 'eff ice thickn ' WRITE(diagUnits,'(2A)') 'm',flxUnits diagSufx = SEAICE_DIAG_SUFX( GAD_HEFF, myThid ) C-- advective flux 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 ) C-- Diffusive flux: diagName = 'DFxE'//diagSufx diagTitle = 'Zonal Diffusive Flux of '//locName diagCode = 'UU M1 ' diagMate = diagNum + 2 CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) diagName = 'DFyE'//diagSufx diagTitle = 'Meridional Diffusive Flux of '//locName diagCode = 'VV M1 ' diagMate = diagNum CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) C fractional ice covered area (ice concentration) locName = 'fract area ' WRITE(diagUnits,'(2A)') 'm^2/m^2',flxUnits diagSufx = SEAICE_DIAG_SUFX( GAD_AREA, myThid ) C-- advective flux 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 ) C-- Diffusive flux: diagName = 'DFxE'//diagSufx diagTitle = 'Zonal Diffusive Flux of '//locName diagCode = 'UU M1 ' diagMate = diagNum + 2 CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) diagName = 'DFyE'//diagSufx diagTitle = 'Meridional Diffusive Flux of '//locName diagCode = 'VV M1 ' diagMate = diagNum CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) C effective snow thickness locName = 'eff snow thickn' WRITE(diagUnits,'(2A)') 'm',flxUnits diagSufx = SEAICE_DIAG_SUFX( GAD_SNOW, myThid ) C-- advective flux 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 ) C-- Diffusive flux: diagName = 'DFxE'//diagSufx diagTitle = 'Zonal Diffusive Flux of '//locName diagCode = 'UU M1 ' diagMate = diagNum + 2 CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) diagName = 'DFyE'//diagSufx diagTitle = 'Meridional Diffusive Flux of '//locName diagCode = 'VV M1 ' diagMate = diagNum CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) C sea ice salinity locName = 'seaice salinity' WRITE(diagUnits,'(2A)') 'psu',flxUnits diagSufx = SEAICE_DIAG_SUFX( GAD_SALT, myThid ) C-- advective flux 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 ) C-- Diffusive flux: diagName = 'DFxE'//diagSufx diagTitle = 'Zonal Diffusive Flux of '//locName diagCode = 'UU M1 ' diagMate = diagNum + 2 CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) diagName = 'DFyE'//diagSufx diagTitle = 'Meridional Diffusive Flux of '//locName diagCode = 'VV M1 ' diagMate = diagNum CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) C-- effective thickness transport (centered in space, 1 time-step lag) diagName = 'SIuheff ' diagTitle = 'Zonal Transport of eff ice thickn (centered)' diagUnits = 'm^2/s ' diagCode = 'UU M1 ' diagMate = diagNum + 2 CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) diagName = 'SIvheff ' diagTitle = 'Meridional Transport of eff ice thickn (centered)' diagUnits = 'm^2/s ' diagCode = 'VV M1 ' diagMate = diagNum CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid ) C=============== dynamics ============ diagName = 'SIpress ' diagTitle = 'SEAICE strength (with upper and lower limit)' diagUnits = 'm^2/s^2 ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIzeta ' diagTitle = 'SEAICE nonlinear bulk viscosity' diagUnits = 'm^2/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIeta ' diagTitle = 'SEAICE nonlinear shear viscosity' diagUnits = 'm^2/s ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIsig1 ' diagTitle = 'SEAICE normalized principle stress, component one' diagUnits = 'no units ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIsig2 ' diagTitle = 'SEAICE normalized principle stress, component two' diagUnits = 'no units ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIshear ' diagTitle = 'SEAICE shear deformation' diagUnits = 's^{-1} ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SIdelta ' diagTitle = 'SEAICE Delta deformation' diagUnits = 's^{-1} ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) diagName = 'SItensil' diagTitle = 'SEAICE maximal tensile strength' diagUnits = 'm^2/s^2 ' diagCode = 'SM M1 ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) #ifdef SEAICE_ITD C=============== ice thickness categories ============ diagName = 'SIheffN ' diagTitle = 'SEAICE effective ice thickness per category' diagUnits = 'm ' diagCode = 'SM MX ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) CALL DIAGNOSTICS_SETKLEV( diagName, nITD, myThid ) diagName = 'SIareaN ' diagTitle = I 'SEAICE fractional ice-covered area per category [0 to 1]' diagUnits = 'm^2/m^2 ' diagCode = 'SM MX ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) CALL DIAGNOSTICS_SETKLEV( diagName, nITD, myThid ) diagName = 'SIhsnowN' diagTitle = 'SEAICE effective snow thickness per category' diagUnits = 'm ' diagCode = 'SM MX ' CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) CALL DIAGNOSTICS_SETKLEV( diagName, nITD, myThid ) #endif #endif /* ALLOW_DIAGNOSTICS */ RETURN END
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP 0 C !ROUTINE: SEAICE_DIAG_SUFX C !INTERFACE: CHARACTER*4 FUNCTION SEAICE_DIAG_SUFX( tracerId, myThid ) C !DESCRIPTION: C *==========================================================* C | FUNCTION SEAICE_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 "SEAICE_SIZE.h" #include "SEAICE_PARAMS.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_HEFF ) THEN SEAICE_DIAG_SUFX = 'HEFF' ELSEIF( tracerId.EQ.GAD_AREA ) THEN SEAICE_DIAG_SUFX = 'AREA' ELSEIF( tracerId.EQ.GAD_SNOW ) THEN SEAICE_DIAG_SUFX = 'SNOW' ELSEIF( tracerId.EQ.GAD_SALT ) THEN SEAICE_DIAG_SUFX = 'SSLT' ELSE SEAICE_DIAG_SUFX = 'aaaa' ENDIF RETURN END