Back to home page

MITgcm

 
 

    


File indexing completed on 2021-09-30 05:15:28 UTC

view on githubraw file Latest commit 3d063ab4 on 2021-09-07 16:04:11 UTC
fb247706a7 Patr*0001 #include "EXF_OPTIONS.h"
35fa3f16b2 An T*0002 #ifdef ALLOW_AUTODIFF
                0003 # include "AUTODIFF_OPTIONS.h"
                0004 #endif
fb247706a7 Patr*0005 
                0006 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0007 CBOP
                0008 C     !ROUTINE: ADEXF_MONITOR
                0009 
                0010 C     !INTERFACE:
                0011       SUBROUTINE ADEXF_MONITOR(
                0012      I     iwhen, myTime, myIter, myThid )
                0013 
                0014 C     !DESCRIPTION:
                0015 C     Print some statistics about input forcing fields.
                0016 
                0017 C     !USES:
                0018       IMPLICIT NONE
                0019 #include "SIZE.h"
                0020 #include "EEPARAMS.h"
                0021 #include "PARAMS.h"
                0022 #include "GRID.h"
                0023 #include "EXF_PARAM.h"
                0024 #include "EXF_FIELDS.h"
                0025 #ifdef ALLOW_MONITOR
                0026 # include "MONITOR.h"
                0027 #endif
                0028 #ifdef ALLOW_MNC
                0029 # include "MNC_PARAMS.h"
                0030 #endif
                0031 #ifdef ALLOW_AUTODIFF
                0032 # ifdef ALLOW_AUTODIFF_MONITOR
                0033 #  include "adcommon.h"
                0034 # endif
                0035 #endif
                0036 
                0037 C     !INPUT PARAMETERS:
                0038       INTEGER iwhen
dbbbf73d12 Jean*0039       _RL myTime
                0040       INTEGER myIter
fb247706a7 Patr*0041       INTEGER myThid
                0042 CEOP
                0043 
14275b5e70 Patr*0044 #if ( defined (ALLOW_MONITOR) && defined (ALLOW_AUTODIFF_MONITOR) )
fb247706a7 Patr*0045 
                0046 C     === Functions ====
                0047       LOGICAL  DIFFERENT_MULTIPLE
                0048       EXTERNAL DIFFERENT_MULTIPLE
                0049       LOGICAL  MASTER_CPU_IO
                0050       EXTERNAL MASTER_CPU_IO
                0051 
                0052 C     == Local variables ==
                0053       _RL dummyRL(6)
                0054       CHARACTER*(MAX_LEN_MBUF) msgBuf
                0055 #ifdef ALLOW_MNC
                0056       INTEGER k
                0057 #endif
afd492c074 Mart*0058       LOGICAL printMonitorHeader
fb247706a7 Patr*0059 
afd492c074 Mart*0060       IF ( exf_adjMonSelect .GT. 0 .AND.
                0061      &     DIFFERENT_MULTIPLE(exf_adjMonFreq,myTime,deltaTClock) ) THEN
fb247706a7 Patr*0062 
afd492c074 Mart*0063        IF ( MASTER_CPU_IO(myThid) ) THEN
fb247706a7 Patr*0064 C--   only the master thread is allowed to switch On/Off mon_write_stdout
                0065 C     & mon_write_mnc (since it is the only thread that uses those flags):
                0066 
afd492c074 Mart*0067         printMonitorHeader = ( iwhen .EQ. 3 )
3d063ab48a Jean*0068      &       .OR. ( iwhen .EQ. 1 .AND. exf_adjMonSelect .GE. 3 )
                0069      &       .OR. ( iwhen .EQ. 2 .AND. exf_adjMonSelect .GE. 2 )
afd492c074 Mart*0070 
                0071         IF ( printMonitorHeader ) THEN
                0072 
fb247706a7 Patr*0073           IF (monitor_stdio) THEN
                0074             mon_write_stdout = .TRUE.
                0075           ELSE
                0076             mon_write_stdout = .FALSE.
                0077           ENDIF
                0078           mon_write_mnc = .FALSE.
                0079 #ifdef ALLOW_MNC
                0080           IF (useMNC .AND. monitor_mnc) THEN
                0081             DO k = 1,MAX_LEN_MBUF
                0082               mon_fname(k:k) = ' '
                0083             ENDDO
                0084             mon_fname(1:13) = 'admonitor_exf'
                0085             CALL MNC_CW_APPEND_VNAME(
                0086      &           'T', '-_-_--__-__t', 0,0, myThid)
                0087             CALL MNC_CW_SET_UDIM(mon_fname, -1, myThid)
                0088             CALL MNC_CW_RL_W_S(
                0089      &          'D',mon_fname,1,1,'T', myTime, myThid)
                0090             CALL MNC_CW_SET_UDIM(mon_fname, 0, myThid)
                0091             mon_write_mnc = .TRUE.
                0092           ENDIF
                0093 #endif /* ALLOW_MNC */
                0094 
                0095           IF ( mon_write_stdout ) THEN
                0096             WRITE(msgBuf,'(2A)') '// ===========================',
                0097      &           '============================'
                0098             CALL PRINT_MESSAGE(msgBuf, mon_ioUnit, SQUEEZE_RIGHT, 1)
24da7525ba Jean*0099             WRITE(msgBuf,'(A,I2)')
fb247706a7 Patr*0100      &           '// Begin AD_MONITOR EXF statistics for iwhen = ',
                0101      &           iwhen
                0102             CALL PRINT_MESSAGE(msgBuf, mon_ioUnit, SQUEEZE_RIGHT, 1)
                0103             WRITE(msgBuf,'(2A)') '// ===========================',
                0104      &           '============================'
                0105             CALL PRINT_MESSAGE(msgBuf, mon_ioUnit, SQUEEZE_RIGHT, 1)
                0106           ENDIF
                0107 
afd492c074 Mart*0108 C--   endif printMonitorHeader
                0109         ENDIF
fb247706a7 Patr*0110 C--   endif master cpu io
3d063ab48a Jean*0111        ENDIF
fb247706a7 Patr*0112 
                0113         CALL MON_SET_PREF('ad_exf',myThid)
                0114         CALL MON_OUT_I ('_tsnumber', myIter,mon_string_none,myThid)
                0115         CALL MON_OUT_RL('_time_sec', myTime,mon_string_none,myThid)
                0116 
3d063ab48a Jean*0117        IF ( iwhen .EQ. 1 .AND. exf_adjMonSelect .GE. 3 ) THEN
fb247706a7 Patr*0118 
                0119 C       Print some statistics about input forcing fields
                0120         IF ( stressIsOnCgrid ) THEN
                0121           CALL MON_WRITESTATS_RL( 1, adustress, '_adustress',
                0122      &             maskInW, maskInW, rAw, drF, dummyRL, myThid )
                0123           CALL MON_WRITESTATS_RL( 1, advstress, '_advstress',
                0124      &             maskInS, maskInS, rAs, drF, dummyRL, myThid )
                0125         ELSE
                0126           CALL MON_WRITESTATS_RL( 1, adustress, '_adustress',
                0127      &             maskInC, maskInC, rA , drF, dummyRL, myThid )
                0128           CALL MON_WRITESTATS_RL( 1, advstress, '_advstress',
                0129      &             maskInC, maskInC, rA , drF, dummyRL, myThid )
                0130         ENDIF
                0131         CALL MON_WRITESTATS_RL( 1, adhflux,   '_adhflux',
                0132      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0133         CALL MON_WRITESTATS_RL( 1, adsflux,   '_adsflux',
                0134      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
3d063ab48a Jean*0135 #ifdef SHORTWAVE_HEATING
                0136         CALL MON_WRITESTATS_RL( 1, adswflux,  '_adswflux',
                0137      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0138 #endif
fb247706a7 Patr*0139         CALL MON_WRITESTATS_RL( 1, adwspeed,  '_adwspeed',
                0140      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0141 
3d063ab48a Jean*0142        ELSEIF ( iwhen .EQ. 2 .AND. exf_adjMonSelect .GE. 2 ) THEN
fb247706a7 Patr*0143 
3d063ab48a Jean*0144         IF ( useAtmWind ) THEN
                0145          CALL MON_WRITESTATS_RL( 1, aduwind,  '_aduwind',
                0146      &            maskInC, maskInC, rA , drF, dummyRL, myThid )
                0147          CALL MON_WRITESTATS_RL( 1, advwind,  '_advwind',
                0148      &            maskInC, maskInC, rA , drF, dummyRL, myThid )
                0149         ENDIF
fb247706a7 Patr*0150 #ifdef ALLOW_ATM_TEMP
                0151         CALL MON_WRITESTATS_RL( 1, adatemp,   '_adatemp',
                0152      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0153         CALL MON_WRITESTATS_RL( 1, adaqh,     '_adaqh',
                0154      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0155         CALL MON_WRITESTATS_RL( 1, adprecip,  '_adprecip',
                0156      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
3d063ab48a Jean*0157         IF ( lwfluxfile.NE.' ' .OR. lwdownfile.EQ.' ' ) THEN
                0158          CALL MON_WRITESTATS_RL( 1, adlwflux, '_adlwflux',
                0159      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0160         ENDIF
fb247706a7 Patr*0161 #endif /* ALLOW_ATM_TEMP */
3d063ab48a Jean*0162 #if defined(ALLOW_ATM_TEMP) || defined(SHORTWAVE_HEATING)
                0163         IF ( swfluxfile.NE.' ' .OR. swdownfile.EQ.' ' ) THEN
                0164          CALL MON_WRITESTATS_RL( 1, adswflux, '_adswflux',
fb247706a7 Patr*0165      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
3d063ab48a Jean*0166         ENDIF
fb247706a7 Patr*0167 #endif
                0168 #ifdef ALLOW_DOWNWARD_RADIATION
3d063ab48a Jean*0169         CALL MON_WRITESTATS_RL( 1, adlwdown,  '_adlwdown',
                0170      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
fb247706a7 Patr*0171         CALL MON_WRITESTATS_RL( 1, adswdown,  '_adswdown',
                0172      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
3d063ab48a Jean*0173 #endif
                0174 #ifdef ALLOW_RUNOFF
                0175         CALL MON_WRITESTATS_RL( 1, adrunoff,  '_adrunoff',
fb247706a7 Patr*0176      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0177 #endif
                0178 #ifdef ATMOSPHERIC_LOADING
                0179 cph        CALL MON_WRITESTATS_RL( 1,adapressure,'_adapressure',
                0180 cph     &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0181 #endif
24da7525ba Jean*0182 #ifdef EXF_SEAICE_FRACTION
fb247706a7 Patr*0183 cph        CALL MON_WRITESTATS_RL( 1, areamask,'_areamask',
                0184 cph     &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0185 #endif
                0186 #ifdef ALLOW_CLIMSST_RELAXATION
                0187 cph        CALL MON_WRITESTATS_RL( 1, climsst, '_climsst',
                0188 cph     &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0189 #endif
                0190 #ifdef ALLOW_CLIMSSS_RELAXATION
                0191 cph        CALL MON_WRITESTATS_RL( 1, climsss, '_climsss',
                0192 cph     &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0193 #endif
                0194 #ifdef ALLOW_CLIMSTRESS_RELAXATION
                0195 cph          CALL MON_WRITESTATS_RL( 1, climustr, '_climustr',
                0196 cph     &             maskInW, maskInW, rAw, drF, dummyRL, myThid )
                0197 cph          CALL MON_WRITESTATS_RL( 1, climvstr, '_climvstr',
                0198 cph     &             maskInS, maskInS, rAs, drF, dummyRL, myThid )
                0199 #endif
                0200 
3d063ab48a Jean*0201        ELSEIF ( iwhen .EQ. 3 ) THEN
fb247706a7 Patr*0202 
dbbbf73d12 Jean*0203           CALL MON_WRITESTATS_RS( 1, adfu, '_adfu',
fb247706a7 Patr*0204      &             maskInC, maskInC, rA , drF, dummyRL, myThid )
dbbbf73d12 Jean*0205           CALL MON_WRITESTATS_RS( 1, adfv, '_adfv',
fb247706a7 Patr*0206      &             maskInC, maskInC, rA , drF, dummyRL, myThid )
3d063ab48a Jean*0207           CALL MON_WRITESTATS_RS( 1, adqnet, '_adqnet',
fb247706a7 Patr*0208      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
3d063ab48a Jean*0209           CALL MON_WRITESTATS_RS( 1, adempmr, '_adempmr',
fb247706a7 Patr*0210      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
3d063ab48a Jean*0211 #ifdef SHORTWAVE_HEATING
                0212           CALL MON_WRITESTATS_RS( 1, adqsw, '_adqsw',
                0213      &           maskInC, maskInC, rA , drF, dummyRL, myThid )
                0214 #endif
fb247706a7 Patr*0215 
3d063ab48a Jean*0216        ENDIF
fb247706a7 Patr*0217 
3d063ab48a Jean*0218        IF ( MASTER_CPU_IO(myThid) ) THEN
fb247706a7 Patr*0219 C--   only the master thread is allowed to switch On/Off mon_write_stdout
                0220 C     & mon_write_mnc (since it is the only thread that uses those flags):
                0221 
afd492c074 Mart*0222         IF ( printMonitorHeader ) THEN
                0223 
fb247706a7 Patr*0224           IF ( mon_write_stdout ) THEN
                0225             WRITE(msgBuf,'(2A)') '// ===========================',
                0226      &           '============================'
                0227             CALL PRINT_MESSAGE(msgBuf, mon_ioUnit, SQUEEZE_RIGHT, 1)
24da7525ba Jean*0228             WRITE(msgBuf,'(A,I2)')
fb247706a7 Patr*0229      &           '// End AD_MONITOR EXF statistics for iwhen = ',
                0230      &           iwhen
                0231             CALL PRINT_MESSAGE(msgBuf, mon_ioUnit, SQUEEZE_RIGHT, 1)
                0232             WRITE(msgBuf,'(2A)') '// ===========================',
                0233      &           '============================'
                0234             CALL PRINT_MESSAGE(msgBuf, mon_ioUnit, SQUEEZE_RIGHT, 1)
                0235           ENDIF
                0236 
                0237           mon_write_stdout = .FALSE.
                0238           mon_write_mnc    = .FALSE.
                0239 
afd492c074 Mart*0240 C--   endif printMonitorHeader
                0241         ENDIF
fb247706a7 Patr*0242 C--   endif master cpu io
3d063ab48a Jean*0243        ENDIF
fb247706a7 Patr*0244 
                0245 C     endif different multiple
                0246       ENDIF
                0247 
                0248 #endif /* ALLOW_MONITOR */
                0249 
                0250       RETURN
                0251       END