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

Contents 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.7 - (show annotations) (download)
Wed Jan 6 00:42:51 2016 UTC (8 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65s
Changes since 1.6: +6 -7 lines
- to save memory space in ATM & OCN comp: add some #ifdef ALLOW_${PKG} around
  optionally exchanged fields (ALLOW_LAND for RunOff, ALLOW_THSICE for seaice,
   ALLOW_AIM for CO2)
- rename:   fracIce     -> sIceFrac_cpl (<- match coupler var name)
  + in ATM: fracIceTime -> sIceFracTime ; seaIceTime -> sIceMassTime.
- add 2-way thSIce vars exchange ; add Salt-Plume flux

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

  ViewVC Help
Powered by ViewVC 1.1.22