/[MITgcm]/MITgcm/pkg/atm_compon_interf/atm_cpl_read_pickup.F
ViewVC logotype

Annotation of /MITgcm/pkg/atm_compon_interf/atm_cpl_read_pickup.F

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


Revision 1.9 - (hide annotations) (download)
Fri Mar 24 23:31:41 2017 UTC (7 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, HEAD
Changes since 1.8: +9 -3 lines
use new S/R RW_GET_SUFFIX to get file suffix (according to "rwSuffixType")

1 jmc 1.9 C $Header: /u/gcmpack/MITgcm/pkg/atm_compon_interf/atm_cpl_read_pickup.F,v 1.8 2016/01/13 21:36:26 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4 jmc 1.5 #include "ATM_CPL_OPTIONS.h"
5 jmc 1.1
6 jmc 1.2 CBOP
7     C !ROUTINE: ATM_CPL_READ_PICKUP
8     C !INTERFACE:
9 jmc 1.1 SUBROUTINE ATM_CPL_READ_PICKUP( myIter, myThid )
10 jmc 1.2
11     C !DESCRIPTION: \bv
12 jmc 1.1 C *==========================================================*
13     C | SUBROUTINE ATM_CPL_READ_PICKUP
14     C | o Reads fields from a pickup file for a restart
15     C *==========================================================*
16     C *==========================================================*
17 jmc 1.2 C \ev
18    
19     C !USES:
20 jmc 1.1 IMPLICIT NONE
21    
22     C == Global variables ==
23     #include "SIZE.h"
24     #include "EEPARAMS.h"
25     #include "PARAMS.h"
26     #include "CPL_PARAMS.h"
27     #include "ATMCPL.h"
28    
29 jmc 1.2 C !INPUT/OUTPUT PARAMETERS:
30     C myIter :: Current time-step number
31     C myThid :: my Thread Id number
32 jmc 1.1 INTEGER myIter
33     INTEGER myThid
34    
35     #ifdef COMPONENT_MODULE
36 jmc 1.6 C !LOCAL VARIABLES:
37     C fn :: character buffer for creating filename
38     C fp :: 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 missFldList :: List of missing fields (attempted to read but not found)
42     C missFldDim :: Dimension of missing fields list array: missFldList
43     C nMissing :: Number of missing fields (attempted to read but not found)
44     C j :: loop index
45     C nj :: record number
46     C ioUnit :: temp for writing msg unit
47     C msgBuf :: Informational/error message buffer
48     INTEGER fp
49     INTEGER filePrec, nbFields
50     INTEGER missFldDim, nMissing
51     INTEGER j, nj, ioUnit
52     PARAMETER( missFldDim = 18 )
53 jmc 1.9 CHARACTER*(10) suff
54 jmc 1.1 CHARACTER*(MAX_LEN_FNAM) fn
55 jmc 1.6 CHARACTER*(8) missFldList(missFldDim)
56     CHARACTER*(MAX_LEN_MBUF) msgBuf
57     INTEGER i, bi, bj
58     CEOP
59    
60     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
61 jmc 1.1
62 jmc 1.6 IF ( pickupSuff.EQ.' ' ) THEN
63 jmc 1.9 IF ( rwSuffixType.EQ.0 ) THEN
64     WRITE(fn,'(A,I10.10)') 'pickup_cpl.', myIter
65     ELSE
66     CALL RW_GET_SUFFIX( suff, startTime, myIter, myThid )
67     WRITE(fn,'(A,A)') 'pickup_cpl.', suff
68     ENDIF
69 jmc 1.6 ELSE
70 jmc 1.9 WRITE(fn,'(A,A10)') 'pickup_cpl.', pickupSuff
71 jmc 1.6 ENDIF
72     fp = precFloat64
73    
74     CALL READ_MFLDS_SET(
75     I fn,
76     O nbFields, filePrec,
77     I Nr, myIter, myThid )
78     _BEGIN_MASTER( myThid )
79     c IF ( filePrec.NE.0 .AND. filePrec.NE.fp ) THEN
80     IF ( nbFields.GE.0 .AND. filePrec.NE.fp ) THEN
81     WRITE(msgBuf,'(2A,I4)') 'ATM_CPL_READ_PICKUP: ',
82     & 'pickup-file binary precision do not match !'
83     CALL PRINT_ERROR( msgBuf, myThid )
84     WRITE(msgBuf,'(A,2(A,I4))') 'ATM_CPL_READ_PICKUP: ',
85     & 'file prec.=', filePrec, ' but expecting prec.=', fp
86     CALL PRINT_ERROR( msgBuf, myThid )
87     CALL ALL_PROC_DIE( 0 )
88     STOP 'ABNORMAL END: S/R ATM_CPL_READ_PICKUP (data-prec Pb)'
89     ENDIF
90     _END_MASTER( myThid )
91    
92     IF ( nbFields.LE.0 ) THEN
93     C- No meta-file or old meta-file without List of Fields
94     ioUnit = errorMessageUnit
95     IF ( pickupStrictlyMatch ) THEN
96     WRITE(msgBuf,'(4A)') 'ATM_CPL_READ_PICKUP: ',
97     & 'no field-list found in meta-file',
98     & ' => cannot check for strick-matching'
99     CALL PRINT_ERROR( msgBuf, myThid )
100     WRITE(msgBuf,'(4A)') 'ATM_CPL_READ_PICKUP: ',
101     & 'try with " pickupStrictlyMatch=.FALSE.,"',
102     & ' in file: "data", NameList: "PARM03"'
103     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
104     CALL ALL_PROC_DIE( myThid )
105     STOP 'ABNORMAL END: S/R ATM_CPL_READ_PICKUP'
106     ELSE
107     WRITE(msgBuf,'(4A)') 'WARNING >> ATM_CPL_READ_PICKUP: ',
108     & ' no field-list found'
109     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
110     IF ( nbFields.EQ.-1 ) THEN
111     C- No meta-file
112     WRITE(msgBuf,'(4A)') 'WARNING >> ',
113     & ' try to read pickup as currently written'
114     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
115     ELSE
116     C- Old meta-file without List of Fields
117     WRITE(msgBuf,'(4A)') 'WARNING >> ',
118     & ' try to read pickup as it used to be written'
119     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
120     WRITE(msgBuf,'(4A)') 'WARNING >> ',
121     & ' until checkpoint65r (2015 Dec 21)'
122     CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid )
123     c WRITE(msgBuf,'(4A)') 'ATM_CPL_READ_PICKUP: ',
124     c & 'no field-list found in meta-file'
125     c CALL PRINT_ERROR( msgBuf, myThid )
126     c CALL ALL_PROC_DIE( myThid )
127     c STOP 'ABNORMAL END: S/R ATM_CPL_READ_PICKUP'
128     ENDIF
129     ENDIF
130     ENDIF
131    
132     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
133    
134     IF ( nbFields.EQ.0 ) THEN
135     C--- Old way to read pickup:
136    
137     c CALL READ_REC_3D_RL( fn, fp, 1, ocMxlD , 1, myIter,myThid )
138     c CALL READ_REC_3D_RL( fn, fp, 1, SSTocn , 2, myIter,myThid )
139     c CALL READ_REC_3D_RL( fn, fp, 1, SSSocn , 3, myIter,myThid )
140     c CALL READ_REC_3D_RL( fn, fp, 1, vSqocn , 4, myIter,myThid )
141 jmc 1.8 c CALL READ_REC_3D_RL( fn, fp, 1, atmSLPr , 5, myIter,myThid )
142 jmc 1.6 CALL READ_REC_3D_RL( fn, fp, 1, HeatFlux , 6, myIter,myThid )
143     CALL READ_REC_3D_RL( fn, fp, 1, qShortWave, 7, myIter,myThid )
144     CALL READ_REC_3D_RL( fn, fp, 1, tauX , 8, myIter,myThid )
145     CALL READ_REC_3D_RL( fn, fp, 1, tauY , 9, myIter,myThid )
146     CALL READ_REC_3D_RL( fn, fp, 1, EvMPrFlux , 10, myIter,myThid )
147     #ifdef ALLOW_LAND
148     CALL READ_REC_3D_RL( fn, fp, 1, RunOffFlux, 11, myIter,myThid )
149     CALL READ_REC_3D_RL( fn, fp, 1, RunOffEnFx, 12, myIter,myThid )
150     #endif /* ALLOW_LAND */
151     #ifdef ALLOW_THSICE
152     CALL READ_REC_3D_RL( fn, fp, 1, iceSaltFlx, 13, myIter,myThid )
153     c CALL READ_REC_3D_RL( fn, fp, 1, seaIceMass, 14, myIter,myThid )
154     #endif /* ALLOW_THSICE */
155     #ifdef ALLOW_AIM
156     IF ( atm_cplExch_DIC ) THEN
157     c CALL READ_REC_3D_RL( fn,fp, 1, flxCO2ocn , 15, myIter,myThid )
158     CALL READ_REC_3D_RL( fn,fp, 1, airCO2 , 16, myIter,myThid )
159     CALL READ_REC_3D_RL( fn,fp, 1, sWSpeed , 17, myIter,myThid )
160     # ifdef ALLOW_THSICE
161 jmc 1.7 c CALL READ_REC_3D_RL( fn,fp,1,sIceFrac_cpl, 18, myIter,myThid )
162 jmc 1.6 # endif /* ALLOW_THSICE */
163     ENDIF
164     #endif /* ALLOW_AIM */
165    
166     ELSE
167     C--- New way to read ATM_CPL pickup:
168     nj = 0
169     C--- read ATM_CPL 3-D fields for restart
170     nj = nj*Nr
171    
172     C--- read ATM_CPL 2-D fields for restart
173     CALL READ_MFLDS_3D_RL( 'qHeatFlx', HeatFlux,
174     & nj, fp, 1 , myIter, myThid )
175     CALL READ_MFLDS_3D_RL( 'qShortW ', qShortWave,
176     & nj, fp, 1 , myIter, myThid )
177     CALL READ_MFLDS_3D_RL( 'surfTauX', tauX,
178     & nj, fp, 1 , myIter, myThid )
179     CALL READ_MFLDS_3D_RL( 'surfTauY', tauY,
180     & nj, fp, 1 , myIter, myThid )
181     CALL READ_MFLDS_3D_RL( 'Evp-Prec', EvMPrFlux,
182     & nj, fp, 1 , myIter, myThid )
183     #ifdef ALLOW_LAND
184     IF ( atm_cplExch_RunOff ) THEN
185     CALL READ_MFLDS_3D_RL('RunOffFx', RunOffFlux,
186     & nj, fp, 1 , myIter, myThid )
187     CALL READ_MFLDS_3D_RL('RnOfEnFx', RunOffEnFx,
188     & nj, fp, 1 , myIter, myThid )
189     ENDIF
190     #endif /* ALLOW_LAND */
191     #ifdef ALLOW_THSICE
192     IF ( atm_cplExch1W_sIce ) THEN
193     CALL READ_MFLDS_3D_RL('saltFlux', iceSaltFlx,
194     & nj, fp, 1 , myIter, myThid )
195     ENDIF
196 jmc 1.7 IF ( atm_cplExch_SaltPl ) THEN
197     CALL READ_MFLDS_3D_RL('sltPlmFx', saltPlmFlx_cpl,
198     & nj, fp, 1 , myIter, myThid )
199     ENDIF
200 jmc 1.6 #endif /* ALLOW_THSICE */
201     #ifdef ALLOW_AIM
202     IF ( atm_cplExch_DIC ) THEN
203     CALL READ_MFLDS_3D_RL('atm-CO2 ', airCO2,
204     & nj, fp, 1 , myIter, myThid )
205     CALL READ_MFLDS_3D_RL('wndSpeed', sWSpeed,
206     & nj, fp, 1 , myIter, myThid )
207     ENDIF
208     #endif /* ALLOW_AIM */
209    
210     C-- end: new way to read pickup file
211     ENDIF
212    
213     C-- Check for missing fields:
214     nMissing = missFldDim
215     CALL READ_MFLDS_CHECK(
216     O missFldList,
217     U nMissing,
218     I myIter, myThid )
219     IF ( nMissing.GT.missFldDim ) THEN
220     WRITE(msgBuf,'(2A,I4)') 'ATM_CPL_READ_PICKUP: ',
221     & 'missing fields list has been truncated to', missFldDim
222     CALL PRINT_ERROR( msgBuf, myThid )
223     CALL ALL_PROC_DIE( myThid )
224     STOP 'ABNORMAL END: S/R ATM_CPL_READ_PICKUP (list-size Pb)'
225     ENDIF
226     IF ( nMissing.GE.1 ) THEN
227     ioUnit = errorMessageUnit
228     DO j=1,nMissing
229     WRITE(msgBuf,'(4A)') 'ATM_CPL_READ_PICKUP: ',
230     & 'cannot restart without field "',missFldList(nj),'"'
231     CALL PRINT_ERROR( msgBuf, myThid )
232     ENDDO
233     CALL ALL_PROC_DIE( myThid )
234     STOP 'ABNORMAL END: S/R ATM_CPL_READ_PICKUP'
235     ENDIF
236    
237     C-- Update overlap regions:
238 jmc 1.1
239 jmc 1.6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
240 jmc 1.3
241 jmc 1.4 IF ( cpl_oldPickup ) THEN
242 jmc 1.3 _BARRIER
243     C- EmP & RunOff were (before checkpoint59h) in m/s , but are now in kg/m2/s:
244     DO bj = myByLo(myThid), myByHi(myThid)
245     DO bi = myBxLo(myThid), myBxHi(myThid)
246 jmc 1.4 DO j=1-OLy,sNy+OLy
247     DO i=1-OLx,sNx+OLx
248 jmc 1.3 EvMPrFlux (i,j,bi,bj) = EvMPrFlux (i,j,bi,bj)*rhoConstFresh
249 jmc 1.6 #ifdef ALLOW_LAND
250 jmc 1.3 RunOffFlux(i,j,bi,bj) = RunOffFlux(i,j,bi,bj)*rhoConstFresh
251 jmc 1.6 #endif /* ALLOW_LAND */
252 jmc 1.3 ENDDO
253     ENDDO
254     ENDDO
255     ENDDO
256 jmc 1.1 ENDIF
257    
258     #endif /* COMPONENT_MODULE */
259    
260     RETURN
261     END

  ViewVC Help
Powered by ViewVC 1.1.22