Back to home page

MITgcm

 
 

    


File indexing completed on 2021-11-06 05:16:42 UTC

view on githubraw file Latest commit 016b84c4 on 2021-11-02 20:24:44 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       |-- TIMEAVE_STATV_WRITE
                0032 C       |
                0033 C       |-- FIZHI_WRITE_STATE
                0034 C       |
                0035 C       |-- AIM_WRITE_TAVE
                0036 C       |
                0037 C       |-- LAND_OUTPUT
                0038 C       |
                0039 C       |-- OBCS_OUTPUT
                0040 C       |
                0041 C       |-- GMREDI_OUTPUT
                0042 C       |
                0043 C       |-- KPP_OUTPUT
                0044 C       |
                0045 C       |-- PP81_OUTPUT
                0046 C       |
                0047 C       |-- KL10_OUTPUT
                0048 C       |
                0049 C       |-- MY82_OUTPUT
                0050 C       |
                0051 C       |-- OPPS_OUTPUT
                0052 C       |
                0053 C       |-- GGL90_OUTPUT
                0054 C       |
                0055 C       |-- SBO_CALC
                0056 C       |-- SBO_OUTPUT
                0057 C       |
906a61c194 Ou W*0058 C       |-- STERGLOH_OUTPUT
                0059 C       |
8f92343d9b Jean*0060 C       |-- SEAICE_OUTPUT
                0061 C       |
                0062 C       |-- SHELFICE_OUTPUT
                0063 C       |
                0064 C       |-- BULKF_OUTPUT
                0065 C       |
                0066 C       |-- THSICE_OUTPUT
                0067 C       |
                0068 C       |-- PTRACERS_OUTPUT
                0069 C       |
                0070 C       |-- MATRIX_OUTPUT
                0071 C       |
                0072 C       |-- GCHEM_OUTPUT
                0073 C       |
                0074 C       |-- CPL_OUTPUT
                0075 C       |
                0076 C       |-- LAYERS_CALC
                0077 C       |-- LAYERS_OUTPUT
                0078 C       |
                0079 C       |-- DIAGNOSTICS_WRITE
                0080 
9366854e02 Chri*0081 C     !USES:
                0082       IMPLICIT NONE
924557e60a Chri*0083 #include "SIZE.h"
                0084 #include "EEPARAMS.h"
                0085 #include "PARAMS.h"
                0086 #include "DYNVARS.h"
66dc79a095 Chri*0087 
9366854e02 Chri*0088 C     !INPUT/OUTPUT PARAMETERS:
94884059ae Jean*0089 C     modelEnd :: true if call at end of model run.
                0090 C     myTime   :: Current time of simulation ( s )
                0091 C     myIter   :: Iteration number
                0092 C     myThid   :: Thread number for this instance of the routine.
                0093       LOGICAL modelEnd
51e2f64a3e Jean*0094       _RL     myTime
924557e60a Chri*0095       INTEGER myThid
                0096       INTEGER myIter
8f92343d9b Jean*0097 
                0098 C     !FUNCTIONS:
                0099       LOGICAL  DIFFERENT_MULTIPLE
                0100       EXTERNAL DIFFERENT_MULTIPLE
9366854e02 Chri*0101 CEOP
924557e60a Chri*0102 
3138cfd14a Jean*0103 C     Generaly only thread 1 does IO here. It can not start until
a30418b6b9 Ed H*0104 C     all threads fields are ready.
522c728681 Jean*0105       IF ( plotLevel.GE.debLevD ) THEN
0fa2023ba5 Jean*0106         IF ( DIFFERENT_MULTIPLE(dumpFreq,myTime,deltaTClock)
b0b2dc332d Jean*0107      &     ) THEN
a30418b6b9 Ed H*0108 
                0109           _BARRIER
                0110 
                0111 C         Write "text-plots" of certain fields
3138cfd14a Jean*0112           CALL PLOT_FIELD_XYZRL( uVel , 'Current uVel  ',
a30418b6b9 Ed H*0113      &         Nr, myIter, myThid )
3138cfd14a Jean*0114           CALL PLOT_FIELD_XYZRL( vVel , 'Current vVel  ',
a30418b6b9 Ed H*0115      &         Nr, myIter, myThid )
3138cfd14a Jean*0116           CALL PLOT_FIELD_XYZRL( theta, 'Current theta ',
a30418b6b9 Ed H*0117      &         Nr, myIter, myThid )
3138cfd14a Jean*0118           CALL PLOT_FIELD_XYRL( etaN  , 'Current etaN  ',
a30418b6b9 Ed H*0119      &         myIter, myThid )
a27159adf7 Jean*0120 
a30418b6b9 Ed H*0121         ENDIF
66dc79a095 Chri*0122       ENDIF
                0123 
a30418b6b9 Ed H*0124 C     Write model state to binary file
a27159adf7 Jean*0125       IF ( .NOT.useOffLine ) THEN
                0126         CALL WRITE_STATE( myTime, myIter, myThid )
                0127       ENDIF
66dc79a095 Chri*0128 
71c6a09c16 Jean*0129 #ifdef ALLOW_TIMEAVE
a30418b6b9 Ed H*0130 C     Do time averages
fdcd0913cf Jean*0131       IF (taveFreq.GT.0. .AND. myIter.NE.nIter0 ) THEN
a30418b6b9 Ed H*0132         CALL TIMEAVE_STATV_WRITE( myTime, myIter, myThid )
7241724ef1 Jean*0133       ENDIF
                0134 #endif
fdcd0913cf Jean*0135 
1c514993d7 Andr*0136 #ifdef ALLOW_FIZHI
3138cfd14a Jean*0137       IF ( useFIZHI )
b0b2dc332d Jean*0138      &     CALL FIZHI_WRITE_STATE( myTime, myIter, myThid )
1c514993d7 Andr*0139 #endif
                0140 
aea29c8517 Alis*0141 #ifdef ALLOW_AIM
a30418b6b9 Ed H*0142 C     Do AIM time averages
fff6867ec8 Jean*0143       IF ( useAIM )
a30418b6b9 Ed H*0144      &     CALL AIM_WRITE_TAVE( myTime, myIter, myThid )
a27159adf7 Jean*0145 #endif
c7a7aa41bf Jean*0146 #ifdef ALLOW_LAND
51e2f64a3e Jean*0147 C     Do LAND output
fff6867ec8 Jean*0148       IF ( useLAND )
51e2f64a3e Jean*0149      &     CALL LAND_OUTPUT( myTime, myIter, myThid )
a27159adf7 Jean*0150 #endif
3683861f35 Alis*0151 
5d7fa54ba5 Patr*0152 #ifdef ALLOW_OBCS
48141007cd Jean*0153       IF (useOBCS )
5616f3581e Jean*0154      &     CALL OBCS_OUTPUT( myTime, myIter, myThid )
5d7fa54ba5 Patr*0155 #endif
                0156 
3683861f35 Alis*0157 #ifdef ALLOW_GMREDI
e9164883fe Jean*0158 C     Do GMRedi output.
a27159adf7 Jean*0159       IF (useGMRedi .AND. myIter.NE.nIter0 .AND. .NOT.useOffLine )
e9164883fe Jean*0160      &     CALL GMREDI_OUTPUT( myTime, myIter, myThid )
3683861f35 Alis*0161 #endif
                0162 
                0163 #ifdef ALLOW_KPP
a30418b6b9 Ed H*0164 C     Do KPP diagnostics.
02f4da180f Oliv*0165       IF ( useKPP )
5616f3581e Jean*0166      &     CALL KPP_OUTPUT( myTime, myIter, myThid )
3683861f35 Alis*0167 #endif
                0168 
e864122ae8 Mart*0169 #ifdef ALLOW_PP81
a30418b6b9 Ed H*0170 C     Do PP81 diagnostics.
3138cfd14a Jean*0171       IF ( usePP81 )
5616f3581e Jean*0172      &     CALL PP81_OUTPUT( myTime, myIter, myThid )
e864122ae8 Mart*0173 #endif
                0174 
d8d1486ca1 Jean*0175 #ifdef ALLOW_KL10
                0176 C     Do KL10 diagnostics.
                0177       IF ( useKL10 )
                0178      &     CALL KL10_OUTPUT( myTime, myIter, myThid )
                0179 #endif
                0180 
e864122ae8 Mart*0181 #ifdef ALLOW_MY82
a30418b6b9 Ed H*0182 C     Do MY82 diagnostics.
3138cfd14a Jean*0183       IF ( useMY82 )
5616f3581e Jean*0184      &     CALL MY82_OUTPUT( myTime, myIter, myThid )
e864122ae8 Mart*0185 #endif
                0186 
016b84c482 Mart*0187 c#ifdef ALLOW_OPPS
69a7b27187 Mart*0188 C--   Do OPPS diagnostics.
016b84c482 Mart*0189 c     IF ( useOPPS )
                0190 c    & CALL OPPS_OUTPUT( myTime, myIter, myThid )
                0191 c#endif
69a7b27187 Mart*0192 
                0193 #ifdef ALLOW_GGL90
                0194 C--   Do GGL90 diagnostics.
3138cfd14a Jean*0195       IF ( useGGL90 )
5616f3581e Jean*0196      & CALL GGL90_OUTPUT( myTime, myIter, myThid )
69a7b27187 Mart*0197 #endif
                0198 
6060ec2938 Dimi*0199 #ifdef ALLOW_SBO
a30418b6b9 Ed H*0200 C     Do SBO diagnostics.
3138cfd14a Jean*0201       IF ( useSBO ) THEN
                0202         CALL SBO_CALC( myTime, myIter, myThid )
5616f3581e Jean*0203         CALL SBO_OUTPUT( myTime, myIter, myThid )
6060ec2938 Dimi*0204       ENDIF
                0205 #endif
                0206 
906a61c194 Ou W*0207 #ifdef ALLOW_ECCO
                0208       IF ( useECCO ) THEN
                0209         CALL STERGLOH_OUTPUT( myTime, myIter, myThid )
                0210       ENDIF
                0211 #endif
                0212 
36f6faaf99 Dimi*0213 #ifdef  ALLOW_SEAICE
a30418b6b9 Ed H*0214       IF ( useSEAICE ) THEN
5616f3581e Jean*0215         CALL SEAICE_OUTPUT( myTime, myIter, myThid )
a30418b6b9 Ed H*0216       ENDIF
36f6faaf99 Dimi*0217 #endif  /* ALLOW_SEAICE */
                0218 
a6cbc7a360 Mart*0219 #ifdef  ALLOW_SHELFICE
                0220       IF ( useShelfIce ) THEN
5616f3581e Jean*0221         CALL SHELFICE_OUTPUT( myTime, myIter, myThid )
a6cbc7a360 Mart*0222       ENDIF
                0223 #endif  /* ALLOW_SHELFICE */
                0224 
7753507405 Curt*0225 #ifdef ALLOW_BULK_FORCE
29a25474f6 Jean*0226 C     Do bulkf output.
                0227       IF ( useBulkForce .AND. myIter.NE.nIter0 )
                0228      &     CALL BULKF_OUTPUT( myTime, myIter, myThid )
6424ee9bc0 Curt*0229 #endif
                0230 
10e4bbdd7f Jean*0231 #ifdef ALLOW_THSICE
e9164883fe Jean*0232 C     Do seaice output.
10e4bbdd7f Jean*0233       IF (useThSIce)
e9164883fe Jean*0234      &     CALL THSICE_OUTPUT( myTime, myIter, myThid )
6424ee9bc0 Curt*0235 #endif
                0236 
c3e7099071 Mart*0237 #ifdef ALLOW_PTRACERS
                0238 C--   Do ptracer output.
                0239       IF ( usePTRACERS )
                0240      & CALL PTRACERS_OUTPUT( myTime, myIter, myThid )
                0241 #endif
                0242 
024b3c54dd Sama*0243 #ifdef ALLOW_MATRIX
                0244 C--   Do matrix output
3138cfd14a Jean*0245       IF (useMATRIX)
024b3c54dd Sama*0246      & CALL MATRIX_OUTPUT( myTime, myIter, myThid )
                0247 #endif
                0248 
cf2549e769 Patr*0249 #ifdef ALLOW_GCHEM
c3e7099071 Mart*0250 C--   Do GCHEM diagnostics.
0a90236bb2 Mart*0251       IF (useGCHEM)
5616f3581e Jean*0252      & CALL GCHEM_OUTPUT( myTime, myIter, myThid )
e39d13c4c9 Step*0253 #endif
                0254 
a27159adf7 Jean*0255 #ifdef ALLOW_OFFLINE
                0256 C--   Do Off-Line variables output
                0257 c     IF (useOffLine)
                0258 c    & CALL OFFLINE_STATE( myTime, myIter, myThid )
                0259 #endif
                0260 
c1b6df074d Jean*0261 #ifdef COMPONENT_MODULE
                0262       IF ( useCoupler )
5616f3581e Jean*0263      &     CALL CPL_OUTPUT( myTime, myIter, myThid )
c1b6df074d Jean*0264 #endif
                0265 
dfc9bc933c Ryan*0266 C-- added by RPA
                0267 #ifdef ALLOW_LAYERS
                0268       IF ( useLayers ) THEN
                0269         CALL LAYERS_CALC( myTime, myIter, myThid )
                0270         CALL LAYERS_OUTPUT( myTime, myIter, myThid )
                0271       ENDIF
                0272 #endif /* ALLOW_LAYERS */
                0273 
04e78e1b9d Andr*0274 #ifdef ALLOW_DIAGNOSTICS
a27159adf7 Jean*0275       IF ( useDiagnostics )
94884059ae Jean*0276      &     CALL DIAGNOSTICS_WRITE( modelEnd, myTime, myIter, myThid )
04e78e1b9d Andr*0277 #endif
                0278 
924557e60a Chri*0279       RETURN
                0280       END