/[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.5 by cnh, Wed May 27 21:01:47 1998 UTC revision 1.31 by heimbach, Fri Jun 27 01:51:10 2003 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2    C $Name$
3    
4  #include "CPP_EEOPTIONS.h"  #include "CPP_OPTIONS.h"
5    
6    CBOP
7    C     !ROUTINE: DO_THE_MODEL_IO
8    C     !INTERFACE:
9        SUBROUTINE DO_THE_MODEL_IO(myCurrentTime, myIter, myThid)        SUBROUTINE DO_THE_MODEL_IO(myCurrentTime, myIter, myThid)
10  C     /==========================================================\  C     !DESCRIPTION: \bv
11  C     | SUBROUTINE DO_THE_MODEL_IO                               |  C     *==========================================================*
12  C     | o Controlling routine for IO in model main time-stepping |  C     | SUBROUTINE DO_THE_MODEL_IO                                
13  C     |   loop.                                                  |  C     | o Controlling routine for IO in model main time-stepping  
14  C     |==========================================================|  C     |   loop.                                                  
15  C     | Many systems do not have thread safe IO so it is easier  |  C     *==========================================================*
16  C     | to lump everything together and do dumping of fields     |  C     | Many systems do not have thread safe IO so it is easier  
17  C     | and updating of forcing terms in a single place.         |  C     | to lump everything together and do dumping of fields      
18  C     | The approach to IO used here is that writes are only     |  C     | and updating of forcing terms in a single place.          
19  C     | performed by thread 1 and that a process only writes out |  C     | The approach to IO used here is that writes are only      
20  C     | its data ( since it doen't know about anyone elses data!)|  C     | performed by thread 1 and that a process only writes out  
21  C     | Reading on the other hand is assumed to be from a file   |  C     | its data ( it does not know about anyone elses data!)    
22  C     | containing all the data for all the processes. Only the  |  C     | Reading on the other hand is assumed to be from a file    
23  C     | portion of data of interest to this process is actually  |  C     | containing all the data for all the processes. Only the  
24  C     | loaded. To work well this assumes the existence of some  |  C     | portion of data of interest to this process is actually  
25  C     | reliable tool to join datasets together at the end of a  |  C     | loaded. To work well this assumes the existence of some  
26  C     | run.                                                     |  C     | reliable tool to join datasets together at the end of a  
27  C     | Notes                                                    |  C     | run - see joinds.p                                        
28  C     | =====                                                    |  C     *==========================================================*
29  C     | We allow thread 2-nThreads to continue whilst thread 1   |  C     \ev
 C     | does IO. The assumption is that the other threads won't  |  
 C     | do anything to update their interior regions before      |  
 C     | thread 1 has finished writing them out.                  |  
 C     \==========================================================/  
30    
31    C     !USES:
32          IMPLICIT NONE
33  C     == Global variables ===  C     == Global variables ===
34  #include "SIZE.h"  #include "SIZE.h"
35  #include "EEPARAMS.h"  #include "EEPARAMS.h"
36  #include "PARAMS.h"  #include "PARAMS.h"
37  #include "DYNVARS.h"  #include "DYNVARS.h"
38  #include "CG2D.h"  cswdblk --- add ---
39    #ifdef ALLOW_BULK_FORCE
40    #include "BULKF.h"
41    #include "FFIELDS.h"
42    #endif
43    cswdblk -- end add ---
44    cswdice -- add ---
45    #ifdef ALLOW_THERM_SEAICE
46    #include "ICE.h"
47    #include "ICE_DIAGS.h"
48    #endif
49    cswdice -- end add ---
50    
51    
52    
53        LOGICAL  DIFFERENT_MULTIPLE        LOGICAL  DIFFERENT_MULTIPLE
54        EXTERNAL DIFFERENT_MULTIPLE        EXTERNAL DIFFERENT_MULTIPLE
55    
56    C     !INPUT/OUTPUT PARAMETERS:
57  C     == Routine arguments ==  C     == Routine arguments ==
58  C     myThid - Thread number for this instance of the routine.  C     myThid - Thread number for this instance of the routine.
59  C     myIter - Iteration number  C     myIter - Iteration number
60  C     myCurrentTime - Current time of simulation ( s )  C     myCurrentTime - Current time of simulation ( s )
61        INTEGER myThid        INTEGER myThid
62        INTEGER myIter        INTEGER myIter
63        REAL    myCurrentTime        _RL    myCurrentTime
64    
65    CEOP
66    
67    C--   Generaly only thread 1 does IO here. It can not start until
68    C--   all threads fields are ready.
69          IF (
70         &  DIFFERENT_MULTIPLE(dumpFreq,myCurrentTime,
71         &                     myCurrentTime-deltaTClock)
72         & ) THEN
73    
 C     == Local variables ==  
 C     suff - Hold suffix part of a filename  
       CHARACTER*(MAX_LEN_FNAM) suff  
         
   
 C--   Generaly only thread 1 does IO here. It can't start until everyone's  
 C--   fields are ready.  
       IF ( MOD(myIter,1000) .EQ. 0 ) THEN      
74         _BARRIER         _BARRIER
75    
76           IF (debugMode) THEN
77  C--    Write "text-plots" of certain fields  C--    Write "text-plots" of certain fields
78         CALL PLOT_FIELD_XYZR8( uVel , 'uVel  ' , Nz, myIter, myThid )         CALL PLOT_FIELD_XYZRL( uVel , 'Current uVel  ' ,
79         CALL PLOT_FIELD_XYZR8( vVel , 'vVel  ' , Nz, myIter, myThid )       &                        Nr, myIter, myThid )
80         CALL PLOT_FIELD_XYZR8( theta, 'Theta ' , Nz, myIter, myThid )         CALL PLOT_FIELD_XYZRL( vVel , 'Current vVel  ' ,
81         CALL PLOT_FIELD_XYR8( cg2d_x, 'cg2d_x ' , myIter, myThid )       &                        Nr, myIter, myThid )
82           CALL PLOT_FIELD_XYZRL( theta, 'Current theta ' ,
83         &                        Nr, myIter, myThid )
84           CALL PLOT_FIELD_XYRL( etaN  , 'Current etaN  ' ,
85         &                        myIter, myThid )
86           ENDIF
87    
88        ENDIF        ENDIF
89    
90  C--   Write model state to binary file  C--   Write model state to binary file
91        CALL WRITE_STATE( myCurrentTime, myIter, myThid )        CALL WRITE_STATE( myCurrentTime, myIter, myThid )
92    
93        _BARRIER  #ifdef ALLOW_TIMEAVE
94  C  C--   Do time averages
95          IF (taveFreq.GT.0.) THEN
96           CALL TIMEAVE_STATV_WRITE( myCurrentTime, myIter, myThid )
97    cswdptr -- add ---
98    #ifdef ALLOW_PTRACERS
99           CALL PTRACERS_STATV_WRITE( myCurrentTime, myIter, myThid )
100    #endif
101    cswdptr -- end add ---
102          ENDIF
103    #endif
104    #ifdef ALLOW_AIM
105    C--   Do AIM time averages
106          IF (useAIM)
107         &  CALL AIM_WRITE_TAVE( myCurrentTime, myIter, myThid )
108    #endif                                                            
109    #ifdef ALLOW_LAND
110    C--   Do LAND time averages
111          IF (useLAND)
112         &  CALL LAND_WRITE_TAVE( myCurrentTime, myIter, myThid )
113    #endif                                                            
114    
115    #ifdef ALLOW_OBCS
116          IF (useOBCS)
117         & CALL OBCS_DIAGS( myCurrentTime, myIter, myThid )
118    #endif
119    
120    #ifdef ALLOW_GMREDI
121    C--   Do KPP diagnostics.
122          IF (useGMRedi)
123         & CALL GMREDI_DIAGS( myCurrentTime, myIter, myThid )
124    #endif
125    
126    #ifdef ALLOW_KPP
127    C--   Do KPP diagnostics.
128          IF (useKPP)
129         & CALL KPP_DO_DIAGS( myCurrentTime, myIter, myThid )
130    #endif
131    
132    #ifdef ALLOW_SBO
133    C--   Do SBO diagnostics.
134          IF (useSBO) THEN
135             CALL SBO_CALC ( myCurrentTime, myIter, myThid )
136             CALL SBO_DIAGS( myCurrentTime, myIter, myThid )
137          ENDIF
138    #endif
139    
140    cswdblk ---  add ---
141    #ifdef ALLOW_BULK_FORCE
142    C--   Do bulkf diagnostics.
143          IF (useBulkforce)
144         & CALL BULKF_DIAGS( myCurrentTime, myIter, myThid )
145    #endif
146    cswdblk -- end add ---
147    
148    cswdice ---  add ---
149    #ifdef ALLOW_THERM_SEAICE
150    C--   Do seaice diagnostics.
151          IF (useThermSeaice)
152         & CALL ICE_DIAGS( myCurrentTime, myIter, myThid )
153    #endif
154    cswdice -- end add ---
155    
156    cswdptr ---  add ---
157    #ifdef ALLOW_GCHEM
158    C--   Do ptracer diagnostics.
159          IF (usePTRACERS)
160         & CALL GCHEM_DIAGS( myCurrentTime, myIter, myThid )
161    #endif
162    cswdptr -- end add ---
163    
164    
165        RETURN        RETURN
166        END        END
167    

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.31

  ViewVC Help
Powered by ViewVC 1.1.22