/[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.8 - (hide annotations) (download)
Tue Dec 18 15:49:14 2007 UTC (16 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint59m
Changes since 1.7: +2 -1 lines
add a BARRIER after calling CHECK_PICKUP

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

  ViewVC Help
Powered by ViewVC 1.1.22