Back to home page

darwin3

 
 

    


File indexing completed on 2024-12-17 18:37:26 UTC

view on githubraw file Latest commit 87dd4f7d on 2024-01-17 18:17:24 UTC
87dd4f7d5f Oliv*0001 #include "OASIM_OPTIONS.h"
                0002 
                0003 CBOP
                0004 C !ROUTINE: OASIM_MONITOR
                0005 
                0006 C !INTERFACE: ==========================================================
                0007       SUBROUTINE OASIM_MONITOR(
                0008      I                    myTime, myIter, myThid )
                0009 
                0010 C !DESCRIPTION:
                0011 C writes out oasim statistics
                0012 
                0013 C !USES: ===============================================================
                0014       IMPLICIT NONE
                0015 #include "SIZE.h"
                0016 #include "EEPARAMS.h"
                0017 #include "PARAMS.h"
                0018 #include "GRID.h"
                0019 #include "OASIM_SIZE.h"
                0020 #include "OASIM_PARAMS.h"
                0021 #include "OASIM_FIELDS.h"
                0022 #ifdef ALLOW_MONITOR
                0023 #include "MONITOR.h"
                0024 #endif
                0025 
                0026 C !INPUT PARAMETERS: ===================================================
                0027 C  myTime               :: current time
                0028 C  myIter               :: current timestep
                0029 C  myThid               :: thread number
                0030       _RL     myTime
                0031       INTEGER myIter
                0032       INTEGER myThid
                0033 
                0034 C     === Functions ====
                0035       LOGICAL  DIFFERENT_MULTIPLE
                0036       EXTERNAL DIFFERENT_MULTIPLE
                0037       LOGICAL  MASTER_CPU_IO
                0038       EXTERNAL MASTER_CPU_IO
                0039 
                0040 #ifdef ALLOW_OASIM
                0041 #ifdef ALLOW_MONITOR
                0042 
                0043 C !LOCAL VARIABLES: ====================================================
                0044       CHARACTER*(MAX_LEN_MBUF) msgBuf
                0045       CHARACTER*(MAX_LEN_MBUF) suff
                0046       INTEGER l,i,j,bi,bj
                0047       _RL dummyRL(6)
                0048       _RS onearr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0049 CEOP
                0050 
                0051       IF ( DIFFERENT_MULTIPLE( oasim_monitorFreq,myTime,deltaTClock )
                0052      &   ) THEN
                0053 
                0054 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0055 
                0056 C--   OASIM field monitor start
                0057        IF ( MASTER_CPU_IO(myThid) ) THEN
                0058 C--   only the master thread is allowed to switch On/Off mon_write_stdout
                0059 C     & mon_write_mnc (since it is the only thread that uses those flags):
                0060 
                0061           IF (monitor_stdio) THEN
                0062             mon_write_stdout = .TRUE.
                0063           ELSE
                0064             mon_write_stdout = .FALSE.
                0065           ENDIF
                0066           mon_write_mnc    = .FALSE.
                0067 
                0068           IF ( mon_write_stdout ) THEN
                0069             WRITE(msgBuf,'(2A)') '// ==========================',
                0070      &             '============================='
                0071             CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
                0072             WRITE(msgBuf,'(A)')
                0073      &             '// Begin MONITOR oasim field statistics'
                0074             CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
                0075             WRITE(msgBuf,'(2A)') '// ==========================',
                0076      &             '============================='
                0077             CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
                0078           ENDIF
                0079 
                0080 C--   endif master cpu io
                0081        ENDIF
                0082 
                0083        DO bj=myByLo(myThid),myByHi(myThid)
                0084         DO bi=myBxLo(myThid),myBxHi(myThid)
                0085          DO j=1-OLy,sNy+OLy
                0086           DO i=1-OLx,sNx+OLx
                0087            onearr(i,j,bi,bj) = oneRS
                0088           ENDDO
                0089          ENDDO
                0090         ENDDO
                0091        ENDDO
                0092 
                0093 C--   OASIM field monitor : compute stats & write
                0094        IF ( OASIM_monitorFreq .NE. monitorFreq ) THEN
                0095 C      repeat printing of time to make grepping easier, default is not
                0096 C      to do this, because the default is to use the same monitorFreq
                0097 C      for oasim as for the dynamics variables.
                0098          CALL MON_SET_PREF('oasim',myThid)
                0099          CALL MON_OUT_I( '_tsnumber', myIter,mon_string_none,myThid)
                0100          CALL MON_OUT_RL('_secondsf', myTime,mon_string_none,myThid)
                0101        ENDIF
                0102        CALL MON_SET_PREF('OASIM_',myThid)
                0103 C      Print some statistics about input forcing fields
                0104 
                0105        CALL MON_WRITESTATS_RL( 1, ccov, 'ccov',
                0106      &           onearr, onearr, rA , drF, dummyRL, myThid )
                0107 
                0108        CALL MON_WRITESTATS_RL( 1, rlwp, 'rlwp',
                0109      &           onearr, onearr, rA , drF, dummyRL, myThid )
                0110 
                0111        CALL MON_WRITESTATS_RL( 1, cdre, 'cdre',
                0112      &           onearr, onearr, rA , drF, dummyRL, myThid )
                0113 
                0114        CALL MON_WRITESTATS_RL( 1, slp, 'slp',
                0115      &           onearr, onearr, rA , drF, dummyRL, myThid )
                0116 
                0117        CALL MON_WRITESTATS_RL( 1, wsm, 'wsm',
                0118      &           onearr, onearr, rA , drF, dummyRL, myThid )
                0119 
                0120        CALL MON_WRITESTATS_RL( 1, rh, 'rh',
                0121      &           onearr, onearr, rA , drF, dummyRL, myThid )
                0122 
                0123        CALL MON_WRITESTATS_RL( 1, oz, 'oz',
                0124      &           onearr, onearr, rA , drF, dummyRL, myThid )
                0125 
                0126        CALL MON_WRITESTATS_RL( 1, wv, 'wv',
                0127      &           onearr, onearr, rA , drF, dummyRL, myThid )
                0128 
                0129        DO l = 1, nlt
                0130          WRITE(suff,'(A7,I3.3)') 'taua',l
                0131          CALL MON_WRITESTATS_RL(
                0132      &            1, taua(1-OLx,1-OLy,1,1,l), suff,
                0133      &            onearr, onearr, rA ,drF, dummyRL, myThid )
                0134        ENDDO
                0135 C
                0136        DO l = 1, nlt
                0137          WRITE(suff,'(A7,I3.3)') 'asymp',l
                0138          CALL MON_WRITESTATS_RL(
                0139      &            1, asymp(1-OLx,1-OLy,1,1,l), suff,
                0140      &            onearr, onearr, rA ,drF, dummyRL, myThid )
                0141        ENDDO
                0142 C
                0143        DO l = 1, nlt
                0144          WRITE(suff,'(A7,I3.3)') 'ssalb',l
                0145          CALL MON_WRITESTATS_RL(
                0146      &            1, ssalb(1-OLx,1-OLy,1,1,l), suff,
                0147      &            onearr, onearr, rA ,drF, dummyRL, myThid )
                0148        ENDDO
                0149 C
                0150 C      Print the basic statistics of oasim variables
                0151        DO l = 1, nlt
                0152          WRITE(suff,'(A7,I2.2)') 'Edabove',l
                0153          CALL MON_WRITESTATS_RL(
                0154      &            1, OASIM_Edabove(1-OLx,1-OLy,1,1,l), suff,
                0155      &            onearr, onearr, rA ,drF, dummyRL, myThid )
                0156        ENDDO
                0157 C
                0158        DO l = 1, nlt
                0159          WRITE(suff,'(A7,I2.2)') 'Esabove',l
                0160          CALL MON_WRITESTATS_RL(
                0161      &            1, OASIM_Esabove(1-OLx,1-OLy,1,1,l), suff,
                0162      &            onearr, onearr, rA ,drF, dummyRL, myThid )
                0163        ENDDO
                0164 C
                0165        DO l = 1, nlt
                0166          WRITE(suff,'(A7,I2.2)') 'Edbelow',l
                0167          CALL MON_WRITESTATS_RL(
                0168      &            1, OASIM_Edbelow(1-OLx,1-OLy,1,1,l), suff,
                0169      &            maskInC, maskInC, rA ,drF, dummyRL, myThid )
                0170        ENDDO
                0171 C
                0172        DO l = 1, nlt
                0173          WRITE(suff,'(A7,I2.2)') 'Esbelow',l
                0174          CALL MON_WRITESTATS_RL(
                0175      &            1, OASIM_Esbelow(1-OLx,1-OLy,1,1,l), suff,
                0176      &            maskInC, maskInC, rA ,drF, dummyRL, myThid )
                0177        ENDDO
                0178 C
                0179        CALL MON_WRITESTATS_RL(
                0180      &            1, OASIM_solz(1-OLx,1-OLy,1,1), 'solz',
                0181      &            onearr, onearr, rA ,drF, dummyRL, myThid )
                0182 C
                0183        CALL MON_WRITESTATS_RL(
                0184      &            1, OASIM_rmud(1-OLx,1-OLy,1,1), 'rmud',
                0185      &            maskInC, maskInC, rA ,drF, dummyRL, myThid )
                0186 
                0187 C--   OASIM field monitor finish
                0188        IF ( MASTER_CPU_IO(myThid) ) THEN
                0189 C-    only the master thread is allowed to switch On/Off mon_write_stdout
                0190 C     & mon_write_mnc (since it is the only thread that uses those flags):
                0191 
                0192         IF ( mon_write_stdout ) THEN
                0193          WRITE(msgBuf,'(2A)') '// ==========================',
                0194      &        '============================='
                0195          CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
                0196          WRITE(msgBuf,'(A)')
                0197      &        '// End MONITOR OASIM field statistics'
                0198          CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
                0199          WRITE(msgBuf,'(2A)') '// ==========================',
                0200      &        '============================='
                0201          CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
                0202         ENDIF
                0203 
                0204         mon_write_stdout = .FALSE.
                0205         mon_write_mnc    = .FALSE.
                0206 
                0207 C-    endif master cpu io
                0208        ENDIF
                0209 
                0210 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0211 
                0212 C---  endif different multiple
                0213       ENDIF
                0214 
                0215 #endif /* ALLOW_MONITOR */
                0216 #endif /* ALLOW_OASIM */
                0217 
                0218       RETURN
                0219       END