/[MITgcm]/MITgcm/pkg/ptracers/ptracers_read_pickup.F
ViewVC logotype

Annotation of /MITgcm/pkg/ptracers/ptracers_read_pickup.F

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


Revision 1.15 - (hide annotations) (download)
Thu Mar 8 17:05:44 2012 UTC (12 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64i, checkpoint64h, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63k, checkpoint64
Changes since 1.14: +18 -18 lines
-rename PTRACERS_RESTART.h to PTRACERS_START.h
-add run-time flag to switch on/off tracer time-stepping

1 jmc 1.15 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_read_pickup.F,v 1.14 2010/01/02 23:42:51 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4 jahn 1.11 #include "GAD_OPTIONS.h"
5 jmc 1.1 #include "PTRACERS_OPTIONS.h"
6    
7     CBOP
8     C !ROUTINE: PTRACERS_READ_PICKUP
9    
10     C !INTERFACE:
11     SUBROUTINE PTRACERS_READ_PICKUP( myIter, myThid )
12    
13     C !DESCRIPTION:
14     C Reads current state of passive tracers from a pickup file
15    
16     C !USES:
17 jahn 1.11 #include "PTRACERS_MOD.h"
18 jmc 1.1 IMPLICIT NONE
19     #include "SIZE.h"
20     #include "EEPARAMS.h"
21     #include "PARAMS.h"
22 jahn 1.11 #include "GAD.h"
23 jmc 1.1 #include "PTRACERS_SIZE.h"
24 jmc 1.5 #include "PTRACERS_PARAMS.h"
25 jmc 1.15 #include "PTRACERS_START.h"
26 jmc 1.5 #include "PTRACERS_FIELDS.h"
27 jmc 1.1
28     C !INPUT PARAMETERS:
29     C myIter :: time-step number
30     C myThid :: thread number
31     INTEGER myIter
32     INTEGER myThid
33    
34     #ifdef ALLOW_PTRACERS
35    
36     C !LOCAL VARIABLES:
37 jmc 1.6 C iTracer :: tracer index
38     C iRec :: record number
39     C fn :: character buffer for creating filename
40     C prec :: precision of pickup files
41     C filePrec :: pickup-file precision (read from meta file)
42     C nbFields :: number of fields in pickup file (read from meta file)
43     C fldName :: Name of the field to read
44     C missFldList :: List of missing fields (attempted to read but not found)
45     C missFldDim :: Dimension of missing fields list array: missFldList
46     C nMissing :: Number of missing fields (attempted to read but not found)
47     C j :: loop index
48     C nj :: record number
49     C ioUnit :: temp for writing msg unit
50     C msgBuf :: Informational/error message buffer
51 jmc 1.14 INTEGER iTracer, iRec, prec
52 jmc 1.6 INTEGER filePrec, nbFields
53     INTEGER missFldDim, nMissing
54     INTEGER nj, ioUnit
55     PARAMETER( missFldDim = 2*PTRACERS_num )
56 jmc 1.10 CHARACTER*(MAX_LEN_FNAM) fn
57 jmc 1.6 CHARACTER*(8) fldName, missFldList(missFldDim)
58     CHARACTER*(MAX_LEN_MBUF) msgBuf
59 jmc 1.14 #ifdef PTRACERS_ALLOW_DYN_STATE
60     INTEGER n
61     #endif
62 jmc 1.1 CEOP
63    
64 jmc 1.14 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
65 jmc 1.2
66 jmc 1.1 #ifdef ALLOW_MNC
67     IF ( PTRACERS_pickup_read_mnc ) THEN
68     C Read variables from the pickup file
69     WRITE(fn,'(a)') 'pickup_ptracers'
70     CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid)
71     CALL MNC_CW_SET_UDIM(fn, 1, myThid)
72     CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, -1, myThid)
73 jmc 1.6 DO iTracer = 1, PTRACERS_numInUse
74 jmc 1.1 CALL MNC_CW_RL_R('D',fn,0,0, PTRACERS_names(iTracer),
75 jmc 1.5 & gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),myThid)
76 jmc 1.15 CALL EXCH_3D_RL( gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),
77 jmc 1.6 & Nr, myThid )
78 jmc 1.1 ENDDO
79     CALL MNC_CW_SET_UDIM(fn, 2, myThid)
80 jmc 1.6 DO iTracer = 1, PTRACERS_numInUse
81 jmc 1.1 CALL MNC_CW_RL_R('D',fn,0,0, PTRACERS_names(iTracer),
82     & pTracer(1-OLx,1-OLy,1,1,1,iTracer),myThid)
83 jmc 1.15 CALL EXCH_3D_RL( pTracer(1-OLx,1-OLy,1,1,1,iTracer),
84 jmc 1.6 & Nr, myThid )
85 jmc 1.1 ENDDO
86     ENDIF
87 jahn 1.11 IF ( useMNC .AND. PTRACERS_pickup_read_mnc ) THEN
88     DO iTracer = 1, PTRACERS_numInUse
89     IF ( PTRACERS_SOM_Advection(iTracer) ) THEN
90     WRITE(msgBuf,'(3A)')'PTRACERS_READ_PICKUP: MNC not yet coded',
91     & ' for SOM advection',
92     & ' => read bin file instead'
93     CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
94     & SQUEEZE_RIGHT, myThid)
95     ENDIF
96     ENDDO
97     ENDIF
98 jmc 1.1 #endif /* ALLOW_MNC */
99 jmc 1.2
100 jmc 1.1 IF ( PTRACERS_pickup_read_mdsio ) THEN
101    
102 jmc 1.6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
103    
104     IF ( pickupSuff.EQ.' ' ) THEN
105 jmc 1.4 WRITE(fn,'(A,I10.10)') 'pickup_ptracers.',myIter
106 jmc 1.6 ELSE
107 jmc 1.4 WRITE(fn,'(A,A10)') 'pickup_ptracers.',pickupSuff
108 jmc 1.6 ENDIF
109     prec = precFloat64
110    
111     CALL READ_MFLDS_SET(
112     I fn,
113     O nbFields, filePrec,
114     I Nr, myIter, myThid )
115     _BEGIN_MASTER( myThid )
116     c IF ( filePrec.NE.0 .AND. filePrec.NE.prec ) THEN
117     IF ( nbFields.GE.0 .AND. filePrec.NE.prec ) THEN
118 jmc 1.9 WRITE(msgBuf,'(2A,I4)') 'PTRACERS_READ_PICKUP: ',
119 jmc 1.6 & 'pickup-file binary precision do not match !'
120     CALL PRINT_ERROR( msgBuf, myThid )
121 jmc 1.9 WRITE(msgBuf,'(A,2(A,I4))') 'PTRACERS_READ_PICKUP: ',
122 jmc 1.6 & 'file prec.=', filePrec, ' but expecting prec.=', prec
123     CALL PRINT_ERROR( msgBuf, myThid )
124 jmc 1.9 STOP 'ABNORMAL END: S/R PTRACERS_READ_PICKUP (data-prec Pb)'
125 jmc 1.6 ENDIF
126     _END_MASTER( myThid )
127    
128     IF ( nbFields.LE.0 ) THEN
129     C- No meta-file or old meta-file without List of Fields
130     ioUnit = errorMessageUnit
131     IF ( pickupStrictlyMatch ) THEN
132 jmc 1.9 WRITE(msgBuf,'(4A)') 'PTRACERS_READ_PICKUP: ',
133 jmc 1.6 & 'no field-list found in meta-file',
134     & ' => cannot check for strick-matching'
135     CALL PRINT_ERROR( msgBuf, myThid )
136 jmc 1.9 WRITE(msgBuf,'(4A)') 'PTRACERS_READ_PICKUP: ',
137 jmc 1.6 & 'try with " pickupStrictlyMatch=.FALSE.,"',
138     & ' in file: "data", NameList: "PARM03"'
139     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
140 jmc 1.9 STOP 'ABNORMAL END: S/R PTRACERS_READ_PICKUP'
141 jmc 1.6 ELSE
142 jmc 1.9 WRITE(msgBuf,'(4A)') 'WARNING >> PTRACERS_READ_PICKUP: ',
143 jmc 1.6 & ' no field-list found'
144     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
145     IF ( nbFields.EQ.-1 ) THEN
146     C- No meta-file
147     WRITE(msgBuf,'(4A)') 'WARNING >> ',
148     & ' try to read pickup as currently written'
149     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
150     ELSE
151     C- Old meta-file without List of Fields
152     WRITE(msgBuf,'(4A)') 'WARNING >> ',
153     & ' try to read pickup as it used to be written'
154     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
155     WRITE(msgBuf,'(4A)') 'WARNING >> ',
156 jmc 1.7 & ' until checkpoint59l (2007 Dec 17)'
157 jmc 1.6 CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
158     ENDIF
159     ENDIF
160     ENDIF
161    
162     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
163 jmc 1.2
164 jmc 1.6 C--- Very Old way to read ptracer pickup:
165     IF ( nbFields.EQ.0 .AND. usePickupBeforeC54 ) THEN
166 jmc 1.1 C Read fields as consecutive records
167 jmc 1.6 DO iTracer = 1, PTRACERS_numInUse
168 jmc 1.1 iRec = iTracer
169 jmc 1.2 CALL READ_REC_3D_RL( fn, prec, Nr,
170 jmc 1.15 O pTracer(1-OLx,1-OLy,1,1,1,iTracer),
171 jmc 1.2 I iRec, myIter, myThid )
172 jmc 1.15 CALL EXCH_3D_RL( pTracer(1-OLx,1-OLy,1,1,1,iTracer),
173 jmc 1.6 & Nr, myThid )
174 jmc 1.1 ENDDO
175    
176 jmc 1.3 C Read historical tendencies as consecutive records
177 jmc 1.6 c DO iTracer = 1,PTRACERS_numInUse
178     c iRec = iTracer + PTRACERS_num
179     c CALL READ_REC_3D_RL( fn, prec, Nr,
180 jmc 1.15 c O gPtr(1-OLx,1-OLy,1,1,1,iTracer),
181 jmc 1.6 c I iRec, myIter, myThid )
182 jmc 1.15 c CALL EXCH_3D_RL( gPtr(1-OLx,1-OLy,1,1,1,iTracer),
183 jmc 1.6 c & Nr, myThid )
184     c ENDDO
185     DO iTracer = 1, PTRACERS_numInUse
186 jmc 1.1 iRec = iTracer + PTRACERS_num*2
187 jmc 1.2 CALL READ_REC_3D_RL( fn, prec, Nr,
188 jmc 1.15 O gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),
189 jmc 1.2 I iRec, myIter, myThid )
190 jmc 1.15 CALL EXCH_3D_RL( gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),
191 jmc 1.6 & Nr, myThid )
192 jmc 1.1 ENDDO
193    
194 jmc 1.6 ELSEIF ( nbFields.EQ.0 ) THEN
195     C--- Old way to read ptracer pickup:
196 jmc 1.3 C Read fields & tendencies (needed for AB) as consecutive records,
197 jmc 1.1 C one tracer after the other, only for tracers "InUse". Note:
198     C this allow to restart from a pickup with a different number of
199     C tracers, with write_pickup dumping all of them (PTRACERS_num).
200 jmc 1.6 DO iTracer = 1, PTRACERS_numInUse
201 jmc 1.2 iRec = 2*iTracer -1
202     CALL READ_REC_3D_RL( fn, prec, Nr,
203 jmc 1.15 O pTracer(1-OLx,1-OLy,1,1,1,iTracer),
204 jmc 1.2 I iRec, myIter, myThid )
205 jmc 1.1 iRec = 2*iTracer
206 jmc 1.2 CALL READ_REC_3D_RL( fn, prec, Nr,
207 jmc 1.15 O gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),
208 jmc 1.2 I iRec, myIter, myThid )
209 jmc 1.15 CALL EXCH_3D_RL( pTracer(1-OLx,1-OLy,1,1,1,iTracer),
210 jmc 1.6 & Nr, myThid )
211 jmc 1.15 CALL EXCH_3D_RL( gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),
212 jmc 1.6 & Nr, myThid )
213     ENDDO
214    
215     ELSE
216     C--- New way to read ptracer pickup:
217     nj = 0
218     DO iTracer = 1, PTRACERS_numInUse
219     C--- read pTracer 3-D fields for restart
220     fldName = 'pTr'//PTRACERS_ioLabel(iTracer)//' '
221     CALL READ_MFLDS_3D_RL( fldName,
222 jmc 1.15 O pTracer(1-OLx,1-OLy,1,1,1,iTracer),
223 jmc 1.6 & nj, prec, Nr, myIter, myThid )
224 jmc 1.15 CALL EXCH_3D_RL( pTracer(1-OLx,1-OLy,1,1,1,iTracer),
225 jmc 1.6 & Nr, myThid )
226     ENDDO
227     DO iTracer = 1, PTRACERS_numInUse
228     C--- read pTracer 3-D tendencies for AB-restart
229     IF ( PTRACERS_AdamsBashGtr(iTracer) ) THEN
230     fldName = 'gPtr'//PTRACERS_ioLabel(iTracer)//'m1'
231     CALL READ_MFLDS_3D_RL( fldName,
232 jmc 1.15 O gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),
233 jmc 1.6 & nj, prec, Nr, myIter, myThid )
234 jmc 1.15 CALL EXCH_3D_RL( gpTrNm1(1-OLx,1-OLy,1,1,1,iTracer),
235 jmc 1.6 & Nr, myThid )
236     ENDIF
237     ENDDO
238    
239     C-- end: new way to read pickup file
240     ENDIF
241    
242     C-- Check for missing fields:
243     nMissing = missFldDim
244     CALL READ_MFLDS_CHECK(
245     O missFldList,
246     U nMissing,
247     I myIter, myThid )
248     IF ( nMissing.GT.missFldDim ) THEN
249 jmc 1.9 WRITE(msgBuf,'(2A,I4)') 'PTRACERS_READ_PICKUP: ',
250 jmc 1.6 & 'missing fields list has been truncated to', missFldDim
251     CALL PRINT_ERROR( msgBuf, myThid )
252 jmc 1.9 STOP 'ABNORMAL END: S/R PTRACERS_READ_PICKUP (list-size Pb)'
253 jmc 1.6 ENDIF
254     CALL PTRACERS_CHECK_PICKUP(
255     I missFldList,
256     I nMissing, nbFields,
257     I myIter, myThid )
258 jahn 1.11
259 jmc 1.12 #ifdef PTRACERS_ALLOW_DYN_STATE
260 jahn 1.11 C-- Read pickup file with 2nd.Order moment fields
261     DO iTracer = 1, PTRACERS_numInUse
262     IF ( PTRACERS_SOM_Advection(iTracer) ) THEN
263    
264     IF (pickupSuff .EQ. ' ') THEN
265     WRITE(fn,'(3A,I10.10)') 'pickup_somTRAC',
266     & PTRACERS_ioLabel(iTracer),'.', myIter
267     ELSE
268     WRITE(fn,'(3A,A10)') 'pickup_somTRAC',
269     & PTRACERS_ioLabel(iTracer),'.', pickupSuff
270     ENDIF
271 jmc 1.12 WRITE(msgBuf,'(A,I3,A)')'PTRACERS_READ_PICKUP: iTracer = ',
272 jahn 1.11 & iTracer,
273     & ' : reading 2nd-order moments from file '
274     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
275     & SQUEEZE_RIGHT, myThid)
276     CALL PRINT_MESSAGE( fn, standardMessageUnit,
277     & SQUEEZE_RIGHT, myThid)
278     prec = precFloat64
279     C Read 2nd Order moments as consecutive records
280     DO n=1,nSOM
281     iRec = n
282     CALL READ_REC_3D_RL( fn, prec, Nr,
283 jmc 1.13 O _Ptracers_som(:,:,:,:,:,n,iTracer),
284 jahn 1.11 I iRec, myIter, myThid )
285     ENDDO
286 jmc 1.13 CALL GAD_EXCH_SOM( _Ptracers_som(:,:,:,:,:,:,iTracer),
287 jahn 1.11 & Nr, myThid )
288     ENDIF
289     ENDDO
290 jmc 1.12 #endif /* PTRACERS_ALLOW_DYN_STATE */
291 jmc 1.1
292 jmc 1.6 C-- end: pickup_read_mdsio
293 jmc 1.1 ENDIF
294    
295     #endif /* ALLOW_PTRACERS */
296    
297     RETURN
298     END

  ViewVC Help
Powered by ViewVC 1.1.22