/[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.7 by edhill, Mon Sep 27 17:50:48 2004 UTC revision 1.41 by gforget, Fri Jan 21 01:19:59 2011 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  #ifdef ALLOW_MNC  #include "RESTART.h"
27  #include "MNC_PARAMS.h"  #ifdef ALLOW_EXCH2
28  #endif  # 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 message 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          nHydStartAB = tempStartAB
131          dPhiNHstatus= 0
132    
133    C-    Initialise Alternating pickup-suffix
134          nCheckLev         = 1
135          checkPtSuff(1)    = 'ckptA'
136          checkPtSuff(2)    = 'ckptB'
137    
138    C-    Flags specific to RW and MDSIO (and PLOT_FIELDS)
139          printDomain = debugLevel.GE.debLevA
140    
141    C-    now we make local directories with myProcessStr appended
142          IF ( mdsioLocalDir .NE. ' ' ) THEN
143            iL = ILNBLNK( mdsioLocalDir )
144            WRITE(namBuf,'(3A)')
145         &         ' mkdir -p ', mdsioLocalDir(1:iL),myProcessStr(1:4)
146            pIL = 1 + ILNBLNK( namBuf )
147            WRITE(standardMessageUnit,'(3A)')
148         &  '==> SYSTEM CALL (from INI_MODEL_IO): >',namBuf(1:pIL),'<'
149            CALL SYSTEM( namBuf(1:pIL) )
150            namBuf(1:iL) = mdsioLocalDir(1:iL)
151            WRITE(mdsioLocalDir,'(3A)') namBuf(1:iL),myProcessStr(1:4),'/'
152          ENDIF
153    
154    C     append "/", if necessay
155          IF ( adTapeDir .NE. ' ' ) THEN
156           iL = ILNBLNK( adTapeDir )
157           IF ( iL .LT. MAX_LEN_FNAM .AND. adTapeDir(iL:iL) .NE. '/' ) THEN
158            namBuf(1:iL) = adTapeDir(1:iL)
159            WRITE(adTapeDir(1:iL+1),'(2A)') namBuf(1:iL),'/'
160           ENDIF
161          ENDIF
162    
163    C-    Initialise MFLDS variables in common block
164          CALL READ_MFLDS_INIT( myThid )
165    
 C     Flags specific to RW and MDSIO  
166  C     Set globalFiles flag for READ_WRITE_FLD package  C     Set globalFiles flag for READ_WRITE_FLD package
167        CALL SET_WRITE_GLOBAL_FLD( globalFiles )        CALL SET_WRITE_GLOBAL_FLD( globalFiles )
168  C     Set globalFiles flag for READ_WRITE_REC package  C     Set globalFiles flag for READ_WRITE_REC package
169        CALL SET_WRITE_GLOBAL_REC( globalFiles )        CALL SET_WRITE_GLOBAL_REC( globalFiles )
170  C     Set globalFiles flag for READ_WRITE_REC package  C     Set globalFiles flag for READ_WRITE_SEC package
171          IF ( useOBCS .AND. globalFiles ) THEN
172            WRITE(msgBuf,'(2A)') '** WARNING ** INI_MODEL_IO:',
173         &   ' use tiled-files to write sections (for OBCS)'
174            CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
175         &                      SQUEEZE_RIGHT, myThid )
176            CALL SET_WRITE_GLOBAL_SEC( .FALSE. )
177          ELSE
178            CALL SET_WRITE_GLOBAL_SEC( globalFiles )
179          ENDIF
180    C     Set globalFiles flag for READ_WRITE_PICKUP
181        CALL SET_WRITE_GLOBAL_PICKUP( globalFiles )        CALL SET_WRITE_GLOBAL_PICKUP( globalFiles )
182    
183          _END_MASTER( myThid )
184    C-    Everyone else must wait for the IO-parameters to be set
185          _BARRIER
186    
187    C-    Global IO-buffers initialisation
188          IF ( useGlobalBuff ) THEN
189            _BEGIN_MASTER( myThid )
190            DO i=1,xyBuffer_size
191              xy_buffer_r8(i) = 0. _d 0
192              xy_buffer_r4(i) = 0.
193            ENDDO
194            _END_MASTER( myThid )
195          ENDIF
196    
197    C-    MNC model-io initialisation
198    
199  #ifdef ALLOW_MNC  #ifdef ALLOW_MNC
200        IF (useMNC) THEN        IF (useMNC) THEN
201    
202  C     Define coordinates for all MNC files ---------------------------------  C-    Initialize look-up tables for MNC
203  C     XC          CALL MNC_INIT( myThid )
204        CALL MNC_CW_ADD_VNAME('XC', 'Cen_xy_Hn__-__-', 3,4, myThid)          CALL MNC_CW_INIT( sNx,sNy,OLx,OLy,nSx,nSy,nPx,nPy,
205        CALL MNC_CW_ADD_VATTR_TEXT('XC','description',       &                    Nr,myThid )
206       &     'X coordinate of cell center (T-P point)',myThid)  CEH3       IF ( mnc_echo_gvtypes ) THEN
207        CALL MNC_CW_ADD_VATTR_TEXT('XC',  CEH3       CALL MNC_CW_DUMP( myThid )
208       &     'units', 'degree_east', myThid)  CEH3       ENDIF
209    
210  C     YC  C       Write units/set precision/etc for I/O of variables/arrays
211        CALL MNC_CW_ADD_VNAME('YC', 'Cen_xy_Hn__-__-', 3,4, myThid)  C       belonging to the core dynamical model
212        CALL MNC_CW_ADD_VATTR_TEXT('YC','description',          CALL INI_MNC_VARS( myThid )
      &     'Y coordinate of cell center (T-P point)',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('YC',  
      &     'units', 'degree_north', myThid)  
   
 C     XU  
       CALL MNC_CW_ADD_VNAME('XU', 'U_xy_Hn__-__-', 3,4, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('XU','description',  
      &     'X coordinate of U point',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('XU',  
      &     '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','description',  
      &     'Y coordinate of U point',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('YU',  
      &     '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','description',  
      &     'X coordinate of V point',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('XV',  
      &     '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','description',  
      &     'Y coordinate of V point',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('YV',  
      &     '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','description',  
      &     'X coordinate of cell corner (Vorticity point)',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('XG',  
      &     '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','description',  
      &     'Y coordinate of cell corner (Vorticity point)',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('YG',  
      &     'units', 'degree_north', myThid)  
   
 C     RC  
       CALL MNC_CW_ADD_VNAME('RC', '-_-_--__C__-', 0,0, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('RC','description',  
      &     'R coordinate of cell center',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('RC',  
      &     'units', 'm', myThid)  
   
 C     RF  
       CALL MNC_CW_ADD_VNAME('RF', '-_-_--__I__-', 0,0, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('RF','description',  
      &     'R coordinate of cell interface',myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('RF',  
      &     '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',  
      &     'long_name','iteration_count', myThid)  
   
       CALL MNC_CW_ADD_VNAME('model_time', '-_-_--__-__t', 0,0, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('model_time',  
      &     'long_name','Model Time', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('model_time','units','s', myThid)  
   
       CALL MNC_CW_ADD_VNAME('U', 'U_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('U','units','m/s', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('U',  
      &     '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','units','m/s', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('V',  
      &     'coordinates','XV YV RC iter', myThid)  
   
       CALL MNC_CW_ADD_VNAME('Temp', 'Cen_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('Temp','units','degC', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('Temp','long_name',  
      &     'potential_temperature', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('Temp',  
      &     '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','long_name',  
      &     'salinity', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('S',  
      &     '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','long_name',  
      &     'free-surface_r-anomaly', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('Eta','units','m', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('Eta',  
      &     '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','long_name',  
      &     'column-thickness_r-anomaly', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('EtaH','units','m', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('EtaH',  
      &     'coordinates','XC YC RC iter', myThid)  
       CALL MNC_CW_ADD_VNAME('dEtaHdt', 'Cen_xy_Hn__-__t', 3,4, myThid)  
   
       CALL MNC_CW_ADD_VNAME('W', 'Cen_xy_Hn__C__t', 4,5, myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('W','units','m/s', myThid)  
       CALL MNC_CW_ADD_VATTR_TEXT('W',  
      &     '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)  
   
 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)  
213    
214        ENDIF        ENDIF
215    #endif /* ALLOW_MNC */
216    
217    #ifdef ALLOW_AUTODIFF
218            CALL AUTODIFF_INI_MODEL_IO( myThid )
219    #endif
220    
221    #ifdef ALLOW_MONITOR
222    C--   Initialise MONITOR I/O streams so we can report config. info
223          CALL MON_INIT( myThid )
224  #endif  #endif
225    
226  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.41

  ViewVC Help
Powered by ViewVC 1.1.22