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

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

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


Revision 1.51 - (show annotations) (download)
Tue Apr 4 23:21:46 2017 UTC (7 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.50: +1 -2 lines
- add specific run-time param to select level of printed plot-field-maps,
  set by default to debugLevel. Remove internal param "printDomain".

1 C $Header: /u/gcmpack/MITgcm/model/src/ini_model_io.F,v 1.50 2017/01/11 20:38:44 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: INI_MODEL_IO
9
10 C !INTERFACE:
11 SUBROUTINE INI_MODEL_IO( myThid )
12
13 C !DESCRIPTION:
14 C Initialisation and setting of I/O:
15 C - Check size and initialise global I/O buffer
16 C - Initialise flags for pickup and for mdsio/rw.
17 C - Do MNC model-IO initialisation
18 C - Do Monitor-IO initialisation
19
20 C !USES:
21 IMPLICIT NONE
22 #include "SIZE.h"
23 #include "EEPARAMS.h"
24 #include "EESUPPORT.h"
25 #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:
35 C myThid :: my Thread Id number
36 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 CEOP
52
53 C- Safety check:
54 IF ( nPx*nPy.NE.1 .AND. globalFiles
55 & .AND. .NOT.useSingleCpuIO ) THEN
56 _BEGIN_MASTER( myThid )
57 c WRITE(msgBuf,'(2A)')
58 c & 'INI_MODEL_IO: globalFiles=TRUE is not safe',
59 c & ' in Multi-processors (MPI) run'
60 c CALL PRINT_ERROR( msgBuf , myThid)
61 c WRITE(msgBuf,'(2A)')
62 c & 'INI_MODEL_IO: use instead "useSingleCpuIO=.TRUE."'
63 c CALL PRINT_ERROR( msgBuf , myThid)
64 c STOP 'ABNORMAL END: S/R INI_MODEL_IO'
65 C------
66 C GlobalFiles option with Multi-processors execution (with MPI) is not
67 C safe: dependending on the platform & compiler, it may produce:
68 C - incomplete output files (wrong size)
69 C - wrong isolated values in some output files
70 C - missing tiles (all zeros) in some output files.
71 C A safe alternative is to set "useSingleCpuIO=.TRUE." in file "data",
72 C namelist PARAM01 (and to keep the default value of globalFiles=FALSE)
73 C or if you are really sure that the globalFile works well on our platform
74 C & compiler, comment out the above "stop"
75 C-----
76 WRITE(msgBuf,'(2A)')
77 & '** WARNING ** INI_MODEL_IO: globalFiles=TRUE is not safe',
78 & ' in Multi-processors (MPI) run'
79 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
80 & SQUEEZE_RIGHT, myThid )
81 WRITE(msgBuf,'(2A)') '** WARNING ** INI_MODEL_IO:',
82 & ' use instead "useSingleCpuIO=.TRUE."'
83 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
84 & SQUEEZE_RIGHT, myThid )
85 _END_MASTER( myThid )
86 ENDIF
87
88 C- Check size of IO buffers:
89 useGlobalBuff = useSingleCpuIO
90 #ifdef CG2D_SINGLECPU_SUM
91 useGlobalBuff = .TRUE.
92 #endif /* CG2D_SINGLECPU_SUM */
93 #ifdef ALLOW_EXCH2
94 IF ( useGlobalBuff ) THEN
95 xySize = exch2_global_Nx*exch2_global_Ny
96 #ifndef CG2D_SINGLECPU_SUM
97 IF ( .NOT.W2_useE2ioLayOut ) xySize = Nx*Ny
98 #endif /* ndef CG2D_SINGLECPU_SUM */
99 IF ( xySize.GT.W2_ioBufferSize ) THEN
100 WRITE(msgBuf,'(A,2(I10,A))')
101 & 'W2_ioBufferSize=', W2_ioBufferSize,
102 & ' <', xySize, ' = Size of Global 2-D map'
103 CALL PRINT_ERROR( msgBuf, myThid )
104 WRITE(msgBuf,'(2A)')
105 & 'INI_MODEL_IO: increase W2_ioBufferSize',
106 & ' in "W2_EXCH2_SIZE.h" + recompile'
107 CALL PRINT_ERROR( msgBuf, myThid )
108 STOP 'ABNORMAL END: S/R INI_MODEL_IO (buffer size)'
109 ENDIF
110 ENDIF
111 #endif /* ALLOW_EXCH2 */
112 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
113
114 C- Only Master-thread updates IO-parameter in Common blocks:
115 _BEGIN_MASTER( myThid )
116
117 C- Initialise AB starting level
118 C notes: those could be modified when reading a pickup that does
119 C not correspond to what is actually needed.
120 tempStartAB = nIter0
121 saltStartAB = nIter0
122 mom_StartAB = nIter0
123 nHydStartAB = nIter0
124 IF ( startFromPickupAB2 ) tempStartAB = MIN( nIter0 , 1 )
125 saltStartAB = tempStartAB
126 mom_StartAB = tempStartAB
127 nHydStartAB = tempStartAB
128 dPhiNHstatus= 0
129
130 C- Initialise Alternating pickup-suffix
131 nCheckLev = 1
132 checkPtSuff(1) = 'ckptA'
133 checkPtSuff(2) = 'ckptB'
134
135 C- Flags specific to RW and MDSIO (and PLOT_FIELDS)
136
137 C- now we make local directories with myProcessStr appended.
138 IF ( mdsioLocalDir .NE. ' ' ) THEN
139 iL = ILNBLNK( mdsioLocalDir )
140 C Local dir name should not be too long to fit MAX_LEN_FNAM
141 C after adding file-name: set a limit to half MAX_LEN_FNAM
142 IF ( 2*IL.GT.MAX_LEN_FNAM ) THEN
143 WRITE(msgBuf,'(2A,I4,A)') 'INI_MODEL_IO: ',
144 & 'Too long (IL=',IL,') mdsioLocalDir:'
145 CALL PRINT_ERROR( msgBuf, myThid )
146 WRITE(errorMessageUnit,'(3A)')
147 & 'localDir: >',mdsioLocalDir(1:IL),'<'
148 STOP 'ABNORMAL END: S/R INI_MODEL_IO (mdsioLocalDir)'
149 ENDIF
150 WRITE(namBuf,'(4A)')
151 & ' mkdir -p ', mdsioLocalDir(1:iL),myProcessStr(1:4),' '
152 pIL = 1 + ILNBLNK( namBuf )
153 #ifdef HAVE_SYSTEM
154 WRITE(standardMessageUnit,'(3A)')
155 & '==> SYSTEM CALL (from INI_MODEL_IO): >',namBuf(1:pIL),'<'
156 CALL SYSTEM( namBuf(1:pIL) )
157 #else
158 WRITE(msgBuf,'(3A)') '** WARNING ** INI_MODEL_IO: ',
159 & 'SYSTEM call missing (HAVE_SYSTEM undef) for mdsioLocalDir'
160 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
161 & SQUEEZE_RIGHT, myThid )
162 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
163 & SQUEEZE_RIGHT, myThid )
164 WRITE(errorMessageUnit,'(4A)') '** WARNING ** INI_MODEL_IO: ',
165 & 'Skip command: >',namBuf(1:pIL),'<'
166 #endif
167 WRITE(msgBuf,'(A)') ' '
168 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
169 & SQUEEZE_RIGHT, myThid )
170 namBuf(1:iL) = mdsioLocalDir(1:iL)
171 WRITE(mdsioLocalDir,'(3A)') namBuf(1:iL),myProcessStr(1:4),'/'
172 ENDIF
173
174 C- Initialise MFLDS variables in common block
175 CALL READ_MFLDS_INIT( myThid )
176
177 C Set globalFiles flag for READ_WRITE_FLD package
178 CALL SET_WRITE_GLOBAL_FLD( globalFiles )
179 C Set globalFiles flag for READ_WRITE_REC package
180 CALL SET_WRITE_GLOBAL_REC( globalFiles )
181 C Set globalFiles flag for READ_WRITE_SEC package
182 IF ( useOBCS .AND. globalFiles ) THEN
183 WRITE(msgBuf,'(2A)') '** WARNING ** INI_MODEL_IO:',
184 & ' use tiled-files to write sections (for OBCS)'
185 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
186 & SQUEEZE_RIGHT, myThid )
187 CALL SET_WRITE_GLOBAL_SEC( .FALSE. )
188 ELSE
189 CALL SET_WRITE_GLOBAL_SEC( globalFiles )
190 ENDIF
191
192 _END_MASTER( myThid )
193 C- Everyone else must wait for the IO-parameters to be set
194 _BARRIER
195
196 C- Global IO-buffers initialisation
197 IF ( useGlobalBuff ) THEN
198 _BEGIN_MASTER( myThid )
199 DO i=1,xyBuffer_size
200 xy_buffer_r8(i) = 0. _d 0
201 xy_buffer_r4(i) = 0.
202 ENDDO
203 _END_MASTER( myThid )
204 ENDIF
205
206 C- MNC model-io initialisation
207
208 #ifdef ALLOW_MNC
209 IF (useMNC) THEN
210 C- Initialize look-up tables for MNC
211 CALL MNC_INIT( myThid )
212 CALL MNC_CW_INIT( sNx,sNy,OLx,OLy,nSx,nSy,nPx,nPy,
213 & Nr,myThid )
214 CEH3 IF ( mnc_echo_gvtypes ) THEN
215 CEH3 CALL MNC_CW_DUMP( myThid )
216 CEH3 ENDIF
217 C Write units/set precision/etc for I/O of variables/arrays
218 C belonging to the core dynamical model
219 CALL INI_MNC_VARS( myThid )
220 ENDIF
221 #endif /* ALLOW_MNC */
222
223 #ifdef ALLOW_AUTODIFF
224 IF ( useAUTODIFF ) CALL AUTODIFF_INI_MODEL_IO( myThid )
225 #endif
226
227 #ifdef ALLOW_PROFILES
228 IF ( usePROFILES ) CALL PROFILES_INI_IO( myThid )
229 #endif
230
231 #ifdef ALLOW_DIAGNOSTICS
232 IF ( useDiagnostics ) CALL DIAGNOSTICS_INI_IO( myThid )
233 #endif
234
235 #ifdef ALLOW_MONITOR
236 C-- Initialise MONITOR I/O streams so we can report config. info
237 CALL MON_INIT( myThid )
238 #endif
239
240 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
241
242 RETURN
243 END

  ViewVC Help
Powered by ViewVC 1.1.22