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

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

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

revision 1.2 by jmc, Fri Jul 2 17:43:04 2004 UTC revision 1.34 by jmc, Wed Jul 8 22:10:01 2009 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2  C $Name$  C $Name$
3    
 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  
   
4  #include "PACKAGES_CONFIG.h"  #include "PACKAGES_CONFIG.h"
5  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
6    
7  CBOP  CBOP
8  C     !ROUTINE: INI_MODEL_IO  C     !ROUTINE: INI_MODEL_IO
9    
10  C     !INTERFACE:  C     !INTERFACE:
11        SUBROUTINE INI_MODEL_IO( myThid )        SUBROUTINE INI_MODEL_IO( myThid )
12    
13  C     !DESCRIPTION: \bv  C     !DESCRIPTION:
14  C     ini_model_io() is where run-time/experiment specific data are passed  C     Initialisation and setting of I/O:
15  C     to any I/O packages ready that will be used for I/O of model state  C     - Check size and initialise global I/O buffer
16  C     variables.  C     - Initialise flags for pickup and for mdsio/rw.
17  C     This is specifically for setting up once only information such as  C     - Do MNC model-IO initialisation
18  C     shape/size of variables, units, etc... and is only for state variables.  C     - Do Monitor-IO initialisation
 C     \ev  
   
 C     !CALLING SEQUENCE:  
 C     PACKAGES_INIT_FIXED  
 C       |  
 C       |-- MNC_INIT  
19    
20    C     !USES:
21        IMPLICIT NONE        IMPLICIT NONE
22  #include "SIZE.h"  #include "SIZE.h"
 #include "GRID.h"  
23  #include "EEPARAMS.h"  #include "EEPARAMS.h"
24    #include "EESUPPORT.h"
25  #include "PARAMS.h"  #include "PARAMS.h"
26    #include "RESTART.h"
27    #ifdef ALLOW_EXCH2
28    # include "W2_EXCH2_SIZE.h"
29    # include "W2_EXCH2_TOPOLOGY.h"
30    # include "W2_EXCH2_PARAMS.h"
31    #endif /* ALLOW_EXCH2 */
32    #include "EEBUFF_SCPU.h"
33    
34  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
35  C     myThid -  Number of this instances  C     myThid :: my Thread Id number
36        INTEGER myThid        INTEGER myThid
37    
38    C     !FUNCTIONS
39          INTEGER  ILNBLNK
40          EXTERNAL ILNBLNK
41    
42    C     !LOCAL VARIABLES:
43    C     msgBuf :: Informational/error meesage buffer
44          CHARACTER*(MAX_LEN_MBUF) msgBuf
45          CHARACTER*(MAX_LEN_FNAM) namBuf
46          INTEGER i, iL, pIL
47          LOGICAL useGlobalBuff
48    #ifdef ALLOW_EXCH2
49          INTEGER xySize
50    #endif /* ALLOW_EXCH2 */
51    #ifdef ALLOW_USE_MPI
52          INTEGER iG,jG,np
53    #endif /* ALLOW_USE_MPI */
54  CEOP  CEOP
55    
56    C-    Safety check:
57          IF ( nPx*nPy.NE.1 .AND. globalFiles
58         &                  .AND. .NOT.useSingleCpuIO ) THEN
59            _BEGIN_MASTER( myThid )
60    c       WRITE(msgBuf,'(2A)')
61    c    &   'INI_MODEL_IO: globalFiles=TRUE is not safe',
62    c    &   ' in Multi-processors (MPI) run'
63    c       CALL PRINT_ERROR( msgBuf , myThid)
64    c       WRITE(msgBuf,'(2A)')
65    c    &   'INI_MODEL_IO: use instead "useSingleCpuIO=.TRUE."'
66    c       CALL PRINT_ERROR( msgBuf , myThid)
67    c       STOP 'ABNORMAL END: S/R INI_MODEL_IO'
68    C------
69    C   GlobalFiles option with Multi-processors execution (with MPI) is not
70    C   safe: dependending on the platform & compiler, it may produce:
71    C    - incomplete output files (wrong size)
72    C    - wrong isolated values in some output files
73    C    - missing tiles (all zeros) in some output files.
74    C   A safe alternative is to set "useSingleCpuIO=.TRUE." in file "data",
75    C     namelist PARAM01  (and to keep the default value of globalFiles=FALSE)
76    C   or if you are really sure that the globalFile works well on our platform
77    C     & compiler, comment out the above "stop"
78    C-----
79            WRITE(msgBuf,'(2A)')
80         &   '** WARNING ** INI_MODEL_IO: globalFiles=TRUE is not safe',
81         &   ' in Multi-processors (MPI) run'
82            CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
83         &                      SQUEEZE_RIGHT , myThid)
84            WRITE(msgBuf,'(2A)') '** WARNING ** INI_MODEL_IO:',
85         &   ' use instead "useSingleCpuIO=.TRUE."'
86            CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
87         &                      SQUEEZE_RIGHT , myThid)
88            _END_MASTER( myThid )
89          ENDIF
90    
91    C-    Check size of IO buffers:
92          useGlobalBuff = useSingleCpuIO
93    #ifdef CG2D_SINGLECPU_SUM
94          useGlobalBuff = .TRUE.
95    #endif /* CG2D_SINGLECPU_SUM */
96    #ifdef ALLOW_EXCH2
97          IF ( useGlobalBuff ) THEN
98            xySize = exch2_global_Nx*exch2_global_Ny
99    #ifndef CG2D_SINGLECPU_SUM
100            IF ( .NOT.W2_useE2ioLayOut ) xySize = Nx*Ny
101    #endif /* ndef CG2D_SINGLECPU_SUM */
102            IF ( xySize.GT.W2_ioBufferSize ) THEN
103              WRITE(msgBuf,'(A,2(I10,A))')
104         &       'W2_ioBufferSize=', W2_ioBufferSize,
105         &       ' <', xySize, ' = Size of Global 2-D map'
106              CALL PRINT_ERROR( msgBuf, myThid )
107              WRITE(msgBuf,'(2A)')
108         &       'INI_MODEL_IO: increase W2_ioBufferSize',
109         &       ' in "W2_EXCH2_SIZE.h" + recompile'
110              CALL PRINT_ERROR( msgBuf, myThid )
111              STOP 'ABNORMAL END: S/R INI_MODEL_IO (buffer size)'
112            ENDIF
113          ENDIF
114    #endif /* ALLOW_EXCH2 */
115    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
116    
117    C-    Only Master-thread updates IO-parameter in Common blocks:
118          _BEGIN_MASTER( myThid )
119    
120    C-    Initialise AB starting level
121    C      notes: those could be modified when reading a pickup that does
122    C             not correspond to what is actually needed.
123          tempStartAB = nIter0
124          saltStartAB = nIter0
125          mom_StartAB = nIter0
126          nHydStartAB = nIter0
127          IF ( startFromPickupAB2 ) tempStartAB = MIN( nIter0 , 1 )
128          saltStartAB = tempStartAB
129          mom_StartAB = tempStartAB
130    
131    C-    Initialise Alternating pickup-suffix
132          nCheckLev         = 1
133          checkPtSuff(1)    = 'ckptA'
134          checkPtSuff(2)    = 'ckptB'
135    
136    C-    Flags specific to RW and MDSIO
137    
138    C-    now we make local directories with myProcessStr appended
139          IF ( mdsioLocalDir .NE. ' ' ) THEN
140            iL = ILNBLNK( mdsioLocalDir )
141            WRITE(namBuf,'(3A)')
142         &         ' mkdir -p ', mdsioLocalDir(1:iL),myProcessStr(1:4)
143            pIL = 1 + ILNBLNK( namBuf )
144            WRITE(standardMessageUnit,'(3A)')
145         &  '==> SYSTEM CALL (from INI_MODEL_IO): >',namBuf(1:pIL),'<'
146            CALL SYSTEM( namBuf(1:pIL) )
147            namBuf(1:iL) = mdsioLocalDir(1:iL)
148            WRITE(mdsioLocalDir,'(3A)') namBuf(1:iL),myProcessStr(1:4),'/'
149          ENDIF
150    
151    C-    Initialise MFLDS variables in common block
152          CALL READ_MFLDS_INIT( myThid )
153    
 C     Flags specific to RW and MDSIO  
154  C     Set globalFiles flag for READ_WRITE_FLD package  C     Set globalFiles flag for READ_WRITE_FLD package
155        CALL SET_WRITE_GLOBAL_FLD( globalFiles )        CALL SET_WRITE_GLOBAL_FLD( globalFiles )
156  C     Set globalFiles flag for READ_WRITE_REC package  C     Set globalFiles flag for READ_WRITE_REC package
157        CALL SET_WRITE_GLOBAL_REC( globalFiles )        CALL SET_WRITE_GLOBAL_REC( globalFiles )
158  C     Set globalFiles flag for READ_WRITE_REC package  C     Set globalFiles flag for READ_WRITE_PICKUP
159        CALL SET_WRITE_GLOBAL_PICKUP( globalFiles )        CALL SET_WRITE_GLOBAL_PICKUP( globalFiles )
160    
161          _END_MASTER( myThid )
162    C-    Everyone else must wait for the IO-parameters to be set
163          _BARRIER
164    
165    C-    Global IO-buffers initialisation
166          IF ( useGlobalBuff ) THEN
167            _BEGIN_MASTER( myThid )
168            DO i=1,xyBuffer_size
169              xy_buffer_r8(i) = 0. _d 0
170              xy_buffer_r4(i) = 0.
171            ENDDO
172            _END_MASTER( myThid )
173          ENDIF
174    
175    C-    MNC model-io initialisation
176    
177  #ifdef ALLOW_MNC  #ifdef ALLOW_MNC
178        IF (useMNC) THEN        IF (useMNC) THEN
179    
180  C     Define coordinates for all MNC files ---------------------------------  C-    Initialize look-up tables for MNC
181  C     XC          CALL MNC_INIT( myThid )
182        CALL MNC_CW_ADD_VNAME('XC', 'Cen_xy_Hn__-__-', 3,4, myThid)          CALL MNC_CW_INIT( sNx,sNy,OLx,OLy,nSx,nSy,nPx,nPy,
183        CALL MNC_CW_ADD_VATTR_TEXT('XC',1,'description',       &                    Nr,myThid )
184       &     'X coordinate of cell center (T-P point)',myThid)  CEH3       IF ( mnc_echo_gvtypes ) THEN
185        CALL MNC_CW_ADD_VATTR_TEXT('XC',1,  CEH3       CALL MNC_CW_DUMP( myThid )
186       &     'units', 'degree_east', myThid)  CEH3       ENDIF
187    
188  C     YC  C       Write units/set precision/etc for I/O of variables/arrays
189        CALL MNC_CW_ADD_VNAME('YC', 'Cen_xy_Hn__-__-', 3,4, myThid)  C       belonging to the core dynamical model
190        CALL MNC_CW_ADD_VATTR_TEXT('YC',1,'description',          CALL INI_MNC_VARS( myThid )
191       &     'Y coordinate of cell center (T-P point)',myThid)  
192        CALL MNC_CW_ADD_VATTR_TEXT('YC',1,  #ifdef ALLOW_AUTODIFF
193       &     'units', 'degree_north', myThid)          CALL AUTODIFF_INI_MODEL_IO( myThid )
194    #endif
 C     XU  
       CALL MNC_CW_ADD_VNAME('XU', 'U_xy_Hn__-__-', 3,4, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('XU',1,'description',  
      &     'X coordinate of U point',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('XU',1,  
      &     'units', 'degree_east', myThid)  
   
 C     YU  
       CALL MNC_CW_ADD_VNAME('YU', 'U_xy_Hn__-__-', 3,4, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('YU',1,'description',  
      &     'Y coordinate of U point',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('YU',1,  
      &     'units', 'degree_north', myThid)  
   
 C     XV  
       CALL MNC_CW_ADD_VNAME('XV', 'V_xy_Hn__-__-', 3,4, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('XV',1,'description',  
      &     'X coordinate of V point',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('XV',1,  
      &     'units', 'degree_east', myThid)  
   
 C     YV  
       CALL MNC_CW_ADD_VNAME('YV', 'V_xy_Hn__-__-', 3,4, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('YV',1,'description',  
      &     'Y coordinate of V point',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('YV',1,  
      &     'units', 'degree_north', myThid)  
   
 C     XG  
       CALL MNC_CW_ADD_VNAME('XG', 'Cor_xy_Hn__-__-', 3,4, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('XG',1,'description',  
      &     'X coordinate of cell corner (Vorticity point)',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('XG',1,  
      &     'units', 'degree_east', myThid)  
   
 C     YG  
       CALL MNC_CW_ADD_VNAME('YG', 'Cor_xy_Hn__-__-', 3,4, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('YG',1,'description',  
      &     'Y coordinate of cell corner (Vorticity point)',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('YG',1,  
      &     'units', 'degree_north', myThid)  
   
 C     RC  
       CALL MNC_CW_ADD_VNAME('RC', '-_-_--__C__-', 0,0, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('RC',1,'description',  
      &     'R coordinate of cell center',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('RC',1,  
      &     'units', 'm', myThid)  
   
 C     RF  
       CALL MNC_CW_ADD_VNAME('RF', '-_-_--__I__-', 0,0, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('RF',1,'description',  
      &     'R coordinate of cell interface',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('RF',1,  
      &     'units', 'm', myThid)  
 C     End define coordinates for all MNC files ----------------------------  
   
   
 C     Create MNC definitions for DYNVARS.h variables  
       CALL MNC_CW_ADD_VNAME('iter', '-_-_--__-__t', 0,0, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('iter',1,  
      &     'long_name','iteration_count', myThid)  
   
       CALL MNC_CW_ADD_VNAME('model_time', '-_-_--__-__t', 0,0, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('model_time',1,  
      &     'long_name','Model Time', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('model_time',1,'units','s', myThid)  
   
       CALL MNC_CW_ADD_VNAME('U', 'U_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('U',1,'units','m/s', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('U',1,  
      &     'coordinates','XU YU RC iter', myThid)  
   
       CALL MNC_CW_ADD_VNAME('V', 'V_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('V',1,'units','m/s', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('V',1,  
      &     'coordinates','XV YV RC iter', myThid)  
   
       CALL MNC_CW_ADD_VNAME('T', 'Cen_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('T',1,'units','degC', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('T',1,'long_name',  
      &     'potential_temperature', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('T',1,  
      &     'coordinates','XC YC RC iter', myThid)  
   
       CALL MNC_CW_ADD_VNAME('S', 'Cen_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('S',1,'long_name',  
      &     'salinity', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('S',1,  
      &     'coordinates','XC YC RC iter', myThid)  
   
       CALL MNC_CW_ADD_VNAME('gUnm1', 'U_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VNAME('gVnm1', 'V_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VNAME('gTnm1', 'Cen_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VNAME('gSnm1', 'Cen_xy_Hn__C__t', 4,5, myThid)  
   
       CALL MNC_CW_ADD_VNAME('Eta', 'Cen_xy_Hn__-__t', 3,4, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('Eta',1,'long_name',  
      &     'free-surface_r-anomaly', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('Eta',1,'units','m', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('Eta',1,  
      &     'coordinates','XC YC RC iter', myThid)  
   
       CALL MNC_CW_ADD_VNAME('EtaH', 'Cen_xy_Hn__-__t', 3,4, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('EtaH',1,'long_name',  
      &     'column-thickness_r-anomaly', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('EtaH',1,'units','m', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('EtaH',1,  
      &     'coordinates','XC YC RC iter', myThid)  
   
       CALL MNC_CW_ADD_VNAME('W', 'Cen_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('W',1,'units','m/s', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('W',1,  
      &     'coordinates','XC YC RC iter', myThid)  
   
       CALL MNC_CW_ADD_VNAME('phiHyd', 'Cen_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VNAME('phiHydLow', 'Cen_xy_Hn__-__t', 3,4, myThid)  
       CALL MNC_CW_ADD_VNAME('phi_nh', 'Cen_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VNAME('gW', 'Cen_xy_Hn__C__t', 4,5, myThid)  
   
       CALL MNC_CW_ADD_VNAME('tr1', 'Cen_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('tr1',1,  
      &     'long_name','passive_tracer_1', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('T',1,  
      &     'coordinates','XC YC RC iter', myThid)  
   
 C     Write coordinates to "state" file  
       CALL MNC_CW_SET_UDIM('state', 0, myThid)  
       CALL MNC_CW_RS_W('R','state',0,0,'XC',xC, myThid)  
       CALL MNC_CW_RS_W('R','state',0,0,'YC',yC, myThid)  
       CALL MNC_CW_RS_W('R','state',0,0,'XU',xG, myThid)  
       CALL MNC_CW_RS_W('R','state',0,0,'YU',yC, myThid)  
       CALL MNC_CW_RS_W('R','state',0,0,'XV',xC, myThid)  
       CALL MNC_CW_RS_W('R','state',0,0,'YV',yG, myThid)  
       CALL MNC_CW_RS_W('R','state',0,0,'XG',xG, myThid)  
       CALL MNC_CW_RS_W('R','state',0,0,'YG',yG, myThid)  
       CALL MNC_CW_RS_W('R','state',0,0,'RC',rC, myThid)  
       CALL MNC_CW_RS_W('R','state',0,0,'RF',rF, myThid)  
195    
196        ENDIF        ENDIF
197    #endif /* ALLOW_MNC */
198    
199    #ifdef ALLOW_MONITOR
200    C--   Initialise MONITOR I/O streams so we can report config. info
201          CALL MON_INIT( myThid )
202  #endif  #endif
203    
204  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.34

  ViewVC Help
Powered by ViewVC 1.1.22