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

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

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


Revision 1.33 - (show annotations) (download)
Mon Dec 15 18:51:02 2003 UTC (20 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: hrcube4, checkpoint52j_pre, checkpoint52k_post, checkpoint52f_post, checkpoint52i_pre, hrcube_1, hrcube_2, hrcube_3, checkpoint52e_pre, checkpoint52e_post, checkpoint52h_pre, checkpoint52d_post, checkpoint52i_post, checkpoint52j_post, checkpoint52f_pre
Changes since 1.32: +1 -8 lines
CALL OBCS_READ_CHECKPOINT:
 a) fix it (1 argument was missing => segmentation fault)
 b) remove it: should be called within obcs_init_variables and not before.

1 C $Header: /u/gcmpack/MITgcm/model/src/checkpoint.F,v 1.32 2003/12/15 00:53:09 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 C-- File read_write.F: Routines to handle mid-level I/O interface.
8 C-- Contents
9 C-- o SET_WRITE_GLOBAL_PICKUP
10 C-- o READ_CHECKPOINT - Write out checkpoint files for restarting.
11 C-- o WRITE_CHECKPOINT - Write out checkpoint files for restarting.
12
13 SUBROUTINE SET_WRITE_GLOBAL_PICKUP ( flag )
14 IMPLICIT NONE
15 C SET_WRITE_GLOBAL_FLD( flag ) sets an internal logical state to
16 C indicate whether files written by subsequent call to the
17 C READ_WRITE_FLD package should create "global" or "tiled" files.
18 C flag = .TRUE. indicates "global" files
19 C flag = .FALSE. indicates "tiled" files
20 C
21 C Arguments
22 LOGICAL flag
23 C Common
24 COMMON /PCKP_GBLFLS/ globalFile
25 LOGICAL globalFile
26 C
27 globalFile=flag
28 C
29 RETURN
30 END
31
32 CBOP
33 C !ROUTINE: READ_CHECKPOINT
34 C !INTERFACE:
35 SUBROUTINE READ_CHECKPOINT ( myIter, myThid )
36 C !DESCRIPTION: \bv
37 C *==========================================================*
38 C | SUBROUTINE READ_PICKUP
39 C | o Controlling routine for IO to write restart file.
40 C *==========================================================*
41 C | Read model checkpoint files for use in restart.
42 C *==========================================================*
43 C \ev
44 C !USES:
45 IMPLICIT NONE
46 C == Global variables ===
47 #include "SIZE.h"
48 #include "EEPARAMS.h"
49 #include "PARAMS.h"
50 #include "DYNVARS.h"
51 #ifdef ALLOW_NONHYDROSTATIC
52 #include "GW.h"
53 #include "SOLVE_FOR_PRESSURE3D.h"
54 #endif
55
56 INTEGER IO_ERRCOUNT
57 EXTERNAL IO_ERRCOUNT
58
59 C !INPUT/OUTPUT PARAMETERS:
60 C == Routine arguments ==
61 C myThid - Thread number for this instance of the routine.
62 C myIter - Iteration number
63 INTEGER myThid
64 INTEGER myIter
65
66 C !LOCAL VARIABLES:
67 C == Local variables ==
68 C oldPrec :: Temp. for hold I/O precision information
69 C prec
70 C fn :: Temp. for building file name.
71 INTEGER oldPrec
72 CHARACTER*(MAX_LEN_FNAM) fn
73 CHARACTER*(10) suff
74 INTEGER prec
75 CEOP
76
77 C-- Going to really do some IO. Make everyone except master thread wait.
78 _BARRIER
79 _BEGIN_MASTER( myThid )
80
81 #ifdef OLD_STYLE_WITH_MANY_FILES
82
83 C Force 64-bit IO
84 oldPrec = readBinaryPrec
85 readBinaryPrec = precFloat64
86
87 C-- Read model fields
88 C Raw fields
89 CALL READ_REC_XYZ_RL( 'uVel', uVel, 1,myIter, myThid)
90 CALL READ_REC_XYZ_RL( 'gU', gU, 1,myIter, myThid)
91 CALL READ_REC_XYZ_RL( 'guNm1', gUNm1, 1,myIter, myThid)
92 CALL READ_REC_XYZ_RL( 'vVel', vVel, 1,myIter, myThid)
93 CALL READ_REC_XYZ_RL( 'gV', gV, 1,myIter, myThid)
94 CALL READ_REC_XYZ_RL( 'gvNm1', gVNm1, 1,myIter, myThid)
95 CALL READ_REC_XYZ_RL( 'theta', theta, 1,myIter, myThid)
96 CALL READ_REC_XYZ_RL( 'gT', gT, 1,myIter, myThid)
97 CALL READ_REC_XYZ_RL( 'gtNm1', gTNm1, 1,myIter, myThid)
98 CALL READ_REC_XYZ_RL( 'salt', salt, 1,myIter, myThid)
99 CALL READ_REC_XYZ_RL( 'gS', gS, 1,myIter, myThid)
100 CALL READ_REC_XYZ_RL( 'gsNm1', gSNm1, 1,myIter, myThid)
101 CALL READ_REC_XY_RL ('etaN', etaN, 1,myIter, myThid)
102
103 #ifdef ALLOW_NONHYDROSTATIC
104 IF ( nonHydrostatic ) THEN
105 CALL READ_REC_XYZ_RL('phi_nh',phi_nh,1,myIter,myThid)
106 CALL READ_REC_XYZ_RL( 'gW',gW, 1,myIter,myThid)
107 c CALL READ_REC_XYZ_RL( 'gWnm1',gWnm1, 1,myIter,myThid)
108 ENDIF
109 #endif
110
111 C Reset default IO precision
112 readBinaryPrec = oldPrec
113
114 #else /* OLD_STYLE_WITH_MANY_FILES */
115
116 prec = precFloat64
117
118 C-- Suffix for pickup files
119 IF (pickupSuff.EQ.' ') THEN
120 WRITE(suff,'(I10.10)') myIter
121 ELSE
122 WRITE(suff,'(A10)') pickupSuff
123 ENDIF
124
125 C-- Read model fields
126 WRITE(fn,'(A,A10)') 'pickup.',suff
127 CALL MDSREADFIELD(fn,prec,'RL',Nr,uVel, 1,myThid)
128 CALL MDSREADFIELD(fn,prec,'RL',Nr,gU, 2,myThid)
129 CALL MDSREADFIELD(fn,prec,'RL',Nr,gUnm1, 3,myThid)
130 CALL MDSREADFIELD(fn,prec,'RL',Nr,vVel, 4,myThid)
131 CALL MDSREADFIELD(fn,prec,'RL',Nr,gV, 5,myThid)
132 CALL MDSREADFIELD(fn,prec,'RL',Nr,gVnm1, 6,myThid)
133 CALL MDSREADFIELD(fn,prec,'RL',Nr,theta, 7,myThid)
134 CALL MDSREADFIELD(fn,prec,'RL',Nr,gT, 8,myThid)
135 CALL MDSREADFIELD(fn,prec,'RL',Nr,gTnm1, 9,myThid)
136 CALL MDSREADFIELD(fn,prec,'RL',Nr,salt, 10,myThid)
137 CALL MDSREADFIELD(fn,prec,'RL',Nr,gS, 11,myThid)
138 CALL MDSREADFIELD(fn,prec,'RL',Nr,gSnm1, 12,myThid)
139 CALL MDSREADFIELD(fn,prec,'RL', 1,etaN,12*Nr+1,myThid)
140 #ifdef NONLIN_FRSURF
141 IF ( nonlinFreeSurf.GE.0)
142 & CALL MDSREADFIELD(fn,prec,'RL',1,etaH,12*Nr+2,myThid)
143 #endif
144
145 IF ( useDynP_inEos_Zc ) THEN
146 WRITE(fn,'(A,A10)') 'pickup_ph.',suff
147 CALL MDSREADFIELD(fn,prec,'RL',Nr,totPhiHyd,1,myThid)
148 ENDIF
149
150 #ifdef ALLOW_NONHYDROSTATIC
151 IF ( nonHydrostatic ) THEN
152 WRITE(fn,'(A,A10)') 'pickup_nh.',suff
153 CALL MDSREADFIELD(fn,prec,'RL',Nr,phi_nh,1,myThid)
154 CALL MDSREADFIELD(fn,prec,'RL',Nr,gW, 2,myThid)
155 c CALL MDSREADFIELD(fn,prec,'RL',Nr,gWnm1,3,myThid)
156 ENDIF
157 #endif
158
159 #endif /* OLD_STYLE_WITH_MANY_FILES */
160
161 _END_MASTER( myThid )
162 _BARRIER
163
164 C-- Fill in edge regions
165 CALL EXCH_UV_XYZ_RL(uVel,vVel,.TRUE.,myThid)
166 CALL EXCH_UV_XYZ_RL(gU,gV,.TRUE.,myThid)
167 CALL EXCH_UV_XYZ_RL(gUnm1,gVnm1,.TRUE.,myThid)
168 _EXCH_XYZ_R8(theta , myThid )
169 _EXCH_XYZ_R8(gt , myThid )
170 _EXCH_XYZ_R8(gtNM1 , myThid )
171 _EXCH_XYZ_R8(salt , myThid )
172 _EXCH_XYZ_R8(gs , myThid )
173 _EXCH_XYZ_R8(gsNM1 , myThid )
174 _EXCH_XY_R8 (etaN, myThid )
175 _EXCH_XY_R8( etaH, myThid )
176
177 IF ( useDynP_inEos_Zc )
178 & _EXCH_XYZ_RL( totPhiHyd, myThid )
179
180 #ifdef ALLOW_NONHYDROSTATIC
181 IF ( nonHydrostatic ) THEN
182 _EXCH_XYZ_R8(phi_nh, myThid )
183 _EXCH_XYZ_R8(gW , myThid )
184 c _EXCH_XYZ_R8(gWNM1 , myThid )
185 ENDIF
186 #endif
187
188 RETURN
189 END
190
191 CBOP
192 C !ROUTINE: WRITE_CHECKPOINT
193 C !INTERFACE:
194 SUBROUTINE WRITE_CHECKPOINT ( modelEnd, myTime,
195 & myIter, myThid )
196 C !DESCRIPTION: \bv
197 C *==========================================================*
198 C | SUBROUTINE WRITE_CHECKPOINT
199 C | o Controlling routine for IO to write restart file.
200 C *==========================================================*
201 C | Write model checkpoint files for use in restart.
202 C | This routine writes both "rolling-checkpoint" files
203 C | and permanent checkpoint files. A rolling checkpoint
204 C | works through a circular list of suffices. Generally the
205 C | circular list has two entries so that a rolling
206 C | checkpoint will overwrite the last rolling checkpoint
207 C | but one. This is useful for running long jobs without
208 C | filling too much disk space.
209 C | In a permanent checkpoint data is written suffixed by
210 C | the current timestep number. This sort of checkpoint can
211 C | be used to provided a snap-shot from which the model
212 C | can be rerun.
213 C *==========================================================*
214 C \ev
215
216 C !USES:
217 IMPLICIT NONE
218 C == Global variables ===
219 #include "SIZE.h"
220 #include "EEPARAMS.h"
221 #include "PARAMS.h"
222 #include "DYNVARS.h"
223 #ifdef ALLOW_NONHYDROSTATIC
224 #include "GW.h"
225 #include "SOLVE_FOR_PRESSURE3D.h"
226 #endif
227 LOGICAL DIFFERENT_MULTIPLE
228 EXTERNAL DIFFERENT_MULTIPLE
229 INTEGER IO_ERRCOUNT
230 EXTERNAL IO_ERRCOUNT
231
232 C !INPUT/OUTPUT PARAMETERS:
233 C == Routine arguments ==
234 C modelEnd :: Checkpoint call at end of model run.
235 C myThid :: Thread number for this instance of the routine.
236 C myIter :: Iteration number
237 C myTime :: Current time of simulation ( s )
238 LOGICAL modelEnd
239 INTEGER myThid
240 INTEGER myIter
241 _RL myTime
242
243 C == Common blocks ==
244 COMMON /PCKP_GBLFLS/ globalFile
245 LOGICAL globalFile
246
247 C !LOCAL VARIABLES:
248 C == Local variables ==
249 C permCheckPoint :: Flag indicating whether a permanent checkpoint will
250 C be written.
251 C tempCheckPoint :: Flag indicating if it is time to write a non-permanent
252 C checkpoint (that will be permanent if permCheckPoint=T)
253 C oldPrc :: Temp. for holding I/O precision
254 C fn :: Temp. for building file name string.
255 C lgf :: Flag to indicate whether to use global file mode.
256 LOGICAL permCheckPoint, tempCheckPoint
257 INTEGER oldPrec
258 CHARACTER*(MAX_LEN_FNAM) fn
259 CHARACTER*(MAX_LEN_MBUF) msgBuf
260 INTEGER prec
261 LOGICAL lgf
262 CEOP
263
264 permCheckPoint = .FALSE.
265 tempCheckPoint = .FALSE.
266 permCheckPoint=
267 & DIFFERENT_MULTIPLE(pChkptFreq,myTime,myTime-deltaTClock)
268 tempCheckPoint=
269 & DIFFERENT_MULTIPLE( ChkptFreq,myTime,myTime-deltaTClock)
270
271 IF (
272 & ( .NOT.modelEnd .AND. (permCheckPoint.OR.tempCheckPoint) )
273 & .OR.
274 & ( modelEnd .AND. .NOT.(permCheckPoint.OR.tempCheckPoint) )
275 & ) THEN
276
277 C-- Going to really do some IO. Make everyone except master thread wait.
278 _BARRIER
279 _BEGIN_MASTER( myThid )
280
281 #ifdef OLD_STYLE_WITH_MANY_FILES
282 C Force 64-bit IO
283 oldPrec = writeBinaryPrec
284 writeBinaryPrec = precFloat64
285
286 C-- Write model fields
287 C Raw fields
288 CALL WRITE_REC_XYZ_RL( 'uVel', uVel, 1,myIter, myThid)
289 CALL WRITE_REC_XYZ_RL( 'gU', gU, 1,myIter, myThid)
290 CALL WRITE_REC_XYZ_RL( 'gUNm1', gUNm1, 1,myIter, myThid)
291 CALL WRITE_REC_XYZ_RL( 'vVel', vVel, 1,myIter, myThid)
292 CALL WRITE_REC_XYZ_RL( 'gV', gV, 1,myIter, myThid)
293 CALL WRITE_REC_XYZ_RL( 'gVNm1', gVNm1, 1,myIter, myThid)
294 CALL WRITE_REC_XYZ_RL( 'theta', theta, 1,myIter, myThid)
295 CALL WRITE_REC_XYZ_RL( 'gT', gT, 1,myIter, myThid)
296 CALL WRITE_REC_XYZ_RL( 'gTNm1', gTNm1, 1,myIter, myThid)
297 CALL WRITE_REC_XYZ_RL( 'salt', salt, 1,myIter, myThid)
298 CALL WRITE_REC_XYZ_RL( 'gS', gS, 1,myIter, myThid)
299 CALL WRITE_REC_XYZ_RL( 'gSNm1', gSNm1, 1,myIter, myThid)
300 CALL WRITE_REC_XY_RL ('etaN', etaN, 1,myIter, myThid)
301
302 #ifdef ALLOW_NONHYDROSTATIC
303 IF ( nonHydrostatic ) THEN
304 CALL WRITE_REC_XYZ_RL('phi_nh',phi_nh,1,myIter,myThid)
305 CALL WRITE_REC_XYZ_RL( 'gW',gW, 1,myIter,myThid)
306 c CALL WRITE_REC_XYZ_RL( 'gWnm1',gWnm1, 1,myIter,myThid)
307 ENDIF
308 #endif
309
310 C-- Reset binary precision
311 writeBinaryPrec = oldPrec
312
313 #else /* OLD_STYLE_WITH_MANY_FILES */
314
315 prec = precFloat64
316 lgf = globalFile
317
318 C-- Write model fields
319 IF ( permCheckPoint ) THEN
320 WRITE(fn,'(A,I10.10)') 'pickup.',myIter
321 ELSE
322 WRITE(fn,'(A,A)') 'pickup.',checkPtSuff(nCheckLev)
323 ENDIF
324 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,uVel, 1,myIter,myThid)
325 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gU, 2,myIter,myThid)
326 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gUnm1, 3,myIter,myThid)
327 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,vVel, 4,myIter,myThid)
328 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gV, 5,myIter,myThid)
329 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gVnm1, 6,myIter,myThid)
330 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,theta, 7,myIter,myThid)
331 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gT, 8,myIter,myThid)
332 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gTnm1, 9,myIter,myThid)
333 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,salt, 10,myIter,myThid)
334 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gS, 11,myIter,myThid)
335 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gSnm1,12,myIter,myThid)
336 CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1,etaN,12*Nr+1,
337 & myIter,myThid)
338 #ifdef NONLIN_FRSURF
339 CALL MDSWRITEFIELD(fn,prec,lgf,'RL', 1,etaH,12*Nr+2,
340 & myIter,myThid)
341 #endif
342
343 IF ( useDynP_inEos_Zc ) THEN
344 IF ( permCheckPoint ) THEN
345 WRITE(fn,'(A,I10.10)') 'pickup_ph.',myIter
346 ELSE
347 WRITE(fn,'(A,A)') 'pickup_ph.',checkPtSuff(nCheckLev)
348 ENDIF
349 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,totPhiHyd,
350 & 1,myIter,myThid)
351 ENDIF
352
353 #ifdef ALLOW_NONHYDROSTATIC
354 IF ( nonHydrostatic ) THEN
355 IF ( permCheckPoint ) THEN
356 WRITE(fn,'(A,I10.10)') 'pickup_nh.',myIter
357 ELSE
358 WRITE(fn,'(A,A)') 'pickup_nh.',checkPtSuff(nCheckLev)
359 ENDIF
360 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,phi_nh,1,myIter,myThid)
361 CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gW, 2,myIter,myThid)
362 c CALL MDSWRITEFIELD(fn,prec,lgf,'RL',Nr,gWnm1,3,myIter,myThid)
363 ENDIF
364 #endif
365
366 #endif /* OLD_STYLE_WITH_MANY_FILES */
367
368 C-- Write suffix for stdout information
369 IF ( permCheckPoint ) THEN
370 WRITE(fn,'(I10.10)') myIter
371 ELSE
372 WRITE(fn,'(A)') checkPtSuff(nCheckLev)
373 ENDIF
374
375 IF ( .NOT. permCheckPoint ) THEN
376 nCheckLev = MOD(nCheckLev, maxNoChkptLev)+1
377 ENDIF
378
379 _END_MASTER(myThid)
380 _BARRIER
381
382 C-- Write information to stdout so there is a record that the
383 C checkpoint was completed
384 _BEGIN_MASTER(myThid)
385 WRITE(msgBuf,'(A11,I10,1X,A10)')
386 & "%CHECKPOINT ",myIter,fn
387 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
388 _END_MASTER(myThid)
389
390 ENDIF
391
392 RETURN
393 END

  ViewVC Help
Powered by ViewVC 1.1.22