File indexing completed on 2021-09-30 05:16:06 UTC
view on githubraw file Latest commit 872ff0f0 on 2021-09-09 19:00:21 UTC
9476e7548f Patr*0001 #include "MONITOR_OPTIONS.h"
eded583e53 Jean*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
0004 #endif
0005 #ifdef ALLOW_CTRL
0006 # include "CTRL_OPTIONS.h"
0007 #endif
967746e1a9 Patr*0008 #include "AD_CONFIG.h"
9476e7548f Patr*0009
0010
0011
0012
0013
0014
0015 SUBROUTINE ADMONITOR(
4f6d3a8d05 Jean*0016 I myTime, myIter, myThid )
9476e7548f Patr*0017
0018
0019
0020
0021
0022
0023 IMPLICIT NONE
0024 #include "SIZE.h"
0025 #include "EEPARAMS.h"
0026 #include "PARAMS.h"
0027 #include "GRID.h"
0028 #include "MONITOR.h"
0029 #ifdef ALLOW_MNC
0030 # include "MNC_PARAMS.h"
0031 #endif
eded583e53 Jean*0032 #ifdef ALLOW_AUTODIFF_MONITOR
9a6281d071 Jean*0033 # include "AUTODIFF_PARAMS.h"
44d66f0517 Patr*0034 # include "adcommon.h"
9476e7548f Patr*0035 #endif
0036
0037
0038 _RL myTime
4f6d3a8d05 Jean*0039 INTEGER myIter
9476e7548f Patr*0040 INTEGER myThid
0041
0042
0043 #if (defined (ALLOW_ADJOINT_RUN) || defined (ALLOW_ADMTLM))
eded583e53 Jean*0044 #ifdef ALLOW_AUTODIFF_MONITOR
9476e7548f Patr*0045
0046
0047 LOGICAL DIFFERENT_MULTIPLE
0048 EXTERNAL DIFFERENT_MULTIPLE
0049 LOGICAL MASTER_CPU_IO
0050 EXTERNAL MASTER_CPU_IO
0051
0052
0053 CHARACTER*(MAX_LEN_MBUF) msgBuf
b082722712 Jean*0054 _RL dummyRL(6)
0055 INTEGER k
9a6281d071 Jean*0056 _RL var2Du(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0057 _RL var2Dv(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0058 _RL var3Du(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0059 _RL var3Dv(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
0060 _RS dumRS(1)
0061 _RL dumRL(1)
9476e7548f Patr*0062
872ff0f059 Jean*0063 IF ( DIFFERENT_MULTIPLE(adjMonitorFreq,myTime,deltaTClock) ) THEN
9476e7548f Patr*0064
0065 IF ( MASTER_CPU_IO(myThid) ) THEN
0066
3daafce20b Jean*0067
9476e7548f Patr*0068
0069 IF (monitor_stdio) THEN
0070 mon_write_stdout = .TRUE.
0071 ELSE
0072 mon_write_stdout = .FALSE.
0073 ENDIF
0074 mon_write_mnc = .FALSE.
0075 #ifdef ALLOW_MNC
0076 IF (useMNC .AND. monitor_mnc) THEN
b082722712 Jean*0077 DO k = 1,MAX_LEN_MBUF
0078 mon_fname(k:k) = ' '
9476e7548f Patr*0079 ENDDO
b082722712 Jean*0080 mon_fname(1:9) = 'admonitor'
9476e7548f Patr*0081 CALL MNC_CW_APPEND_VNAME(
0082 & 'T', '-_-_--__-__t', 0,0, myThid)
0083 CALL MNC_CW_SET_UDIM(mon_fname, -1, myThid)
0084 CALL MNC_CW_RL_W_S(
0085 & 'D',mon_fname,1,1,'T', myTime, myThid)
0086 CALL MNC_CW_SET_UDIM(mon_fname, 0, myThid)
0087 mon_write_mnc = .TRUE.
0088 ENDIF
0089 #endif /* ALLOW_MNC */
0090
0091
0092 IF ( mon_write_stdout ) THEN
0093 WRITE(msgBuf,'(2A)') '// ==========================',
0094 & '============================='
0095 CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
0096 WRITE(msgBuf,'(A)')
fa12eee058 Jean*0097 & '// Begin AD_MONITOR dynamic field statistics'
9476e7548f Patr*0098 CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
0099 WRITE(msgBuf,'(2A)') '// ==========================',
0100 & '============================='
0101 CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
0102 ENDIF
0103
0104
0105 ENDIF
0106
0107
0108 CALL MON_SET_PREF('ad_time',myThid)
0109 CALL MON_OUT_I( '_tsnumber', myIter,mon_string_none,myThid)
0110 CALL MON_OUT_RL('_secondsf', myTime,mon_string_none,myThid)
0111
0112
0113 CALL MON_SET_PREF('ad_dynstat',myThid)
9a6281d071 Jean*0114 IF ( mon_AdVarExch.EQ.1 ) THEN
0115 #ifndef AUTODIFF_TAMC_COMPATIBILITY
0116 CALL ADEXCH_3D_RL( adEtaN, 1 , myThid )
0117 CALL ADEXCH_UV_3D_RL( aduVel, advVel, .TRUE., Nr, myThid )
0118 CALL ADEXCH_3D_RL( adwVel, Nr, myThid )
0119 CALL ADEXCH_3D_RL( adTheta, Nr, myThid )
0120 CALL ADEXCH_3D_RL( adSalt, Nr, myThid )
0121 #endif
0122 ENDIF
0123 IF ( mon_AdVarExch.NE.2 ) THEN
0124 CALL MON_WRITESTATS_RL( 1, adEtaN, '_adeta',
0125 & maskInC, maskInC, rA , drF, dummyRL, myThid )
0126 CALL MON_WRITESTATS_RL( Nr, aduVel, '_aduvel',
0127 & hFacW, maskInW, rAw, drF, dummyRL, myThid )
0128 CALL MON_WRITESTATS_RL( Nr, advVel, '_advvel',
0129 & hFacS, maskInS, rAs, drF, dummyRL, myThid )
0130 CALL MON_WRITESTATS_RL( Nr, adwVel, '_adwvel',
0131 & maskC, maskInC, rA , drC, dummyRL, myThid )
0132 CALL MON_WRITESTATS_RL( Nr, adTheta,'_adtheta',
0133 & hFacC, maskInC, rA , drF, dummyRL, myThid )
0134 CALL MON_WRITESTATS_RL( Nr, adSalt, '_adsalt',
0135 & hFacC, maskInC, rA , drF, dummyRL, myThid )
0136 IF ( monitorSelect.GE.3 .AND.
0137 & nSx.EQ.1 .AND. nSy.EQ.1 ) THEN
b082722712 Jean*0138
9a6281d071 Jean*0139 k = 1
0140 IF ( usingPCoords ) k = Nr
0141 CALL MON_WRITESTATS_RL( 1, adTheta(1-OLx,1-OLy,k,1,1),
0142 & '_adsst', maskInC, maskInC, rA, drF, dummyRL, myThid )
0143 CALL MON_WRITESTATS_RL( 1, adSalt(1-OLx,1-OLy,k,1,1),
0144 & '_adsss', maskInC, maskInC, rA, drF, dummyRL, myThid )
0145 ENDIF
0146 ELSE
0147
0148 CALL COPY_ADVAR_OUTP( dumRS, adEtaN, var2Du, 1 , 12, myThid )
0149 CALL MON_WRITESTATS_RL( 1, var2Du, '_adeta',
0150 & maskInC, maskInC, rA , drF, dummyRL, myThid )
0151
0152 CALL COPY_AD_UV_OUTP( dumRS, dumRS, aduVel, advVel,
0153 & var3Du, var3Dv, Nr, 34, myThid )
0154 CALL MON_WRITESTATS_RL( Nr, var3Du, '_aduvel',
0155 & hFacW, maskInW, rAw, drF, dummyRL, myThid )
0156 CALL MON_WRITESTATS_RL( Nr, var3Dv, '_advvel',
0157 & hFacS, maskInS, rAs, drF, dummyRL, myThid )
0158
0159 CALL COPY_ADVAR_OUTP( dumRS, adwVel, var3Du, Nr, 12, myThid )
0160 CALL MON_WRITESTATS_RL( Nr, var3Du, '_adwvel',
0161 & maskC, maskInC, rA , drC, dummyRL, myThid )
0162 CALL COPY_ADVAR_OUTP( dumRS, adTheta,var3Du, Nr, 12, myThid )
0163 CALL COPY_ADVAR_OUTP( dumRS, adSalt, var3Dv, Nr, 12, myThid )
0164 CALL MON_WRITESTATS_RL( Nr, var3Du, '_adtheta',
0165 & hFacC, maskInC, rA , drF, dummyRL, myThid )
0166 CALL MON_WRITESTATS_RL( Nr, var3Dv, '_adsalt',
0167 & hFacC, maskInC, rA , drF, dummyRL, myThid )
0168 IF ( monitorSelect.GE.3 .AND.
0169 & nSx.EQ.1 .AND. nSy.EQ.1 ) THEN
0170
0171 k = 1
0172 IF ( usingPCoords ) k = Nr
0173 CALL MON_WRITESTATS_RL( 1, var3Du(1-OLx,1-OLy,k,1,1),
0174 & '_adsst', maskInC, maskInC, rA, drF, dummyRL, myThid )
0175 CALL MON_WRITESTATS_RL( 1, var3Dv(1-OLx,1-OLy,k,1,1),
0176 & '_adsss', maskInC, maskInC, rA, drF, dummyRL, myThid )
0177 ENDIF
b082722712 Jean*0178 ENDIF
9476e7548f Patr*0179
0180
872ff0f059 Jean*0181 IF ( monitorSelect.GE.4 ) THEN
9a6281d071 Jean*0182 CALL MON_SET_PREF('ad_forcing',myThid)
0183 IF ( mon_AdVarExch.NE.2 ) THEN
0184 CALL MON_WRITESTATS_RS( 1, adQnet, '_adqnet',
0185 & maskInC, maskInC, rA , drF, dummyRL, myThid )
9476e7548f Patr*0186 #ifdef SHORTWAVE_HEATING
9a6281d071 Jean*0187 CALL MON_WRITESTATS_RS( 1, adQsw , '_adqsw',
0188 & maskInC, maskInC, rA , drF, dummyRL, myThid )
9476e7548f Patr*0189 #endif
9a6281d071 Jean*0190 CALL MON_WRITESTATS_RS( 1, adEmPmR,'_adempmr',
0191 & maskInC, maskInC, rA , drF, dummyRL, myThid )
0192 CALL MON_WRITESTATS_RS( 1, adfu , '_adfu',
0193 & maskInW, maskInW, rAw, drF, dummyRL, myThid )
0194 CALL MON_WRITESTATS_RS( 1, adfv , '_adfv',
0195 & maskInS, maskInS, rAs, drF, dummyRL, myThid )
0196 ELSE
0197
0198 CALL COPY_ADVAR_OUTP( adQnet, dumRL, var2Du, 1, 11, myThid )
0199 CALL MON_WRITESTATS_RL( 1, var2Du, '_adqnet',
0200 & maskInC, maskInC, rA , drF, dummyRL, myThid )
0201 #ifdef SHORTWAVE_HEATING
0202 CALL COPY_ADVAR_OUTP( adQsw, dumRL, var2Du, 1, 11, myThid )
0203 CALL MON_WRITESTATS_RL( 1, var2Du, '_adqsw',
0204 & maskInC, maskInC, rA , drF, dummyRL, myThid )
0205 #endif
0206 CALL COPY_ADVAR_OUTP( adEmPmR,dumRL, var2Du, 1, 11, myThid )
0207 CALL MON_WRITESTATS_RL( 1, var2Du, '_adempmr',
0208 & maskInC, maskInC, rA , drF, dummyRL, myThid )
0209 CALL COPY_AD_UV_OUTP( adFu, adFv, dumRL, dumRL,
0210 & var2Du, var2Dv, 1, 33, myThid )
0211 CALL MON_WRITESTATS_RL( 1, var2Du, '_adfu',
0212 & maskInW, maskInW, rAw, drF, dummyRL, myThid )
0213 CALL MON_WRITESTATS_RL( 1, var2Dv, '_adfv',
0214 & maskInS, maskInS, rAs, drF, dummyRL, myThid )
0215 ENDIF
0216 ENDIF
9476e7548f Patr*0217
0218
0219 IF ( MASTER_CPU_IO(myThid) ) THEN
0220
3daafce20b Jean*0221
9476e7548f Patr*0222
0223 IF ( mon_write_stdout ) THEN
0224 WRITE(msgBuf,'(2A)') '// ==========================',
0225 & '============================='
0226 CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
0227 WRITE(msgBuf,'(A)')
fa12eee058 Jean*0228 & '// End AD_MONITOR dynamic field statistics'
9476e7548f Patr*0229 CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
0230 WRITE(msgBuf,'(2A)') '// ==========================',
0231 & '============================='
0232 CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
0233 ENDIF
0234
0235 mon_write_stdout = .FALSE.
0236 mon_write_mnc = .FALSE.
0237
0238
0239 ENDIF
0240
0241
0242 ENDIF
0243
fb247706a7 Patr*0244 #ifdef ALLOW_EXF
0245
0246 #endif
0247
0248 #ifdef ALLOW_SEAICE
0249 CALL ADSEAICE_MONITOR ( myTime, myIter, myThid )
0250 #endif
0251
0c43cc41de Patr*0252 #ifdef ALLOW_PTRACERS
0253 CALL ADPTRACERS_MONITOR ( myTime, myIter, myThid )
0254 #endif
0255
9476e7548f Patr*0256 #endif /* ALLOW_AUTODIFF_MONITOR */
0257 #endif /* ALLOW_ADJOINT_RUN */
0258
0259 RETURN
0260 END