/[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.12 - (hide annotations) (download)
Fri May 9 21:44:31 2008 UTC (16 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61, checkpoint59r, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q
Changes since 1.11: +5 -7 lines
remove option: GAD_ALLOW_SOM_ADVECT

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

  ViewVC Help
Powered by ViewVC 1.1.22