/[MITgcm]/MITgcm/model/src/do_the_model_io.F
ViewVC logotype

Diff of /MITgcm/model/src/do_the_model_io.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.12 by adcroft, Wed Dec 9 16:11:51 1998 UTC revision 1.44 by mlosch, Thu Sep 16 09:35:11 2004 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2    C $Name$
3    
4    #include "PACKAGES_CONFIG.h"
5  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
6    
7        SUBROUTINE DO_THE_MODEL_IO(myCurrentTime, myIter, myThid)  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
8  C     /==========================================================\  CBOP
9  C     | SUBROUTINE DO_THE_MODEL_IO                               |  C     !ROUTINE: DO_THE_MODEL_IO
10  C     | o Controlling routine for IO in model main time-stepping |  
11  C     |   loop.                                                  |  C     !INTERFACE:
12  C     |==========================================================|        SUBROUTINE DO_THE_MODEL_IO(
13  C     | Many systems do not have thread safe IO so it is easier  |       I     myTime,
14  C     | to lump everything together and do dumping of fields     |       I     myIter,
15  C     | and updating of forcing terms in a single place.         |       I     myThid )
16  C     | The approach to IO used here is that writes are only     |  
17  C     | performed by thread 1 and that a process only writes out |  C     !DESCRIPTION:
18  C     | its data ( it does not know about anyone elses data!)    |  C     This is the controlling routine for IO in the model main
19  C     | Reading on the other hand is assumed to be from a file   |  C     time--stepping loop.  Many systems do not have thread safe IO so it
20  C     | containing all the data for all the processes. Only the  |  C     is easier to lump everything together and do dumping of fields and
21  C     | portion of data of interest to this process is actually  |  C     updating of forcing terms in a single place.  The approach to IO
22  C     | loaded. To work well this assumes the existence of some  |  C     used here is that writes are only performed by thread 1 and that a
23  C     | reliable tool to join datasets together at the end of a  |  C     process only writes out its data (it does not know about anyone
24  C     | run - see joinds.p                                       |  C     elses data!)  Reading on the other hand is assumed to be from a
25  C     \==========================================================/  C     file containing all the data for all the processes. Only the
26        IMPLICIT NONE  C     portion of data of interest to this process is actually loaded. To
27    C     work well this assumes the existence of some reliable tool to join
28    C     datasets together at the end of a run -- see joinds.
29    
30  C     == Global variables ===  C     !USES:
31          IMPLICIT NONE
32  #include "SIZE.h"  #include "SIZE.h"
33  #include "EEPARAMS.h"  #include "EEPARAMS.h"
34  #include "PARAMS.h"  #include "PARAMS.h"
35  #include "DYNVARS.h"  #include "DYNVARS.h"
 #include "CG2D.h"  
   
36        LOGICAL  DIFFERENT_MULTIPLE        LOGICAL  DIFFERENT_MULTIPLE
37        EXTERNAL DIFFERENT_MULTIPLE        EXTERNAL DIFFERENT_MULTIPLE
38    
39  C     == Routine arguments ==  C     !INPUT/OUTPUT PARAMETERS:
40  C     myThid - Thread number for this instance of the routine.  C     myThid - Thread number for this instance of the routine.
41  C     myIter - Iteration number  C     myIter - Iteration number
42  C     myCurrentTime - Current time of simulation ( s )  C     myTime - Current time of simulation ( s )
43        INTEGER myThid        INTEGER myThid
44        INTEGER myIter        INTEGER myIter
45        REAL    myCurrentTime        _RL     myTime
46    CEOP
47    
48    
49    C     Generaly only thread 1 does IO here. It can not start until
50    C     all threads fields are ready.
51          IF (debugMode) THEN
52            IF ( DIFFERENT_MULTIPLE(dumpFreq,myTime, myTime-deltaTClock)
53         &       ) THEN
54    
55              _BARRIER
56    
57    C         Write "text-plots" of certain fields
58              CALL PLOT_FIELD_XYZRL( uVel , 'Current uVel  ' ,
59         &         Nr, myIter, myThid )
60              CALL PLOT_FIELD_XYZRL( vVel , 'Current vVel  ' ,
61         &         Nr, myIter, myThid )
62              CALL PLOT_FIELD_XYZRL( theta, 'Current theta ' ,
63         &         Nr, myIter, myThid )
64              CALL PLOT_FIELD_XYRL( etaN  , 'Current etaN  ' ,
65         &         myIter, myThid )
66              
67            ENDIF
68          ENDIF
69    
70    C     Write model state to binary file
71          CALL WRITE_STATE( myTime, myIter, myThid )
72    
73  C     == Local variables ==  #ifdef ALLOW_TIMEAVE
74  C     suff - Hold suffix part of a filename  C     Do time averages
75        CHARACTER*(MAX_LEN_FNAM) suff        IF (taveFreq.GT.0. .AND. myIter.NE.nIter0 ) THEN
76                  CALL TIMEAVE_STATV_WRITE( myTime, myIter, myThid )
77    #ifdef ALLOW_PTRACERS
78  C--   Generaly only thread 1 does IO here. It can not start until          IF ( usePTRACERS )
79  C--   all threads fields are ready.       &       CALL PTRACERS_STATV_WRITE( myTime, myIter, myThid )
80        IF (  #endif
81       &  DIFFERENT_MULTIPLE(dumpFreq,myCurrentTime,        ENDIF
82       &                     myCurrentTime-deltaTClock)  #endif
83       & ) THEN  
84    #ifdef ALLOW_FIZHI
85         _BARRIER        if(useFIZHI) call fizhi_write_state( myTime, myIter, myThid )
86    #endif
87  C--    Write "text-plots" of certain fields  
88         CALL PLOT_FIELD_XYZRL( uVel , 'Current uVel  ' ,  #ifdef ALLOW_AIM
89       &                        Nr, myIter, myThid )  C     Do AIM time averages
90         CALL PLOT_FIELD_XYZRL( vVel , 'Current vVel  ' ,        IF ( useAIM )
91       &                        Nr, myIter, myThid )       &     CALL AIM_WRITE_TAVE( myTime, myIter, myThid )
92         CALL PLOT_FIELD_XYZRL( theta, 'Current theta ' ,  #endif                                                            
93       &                        Nr, myIter, myThid )  #ifdef ALLOW_LAND
94         CALL PLOT_FIELD_XYRL( cg2d_x, 'Current cg2d_x ' ,  C     Do LAND time averages
95       &                        myIter, myThid )        IF ( useLAND )
96         &     CALL LAND_WRITE_DIAGS( myTime, myIter, myThid )
97    #endif                                                            
98    
99    #ifdef ALLOW_OBCS
100          IF (useOBCS .AND. myIter.NE.nIter0 )
101         &     CALL OBCS_DIAGS( myTime, myIter, myThid )
102    #endif
103    
104    #ifdef ALLOW_GMREDI
105    C     Do KPP diagnostics.
106          IF (useGMRedi .AND. myIter.NE.nIter0 )
107         &     CALL GMREDI_DIAGS( myTime, myIter, myThid )
108    #endif
109    
110    #ifdef ALLOW_KPP
111    C     Do KPP diagnostics.
112          IF (useKPP .AND. myIter.NE.nIter0 )
113         &     CALL KPP_DO_DIAGS( myTime, myIter, myThid )
114    #endif
115    
116    #ifdef ALLOW_PP81
117    C     Do PP81 diagnostics.
118          IF (usePP81 .AND. myIter.NE.nIter0 )
119         &     CALL PP81_DO_DIAGS( myTime, myIter, myThid )
120    #endif
121    
122    #ifdef ALLOW_MY82
123    C     Do MY82 diagnostics.
124          IF (useMY82 .AND. myIter.NE.nIter0 )
125         &     CALL MY82_DO_DIAGS( myTime, myIter, myThid )
126    #endif
127    
128    #ifdef ALLOW_OPPS
129    C--   Do OPPS diagnostics.
130          IF (useOPPS .AND. myIter.NE.nIter0 )
131         & CALL OPPS_DO_DIAGS( myTime, myIter, myThid )
132    #endif
133    
134    #ifdef ALLOW_GGL90
135    C--   Do GGL90 diagnostics.
136          IF (useGGL90 .AND. myIter.NE.nIter0 )
137         & CALL GGL90_DO_DIAGS( myTime, myIter, myThid )
138    #endif
139    
140    #ifdef ALLOW_SBO
141    C     Do SBO diagnostics.
142          IF (useSBO .AND. myIter.NE.nIter0 ) THEN
143            CALL SBO_CALC ( myTime, myIter, myThid )
144            CALL SBO_DIAGS( myTime, myIter, myThid )
145          ENDIF
146    #endif
147    
148    #ifdef  ALLOW_SEAICE
149          IF ( useSEAICE ) THEN
150            CALL SEAICE_DO_DIAGS( myTime, myIter, myThid )
151        ENDIF        ENDIF
152    #endif  /* ALLOW_SEAICE */
153    
154  C--   Write model state to binary file  #ifdef ALLOW_BULK_FORCE
155        CALL WRITE_STATE( .FALSE., myCurrentTime, myIter, myThid )  C     Do bulkf diagnostics.
156          IF (useBulkForce .AND. myIter.NE.nIter0 )
157         &     CALL BULKF_DIAGS( myTime, myIter, myThid )
158    #endif
159    
160    #ifdef ALLOW_THSICE
161    C     Do seaice diagnostics.
162          IF (useThSIce)
163         &     CALL THSICE_DIAGS( myTime, myIter, myThid )
164    #endif
165    
166    cswdptr ---  add ---
167    #ifdef ALLOW_GCHEM
168    ceh3 ???  why is one package depending upon another here?
169    C--   Do ptracer diagnostics.
170          IF (usePTRACERS)
171         & CALL GCHEM_DIAGS( myTime, myIter, myThid )
172    #endif
173    cswdptr -- end add ---
174    
175    #ifdef COMPONENT_MODULE
176          IF ( useCoupler )
177         &     CALL CPL_WRITE_DIAGS( myTime, myIter, myThid )
178    #endif
179    
180    #ifdef ALLOW_DIAGNOSTICS
181          IF ( usediagnostics ) call diagnostics_write (myThid, myIter)
182    #endif
183    
 C  
184        RETURN        RETURN
185        END        END
   

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.44

  ViewVC Help
Powered by ViewVC 1.1.22