/[MITgcm]/MITgcm_contrib/llc_hires/llc_4320/code-async/write_pickup.F
ViewVC logotype

Annotation of /MITgcm_contrib/llc_hires/llc_4320/code-async/write_pickup.F

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


Revision 1.1 - (hide annotations) (download)
Fri Sep 20 12:38:04 2013 UTC (11 years, 10 months ago) by dimitri
Branch: MAIN
adding llc_2160 and llc_4320 coonfiguration files

1 dimitri 1.1 C $Header: /CVS/people/chenze/ECCO/code-async/write_pickup.F,v 1.2 2013/08/24 00:34:00 chenze 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: WRITE_PICKUP
10     C !INTERFACE:
11     SUBROUTINE WRITE_PICKUP(
12     I permPickup,
13     I myTime, myIter, myThid )
14    
15     C !DESCRIPTION:
16     C Write the main-model pickup-file and do it NOW.
17     C It writes both "rolling-pickup" files (ckptA,ckptB) and
18     C permanent pickup files (with iteration number in the file name).
19     C It calls routines from other packages (\textit{eg.} rw and mnc)
20     C to do the per-variable writes.
21    
22     C !USES:
23     IMPLICIT NONE
24     #include "SIZE.h"
25     #include "EEPARAMS.h"
26     #include "PARAMS.h"
27     #include "RESTART.h"
28     #include "DYNVARS.h"
29     #include "SURFACE.h"
30     #ifdef ALLOW_GENERIC_ADVDIFF
31     # include "GAD.h"
32     #endif
33     #ifdef ALLOW_NONHYDROSTATIC
34     # include "NH_VARS.h"
35     #endif
36     #ifdef ALLOW_ADDFLUID
37     # include "FFIELDS.h"
38     #endif
39     #ifdef ALLOW_MNC
40     # include "MNC_PARAMS.h"
41     #endif
42    
43     C !INPUT PARAMETERS:
44     C permPickup :: Is or is not a permanent pickup.
45     C myTime :: Current time of simulation ( s )
46     C myIter :: Iteration number
47     C myThid :: Thread number for this instance of the routine.
48     LOGICAL permPickup
49     _RL myTime
50     INTEGER myIter
51     INTEGER myThid
52     CEOP
53    
54     C !LOCAL VARIABLES:
55     C fp :: pickup-file precision
56     C glf :: local flag for "globalFiles"
57     C fn :: Temp. for building file name.
58     C nWrFlds :: number of fields being written
59     C n3D :: number of 3-D fields being written
60     C listDim :: dimension of "wrFldList" local array
61     C wrFldList :: list of written fields
62     C m1,m2 :: 6.th dim index (AB-3) corresponding to time-step N-1 & N-2
63     C j :: loop index / field number
64     C nj :: record number
65     C msgBuf :: Informational/error message buffer
66     INTEGER fp
67     LOGICAL glf
68     _RL timList(1)
69     CHARACTER*(MAX_LEN_FNAM) fn
70     INTEGER listDim, nWrFlds, n3D
71     PARAMETER( listDim = 20 )
72     CHARACTER*(8) wrFldList(listDim)
73     #ifdef ALLOW_ADAMSBASHFORTH_3
74     INTEGER m1, m2
75     #endif
76     INTEGER j, nj
77     CHARACTER*(MAX_LEN_MBUF) msgBuf
78     #ifndef ALLOW_GENERIC_ADVDIFF
79     LOGICAL AdamsBashforthGt
80     LOGICAL AdamsBashforthGs
81     LOGICAL AdamsBashforth_T
82     LOGICAL AdamsBashforth_S
83     PARAMETER ( AdamsBashforthGt = .FALSE. ,
84     & AdamsBashforthGs = .FALSE. ,
85     & AdamsBashforth_T = .FALSE. ,
86     & AdamsBashforth_S = .FALSE. )
87     #endif
88    
89    
90     chenze
91     COMMON /ICOUNTER_COMM/ ICOUNTER
92     INTEGER ICOUNTER
93     CHARACTER*(MAX_LEN_MBUF) suff
94     WRITE(suff,'(I10.10)') myIter
95     chenze
96    
97    
98     C- Initialise:
99     DO j=1,listDim
100     wrFldList(j) = ' '
101     ENDDO
102    
103     C Write model fields
104     DO j = 1,MAX_LEN_FNAM
105     fn(j:j) = ' '
106     ENDDO
107     IF ( permPickup ) THEN
108     WRITE(fn,'(A,I10.10)') 'pickup.',myIter
109     ELSE
110     WRITE(fn,'(A,A)') 'pickup.',checkPtSuff(nCheckLev)
111     ENDIF
112    
113     C Going to really do some IO. Make everyone except master thread wait.
114     C this is done within IO routines => no longer needed
115     c _BARRIER
116    
117    
118     chenze
119    
120     call timer_start('asyncio_pickup ',myThid)
121     ICOUNTER = ICOUNTER+1
122     CALL beginNewEpoch(icounter,myIter,1)
123     CALL ASYNCIO_WRITE_FLD_XYZ_RL( 'U.',suff,uVel,iCounter,myThid)
124     CALL ASYNCIO_WRITE_FLD_XYZ_RL( 'V.',suff,vVel,iCounter,myThid)
125     CALL ASYNCIO_WRITE_FLD_XYZ_RL( 'T.',suff,theta,iCounter,myThid)
126     CALL ASYNCIO_WRITE_FLD_XYZ_RL( 'S.',suff,salt,iCounter,myThid)
127     CALL ASYNCIO_WRITE_FLD_XYZ_RL( 'X.',suff,gunm1,iCounter,myThid)
128     CALL ASYNCIO_WRITE_FLD_XYZ_RL( 'Y.',suff,gvnm1,iCounter,myThid)
129     CALL ASYNCIO_WRITE_FLD_XY_RL( 'N.',suff,etan,iCounter,myThid)
130     CALL ASYNCIO_WRITE_FLD_XY_RL( 'D.',suff,detahdt,iCounter,myThid)
131     CALL ASYNCIO_WRITE_FLD_XY_RL( 'H.',suff,etahnm1,iCounter,myThid)
132     call timer_stop('asyncio_pickup ',myThid)
133    
134     return
135     chenze
136    
137    
138    
139     IF (pickup_write_mdsio) THEN
140    
141     fp = precFloat64
142     j = 0
143     C record number < 0 : a hack not to write meta files now:
144    
145     C--- write State 3-D fields for restart
146     j = j + 1
147     CALL WRITE_REC_3D_RL( fn, fp, Nr, uVel, -j, myIter, myThid )
148     IF (j.LE.listDim) wrFldList(j) = 'Uvel '
149     j = j + 1
150     CALL WRITE_REC_3D_RL( fn, fp, Nr, vVel, -j, myIter, myThid )
151     IF (j.LE.listDim) wrFldList(j) = 'Vvel '
152    
153     j = j + 1
154     CALL WRITE_REC_3D_RL( fn, fp, Nr, theta, -j, myIter, myThid )
155     IF (j.LE.listDim) wrFldList(j) = 'Theta '
156     j = j + 1
157     CALL WRITE_REC_3D_RL( fn, fp, Nr, salt, -j, myIter, myThid )
158     IF (j.LE.listDim) wrFldList(j) = 'Salt '
159     C--- write 3-D fields for AB-restart
160     #ifdef ALLOW_ADAMSBASHFORTH_3
161     m1 = 1 + MOD(myIter+1,2)
162     m2 = 1 + MOD( myIter ,2)
163     IF ( momStepping ) THEN
164     C-- U velocity:
165     IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
166     j = j + 1
167     CALL WRITE_REC_3D_RL( fn, fp, Nr, guNm(1-OLx,1-OLy,1,1,1,m1),
168     & -j, myIter, myThid )
169     IF (j.LE.listDim) wrFldList(j) = 'GuNm1 '
170     ENDIF
171     IF ( beta_AB.NE.0. ) THEN
172     j = j + 1
173     CALL WRITE_REC_3D_RL( fn, fp, Nr, guNm(1-OLx,1-OLy,1,1,1,m2),
174     & -j, myIter, myThid )
175     IF (j.LE.listDim) wrFldList(j) = 'GuNm2 '
176     ENDIF
177     C-- V velocity:
178     IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
179     j = j + 1
180     CALL WRITE_REC_3D_RL( fn, fp, Nr, gvNm(1-OLx,1-OLy,1,1,1,m1),
181     & -j, myIter, myThid )
182     IF (j.LE.listDim) wrFldList(j) = 'GvNm1 '
183     ENDIF
184     IF ( beta_AB.NE.0. ) THEN
185     j = j + 1
186     CALL WRITE_REC_3D_RL( fn, fp, Nr, gvNm(1-OLx,1-OLy,1,1,1,m2),
187     & -j, myIter, myThid )
188     IF (j.LE.listDim) wrFldList(j) = 'GvNm2 '
189     ENDIF
190     ENDIF
191     C-- Temperature:
192     IF ( AdamsBashforthGt.OR.AdamsBashforth_T ) THEN
193     IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
194     j = j + 1
195     CALL WRITE_REC_3D_RL( fn, fp, Nr, gtNm(1-OLx,1-OLy,1,1,1,m1),
196     & -j, myIter, myThid )
197     IF (j.LE.listDim) THEN
198     IF ( AdamsBashforthGt ) wrFldList(j) = 'GtNm1 '
199     IF ( AdamsBashforth_T ) wrFldList(j) = 'TempNm1 '
200     ENDIF
201     ENDIF
202     IF ( beta_AB.NE.0. ) THEN
203     j = j + 1
204     CALL WRITE_REC_3D_RL( fn, fp, Nr, gtNm(1-OLx,1-OLy,1,1,1,m2),
205     & -j, myIter, myThid )
206     IF (j.LE.listDim) THEN
207     IF ( AdamsBashforthGt ) wrFldList(j) = 'GtNm2 '
208     IF ( AdamsBashforth_T ) wrFldList(j) = 'TempNm2 '
209     ENDIF
210     ENDIF
211     ENDIF
212     C-- Salinity:
213     IF ( AdamsBashforthGs.OR.AdamsBashforth_S ) THEN
214     IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
215     j = j + 1
216     CALL WRITE_REC_3D_RL( fn, fp, Nr, gsNm(1-OLx,1-OLy,1,1,1,m1),
217     & -j, myIter, myThid )
218     IF (j.LE.listDim) THEN
219     IF ( AdamsBashforthGs ) wrFldList(j) = 'GsNm1 '
220     IF ( AdamsBashforth_S ) wrFldList(j) = 'SaltNm1 '
221     ENDIF
222     ENDIF
223     IF ( beta_AB.NE.0. ) THEN
224     j = j + 1
225     CALL WRITE_REC_3D_RL( fn, fp, Nr, gsNm(1-OLx,1-OLy,1,1,1,m2),
226     & -j, myIter, myThid )
227     IF (j.LE.listDim) THEN
228     IF ( AdamsBashforthGs ) wrFldList(j) = 'GsNm2 '
229     IF ( AdamsBashforth_S ) wrFldList(j) = 'SaltNm2 '
230     ENDIF
231     ENDIF
232     ENDIF
233     #ifdef ALLOW_NONHYDROSTATIC
234     C-- W velocity:
235     IF ( nonHydrostatic ) THEN
236     IF ( alph_AB.NE.0. .OR. beta_AB.NE.0. ) THEN
237     j = j + 1
238     CALL WRITE_REC_3D_RL( fn, fp, Nr, gwNm(1-OLx,1-OLy,1,1,1,m1),
239     & -j, myIter, myThid )
240     IF (j.LE.listDim) wrFldList(j) = 'GwNm1 '
241     ENDIF
242     IF ( beta_AB.NE.0. ) THEN
243     j = j + 1
244     CALL WRITE_REC_3D_RL( fn, fp, Nr, gwNm(1-OLx,1-OLy,1,1,1,m2),
245     & -j, myIter, myThid )
246     IF (j.LE.listDim) wrFldList(j) = 'GwNm2 '
247     ENDIF
248     ENDIF
249     #endif /* ALLOW_NONHYDROSTATIC */
250     #else /* ALLOW_ADAMSBASHFORTH_3 */
251     IF ( momStepping ) THEN
252     j = j + 1
253     CALL WRITE_REC_3D_RL( fn, fp, Nr, guNm1, -j, myIter, myThid )
254     IF (j.LE.listDim) wrFldList(j) = 'GuNm1 '
255     j = j + 1
256     CALL WRITE_REC_3D_RL( fn, fp, Nr, gvNm1, -j, myIter, myThid )
257     IF (j.LE.listDim) wrFldList(j) = 'GvNm1 '
258     ENDIF
259     IF ( AdamsBashforthGt ) THEN
260     j = j + 1
261     CALL WRITE_REC_3D_RL( fn, fp, Nr, gtNm1, -j, myIter, myThid )
262     IF (j.LE.listDim) wrFldList(j) = 'GtNm1 '
263     ENDIF
264     IF ( AdamsBashforthGs ) THEN
265     j = j + 1
266     CALL WRITE_REC_3D_RL( fn, fp, Nr, gsNm1, -j, myIter, myThid )
267     IF (j.LE.listDim) wrFldList(j) = 'GsNm1 '
268     ENDIF
269     #ifdef ALLOW_NONHYDROSTATIC
270     IF ( nonHydrostatic ) THEN
271     j = j + 1
272     CALL WRITE_REC_3D_RL( fn, fp, Nr, gwNm1, -j, myIter, myThid )
273     IF (j.LE.listDim) wrFldList(j) = 'GwNm1 '
274     ENDIF
275     #endif /* ALLOW_NONHYDROSTATIC */
276     #endif /* ALLOW_ADAMSBASHFORTH_3 */
277    
278     C- write Full Pressure for EOS in pressure:
279     IF ( useDynP_inEos_Zc ) THEN
280     j = j + 1
281     CALL WRITE_REC_3D_RL( fn, fp, Nr,totPhiHyd,-j,myIter, myThid )
282     IF (j.LE.listDim) wrFldList(j) = 'PhiHyd '
283     ENDIF
284     #ifdef ALLOW_NONHYDROSTATIC
285     IF ( use3Dsolver ) THEN
286     j = j + 1
287     CALL WRITE_REC_3D_RL( fn, fp, Nr, phi_nh, -j, myIter, myThid )
288     IF (j.LE.listDim) wrFldList(j) = 'Phi_NHyd'
289     ENDIF
290     #endif /* ALLOW_NONHYDROSTATIC */
291     #ifdef ALLOW_ADDFLUID
292     C- write mass source/sink of fluid (but not needed if selectAddFluid=-1)
293     IF ( selectAddFluid.NE.0 ) THEN
294     j = j + 1
295     CALL WRITE_REC_3D_RL( fn, fp, Nr,addMass,-j,myIter, myThid )
296     IF (j.LE.listDim) wrFldList(j) = 'AddMass '
297     ENDIF
298     #endif /* ALLOW_ADDFLUID */
299    
300     n3D = j
301     C--- Write 2-D fields, starting with Eta:
302     j = j + 1
303     nj = -( n3D*(Nr-1) + j )
304     CALL WRITE_REC_3D_RL( fn, fp, 1 , etaN, nj, myIter, myThid )
305     IF (j.LE.listDim) wrFldList(j) = 'EtaN '
306     #ifdef ALLOW_NONHYDROSTATIC
307     IF ( selectNHfreeSurf.GE.1 ) THEN
308     j = j + 1
309     nj = -( n3D*(Nr-1) + j )
310     CALL WRITE_REC_3D_RL( fn, fp, 1, dPhiNH, nj, myIter, myThid )
311     IF (j.LE.listDim) wrFldList(j) = 'dPhiNH '
312     ENDIF
313     #endif /* ALLOW_NONHYDROSTATIC */
314     #ifdef EXACT_CONSERV
315     c IF ( exactConserv ) THEN
316     j = j + 1
317     nj = -( n3D*(Nr-1) + j )
318     CALL WRITE_REC_3D_RL( fn, fp, 1, dEtaHdt, nj, myIter, myThid )
319     IF (j.LE.listDim) wrFldList(j) = 'dEtaHdt '
320     c ENDIF
321     C- note: always write dEtaHdt & EtaH but read only if exactConserv & nonlinFreeSurf
322     C this works only because nonlinFreeSurf > 0 => exactConserv=T
323     c IF ( nonlinFreeSurf.GT.0 ) THEN
324     j = j + 1
325     nj = -( n3D*(Nr-1) + j )
326     CALL WRITE_REC_3D_RL( fn, fp, 1, etaHnm1, nj, myIter, myThid )
327     IF (j.LE.listDim) wrFldList(j) = 'EtaH '
328     c ENDIF
329     #endif /* EXACT_CONSERV */
330     C--------------------------
331     nWrFlds = j
332     IF ( nWrFlds.GT.listDim ) THEN
333     WRITE(msgBuf,'(2A,I5,A)') 'WRITE_PICKUP: ',
334     & 'trying to write ',nWrFlds,' fields'
335     CALL PRINT_ERROR( msgBuf, myThid )
336     WRITE(msgBuf,'(2A,I5,A)') 'WRITE_PICKUP: ',
337     & 'field-list dimension (listDim=',listDim,') too small'
338     CALL PRINT_ERROR( msgBuf, myThid )
339     STOP 'ABNORMAL END: S/R WRITE_PICKUP (list-size Pb)'
340     ENDIF
341     #ifdef ALLOW_MDSIO
342     C- Note: temporary: since it is a pain to add more arguments to
343     C all MDSIO S/R, uses instead this specific S/R to write only
344     C meta files but with more informations in it.
345     nj = ABS(nj)
346     glf = globalFiles
347     timList(1) = myTime
348     CALL MDS_WR_METAFILES( fn, fp, glf, .FALSE.,
349     & 0, 0, 1, ' ',
350     & nWrFlds, wrFldList,
351     & 1, timList, oneRL,
352     & nj, myIter, myThid )
353     #endif /* ALLOW_MDSIO */
354     C--------------------------
355     ENDIF
356    
357     #ifdef ALLOW_MNC
358     IF (useMNC .AND. pickup_write_mnc) THEN
359     IF ( permPickup ) THEN
360     WRITE(fn,'(A)') 'pickup'
361     ELSE
362     WRITE(fn,'(A,A)') 'pickup.',checkPtSuff(nCheckLev)
363     ENDIF
364     C First ***define*** the file group name
365     CALL MNC_CW_SET_UDIM(fn, 0, myThid)
366     IF ( permPickup ) THEN
367     CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, 0, myThid)
368     ELSE
369     CALL MNC_CW_SET_CITER(fn, 2, -1, -1, -1, myThid)
370     ENDIF
371     C Then set the actual unlimited dimension
372     CALL MNC_CW_SET_UDIM(fn, 1, myThid)
373     CALL MNC_CW_RL_W_S('D',fn,0,0,'T', myTime, myThid)
374     CALL MNC_CW_I_W_S('I',fn,0,0,'iter', myIter, myThid)
375     CALL MNC_CW_RL_W('D',fn,0,0,'U', uVel, myThid)
376     CALL MNC_CW_RL_W('D',fn,0,0,'V', vVel, myThid)
377     CALL MNC_CW_RL_W('D',fn,0,0,'Temp', theta, myThid)
378     CALL MNC_CW_RL_W('D',fn,0,0,'S', salt, myThid)
379     CALL MNC_CW_RL_W('D',fn,0,0,'Eta', etaN, myThid)
380     #ifndef ALLOW_ADAMSBASHFORTH_3
381     CALL MNC_CW_RL_W('D',fn,0,0,'gUnm1', guNm1, myThid)
382     CALL MNC_CW_RL_W('D',fn,0,0,'gVnm1', gvNm1, myThid)
383     CALL MNC_CW_RL_W('D',fn,0,0,'gTnm1', gtNm1, myThid)
384     CALL MNC_CW_RL_W('D',fn,0,0,'gSnm1', gsNm1, myThid)
385     #endif /* ALLOW_ADAMSBASHFORTH_3 */
386     #ifdef EXACT_CONSERV
387     CALL MNC_CW_RL_W('D',fn,0,0,'dEtaHdt', dEtaHdt, myThid)
388     CALL MNC_CW_RL_W('D',fn,0,0,'EtaH', etaHnm1, myThid)
389     #endif
390     #ifdef ALLOW_NONHYDROSTATIC
391     IF ( use3Dsolver ) THEN
392     CALL MNC_CW_RL_W('D',fn,0,0,'phi_nh', phi_nh, myThid)
393     c CALL MNC_CW_RL_W('D',fn,0,0,'gW', gW, myThid)
394     #ifndef ALLOW_ADAMSBASHFORTH_3
395     CALL MNC_CW_RL_W('D',fn,0,0,'gWnm1', gwNm1, myThid)
396     #endif
397     ENDIF
398     #endif
399     IF ( useDynP_inEos_Zc ) THEN
400     CALL MNC_CW_RL_W('D',fn,0,0,'phiHyd', totPhiHyd, myThid)
401     ENDIF
402     CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
403     ENDIF
404     #endif /* ALLOW_MNC */
405    
406     C-- Every one else must wait until writing is done.
407     C this is done within IO routines => no longer needed
408     c _BARRIER
409    
410     RETURN
411     END

  ViewVC Help
Powered by ViewVC 1.1.22