Back to home page

MITgcm

 
 

    


File indexing completed on 2025-11-07 06:08:11 UTC

view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
6d54cf9ca1 Ed H*0001 #include "PACKAGES_CONFIG.h"
1dbaea09ee Chri*0002 #include "CPP_OPTIONS.h"
924557e60a Chri*0003 
a30418b6b9 Ed H*0004 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
9366854e02 Chri*0005 CBOP
                0006 C     !ROUTINE: DO_THE_MODEL_IO
a30418b6b9 Ed H*0007 
9366854e02 Chri*0008 C     !INTERFACE:
a30418b6b9 Ed H*0009       SUBROUTINE DO_THE_MODEL_IO(
94884059ae Jean*0010      I                            modelEnd,
                0011      I                            myTime, myIter, myThid )
a30418b6b9 Ed H*0012 
                0013 C     !DESCRIPTION:
                0014 C     This is the controlling routine for IO in the model main
                0015 C     time--stepping loop.  Many systems do not have thread safe IO so it
                0016 C     is easier to lump everything together and do dumping of fields and
                0017 C     updating of forcing terms in a single place.  The approach to IO
                0018 C     used here is that writes are only performed by thread 1 and that a
                0019 C     process only writes out its data (it does not know about anyone
                0020 C     elses data!)  Reading on the other hand is assumed to be from a
                0021 C     file containing all the data for all the processes. Only the
                0022 C     portion of data of interest to this process is actually loaded. To
                0023 C     work well this assumes the existence of some reliable tool to join
                0024 C     datasets together at the end of a run -- see joinds.
924557e60a Chri*0025 
8f92343d9b Jean*0026 C     !CALLING SEQUENCE:
                0027 C     DO_THE_MODEL_IO
                0028 C       |
                0029 C       |-- WRITE_STATE
                0030 C       |
                0031 C       |-- FIZHI_WRITE_STATE
                0032 C       |
                0033 C       |-- LAND_OUTPUT
                0034 C       |
                0035 C       |-- OBCS_OUTPUT
                0036 C       |
                0037 C       |-- GMREDI_OUTPUT
                0038 C       |
                0039 C       |-- KPP_OUTPUT
                0040 C       |
                0041 C       |-- PP81_OUTPUT
                0042 C       |
                0043 C       |-- KL10_OUTPUT
                0044 C       |
                0045 C       |-- MY82_OUTPUT
                0046 C       |
                0047 C       |-- OPPS_OUTPUT
                0048 C       |
                0049 C       |-- GGL90_OUTPUT
                0050 C       |
                0051 C       |-- SBO_CALC
                0052 C       |-- SBO_OUTPUT
                0053 C       |
906a61c194 Ou W*0054 C       |-- STERGLOH_OUTPUT
                0055 C       |
8f92343d9b Jean*0056 C       |-- SEAICE_OUTPUT
                0057 C       |
                0058 C       |-- SHELFICE_OUTPUT
                0059 C       |
                0060 C       |-- THSICE_OUTPUT
                0061 C       |
                0062 C       |-- PTRACERS_OUTPUT
                0063 C       |
                0064 C       |-- MATRIX_OUTPUT
                0065 C       |
                0066 C       |-- GCHEM_OUTPUT
                0067 C       |
                0068 C       |-- LAYERS_CALC
                0069 C       |
                0070 C       |-- DIAGNOSTICS_WRITE
                0071 
9366854e02 Chri*0072 C     !USES:
                0073       IMPLICIT NONE
924557e60a Chri*0074 #include "SIZE.h"
                0075 #include "EEPARAMS.h"
                0076 #include "PARAMS.h"
                0077 #include "DYNVARS.h"
66dc79a095 Chri*0078 
9366854e02 Chri*0079 C     !INPUT/OUTPUT PARAMETERS:
94884059ae Jean*0080 C     modelEnd :: true if call at end of model run.
                0081 C     myTime   :: Current time of simulation ( s )
                0082 C     myIter   :: Iteration number
                0083 C     myThid   :: Thread number for this instance of the routine.
                0084       LOGICAL modelEnd
51e2f64a3e Jean*0085       _RL     myTime
924557e60a Chri*0086       INTEGER myThid
                0087       INTEGER myIter
8f92343d9b Jean*0088 
                0089 C     !FUNCTIONS:
                0090       LOGICAL  DIFFERENT_MULTIPLE
                0091       EXTERNAL DIFFERENT_MULTIPLE
9366854e02 Chri*0092 CEOP
924557e60a Chri*0093 
3138cfd14a Jean*0094 C     Generaly only thread 1 does IO here. It can not start until
a30418b6b9 Ed H*0095 C     all threads fields are ready.
522c728681 Jean*0096       IF ( plotLevel.GE.debLevD ) THEN
0fa2023ba5 Jean*0097         IF ( DIFFERENT_MULTIPLE(dumpFreq,myTime,deltaTClock)
b0b2dc332d Jean*0098      &     ) THEN
a30418b6b9 Ed H*0099 
                0100           _BARRIER
                0101 
                0102 C         Write "text-plots" of certain fields
3138cfd14a Jean*0103           CALL PLOT_FIELD_XYZRL( uVel , 'Current uVel  ',
a30418b6b9 Ed H*0104      &         Nr, myIter, myThid )
3138cfd14a Jean*0105           CALL PLOT_FIELD_XYZRL( vVel , 'Current vVel  ',
a30418b6b9 Ed H*0106      &         Nr, myIter, myThid )
3138cfd14a Jean*0107           CALL PLOT_FIELD_XYZRL( theta, 'Current theta ',
a30418b6b9 Ed H*0108      &         Nr, myIter, myThid )
3138cfd14a Jean*0109           CALL PLOT_FIELD_XYRL( etaN  , 'Current etaN  ',
a30418b6b9 Ed H*0110      &         myIter, myThid )
a27159adf7 Jean*0111 
a30418b6b9 Ed H*0112         ENDIF
66dc79a095 Chri*0113       ENDIF
                0114 
a30418b6b9 Ed H*0115 C     Write model state to binary file
a27159adf7 Jean*0116       IF ( .NOT.useOffLine ) THEN
                0117         CALL WRITE_STATE( myTime, myIter, myThid )
                0118       ENDIF
66dc79a095 Chri*0119 
1c514993d7 Andr*0120 #ifdef ALLOW_FIZHI
3138cfd14a Jean*0121       IF ( useFIZHI )
b0b2dc332d Jean*0122      &     CALL FIZHI_WRITE_STATE( myTime, myIter, myThid )
1c514993d7 Andr*0123 #endif
                0124 
c7a7aa41bf Jean*0125 #ifdef ALLOW_LAND
51e2f64a3e Jean*0126 C     Do LAND output
fff6867ec8 Jean*0127       IF ( useLAND )
51e2f64a3e Jean*0128      &     CALL LAND_OUTPUT( myTime, myIter, myThid )
a27159adf7 Jean*0129 #endif
3683861f35 Alis*0130 
5d7fa54ba5 Patr*0131 #ifdef ALLOW_OBCS
48141007cd Jean*0132       IF (useOBCS )
5616f3581e Jean*0133      &     CALL OBCS_OUTPUT( myTime, myIter, myThid )
5d7fa54ba5 Patr*0134 #endif
                0135 
3683861f35 Alis*0136 #ifdef ALLOW_GMREDI
e9164883fe Jean*0137 C     Do GMRedi output.
a27159adf7 Jean*0138       IF (useGMRedi .AND. myIter.NE.nIter0 .AND. .NOT.useOffLine )
e9164883fe Jean*0139      &     CALL GMREDI_OUTPUT( myTime, myIter, myThid )
3683861f35 Alis*0140 #endif
                0141 
                0142 #ifdef ALLOW_KPP
a30418b6b9 Ed H*0143 C     Do KPP diagnostics.
02f4da180f Oliv*0144       IF ( useKPP )
5616f3581e Jean*0145      &     CALL KPP_OUTPUT( myTime, myIter, myThid )
3683861f35 Alis*0146 #endif
                0147 
e864122ae8 Mart*0148 #ifdef ALLOW_PP81
a30418b6b9 Ed H*0149 C     Do PP81 diagnostics.
3138cfd14a Jean*0150       IF ( usePP81 )
5616f3581e Jean*0151      &     CALL PP81_OUTPUT( myTime, myIter, myThid )
e864122ae8 Mart*0152 #endif
                0153 
d8d1486ca1 Jean*0154 #ifdef ALLOW_KL10
                0155 C     Do KL10 diagnostics.
                0156       IF ( useKL10 )
                0157      &     CALL KL10_OUTPUT( myTime, myIter, myThid )
                0158 #endif
                0159 
e864122ae8 Mart*0160 #ifdef ALLOW_MY82
a30418b6b9 Ed H*0161 C     Do MY82 diagnostics.
3138cfd14a Jean*0162       IF ( useMY82 )
5616f3581e Jean*0163      &     CALL MY82_OUTPUT( myTime, myIter, myThid )
e864122ae8 Mart*0164 #endif
                0165 
016b84c482 Mart*0166 c#ifdef ALLOW_OPPS
69a7b27187 Mart*0167 C--   Do OPPS diagnostics.
016b84c482 Mart*0168 c     IF ( useOPPS )
                0169 c    & CALL OPPS_OUTPUT( myTime, myIter, myThid )
                0170 c#endif
69a7b27187 Mart*0171 
                0172 #ifdef ALLOW_GGL90
                0173 C--   Do GGL90 diagnostics.
3138cfd14a Jean*0174       IF ( useGGL90 )
5616f3581e Jean*0175      & CALL GGL90_OUTPUT( myTime, myIter, myThid )
69a7b27187 Mart*0176 #endif
                0177 
6060ec2938 Dimi*0178 #ifdef ALLOW_SBO
a30418b6b9 Ed H*0179 C     Do SBO diagnostics.
3138cfd14a Jean*0180       IF ( useSBO ) THEN
                0181         CALL SBO_CALC( myTime, myIter, myThid )
5616f3581e Jean*0182         CALL SBO_OUTPUT( myTime, myIter, myThid )
6060ec2938 Dimi*0183       ENDIF
                0184 #endif
                0185 
906a61c194 Ou W*0186 #ifdef ALLOW_ECCO
                0187       IF ( useECCO ) THEN
                0188         CALL STERGLOH_OUTPUT( myTime, myIter, myThid )
                0189       ENDIF
                0190 #endif
                0191 
36f6faaf99 Dimi*0192 #ifdef  ALLOW_SEAICE
a30418b6b9 Ed H*0193       IF ( useSEAICE ) THEN
5616f3581e Jean*0194         CALL SEAICE_OUTPUT( myTime, myIter, myThid )
a30418b6b9 Ed H*0195       ENDIF
36f6faaf99 Dimi*0196 #endif  /* ALLOW_SEAICE */
                0197 
a6cbc7a360 Mart*0198 #ifdef  ALLOW_SHELFICE
                0199       IF ( useShelfIce ) THEN
5616f3581e Jean*0200         CALL SHELFICE_OUTPUT( myTime, myIter, myThid )
a6cbc7a360 Mart*0201       ENDIF
                0202 #endif  /* ALLOW_SHELFICE */
                0203 
10e4bbdd7f Jean*0204 #ifdef ALLOW_THSICE
e9164883fe Jean*0205 C     Do seaice output.
10e4bbdd7f Jean*0206       IF (useThSIce)
e9164883fe Jean*0207      &     CALL THSICE_OUTPUT( myTime, myIter, myThid )
6424ee9bc0 Curt*0208 #endif
                0209 
c3e7099071 Mart*0210 #ifdef ALLOW_PTRACERS
                0211 C--   Do ptracer output.
                0212       IF ( usePTRACERS )
                0213      & CALL PTRACERS_OUTPUT( myTime, myIter, myThid )
                0214 #endif
                0215 
024b3c54dd Sama*0216 #ifdef ALLOW_MATRIX
                0217 C--   Do matrix output
3138cfd14a Jean*0218       IF (useMATRIX)
024b3c54dd Sama*0219      & CALL MATRIX_OUTPUT( myTime, myIter, myThid )
                0220 #endif
                0221 
cf2549e769 Patr*0222 #ifdef ALLOW_GCHEM
c3e7099071 Mart*0223 C--   Do GCHEM diagnostics.
0a90236bb2 Mart*0224       IF (useGCHEM)
5616f3581e Jean*0225      & CALL GCHEM_OUTPUT( myTime, myIter, myThid )
e39d13c4c9 Step*0226 #endif
                0227 
a27159adf7 Jean*0228 #ifdef ALLOW_OFFLINE
                0229 C--   Do Off-Line variables output
                0230 c     IF (useOffLine)
                0231 c    & CALL OFFLINE_STATE( myTime, myIter, myThid )
                0232 #endif
                0233 
dfc9bc933c Ryan*0234 #ifdef ALLOW_LAYERS
                0235       IF ( useLayers ) THEN
                0236         CALL LAYERS_CALC( myTime, myIter, myThid )
                0237       ENDIF
                0238 #endif /* ALLOW_LAYERS */
                0239 
04e78e1b9d Andr*0240 #ifdef ALLOW_DIAGNOSTICS
a27159adf7 Jean*0241       IF ( useDiagnostics )
94884059ae Jean*0242      &     CALL DIAGNOSTICS_WRITE( modelEnd, myTime, myIter, myThid )
04e78e1b9d Andr*0243 #endif
                0244 
924557e60a Chri*0245       RETURN
                0246       END