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

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

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


Revision 1.12 - (show annotations) (download)
Tue Jan 20 20:46:55 2015 UTC (9 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65t, checkpoint65j, checkpoint65k, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m
Changes since 1.11: +14 -9 lines
- move ALLOW_EDDYPSI block out of DYNVARS.h and merge it into FFIELDS.h
- rename uMean,vMean --> uEulerMean,vEulerMean (+ change name in pickup file)
- add frictionHeating field to pickup-files (for synchronous time-stepping)

1 C $Header: /u/gcmpack/MITgcm/model/src/read_pickup.F,v 1.11 2014/08/18 14:27:11 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
8 CBOP
9 C !ROUTINE: READ_PICKUP
10 C !INTERFACE:
11 SUBROUTINE READ_PICKUP(
12 I myIter, myThid )
13
14 C !DESCRIPTION:
15 C This is the controlling routine for IO to read restart (or
16 C "pickup" or "checkpoint" ) files. It calls routines from other
17 C packages (\textit{eg.} rw and mnc) to do the per-variable
18 C reads.
19
20 C !USES:
21 IMPLICIT NONE
22 #include "SIZE.h"
23 #include "EEPARAMS.h"
24 #include "PARAMS.h"
25 #include "RESTART.h"
26 #include "DYNVARS.h"
27 #include "SURFACE.h"
28 #include "FFIELDS.h"
29 #ifdef ALLOW_GENERIC_ADVDIFF
30 # include "GAD.h"
31 #endif
32 #ifdef ALLOW_NONHYDROSTATIC
33 # include "NH_VARS.h"
34 #endif
35 #ifdef ALLOW_MNC
36 # include "MNC_PARAMS.h"
37 #endif
38 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
39 # include "GMREDI.h"
40 #endif
41
42 C !INPUT/OUTPUT PARAMETERS:
43 C myIter :: Iteration number
44 C myThid :: my Thread Id. number
45 INTEGER myIter
46 INTEGER myThid
47 CEOP
48
49 C !LOCAL VARIABLES:
50 C fp :: pickup-file precision
51 C fn :: Temp. for building file name.
52 C suff :: suffix of pickup file to read
53 C filePrec :: pickup-file precision (read from meta file)
54 C nbFields :: number of fields in pickup file (read from meta file)
55 C missFldList :: List of missing fields (attempted to read but not found)
56 C missFldDim :: Dimension of missing fields list array: missFldList
57 C nMissing :: Number of missing fields (attempted to read but not found)
58 C m1,m2 :: 6.th dim index (AB-3) corresponding to time-step N-1 & N-2
59 C j :: loop index
60 C nj :: record number
61 C ioUnit :: temp for writing msg unit
62 C msgBuf :: Informational/error message buffer
63 INTEGER fp
64 CHARACTER*(MAX_LEN_FNAM) fn
65 CHARACTER*(10) suff
66 INTEGER filePrec, nbFields
67 INTEGER missFldDim, nMissing
68 PARAMETER( missFldDim = 20 )
69 CHARACTER*(8) missFldList(missFldDim)
70 #ifdef ALLOW_ADAMSBASHFORTH_3
71 INTEGER m1, m2
72 #endif
73 INTEGER j, nj, ioUnit
74 CHARACTER*(MAX_LEN_MBUF) msgBuf
75 #ifndef ALLOW_GENERIC_ADVDIFF
76 LOGICAL AdamsBashforthGt
77 LOGICAL AdamsBashforthGs
78 LOGICAL AdamsBashforth_T
79 LOGICAL AdamsBashforth_S
80 PARAMETER ( AdamsBashforthGt = .FALSE. ,
81 & AdamsBashforthGs = .FALSE. ,
82 & AdamsBashforth_T = .FALSE. ,
83 & AdamsBashforth_S = .FALSE. )
84 #endif
85
86 C Suffix for pickup files
87 DO j = 1,MAX_LEN_FNAM
88 fn(j:j) = ' '
89 ENDDO
90 IF (pickupSuff .EQ. ' ') THEN
91 WRITE(suff,'(I10.10)') myIter
92 ELSE
93 WRITE(suff,'(A10)') pickupSuff
94 ENDIF
95 WRITE(fn,'(A,A10)') 'pickup.',suff
96
97 C Going to really do some IO. Make everyone except master thread wait.
98 C this is done within IO routines => no longer needed
99 c _BARRIER
100
101 IF (pickup_read_mdsio) THEN
102
103 fp = precFloat64
104 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
105
106 CALL READ_MFLDS_SET(
107 I fn,
108 O nbFields, filePrec,
109 I Nr, myIter, myThid )
110
111 _BEGIN_MASTER( myThid )
112 c IF ( filePrec.NE.0 .AND. filePrec.NE.fp ) THEN
113 IF ( nbFields.GE.0 .AND. filePrec.NE.fp ) THEN
114 WRITE(msgBuf,'(2A,I4)') 'READ_PICKUP: ',
115 & 'pickup-file binary precision do not match !'
116 CALL PRINT_ERROR( msgBuf, myThid )
117 WRITE(msgBuf,'(A,2(A,I4))') 'READ_PICKUP: ',
118 & 'file prec.=', filePrec, ' but expecting prec.=', fp
119 CALL PRINT_ERROR( msgBuf, myThid )
120 STOP 'ABNORMAL END: S/R READ_PICKUP (data-prec Pb)'
121 ENDIF
122 _END_MASTER( myThid )
123
124 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
125
126 IF ( nbFields.LE.0 ) THEN
127 C- No meta-file or old meta-file without List of Fields
128 ioUnit = errorMessageUnit
129 IF ( pickupStrictlyMatch ) THEN
130 WRITE(msgBuf,'(4A)') 'READ_PICKUP: ',
131 & 'no field-list found in meta-file',
132 & ' => cannot check for strick-matching'
133 c CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
134 CALL PRINT_ERROR( msgBuf, myThid )
135 WRITE(msgBuf,'(4A)') 'READ_PICKUP: ',
136 & 'try with " pickupStrictlyMatch=.FALSE.,"',
137 & ' in file: "data", NameList: "PARM03"'
138 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
139 STOP 'ABNORMAL END: S/R READ_PICKUP'
140 ELSE
141 WRITE(msgBuf,'(4A)') 'WARNING >> READ_PICKUP: ',
142 & ' no field-list found'
143 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
144 IF ( nbFields.EQ.-1 ) THEN
145 C- No meta-file
146 WRITE(msgBuf,'(4A)') 'WARNING >> ',
147 & ' try to read pickup as currently written'
148 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
149 ELSE
150 C- Old meta-file without List of Fields
151 WRITE(msgBuf,'(4A)') 'WARNING >> ',
152 & ' try to read pickup as it used to be written'
153 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
154 WRITE(msgBuf,'(4A)') 'WARNING >> ',
155 & ' until checkpoint59i (2007 Oct 22)'
156 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
157 ENDIF
158 ENDIF
159 ENDIF
160
161 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
162
163 C--- Old way to read model fields:
164 IF ( nbFields.EQ.0 ) THEN
165 IF ( usePickupBeforeC54 ) THEN
166 #ifndef ALLOW_ADAMSBASHFORTH_3
167 CALL READ_REC_3D_RL( fn, fp, Nr, uVel, 1, myIter,myThid )
168 CALL READ_REC_3D_RL( fn, fp, Nr, gU, 2, myIter,myThid )
169 CALL READ_REC_3D_RL( fn, fp, Nr, guNm1, 3, myIter,myThid )
170 CALL READ_REC_3D_RL( fn, fp, Nr, vVel, 4, myIter,myThid )
171 CALL READ_REC_3D_RL( fn, fp, Nr, gV, 5, myIter,myThid )
172 CALL READ_REC_3D_RL( fn, fp, Nr, gvNm1, 6, myIter,myThid )
173 CALL READ_REC_3D_RL( fn, fp, Nr, theta, 7, myIter,myThid )
174 c CALL READ_REC_3D_RL( fn, fp, Nr, gT, 8, myIter,myThid )
175 CALL READ_REC_3D_RL( fn, fp, Nr, gtNm1, 9, myIter,myThid )
176 CALL READ_REC_3D_RL( fn, fp, Nr, salt, 10, myIter,myThid )
177 c CALL READ_REC_3D_RL( fn, fp, Nr, gS, 11, myIter,myThid )
178 CALL READ_REC_3D_RL( fn, fp, Nr, gsNm1,12, myIter,myThid )
179 #endif /* ALLOW_ADAMSBASHFORTH_3 */
180 CALL READ_REC_3D_RL( fn, fp, 1, etaN,
181 & 12*Nr+1, myIter,myThid )
182 #ifdef NONLIN_FRSURF
183 IF (nonlinFreeSurf .GE. 0) THEN
184 CALL READ_REC_3D_RL(fn, fp, 1, etaH,
185 & 12*Nr+2, myIter,myThid )
186 ENDIF
187 #endif
188 ELSE
189 #ifdef ALLOW_ADAMSBASHFORTH_3
190 j = 3
191 IF ( startFromPickupAB2 ) j = 2
192 nj = 0
193 CALL READ_REC_3D_RL( fn, fp, Nr, uVel, nj+1, myIter,myThid )
194 CALL READ_REC_3D_RL( fn, fp, Nr, guNm(1-OLx,1-OLy,1,1,1,1),
195 & nj+2, myIter,myThid )
196 CALL READ_REC_3D_RL( fn, fp, Nr, guNm(1-OLx,1-OLy,1,1,1,2),
197 & nj+j, myIter,myThid )
198 nj = j
199 CALL READ_REC_3D_RL( fn, fp, Nr, vVel, nj+1, myIter,myThid )
200 CALL READ_REC_3D_RL( fn, fp, Nr, gvNm(1-OLx,1-OLy,1,1,1,1),
201 & nj+2, myIter,myThid )
202 CALL READ_REC_3D_RL( fn, fp, Nr, gvNm(1-OLx,1-OLy,1,1,1,2),
203 & nj+j, myIter,myThid )
204 nj = 2*j
205 CALL READ_REC_3D_RL( fn, fp, Nr, theta,nj+1, myIter,myThid )
206 CALL READ_REC_3D_RL( fn, fp, Nr, gtNm(1-OLx,1-OLy,1,1,1,1),
207 & nj+2, myIter,myThid )
208 CALL READ_REC_3D_RL( fn, fp, Nr, gtNm(1-OLx,1-OLy,1,1,1,2),
209 & nj+j, myIter,myThid )
210 nj = 3*j
211 CALL READ_REC_3D_RL( fn, fp, Nr, salt, nj+1, myIter,myThid )
212 CALL READ_REC_3D_RL( fn, fp, Nr, gsNm(1-OLx,1-OLy,1,1,1,1),
213 & nj+2, myIter,myThid )
214 CALL READ_REC_3D_RL( fn, fp, Nr, gsNm(1-OLx,1-OLy,1,1,1,2),
215 & nj+j, myIter,myThid )
216 nj = 4*j
217 #else /* ALLOW_ADAMSBASHFORTH_3 */
218 CALL READ_REC_3D_RL( fn, fp, Nr, uVel, 1, myIter,myThid )
219 CALL READ_REC_3D_RL( fn, fp, Nr, guNm1, 2, myIter,myThid )
220 CALL READ_REC_3D_RL( fn, fp, Nr, vVel, 3, myIter,myThid )
221 CALL READ_REC_3D_RL( fn, fp, Nr, gvNm1, 4, myIter,myThid )
222 CALL READ_REC_3D_RL( fn, fp, Nr, theta, 5, myIter,myThid )
223 CALL READ_REC_3D_RL( fn, fp, Nr, gtNm1, 6, myIter,myThid )
224 CALL READ_REC_3D_RL( fn, fp, Nr, salt, 7, myIter,myThid )
225 CALL READ_REC_3D_RL( fn, fp, Nr, gsNm1, 8, myIter,myThid )
226 nj = 8
227 #endif /* ALLOW_ADAMSBASHFORTH_3 */
228 CALL READ_REC_3D_RL( fn,fp,1, etaN, nj*Nr+1, myIter,myThid )
229 #ifdef EXACT_CONSERV
230 IF ( exactConserv ) THEN
231 CALL READ_REC_3D_RL(fn,fp,1,dEtaHdt,nj*Nr+2,myIter,myThid )
232 ENDIF
233 IF ( nonlinFreeSurf.GT.0 ) THEN
234 CALL READ_REC_3D_RL(fn,fp,1, etaH, nj*Nr+3, myIter,myThid )
235 ENDIF
236 #endif
237 ENDIF
238
239 IF ( useDynP_inEos_Zc ) THEN
240 WRITE(fn,'(A,A10)') 'pickup_ph.',suff
241 CALL READ_REC_3D_RL( fn, fp, Nr, totPhiHyd,1,myIter,myThid )
242 ENDIF
243 #ifdef ALLOW_NONHYDROSTATIC
244 IF ( use3Dsolver ) THEN
245 WRITE(fn,'(A,A10)') 'pickup_nh.',suff
246 CALL READ_REC_3D_RL( fn, fp, Nr, phi_nh, 1, myIter,myThid )
247 #ifdef ALLOW_ADAMSBASHFORTH_3
248 CALL READ_REC_3D_RL( fn, fp, Nr, gwNm(1-OLx,1-OLy,1,1,1,1),
249 & 2, myIter,myThid )
250 CALL READ_REC_3D_RL( fn, fp, Nr, gwNm(1-OLx,1-OLy,1,1,1,2),
251 & 2, myIter,myThid )
252 #else /* ALLOW_ADAMSBASHFORTH_3 */
253 CALL READ_REC_3D_RL( fn, fp, Nr, gwNm1, 2, myIter,myThid )
254 #endif /* ALLOW_ADAMSBASHFORTH_3 */
255 ENDIF
256 #endif /* ALLOW_NONHYDROSTATIC */
257 ELSE
258 C--- New way to read model fields:
259 nj = 0
260 C--- read State 3-D fields for restart
261 CALL READ_MFLDS_3D_RL( 'Uvel ', uVel,
262 & nj, fp, Nr, myIter, myThid )
263 CALL READ_MFLDS_3D_RL( 'Vvel ', vVel,
264 & nj, fp, Nr, myIter, myThid )
265 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
266 IF (GM_InMomAsStress) THEN
267 CALL READ_MFLDS_3D_RL( 'UEulerM ', uEulerMean,
268 & nj, fp, Nr, myIter, myThid )
269 CALL READ_MFLDS_3D_RL( 'VEulerM ', vEulerMean,
270 & nj, fp, Nr, myIter, myThid )
271 ENDIF
272 #endif
273 CALL READ_MFLDS_3D_RL( 'Theta ', theta,
274 & nj, fp, Nr, myIter, myThid )
275 CALL READ_MFLDS_3D_RL( 'Salt ', salt,
276 & nj, fp, Nr, myIter, myThid )
277 C--- read 3-D fields for AB-restart
278 #ifdef ALLOW_ADAMSBASHFORTH_3
279 m1 = 1 + MOD(myIter+1,2)
280 m2 = 1 + MOD( myIter ,2)
281 IF ( momStepping ) THEN
282 C-- U velocity:
283 IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
284 CALL READ_MFLDS_3D_RL( 'GuNm1 ',guNm(1-OLx,1-OLy,1,1,1,m1),
285 & nj, fp, Nr, myIter, myThid )
286 ENDIF
287 IF ( beta_AB.NE.0. ) THEN
288 CALL READ_MFLDS_3D_RL( 'GuNm2 ',guNm(1-OLx,1-OLy,1,1,1,m2),
289 & nj, fp, Nr, myIter, myThid )
290 ENDIF
291 C-- V velocity:
292 IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
293 CALL READ_MFLDS_3D_RL( 'GvNm1 ',gvNm(1-OLx,1-OLy,1,1,1,m1),
294 & nj, fp, Nr, myIter, myThid )
295 ENDIF
296 IF ( beta_AB.NE.0. ) THEN
297 CALL READ_MFLDS_3D_RL( 'GvNm2 ',gvNm(1-OLx,1-OLy,1,1,1,m2),
298 & nj, fp, Nr, myIter, myThid )
299 ENDIF
300 ENDIF
301 C-- Temperature:
302 IF ( AdamsBashforthGt ) THEN
303 IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
304 CALL READ_MFLDS_3D_RL( 'GtNm1 ',gtNm(1-OLx,1-OLy,1,1,1,m1),
305 & nj, fp, Nr, myIter, myThid )
306 ENDIF
307 IF ( beta_AB.NE.0. ) THEN
308 CALL READ_MFLDS_3D_RL( 'GtNm2 ',gtNm(1-OLx,1-OLy,1,1,1,m2),
309 & nj, fp, Nr, myIter, myThid )
310 ENDIF
311 ELSEIF ( AdamsBashforth_T ) THEN
312 IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
313 CALL READ_MFLDS_3D_RL( 'TempNm1 ',gtNm(1-OLx,1-OLy,1,1,1,m1),
314 & nj, fp, Nr, myIter, myThid )
315 ENDIF
316 IF ( beta_AB.NE.0. ) THEN
317 CALL READ_MFLDS_3D_RL( 'TempNm2 ',gtNm(1-OLx,1-OLy,1,1,1,m2),
318 & nj, fp, Nr, myIter, myThid )
319 ENDIF
320 ENDIF
321 C-- Salinity:
322 IF ( AdamsBashforthGs ) THEN
323 IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
324 CALL READ_MFLDS_3D_RL( 'GsNm1 ',gsNm(1-OLx,1-OLy,1,1,1,m1),
325 & nj, fp, Nr, myIter, myThid )
326 ENDIF
327 IF ( beta_AB.NE.0. ) THEN
328 CALL READ_MFLDS_3D_RL( 'GsNm2 ',gsNm(1-OLx,1-OLy,1,1,1,m2),
329 & nj, fp, Nr, myIter, myThid )
330 ENDIF
331 ELSEIF ( AdamsBashforth_S ) THEN
332 IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
333 CALL READ_MFLDS_3D_RL( 'SaltNm1 ',gsNm(1-OLx,1-OLy,1,1,1,m1),
334 & nj, fp, Nr, myIter, myThid )
335 ENDIF
336 IF ( beta_AB.NE.0. ) THEN
337 CALL READ_MFLDS_3D_RL( 'SaltNm2 ',gsNm(1-OLx,1-OLy,1,1,1,m2),
338 & nj, fp, Nr, myIter, myThid )
339 ENDIF
340 ENDIF
341 #ifdef ALLOW_NONHYDROSTATIC
342 IF ( nonHydrostatic ) THEN
343 C-- W velocity:
344 IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
345 CALL READ_MFLDS_3D_RL( 'GwNm1 ',gwNm(1-OLx,1-OLy,1,1,1,m1),
346 & nj, fp, Nr, myIter, myThid )
347 ENDIF
348 IF ( beta_AB.NE.0. ) THEN
349 CALL READ_MFLDS_3D_RL( 'GwNm2 ',gwNm(1-OLx,1-OLy,1,1,1,m2),
350 & nj, fp, Nr, myIter, myThid )
351 ENDIF
352 ENDIF
353 #endif /* ALLOW_NONHYDROSTATIC */
354 #else /* ALLOW_ADAMSBASHFORTH_3 */
355 IF ( momStepping ) THEN
356 C-- U velocity:
357 CALL READ_MFLDS_3D_RL( 'GuNm1 ', guNm1,
358 & nj, fp, Nr, myIter, myThid )
359 C-- V velocity:
360 CALL READ_MFLDS_3D_RL( 'GvNm1 ', gvNm1,
361 & nj, fp, Nr, myIter, myThid )
362 ENDIF
363 C-- Temperature
364 IF ( AdamsBashforthGt ) THEN
365 CALL READ_MFLDS_3D_RL( 'GtNm1 ', gtNm1,
366 & nj, fp, Nr, myIter, myThid )
367 ELSEIF ( AdamsBashforth_T ) THEN
368 CALL READ_MFLDS_3D_RL( 'TempNm1 ', gtNm1,
369 & nj, fp, Nr, myIter, myThid )
370 ENDIF
371 C-- Salinity
372 IF ( AdamsBashforthGs ) THEN
373 CALL READ_MFLDS_3D_RL( 'GsNm1 ', gsNm1,
374 & nj, fp, Nr, myIter, myThid )
375 ELSEIF ( AdamsBashforth_S ) THEN
376 CALL READ_MFLDS_3D_RL( 'SaltNm1 ', gsNm1,
377 & nj, fp, Nr, myIter, myThid )
378 ENDIF
379 #ifdef ALLOW_NONHYDROSTATIC
380 IF ( nonHydrostatic ) THEN
381 CALL READ_MFLDS_3D_RL( 'GwNm1 ', gwNm1,
382 & nj, fp, Nr, myIter, myThid )
383 ENDIF
384 #endif /* ALLOW_NONHYDROSTATIC */
385 #endif /* ALLOW_ADAMSBASHFORTH_3 */
386
387 C- read Full Pressure for EOS in pressure:
388 IF ( useDynP_inEos_Zc ) THEN
389 CALL READ_MFLDS_3D_RL( 'PhiHyd ', totPhiHyd,
390 & nj, fp, Nr, myIter, myThid )
391 ENDIF
392 #ifdef ALLOW_NONHYDROSTATIC
393 IF ( use3Dsolver ) THEN
394 CALL READ_MFLDS_3D_RL( 'Phi_NHyd', phi_nh,
395 & nj, fp, Nr, myIter, myThid )
396 ENDIF
397 #endif /* ALLOW_NONHYDROSTATIC */
398 #ifdef ALLOW_ADDFLUID
399 C- read mass source/sink of fluid
400 IF ( selectAddFluid.GE.1 ) THEN
401 CALL READ_MFLDS_3D_RL( 'AddMass ', addMass,
402 & nj, fp, Nr, myIter, myThid )
403 ENDIF
404 #endif /* ALLOW_ADDFLUID */
405 #ifdef ALLOW_FRICTION_HEATING
406 C- needs frictional heating when using synchronous time-stepping
407 IF ( addFrictionHeating .AND. .NOT.staggerTimeStep ) THEN
408 CALL READ_MFLDS_LEV_RS( 'FricHeat', frictionHeating,
409 & nj, fp, Nr, 1, Nr, myIter, myThid )
410 ENDIF
411 #endif /* ALLOW_FRICTION_HEATING */
412
413 C--- read 2-D fields, starting with Eta:
414 nj = nj*Nr
415 CALL READ_MFLDS_3D_RL( 'EtaN ', etaN,
416 & nj, fp, 1 , myIter, myThid )
417 #ifdef ALLOW_NONHYDROSTATIC
418 IF ( selectNHfreeSurf.GE.1 ) THEN
419 CALL READ_MFLDS_3D_RL( 'dPhiNH ', dPhiNH,
420 & nj, fp, 1 , myIter, myThid )
421 ENDIF
422 #endif /* ALLOW_NONHYDROSTATIC */
423 #ifdef EXACT_CONSERV
424 IF ( exactConserv ) THEN
425 CALL READ_MFLDS_3D_RL( 'dEtaHdt ', dEtaHdt,
426 & nj, fp, 1 , myIter, myThid )
427 ENDIF
428 IF ( nonlinFreeSurf.GT.0 ) THEN
429 CALL READ_MFLDS_3D_RL( 'EtaH ', etaH,
430 & nj, fp, 1 , myIter, myThid )
431 ENDIF
432 #endif /* EXACT_CONSERV */
433 C-- end: new way to read pickup file
434 ENDIF
435
436 C-- Check for missing fields:
437 nMissing = missFldDim
438 CALL READ_MFLDS_CHECK(
439 O missFldList,
440 U nMissing,
441 I myIter, myThid )
442 IF ( nMissing.GT.missFldDim ) THEN
443 WRITE(msgBuf,'(2A,I4)') 'READ_PICKUP: ',
444 & 'missing fields list has been truncated to', missFldDim
445 CALL PRINT_ERROR( msgBuf, myThid )
446 STOP 'ABNORMAL END: S/R READ_PICKUP (list-size Pb)'
447 ENDIF
448 CALL CHECK_PICKUP(
449 I missFldList,
450 I nMissing, nbFields,
451 I myIter, myThid )
452
453 C-- end: pickup_read_mdsio
454 ENDIF
455
456 #ifdef ALLOW_MNC
457 IF (useMNC .AND. pickup_read_mnc) THEN
458 WRITE(fn,'(A)') 'pickup'
459 CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
460 CALL MNC_CW_SET_UDIM(fn, 1, myThid)
461 CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, -1, myThid)
462 CALL MNC_CW_RL_R('D',fn,0,0,'U',uVel, myThid)
463 CALL MNC_CW_RL_R('D',fn,0,0,'V',vVel, myThid)
464 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
465 IF (GM_InMomAsStress) THEN
466 CALL MNC_CW_RL_R('D',fn,0,0,'UEulerM',uEulerMean, myThid)
467 CALL MNC_CW_RL_R('D',fn,0,0,'VEulerM',vEulerMean, myThid)
468 ENDIF
469 #endif
470 CALL MNC_CW_RL_R('D',fn,0,0,'Temp',theta, myThid)
471 CALL MNC_CW_RL_R('D',fn,0,0,'S',salt, myThid)
472 CALL MNC_CW_RL_R('D',fn,0,0,'Eta',etaN, myThid)
473 #ifndef ALLOW_ADAMSBASHFORTH_3
474 CALL MNC_CW_RL_R('D',fn,0,0,'gUnm1',guNm1, myThid)
475 CALL MNC_CW_RL_R('D',fn,0,0,'gVnm1',gvNm1, myThid)
476 CALL MNC_CW_RL_R('D',fn,0,0,'gTnm1',gtNm1, myThid)
477 CALL MNC_CW_RL_R('D',fn,0,0,'gSnm1',gsNm1, myThid)
478 #endif /* ALLOW_ADAMSBASHFORTH_3 */
479 C#ifdef NONLIN_FRSURF
480 C IF ( nonlinFreeSurf.GE.0 .AND. usePickupBeforeC54 )
481 C & CALL MNC_CW_RL_R('D',fn,0,0,'EtaH', etaH, myThid)
482 C#endif
483 #ifdef EXACT_CONSERV
484 IF (exactConserv) THEN
485 CALL MNC_CW_RL_R('D',fn,0,0,'dEtaHdt',dEtaHdt,myThid)
486 ENDIF
487 IF (nonlinFreeSurf .GT. 0) THEN
488 CALL MNC_CW_RL_R('D',fn,0,0,'EtaH', etaH, myThid)
489 ENDIF
490 #endif
491 #ifdef ALLOW_NONHYDROSTATIC
492 IF (use3Dsolver) THEN
493 CALL MNC_CW_RL_R('D',fn,0,0,'phi_nh', phi_nh, myThid)
494 c CALL MNC_CW_RL_R('D',fn,0,0,'gW', gW, myThid)
495 #ifndef ALLOW_ADAMSBASHFORTH_3
496 CALL MNC_CW_RL_R('D',fn,0,0,'gWnm1', gwNm1, myThid)
497 #endif
498 ENDIF
499 #endif
500 IF ( useDynP_inEos_Zc ) THEN
501 CALL MNC_CW_RL_R('D',fn,0,0,'phiHyd',totPhiHyd,myThid)
502 ENDIF
503 ENDIF
504 #endif /* ALLOW_MNC */
505
506 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
507
508 C Fill in edge regions
509 CALL EXCH_UV_3D_RL( uVel, vVel, .TRUE., Nr, myThid )
510 #if defined(ALLOW_EDDYPSI) && defined(ALLOW_GMREDI)
511 IF (GM_InMomAsStress) THEN
512 CALL EXCH_UV_3D_RL( uEulerMean, vEulerMean, .TRUE., Nr, myThid )
513 ENDIF
514 #endif
515 CALL EXCH_3D_RL( theta, Nr, myThid )
516 CALL EXCH_3D_RL( salt, Nr, myThid )
517 #ifdef ALLOW_ADAMSBASHFORTH_3
518 CALL EXCH_UV_3D_RL( guNm(1-OLx,1-OLy,1,1,1,1),
519 & gvNm(1-OLx,1-OLy,1,1,1,1),.TRUE.,Nr,myThid )
520 CALL EXCH_UV_3D_RL( guNm(1-OLx,1-OLy,1,1,1,2),
521 & gvNm(1-OLx,1-OLy,1,1,1,2),.TRUE.,Nr,myThid )
522 CALL EXCH_3D_RL( gtNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
523 CALL EXCH_3D_RL( gtNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
524 CALL EXCH_3D_RL( gsNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
525 CALL EXCH_3D_RL( gsNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
526 #else /* ALLOW_ADAMSBASHFORTH_3 */
527 CALL EXCH_UV_3D_RL( guNm1, gvNm1, .TRUE., Nr, myThid )
528 CALL EXCH_3D_RL( gtNm1, Nr, myThid )
529 CALL EXCH_3D_RL( gsNm1, Nr, myThid )
530 #endif /* ALLOW_ADAMSBASHFORTH_3 */
531 CALL EXCH_XY_RL( etaN, myThid )
532 CALL EXCH_XY_RL( etaH, myThid )
533 #ifdef EXACT_CONSERV
534 CALL EXCH_XY_RL( detaHdt, myThid )
535 #endif
536
537 IF ( useDynP_inEos_Zc )
538 & CALL EXCH_3D_RL( totPhiHyd, Nr, myThid )
539
540 #ifdef ALLOW_NONHYDROSTATIC
541 IF ( use3Dsolver ) THEN
542 CALL EXCH_3D_RL( phi_nh, Nr, myThid )
543 ENDIF
544 IF ( nonHydrostatic ) THEN
545 #ifdef ALLOW_ADAMSBASHFORTH_3
546 CALL EXCH_3D_RL( gwNm(1-OLx,1-OLy,1,1,1,1), Nr, myThid )
547 CALL EXCH_3D_RL( gwNm(1-OLx,1-OLy,1,1,1,2), Nr, myThid )
548 #else /* ALLOW_ADAMSBASHFORTH_3 */
549 CALL EXCH_3D_RL( gwNm1, Nr, myThid )
550 #endif /* ALLOW_ADAMSBASHFORTH_3 */
551 ENDIF
552 IF ( selectNHfreeSurf.GE.1 ) THEN
553 CALL EXCH_XY_RL( dPhiNH, myThid )
554 ENDIF
555 #endif /* ALLOW_NONHYDROSTATIC */
556
557 RETURN
558 END

  ViewVC Help
Powered by ViewVC 1.1.22