1 |
jscott |
1.1 |
|
2 |
|
|
#include "ctrparam.h" |
3 |
|
|
|
4 |
|
|
! ============================================================ |
5 |
|
|
! |
6 |
|
|
! CHEMADV.F: Calculating advection and eddy |
7 |
|
|
! transport of chemical species |
8 |
|
|
! |
9 |
|
|
! chemadv0 |
10 |
|
|
! chemadv |
11 |
|
|
! chemadv2 |
12 |
|
|
! |
13 |
|
|
! ------------------------------------------------------------ |
14 |
|
|
! |
15 |
|
|
! Author: Chien Wang |
16 |
|
|
! MIT Joint Program on Science and Policy |
17 |
|
|
! of Global Change |
18 |
|
|
! |
19 |
|
|
! ---------------------------------------------------------- |
20 |
|
|
! |
21 |
|
|
! Revision History: |
22 |
|
|
! |
23 |
|
|
! When Who What |
24 |
|
|
! ---- ---------- ------- |
25 |
|
|
! 062298 Chien Wang rev. |
26 |
|
|
! 080200 Chien Wang repack based on CliChem3 & add cpp |
27 |
|
|
! 101800 Chien Wang replaced if_3gases with cpp |
28 |
|
|
! 092001 Chien Wang add bc and oc |
29 |
|
|
! 051804 Chien Wang rev. for 46x11 |
30 |
|
|
! |
31 |
|
|
! ========================================================== |
32 |
|
|
|
33 |
|
|
! ======================= |
34 |
|
|
subroutine chemadv0 (dt) |
35 |
|
|
! ======================= |
36 |
|
|
|
37 |
|
|
|
38 |
|
|
#include "chem_para" |
39 |
|
|
#include "chem_com" |
40 |
|
|
|
41 |
|
|
dimension tracert(nlon,nlat,nlev) |
42 |
|
|
|
43 |
|
|
|
44 |
|
|
#if ( defined CPL_CHEM ) |
45 |
|
|
c |
46 |
|
|
c----------------------------------- |
47 |
|
|
c Calculating advection and eddy diffusion: |
48 |
|
|
c |
49 |
|
|
|
50 |
|
|
c |
51 |
|
|
c CFC11: |
52 |
|
|
c |
53 |
|
|
|
54 |
|
|
do i=1,n3d |
55 |
|
|
tracert(i,1,1)=cfc11(i,1,1) |
56 |
|
|
enddo |
57 |
|
|
|
58 |
|
|
call chemadv(8, |
59 |
|
|
& tracert,cfc11,cfc110,dt,ddepref) |
60 |
|
|
c |
61 |
|
|
c CFC12: |
62 |
|
|
c |
63 |
|
|
do i=1,n3d |
64 |
|
|
tracert(i,1,1) = cfc12(i,1,1) |
65 |
|
|
enddo |
66 |
|
|
|
67 |
|
|
call chemadv(8, |
68 |
|
|
& tracert,cfc12,cfc12,dt,ddepref) |
69 |
|
|
c |
70 |
|
|
c N2O: |
71 |
|
|
c |
72 |
|
|
do i=1,n3d |
73 |
|
|
tracert(i,1,1) = xn2o(i,1,1) |
74 |
|
|
enddo |
75 |
|
|
|
76 |
|
|
call chemadv(8, |
77 |
|
|
& tracert,xn2o,xn2o,dt,ddepref) |
78 |
|
|
|
79 |
|
|
! === if hfc, pfc, and sf6 are included: |
80 |
|
|
#if ( defined INC_3GASES ) |
81 |
|
|
|
82 |
|
|
! === 032698 |
83 |
|
|
! === HFC134a: |
84 |
|
|
! === |
85 |
|
|
|
86 |
|
|
do i=1,n3d |
87 |
|
|
tracert(i,1,1) = hfc134a(i,1,1) |
88 |
|
|
enddo |
89 |
|
|
|
90 |
|
|
call chemadv(8, |
91 |
|
|
& tracert,hfc134a,hfc134a,dt,ddepref) |
92 |
|
|
|
93 |
|
|
! === |
94 |
|
|
! === PFC: |
95 |
|
|
! === |
96 |
|
|
|
97 |
|
|
do i=1,n3d |
98 |
|
|
tracert(i,1,1) = pfc(i,1,1) |
99 |
|
|
enddo |
100 |
|
|
|
101 |
|
|
call chemadv(8, |
102 |
|
|
& tracert,pfc,pfc,dt,ddepref) |
103 |
|
|
|
104 |
|
|
! === |
105 |
|
|
! === SF6: |
106 |
|
|
! === |
107 |
|
|
|
108 |
|
|
do i=1,n3d |
109 |
|
|
tracert(i,1,1) = sf6(i,1,1) |
110 |
|
|
enddo |
111 |
|
|
|
112 |
|
|
call chemadv(8, |
113 |
|
|
& tracert,sf6,sf6,dt,ddepref) |
114 |
|
|
|
115 |
|
|
#endif |
116 |
|
|
|
117 |
|
|
! |
118 |
|
|
! === Black Carbon: |
119 |
|
|
! |
120 |
|
|
|
121 |
|
|
do i=1,n3d |
122 |
|
|
tracert(i,1,1) = bcarbon(i,1,1) |
123 |
|
|
enddo |
124 |
|
|
|
125 |
|
|
call chemadv(8, |
126 |
|
|
& tracert,bcarbon,bcarbon,dt,ddepbc) |
127 |
|
|
|
128 |
|
|
! |
129 |
|
|
! === Organic Carbon: |
130 |
|
|
! |
131 |
|
|
|
132 |
|
|
do i=1,n3d |
133 |
|
|
tracert(i,1,1) = ocarbon(i,1,1) |
134 |
|
|
enddo |
135 |
|
|
|
136 |
|
|
call chemadv(8, |
137 |
|
|
& tracert,ocarbon,ocarbon,dt,ddepoc) |
138 |
|
|
|
139 |
|
|
|
140 |
|
|
! === |
141 |
|
|
|
142 |
|
|
c |
143 |
|
|
c O3: |
144 |
|
|
c |
145 |
|
|
do i=1,n3d |
146 |
|
|
tracert(i,1,1) = o3(i,1,1) |
147 |
|
|
enddo |
148 |
|
|
|
149 |
|
|
c 051295 use chemadv2 with different top vbc: |
150 |
|
|
|
151 |
|
|
call chemadv2(8, |
152 |
|
|
& tracert,o3,o3,dt,ddepo3) |
153 |
|
|
c call chemadv(tracert,o3,o3,dt) |
154 |
|
|
|
155 |
|
|
c 051698 use prescribed top o3: |
156 |
|
|
|
157 |
|
|
do k=n_tropopause+1,nlev |
158 |
|
|
do j=1,nlat |
159 |
|
|
o3(1,j,k) = o3top(j,k-n_tropopause,mymonth) |
160 |
|
|
end do |
161 |
|
|
end do |
162 |
|
|
c |
163 |
|
|
c CO: |
164 |
|
|
c |
165 |
|
|
do i=1,n3d |
166 |
|
|
tracert(i,1,1) = co(i,1,1) |
167 |
|
|
enddo |
168 |
|
|
|
169 |
|
|
call chemadv(8, |
170 |
|
|
& tracert,co,co,dt,ddepref) |
171 |
|
|
|
172 |
|
|
c |
173 |
|
|
c CO2: |
174 |
|
|
c |
175 |
|
|
do i=1,n3d |
176 |
|
|
tracert(i,1,1) = zco2(i,1,1) |
177 |
|
|
enddo |
178 |
|
|
|
179 |
|
|
call chemadv(8, |
180 |
|
|
& tracert,zco2,zco2,dt,ddepref) |
181 |
|
|
|
182 |
|
|
c |
183 |
|
|
c NO: |
184 |
|
|
c |
185 |
|
|
do i=1,n3d |
186 |
|
|
tracert(i,1,1) = xno(i,1,1) |
187 |
|
|
enddo |
188 |
|
|
|
189 |
|
|
call chemadv(8, |
190 |
|
|
& tracert,xno,xno,dt,ddepno) |
191 |
|
|
|
192 |
|
|
c |
193 |
|
|
c NO2: |
194 |
|
|
c |
195 |
|
|
do i=1,n3d |
196 |
|
|
tracert(i,1,1) = xno2(i,1,1) |
197 |
|
|
enddo |
198 |
|
|
|
199 |
|
|
call chemadv(8, |
200 |
|
|
& tracert,xno2,xno2,dt,ddepno2) |
201 |
|
|
|
202 |
|
|
c |
203 |
|
|
c N2O5: |
204 |
|
|
c |
205 |
|
|
do i=1,n3d |
206 |
|
|
tracert(i,1,1) = xn2o5(i,1,1) |
207 |
|
|
enddo |
208 |
|
|
|
209 |
|
|
call chemadv(8, |
210 |
|
|
& tracert,xn2o5,xn2o5,dt,ddepn2o5) |
211 |
|
|
|
212 |
|
|
c |
213 |
|
|
c HNO3: |
214 |
|
|
c |
215 |
|
|
do i=1,n3d |
216 |
|
|
tracert(i,1,1) = hno3(i,1,1) |
217 |
|
|
enddo |
218 |
|
|
|
219 |
|
|
call chemadv(8, |
220 |
|
|
& tracert,hno3,hno3,dt,ddephno3) |
221 |
|
|
|
222 |
|
|
c |
223 |
|
|
c CH4: |
224 |
|
|
c |
225 |
|
|
do i=1,n3d |
226 |
|
|
tracert(i,1,1) = ch4(i,1,1) |
227 |
|
|
enddo |
228 |
|
|
|
229 |
|
|
call chemadv(8, |
230 |
|
|
& tracert,ch4,ch4,dt,ddepref) |
231 |
|
|
|
232 |
|
|
c |
233 |
|
|
c CH2O: |
234 |
|
|
c |
235 |
|
|
do i=1,n3d |
236 |
|
|
tracert(i,1,1) = ch2o(i,1,1) |
237 |
|
|
enddo |
238 |
|
|
|
239 |
|
|
call chemadv(8, |
240 |
|
|
& tracert,ch2o,ch2o,dt,ddepref) |
241 |
|
|
|
242 |
|
|
c |
243 |
|
|
c SO2: |
244 |
|
|
c |
245 |
|
|
do i=1,n3d |
246 |
|
|
tracert(i,1,1) = so2(i,1,1) |
247 |
|
|
enddo |
248 |
|
|
|
249 |
|
|
call chemadv(8, |
250 |
|
|
& tracert,so2,so2,dt,ddepref) |
251 |
|
|
|
252 |
|
|
c |
253 |
|
|
c H2SO4: |
254 |
|
|
c |
255 |
|
|
do i=1,n3d |
256 |
|
|
tracert(i,1,1) = h2so4(i,1,1) |
257 |
|
|
enddo |
258 |
|
|
|
259 |
|
|
call chemadv(8, |
260 |
|
|
& tracert,h2so4,h2so4,dt,ddepref) |
261 |
|
|
|
262 |
|
|
#endif |
263 |
|
|
|
264 |
|
|
return |
265 |
|
|
end |
266 |
|
|
|
267 |
|
|
|
268 |
|
|
c ===================================================== |
269 |
|
|
Subroutine chemadv(ifdiff, |
270 |
|
|
& x00,x11,xinit,dt1,ddepspd) |
271 |
|
|
c ===================================================== |
272 |
|
|
|
273 |
|
|
c==================================================================c |
274 |
|
|
c c |
275 |
|
|
c CHEMADV.F: Subroutine for calculating advection and eddy c |
276 |
|
|
c transport of MIT Global Chemistry Model c |
277 |
|
|
c ------------------------------------------------- c |
278 |
|
|
c Author: Chien Wang c |
279 |
|
|
c MIT Joint Program on Science and Policy c |
280 |
|
|
c of Global Change c |
281 |
|
|
c Last Revised on: January 30, 1996 c |
282 |
|
|
c c |
283 |
|
|
c==================================================================c |
284 |
|
|
|
285 |
|
|
parameter(xxx1 = 1./6., xxx2 = 4.0*xxx1) |
286 |
|
|
parameter(yyy3 = 1./36.,yyy2 =10.0*yyy3, yyy1 =25.0*yyy3) |
287 |
|
|
|
288 |
|
|
#include "chem_para" |
289 |
|
|
#include "chem_com" |
290 |
|
|
#include "BD2G04.COM" |
291 |
|
|
|
292 |
|
|
common /WORK1/pit(nlon,nlat),sd(nlon,nlat,nlev1) |
293 |
|
|
|
294 |
|
|
dimension x00 (nlon,nlat,nlev) |
295 |
|
|
dimension x11 (nlon,nlat,nlev) |
296 |
|
|
dimension xinit(nlon,nlat,nlev) |
297 |
|
|
|
298 |
|
|
c 062095 dry deposition speed, in sigma/second and positive |
299 |
|
|
c speed is updraft |
300 |
|
|
c |
301 |
|
|
dimension ddepspd(nlon,nlat) |
302 |
|
|
|
303 |
|
|
dimension c(nlat+1),x(nlat),w1(4,2),w2(nlat,3), |
304 |
|
|
& w4(nlat,5),ww(nlat+1,5),ww2(nlat+1,5) |
305 |
|
|
|
306 |
|
|
! --------------------------------------------------------- |
307 |
|
|
|
308 |
|
|
#if ( defined CPL_CHEM ) |
309 |
|
|
|
310 |
|
|
c------------------------------------------------------- |
311 |
|
|
c Definitions of parameters: |
312 |
|
|
c |
313 |
|
|
c Basic time step for advection |
314 |
|
|
c dta =dt1*3.0 ! dta=1 hr. |
315 |
|
|
dta =dt1 ! dt1=20 min in GISS therefore here |
316 |
|
|
c |
317 |
|
|
c 111596: |
318 |
|
|
c |
319 |
|
|
dt1hr = dta*3.0 |
320 |
|
|
|
321 |
|
|
dt2 =dta*0.5 |
322 |
|
|
|
323 |
|
|
istart=1 |
324 |
|
|
iend =nlon |
325 |
|
|
|
326 |
|
|
c------------------------------- |
327 |
|
|
c Start do loop for tracers: |
328 |
|
|
|
329 |
|
|
do 1000 ntime=1,3 |
330 |
|
|
|
331 |
|
|
c------------------------------------------------------- |
332 |
|
|
c Scaling mixing ratio with PAI: |
333 |
|
|
c |
334 |
|
|
do 1 k=1,nlev |
335 |
|
|
do 1 i=1,n2dh |
336 |
|
|
x00(i,1,k)=x00(i,1,k)*p00(i,1) |
337 |
|
|
1 continue |
338 |
|
|
|
339 |
|
|
do 11 k=1,nlev |
340 |
|
|
pvv(1,1,k)=0.0 |
341 |
|
|
11 continue |
342 |
|
|
|
343 |
|
|
do 12 j=1,nlat |
344 |
|
|
pww(1,j,1)=0.0 |
345 |
|
|
12 continue |
346 |
|
|
|
347 |
|
|
c------------------------------------------------------- |
348 |
|
|
c Calculating meridional advection: |
349 |
|
|
c |
350 |
|
|
i = 1 |
351 |
|
|
do 61 k=1,nlev |
352 |
|
|
c do 61 i=istart,iend |
353 |
|
|
|
354 |
|
|
c c(1)=0.0 |
355 |
|
|
c(1)= c(2) |
356 |
|
|
do 62 j=2,nlat |
357 |
|
|
c(j) =pvv(i,j,k)/dyv(j)*dta |
358 |
|
|
62 continue |
359 |
|
|
c c(nlat+1)=0.0 |
360 |
|
|
c(nlat+1)= c(nlat) |
361 |
|
|
|
362 |
|
|
call pdadv1(c,w4,w2,w1,nlat) |
363 |
|
|
|
364 |
|
|
do 63 j=1,nlat |
365 |
|
|
x(j)=x00(i,j,k) |
366 |
|
|
63 continue |
367 |
|
|
|
368 |
|
|
call pdadv2(c,x,w4,w2,w1,ww,ww2,nlat,1) |
369 |
|
|
|
370 |
|
|
c--------------------------- |
371 |
|
|
c Lateral BC: |
372 |
|
|
c |
373 |
|
|
c South pole: |
374 |
|
|
c |
375 |
|
|
fluxl=pvv(i,2,k)*(x00(i,2,k)+x00(i,1,k))/dyv(2) |
376 |
|
|
& *dta*0.5 |
377 |
|
|
|
378 |
|
|
fluxl=max(-x00(i,2,k), |
379 |
|
|
& min( x00(i,1,k),fluxl)) |
380 |
|
|
|
381 |
|
|
fluxr=pvv(i,3,k)*(x00(i,3,k)+x00(i,2,k))/dyv(3) |
382 |
|
|
& *dta*0.5 |
383 |
|
|
|
384 |
|
|
fluxr=max(-x00(i,3,k), |
385 |
|
|
& min( x00(i,2,k),fluxr)) |
386 |
|
|
|
387 |
|
|
x00(i,2,k)=x00(i,2,k) |
388 |
|
|
& -(fluxr-fluxl) |
389 |
|
|
|
390 |
|
|
fluxlbc = |
391 |
|
|
& -min(0.0,pvv(i,2,k)) |
392 |
|
|
& *(x11(i,2,k)-x11(i,1,k))/dyv(2) |
393 |
|
|
& *(p00(i,2)+p00(i,1))*0.5 |
394 |
|
|
& *dta |
395 |
|
|
fluxlbc = |
396 |
|
|
& max(-x00(i,1,k), |
397 |
|
|
& min( x00(i,2,k),fluxlbc)) |
398 |
|
|
|
399 |
|
|
x00(i,1,k)=x00(i,1,k) |
400 |
|
|
& +fluxlbc |
401 |
|
|
|
402 |
|
|
c |
403 |
|
|
c North pole: |
404 |
|
|
c |
405 |
|
|
fluxl=pvv(i,nlat1,k)*(x00(i,nlat1,k) |
406 |
|
|
& +x00(i,nlat2,k))/dyv(nlat1) |
407 |
|
|
& *dta*0.5 |
408 |
|
|
|
409 |
|
|
fluxl=max(-x00(i,nlat1,k), |
410 |
|
|
& min( x00(i,nlat2,k),fluxl)) |
411 |
|
|
|
412 |
|
|
fluxr=pvv(i,nlat, k)*(x00(i,nlat, k) |
413 |
|
|
& +x00(i,nlat1,k))/dyv(nlat) |
414 |
|
|
& *dta*0.5 |
415 |
|
|
|
416 |
|
|
fluxr= |
417 |
|
|
& max(-x00(i,nlat, k), |
418 |
|
|
& min( x00(i,nlat1,k),fluxr)) |
419 |
|
|
|
420 |
|
|
x00(i,nlat1,k)=x00(i,nlat1,k) |
421 |
|
|
& -(fluxr-fluxl) |
422 |
|
|
|
423 |
|
|
fluxlbc = |
424 |
|
|
& -max(0.0,pvv(i,nlat,k)) |
425 |
|
|
& *(x11(i,nlat,k)-x11(i,nlat1,k))/dyv(nlat) |
426 |
|
|
& *(p00(i,nlat)+p00(i,nlat1))*0.5 |
427 |
|
|
& *dta |
428 |
|
|
fluxlbc = |
429 |
|
|
& max(-x00(i,nlat,k), |
430 |
|
|
& min( x00(i,nlat1,k),fluxlbc)) |
431 |
|
|
|
432 |
|
|
x00(i,nlat,k) =x00(i,nlat,k) |
433 |
|
|
& +fluxlbc |
434 |
|
|
|
435 |
|
|
c--- |
436 |
|
|
c Adjustment of momentum equation |
437 |
|
|
c |
438 |
|
|
c do 64 j=2,nlat1 |
439 |
|
|
do 64 j=3,nlat2 |
440 |
|
|
if(k.ne.1 |
441 |
|
|
& .and.k.ne.nlev |
442 |
|
|
& )then |
443 |
|
|
deltac = max(-1.0, |
444 |
|
|
& min(+1.0,c(j+1)-c(j))) |
445 |
|
|
x00(i,j,k)=x(j) |
446 |
|
|
& +x00(i,j,k)*deltac |
447 |
|
|
endif |
448 |
|
|
64 continue |
449 |
|
|
|
450 |
|
|
c 051595: |
451 |
|
|
|
452 |
|
|
if( k.ne.1 |
453 |
|
|
& .and.k.ne.nlev |
454 |
|
|
& )then |
455 |
|
|
x00(i,2,k)=x00(i,2,k) |
456 |
|
|
& *(1.0+(pvv(i,3,k)/dyv(3) |
457 |
|
|
& -pvv(i,2,k)/dyv(2))*dta) |
458 |
|
|
x00(i,1,k)=x00(i,1,k) |
459 |
|
|
& *(1.0+pvv(i,2,k)/dyv(2) |
460 |
|
|
& *dta) |
461 |
|
|
x00(i,nlat1,k)=x00(i,nlat1,k) |
462 |
|
|
& *(1.0+(pvv(i,nlat, k)/dyv(nlat) |
463 |
|
|
& -pvv(i,nlat1,k)/dyv(nlat1))*dta) |
464 |
|
|
x00(i,nlat,k) =x00(i,nlat,k) |
465 |
|
|
& *(1.0-pvv(i,nlat,k)/dyv(nlat) |
466 |
|
|
& *dta) |
467 |
|
|
endif |
468 |
|
|
c===== |
469 |
|
|
|
470 |
|
|
61 continue |
471 |
|
|
|
472 |
|
|
c------------------------------------------------------- |
473 |
|
|
c Calculating vertical advection: |
474 |
|
|
c |
475 |
|
|
c do 66 i=istart,iend |
476 |
|
|
i = 1 |
477 |
|
|
do 66 j=1,nlat |
478 |
|
|
c do 66 j=2,nlat1 |
479 |
|
|
|
480 |
|
|
c(1) =0.0 |
481 |
|
|
do 67 k=2,nlev1 |
482 |
|
|
c(k) =-pww(i,j,k)/dsig(k)*dta |
483 |
|
|
67 continue |
484 |
|
|
c(nlev) =-pww(i,j,nlev1)/dsig(nlev1)*dta |
485 |
|
|
c(nlev+1)=0.0 |
486 |
|
|
|
487 |
|
|
call pdadv1(c,w4,w2,w1,nlev) |
488 |
|
|
|
489 |
|
|
do 68 k=1,nlev |
490 |
|
|
x(k)=x00(i,j,k) |
491 |
|
|
68 continue |
492 |
|
|
|
493 |
|
|
call pdadv2(c,x,w4,w2,w1,ww,ww2,nlev,1) |
494 |
|
|
|
495 |
|
|
c--- |
496 |
|
|
c VBC: |
497 |
|
|
c |
498 |
|
|
fluxt=pww(i,j,3)*(x00(i,j,3)+x00(i,j,2)) |
499 |
|
|
& /dsig(3) |
500 |
|
|
& *dta*0.5 |
501 |
|
|
|
502 |
|
|
c 112596: |
503 |
|
|
c fluxt=-max(-x00(i,j,3), |
504 |
|
|
c & min( x00(i,j,2),-fluxt)) |
505 |
|
|
fluxt=-max(-x00(i,j,3)*0.5, |
506 |
|
|
& min( x00(i,j,2)*0.5,-fluxt)) |
507 |
|
|
|
508 |
|
|
fluxb=pww(i,j,2)*(x00(i,j,2)+x00(i,j,1)) |
509 |
|
|
& /dsig(2) |
510 |
|
|
& *dta*0.5 |
511 |
|
|
|
512 |
|
|
c 112596: |
513 |
|
|
c fluxb=-max(-x00(i,j,2), |
514 |
|
|
c & min( x00(i,j,1),-fluxb)) |
515 |
|
|
fluxb=-max(-x00(i,j,2)*0.5, |
516 |
|
|
& min( x00(i,j,1)*0.5,-fluxb)) |
517 |
|
|
|
518 |
|
|
x00(i,j,2)=x00(i,j,2) |
519 |
|
|
& +(fluxt-fluxb) |
520 |
|
|
|
521 |
|
|
x00(i,j,1)=x00(i,j,1) |
522 |
|
|
cc & +fluxb |
523 |
|
|
c & +pww(i,j,2) |
524 |
|
|
c 062095 add dry deposition: |
525 |
|
|
! & +max(0.0,pww(i,j,2)-ddepspd(i,j)) |
526 |
|
|
& +(pww(i,j,2)-ddepspd(i,j)) |
527 |
|
|
& *(x11(i,j,2)-x11(i,j,1))/dsig(1) |
528 |
|
|
& *p00(i,j) |
529 |
|
|
& *dta |
530 |
|
|
|
531 |
|
|
fluxt=pww(i,j,nlev)*(x00(i,j,nlev) |
532 |
|
|
& +x00(i,j,nlev1)) |
533 |
|
|
& /dsig(nlev) |
534 |
|
|
& *dta*0.5 |
535 |
|
|
|
536 |
|
|
c 112596: |
537 |
|
|
c fluxt=-max(-x00(i,j,nlev), |
538 |
|
|
c & min( x00(i,j,nlev1),-fluxt)) |
539 |
|
|
fluxt=-max(-x00(i,j,nlev)*0.5, |
540 |
|
|
& min( x00(i,j,nlev1)*0.5,-fluxt)) |
541 |
|
|
|
542 |
|
|
fluxb=pww(i,j,nlev1)*(x00(i,j,nlev1) |
543 |
|
|
& +x00(i,j,nlev2)) |
544 |
|
|
& /dsig(nlev1) |
545 |
|
|
& *dta*0.5 |
546 |
|
|
|
547 |
|
|
c 112596 |
548 |
|
|
c fluxb=-max(-x00(i,j,nlev1), |
549 |
|
|
c & min( x00(i,j,nlev2),-fluxb)) |
550 |
|
|
fluxb=-max(-x00(i,j,nlev1)*0.5, |
551 |
|
|
& min( x00(i,j,nlev2)*0.5,-fluxb)) |
552 |
|
|
|
553 |
|
|
x00(i,j,nlev1)=x00(i,j,nlev1) |
554 |
|
|
& +(fluxt-fluxb) |
555 |
|
|
|
556 |
|
|
x00(i,j,nlev)=x00(i,j,nlev) |
557 |
|
|
c & -fluxb |
558 |
|
|
& +min(0.0,pww(i,j,nlev)) |
559 |
|
|
& *(x11(i,j,nlev)-x11(i,j,nlev1))/dsig(nlev) |
560 |
|
|
& *p00(i,j) |
561 |
|
|
& *dta |
562 |
|
|
|
563 |
|
|
c--- |
564 |
|
|
c |
565 |
|
|
c do 69 k=2,nlev1 |
566 |
|
|
do 69 k=3,nlev2 |
567 |
|
|
if(j.ne.1.and.j.ne.nlat)then |
568 |
|
|
deltac = max(-1.0, |
569 |
|
|
& min(+1.0,c(k+1)-c(k))) |
570 |
|
|
x00(i,j,k)=x(k) |
571 |
|
|
& +x00(i,j,k)*deltac |
572 |
|
|
endif |
573 |
|
|
69 continue |
574 |
|
|
|
575 |
|
|
c 051595: |
576 |
|
|
|
577 |
|
|
if( j.ne.1.and.j.ne.nlat |
578 |
|
|
c & .and.j.ne.2.and.j.ne.nlat1 |
579 |
|
|
& )then |
580 |
|
|
c === |
581 |
|
|
c === 081295: set limitation of xyz |
582 |
|
|
c === |
583 |
|
|
xyz = (pww(i,j,3)/dsig(3) |
584 |
|
|
& -pww(i,j,2)/dsig(2))*dta |
585 |
|
|
xyz = min( 1.0, |
586 |
|
|
& max(-1.0 ,xyz)) |
587 |
|
|
|
588 |
|
|
x00(i,j,2)=x00(i,j,2) |
589 |
|
|
& *(1.0-xyz) |
590 |
|
|
|
591 |
|
|
xyz = (pww(i,j,nlev) /dsig(nlev) |
592 |
|
|
& -pww(i,j,nlev1)/dsig(nlev1))*dta |
593 |
|
|
xyz = min( 1.0, |
594 |
|
|
& max(-1.0 ,xyz)) |
595 |
|
|
|
596 |
|
|
x00(i,j,nlev1)=x00(i,j,nlev1) |
597 |
|
|
& *(1.0-xyz) |
598 |
|
|
endif |
599 |
|
|
c===== |
600 |
|
|
|
601 |
|
|
66 continue |
602 |
|
|
|
603 |
|
|
c goto 2001 |
604 |
|
|
c9000 continue |
605 |
|
|
|
606 |
|
|
c-------------------------------------------------------- |
607 |
|
|
c Rescaling mixing ratio with PAI: |
608 |
|
|
c |
609 |
|
|
|
610 |
|
|
do 200 k=1,nlev |
611 |
|
|
do 200 i=1,n2dh |
612 |
|
|
x00(i,1,k)=x00(i,1,k)/p11(i,1) |
613 |
|
|
|
614 |
|
|
c 012797: limit error |
615 |
|
|
deltazu =1.2*x11(i,1,k) |
616 |
|
|
deltazl =0.8*x11(i,1,k) |
617 |
|
|
x00(i,1,k) = max(deltazl, min(deltazu, x00(i,1,k))) |
618 |
|
|
|
619 |
|
|
deltax =abs(x00(i,1,k)-x11(i,1,k)) |
620 |
|
|
deltay =1.e-10*x11(i,1,k) |
621 |
|
|
if(deltax.gt.deltay)then |
622 |
|
|
x11(i,1,k)=x00(i,1,k) |
623 |
|
|
else |
624 |
|
|
x00(i,1,k)=x11(i,1,k) |
625 |
|
|
endif |
626 |
|
|
200 continue |
627 |
|
|
|
628 |
|
|
c---------------------------------------------------- |
629 |
|
|
c Corner points: |
630 |
|
|
c |
631 |
|
|
|
632 |
|
|
x00(1,1,1) = xxx1*(x00(1,1,2) + x00(1,2,1)) |
633 |
|
|
& + xxx2* x00(1,1,1) |
634 |
|
|
x11(1,1,1) = x00(1,1,1) |
635 |
|
|
|
636 |
|
|
x00(1,nlat,1) = xxx1*(x00(1,nlat,2) + x00(1,nlat1,1)) |
637 |
|
|
& + xxx2* x00(1,nlat,1) |
638 |
|
|
x11(1,nlat,1) = x00(1,nlat,1) |
639 |
|
|
|
640 |
|
|
x00(1,1,nlev) = xxx1*(x00(1,1,nlev1) + x00(1,2,nlev)) |
641 |
|
|
& + xxx2* x00(1,1,nlev) |
642 |
|
|
x11(1,1,nlev) = x00(1,1,nlev) |
643 |
|
|
|
644 |
|
|
x00(1,nlat,nlev) = xxx1*(x00(1,nlat,nlev1) + x00(1,nlat1,nlev)) |
645 |
|
|
& + xxx2* x00(1,nlat,nlev) |
646 |
|
|
x11(1,nlat,nlev) = x00(1,nlat,nlev) |
647 |
|
|
|
648 |
|
|
c----------------------------------------------------- |
649 |
|
|
c LBC smoothing: |
650 |
|
|
c |
651 |
|
|
|
652 |
|
|
do k=1,nlev |
653 |
|
|
c x00(1,2,k) = xxx1*(x00(1,1,k) + x00(1,3,k)) |
654 |
|
|
c & + xxx2* x00(1,2,k) |
655 |
|
|
|
656 |
|
|
c x00(1,nlat1,k) = xxx1*(x00(1,nlat2,k) + x00(1,nlat,k)) |
657 |
|
|
c & + xxx2* x00(1,nlat1,k) |
658 |
|
|
|
659 |
|
|
x00(1,1,k) = yyy1*x00(1,1,k) + yyy2*x00(1,2,k) |
660 |
|
|
& + yyy3*x00(1,3,k) |
661 |
|
|
|
662 |
|
|
x00(1,nlat,k) = yyy1*x00(1,nlat,k) + yyy2*x00(1,nlat1,k) |
663 |
|
|
& + yyy3*x00(1,nlat2,k) |
664 |
|
|
|
665 |
|
|
x11(1,1,k) = x00(1,1,k) |
666 |
|
|
c x11(1,2,k) = x00(1,2,k) |
667 |
|
|
x11(1,nlat,k) = x00(1,nlat,k) |
668 |
|
|
c x11(1,nlat1,k) = x00(1,nlat1,k) |
669 |
|
|
|
670 |
|
|
enddo |
671 |
|
|
|
672 |
|
|
c------------------------ |
673 |
|
|
c Artificial diffusion |
674 |
|
|
c for top two levels: |
675 |
|
|
c |
676 |
|
|
atfk=1.e-3 |
677 |
|
|
|
678 |
|
|
i=1 |
679 |
|
|
k=nlev1 |
680 |
|
|
do 606 j=1,nlat |
681 |
|
|
x00(i,j,k)=x00(i,j,k) |
682 |
|
|
& +atfk |
683 |
|
|
& *(x00(i,j,k+1)+x00(i,j,k-1)-2.0*x00(i,j,k)) |
684 |
|
|
x11(i,j,k)=x00(i,j,k) |
685 |
|
|
606 continue |
686 |
|
|
|
687 |
|
|
k=nlev |
688 |
|
|
do 607 j=1,nlat |
689 |
|
|
x00(i,j,k)=x00(i,j,k) |
690 |
|
|
& +atfk |
691 |
|
|
& *min(0.0,(x00(i,j,k-1)-x00(i,j,k))) |
692 |
|
|
x11(i,j,k)=x00(i,j,k) |
693 |
|
|
607 continue |
694 |
|
|
|
695 |
|
|
c------------------------- |
696 |
|
|
c Artificial diffusion |
697 |
|
|
c for bottom two levels: |
698 |
|
|
c |
699 |
|
|
atfk = 1.e-6 !1.e-5 !1.e-4 |
700 |
|
|
|
701 |
|
|
c k=2 |
702 |
|
|
c do 616 j=1,nlat |
703 |
|
|
c x00(i,j,k)=x00(i,j,k) |
704 |
|
|
c & +atfk |
705 |
|
|
c & *(x00(i,j,k+1)+x00(i,j,k-1)-2.0*x00(i,j,k)) |
706 |
|
|
c x11(i,j,k)=x00(i,j,k) |
707 |
|
|
c616 continue |
708 |
|
|
c |
709 |
|
|
c k=1 |
710 |
|
|
c do 617 j=1,nlat |
711 |
|
|
c x00(i,j,k)=x00(i,j,k) |
712 |
|
|
c & +atfk |
713 |
|
|
c & *(x00(i,j,k+1)-x00(i,j,k)) |
714 |
|
|
c x11(i,j,k)=x00(i,j,k) |
715 |
|
|
c617 continue |
716 |
|
|
|
717 |
|
|
1000 continue |
718 |
|
|
|
719 |
|
|
c----------------------- |
720 |
|
|
c Calculate eddy diffusion |
721 |
|
|
c and re-scale mass: |
722 |
|
|
c |
723 |
|
|
do 501 k=1,nlev |
724 |
|
|
do 501 i=1,n2dh |
725 |
|
|
x00(i,1,k)=x00(i,1,k)*p00(i,1) |
726 |
|
|
501 continue |
727 |
|
|
|
728 |
|
|
c 111596: |
729 |
|
|
c |
730 |
|
|
dteddy = dt1hr !GISS model calculate eddy diffusion |
731 |
|
|
!at every 1 hr in new version |
732 |
|
|
|
733 |
|
|
if(meddy1.eq.1) call chemeddy(ifdiff,x00,x11,dteddy) |
734 |
|
|
|
735 |
|
|
do 502 k=1,nlev |
736 |
|
|
do 502 i=1,n2dh |
737 |
|
|
x00(i,1,k)=x00(i,1,k) |
738 |
|
|
& +x11(i,1,k)*(p11(i,1)-p00(i,1)) |
739 |
|
|
x00(i,1,k)=x00(i,1,k)/p11(i,1) |
740 |
|
|
|
741 |
|
|
c 012797: limit error |
742 |
|
|
deltazu =1.2*x11(i,1,k) |
743 |
|
|
deltazl =0.8*x11(i,1,k) |
744 |
|
|
x00(i,1,k) = max(deltazl, min(deltazu, x00(i,1,k))) |
745 |
|
|
|
746 |
|
|
x11(i,1,k)=x00(i,1,k) |
747 |
|
|
502 continue |
748 |
|
|
|
749 |
|
|
c |
750 |
|
|
c----------------------- |
751 |
|
|
|
752 |
|
|
#endif |
753 |
|
|
|
754 |
|
|
return |
755 |
|
|
end |
756 |
|
|
|
757 |
|
|
|
758 |
|
|
c ====================================================== |
759 |
|
|
Subroutine chemadv2(ifdiff, |
760 |
|
|
& x00,x11,xinit,dt1,ddepspd) |
761 |
|
|
c ====================================================== |
762 |
|
|
|
763 |
|
|
c==================================================================c |
764 |
|
|
c c |
765 |
|
|
c CHEMADV.F: Subroutine for calculating advection and eddy c |
766 |
|
|
c transport of MIT Global Chemistry Model c |
767 |
|
|
c ------------------------------------------------- c |
768 |
|
|
c Author: Chien Wang c |
769 |
|
|
c MIT Joint Program on Science and Policy c |
770 |
|
|
c of Global Change c |
771 |
|
|
c Last Revised on: January 30, 1996 c |
772 |
|
|
c c |
773 |
|
|
c==================================================================c |
774 |
|
|
|
775 |
|
|
parameter(xxx1 = 1./6., xxx2 = 4.0*xxx1) |
776 |
|
|
parameter(yyy3 = 1./36.,yyy2 =10.0*yyy3, yyy1 =25.0*yyy3) |
777 |
|
|
|
778 |
|
|
#include "chem_para" |
779 |
|
|
#include "chem_com" |
780 |
|
|
#include "BD2G04.COM" |
781 |
|
|
|
782 |
|
|
common /WORK1/pit(nlon,nlat),sd(nlon,nlat,nlev1) |
783 |
|
|
|
784 |
|
|
dimension x00 (nlon,nlat,nlev) |
785 |
|
|
dimension x11 (nlon,nlat,nlev) |
786 |
|
|
dimension xinit(nlon,nlat,nlev) |
787 |
|
|
|
788 |
|
|
c 062095 dry deposition speed, in sigma/second and positive |
789 |
|
|
c speed is updraft |
790 |
|
|
c |
791 |
|
|
dimension ddepspd(nlon,nlat) |
792 |
|
|
|
793 |
|
|
dimension c(nlat+1),x(nlat),w1(4,2),w2(nlat,3), |
794 |
|
|
& w4(nlat,5),ww(nlat+1,5),ww2(nlat+1,5) |
795 |
|
|
|
796 |
|
|
! --------------------------------------------------------- |
797 |
|
|
|
798 |
|
|
#if ( defined CPL_CHEM ) |
799 |
|
|
|
800 |
|
|
c------------------------------------------------------- |
801 |
|
|
c Definitions of parameters: |
802 |
|
|
c |
803 |
|
|
c Basic time step for advection |
804 |
|
|
c dta =dt1*3.0 ! dta=1 hr. |
805 |
|
|
dta =dt1 ! dt1=20 min in GISS therefore here |
806 |
|
|
c |
807 |
|
|
c 111596: |
808 |
|
|
c |
809 |
|
|
dt1hr = dta*3.0 |
810 |
|
|
|
811 |
|
|
dt2 =dta*0.5 |
812 |
|
|
|
813 |
|
|
istart=1 |
814 |
|
|
iend =nlon |
815 |
|
|
|
816 |
|
|
c------------------------------- |
817 |
|
|
c Start do loop for tracers: |
818 |
|
|
|
819 |
|
|
do 1000 ntime=1,3 |
820 |
|
|
|
821 |
|
|
c------------------------------------------------------- |
822 |
|
|
c Scaling mixing ratio with PAI: |
823 |
|
|
c |
824 |
|
|
do 1 k=1,nlev |
825 |
|
|
do 1 i=1,n2dh |
826 |
|
|
x00(i,1,k)=x00(i,1,k)*p00(i,1) |
827 |
|
|
1 continue |
828 |
|
|
|
829 |
|
|
do 11 k=1,nlev |
830 |
|
|
pvv(1,1,k)=0.0 |
831 |
|
|
11 continue |
832 |
|
|
|
833 |
|
|
do 12 j=1,nlat |
834 |
|
|
pww(1,j,1)=0.0 |
835 |
|
|
12 continue |
836 |
|
|
|
837 |
|
|
c------------------------------------------------------- |
838 |
|
|
c Calculating meridional advection: |
839 |
|
|
c |
840 |
|
|
i = 1 |
841 |
|
|
do 61 k=1,nlev |
842 |
|
|
c do 61 i=istart,iend |
843 |
|
|
|
844 |
|
|
c c(1)=0.0 |
845 |
|
|
c(1)= c(2) |
846 |
|
|
do 62 j=2,nlat |
847 |
|
|
c(j) =pvv(i,j,k)/dyv(j)*dta |
848 |
|
|
62 continue |
849 |
|
|
c c(nlat+1)=0.0 |
850 |
|
|
c(nlat+1)= c(nlat) |
851 |
|
|
|
852 |
|
|
call pdadv1(c,w4,w2,w1,nlat) |
853 |
|
|
|
854 |
|
|
do 63 j=1,nlat |
855 |
|
|
x(j)=x00(i,j,k) |
856 |
|
|
63 continue |
857 |
|
|
|
858 |
|
|
call pdadv2(c,x,w4,w2,w1,ww,ww2,nlat,1) |
859 |
|
|
|
860 |
|
|
c--------------------------- |
861 |
|
|
c Lateral BC: |
862 |
|
|
c |
863 |
|
|
c South pole: |
864 |
|
|
c |
865 |
|
|
fluxl=pvv(i,2,k)*(x00(i,2,k)+x00(i,1,k))/dyv(2) |
866 |
|
|
& *dta*0.5 |
867 |
|
|
|
868 |
|
|
fluxl=max(-x00(i,2,k), |
869 |
|
|
& min( x00(i,1,k),fluxl)) |
870 |
|
|
|
871 |
|
|
fluxr=pvv(i,3,k)*(x00(i,3,k)+x00(i,2,k))/dyv(3) |
872 |
|
|
& *dta*0.5 |
873 |
|
|
|
874 |
|
|
fluxr=max(-x00(i,3,k), |
875 |
|
|
& min( x00(i,2,k),fluxr)) |
876 |
|
|
|
877 |
|
|
x00(i,2,k)=x00(i,2,k) |
878 |
|
|
& -(fluxr-fluxl) |
879 |
|
|
|
880 |
|
|
fluxlbc = |
881 |
|
|
& -min(0.0,pvv(i,2,k)) |
882 |
|
|
& *(x11(i,2,k)-x11(i,1,k))/dyv(2) |
883 |
|
|
& *(p00(i,2)+p00(i,1))*0.5 |
884 |
|
|
& *dta |
885 |
|
|
fluxlbc = |
886 |
|
|
& max(-x00(i,1,k), |
887 |
|
|
& min( x00(i,2,k),fluxlbc)) |
888 |
|
|
|
889 |
|
|
x00(i,1,k)=x00(i,1,k) |
890 |
|
|
& +fluxlbc |
891 |
|
|
|
892 |
|
|
c |
893 |
|
|
c North pole: |
894 |
|
|
c |
895 |
|
|
fluxl=pvv(i,nlat1,k)*(x00(i,nlat1,k) |
896 |
|
|
& +x00(i,nlat2,k))/dyv(nlat1) |
897 |
|
|
& *dta*0.5 |
898 |
|
|
|
899 |
|
|
fluxl=max(-x00(i,nlat1,k), |
900 |
|
|
& min( x00(i,nlat2,k),fluxl)) |
901 |
|
|
|
902 |
|
|
fluxr=pvv(i,nlat, k)*(x00(i,nlat, k) |
903 |
|
|
& +x00(i,nlat1,k))/dyv(nlat) |
904 |
|
|
& *dta*0.5 |
905 |
|
|
|
906 |
|
|
fluxr= |
907 |
|
|
& max(-x00(i,nlat, k), |
908 |
|
|
& min( x00(i,nlat1,k),fluxr)) |
909 |
|
|
|
910 |
|
|
x00(i,nlat1,k)=x00(i,nlat1,k) |
911 |
|
|
& -(fluxr-fluxl) |
912 |
|
|
|
913 |
|
|
fluxlbc = |
914 |
|
|
& -max(0.0,pvv(i,nlat,k)) |
915 |
|
|
& *(x11(i,nlat,k)-x11(i,nlat1,k))/dyv(nlat) |
916 |
|
|
& *(p00(i,nlat)+p00(i,nlat1))*0.5 |
917 |
|
|
& *dta |
918 |
|
|
fluxlbc = |
919 |
|
|
& max(-x00(i,nlat,k), |
920 |
|
|
& min( x00(i,nlat1,k),fluxlbc)) |
921 |
|
|
|
922 |
|
|
x00(i,nlat,k) =x00(i,nlat,k) |
923 |
|
|
& +fluxlbc |
924 |
|
|
|
925 |
|
|
c--- |
926 |
|
|
c Adjustment of momentum equation |
927 |
|
|
c |
928 |
|
|
c do 64 j=2,nlat1 |
929 |
|
|
do 64 j=3,nlat2 |
930 |
|
|
if(k.ne.1 |
931 |
|
|
& .and.k.ne.nlev |
932 |
|
|
& )then |
933 |
|
|
deltac = max(-1.0, |
934 |
|
|
& min(+1.0,c(j+1)-c(j))) |
935 |
|
|
x00(i,j,k)=x(j) |
936 |
|
|
& +x00(i,j,k)*deltac |
937 |
|
|
endif |
938 |
|
|
64 continue |
939 |
|
|
|
940 |
|
|
c 051595: |
941 |
|
|
|
942 |
|
|
if( k.ne.1 |
943 |
|
|
& .and.k.ne.nlev |
944 |
|
|
& )then |
945 |
|
|
x00(i,2,k)=x00(i,2,k) |
946 |
|
|
& *(1.0+(pvv(i,3,k)/dyv(3) |
947 |
|
|
& -pvv(i,2,k)/dyv(2))*dta) |
948 |
|
|
x00(i,1,k)=x00(i,1,k) |
949 |
|
|
& *(1.0+pvv(i,2,k)/dyv(2) |
950 |
|
|
& *dta) |
951 |
|
|
x00(i,nlat1,k)=x00(i,nlat1,k) |
952 |
|
|
& *(1.0+(pvv(i,nlat, k)/dyv(nlat) |
953 |
|
|
& -pvv(i,nlat1,k)/dyv(nlat1))*dta) |
954 |
|
|
x00(i,nlat,k) =x00(i,nlat,k) |
955 |
|
|
& *(1.0-pvv(i,nlat,k)/dyv(nlat) |
956 |
|
|
& *dta) |
957 |
|
|
endif |
958 |
|
|
c===== |
959 |
|
|
|
960 |
|
|
61 continue |
961 |
|
|
|
962 |
|
|
c------------------------------------------------------- |
963 |
|
|
c Calculating vertical advection: |
964 |
|
|
c |
965 |
|
|
c do 66 i=istart,iend |
966 |
|
|
i = 1 |
967 |
|
|
do 66 j=1,nlat |
968 |
|
|
c do 66 j=2,nlat1 |
969 |
|
|
|
970 |
|
|
c(1) =0.0 |
971 |
|
|
do 67 k=2,nlev1 |
972 |
|
|
c(k) =-pww(i,j,k)/dsig(k)*dta |
973 |
|
|
67 continue |
974 |
|
|
c(nlev) =-pww(i,j,nlev1)/dsig(nlev1)*dta |
975 |
|
|
c(nlev+1)=0.0 |
976 |
|
|
|
977 |
|
|
call pdadv1(c,w4,w2,w1,nlev) |
978 |
|
|
|
979 |
|
|
do 68 k=1,nlev |
980 |
|
|
x(k)=x00(i,j,k) |
981 |
|
|
68 continue |
982 |
|
|
|
983 |
|
|
call pdadv2(c,x,w4,w2,w1,ww,ww2,nlev,1) |
984 |
|
|
|
985 |
|
|
c--- |
986 |
|
|
c VBC: |
987 |
|
|
c |
988 |
|
|
fluxt=pww(i,j,3)*(x00(i,j,3)+x00(i,j,2)) |
989 |
|
|
& /dsig(3) |
990 |
|
|
& *dta*0.5 |
991 |
|
|
|
992 |
|
|
c 112796 |
993 |
|
|
c fluxt=-max(-x00(i,j,3), |
994 |
|
|
c & min( x00(i,j,2),-fluxt)) |
995 |
|
|
fluxt=-max(-x00(i,j,3)*0.5, |
996 |
|
|
& min( x00(i,j,2)*0.5,-fluxt)) |
997 |
|
|
|
998 |
|
|
fluxb=pww(i,j,2)*(x00(i,j,2)+x00(i,j,1)) |
999 |
|
|
& /dsig(2) |
1000 |
|
|
& *dta*0.5 |
1001 |
|
|
|
1002 |
|
|
c 112796 |
1003 |
|
|
c fluxb=-max(-x00(i,j,2), |
1004 |
|
|
c & min( x00(i,j,1),-fluxb)) |
1005 |
|
|
fluxb=-max(-x00(i,j,2)*0.5, |
1006 |
|
|
& min( x00(i,j,1)*0.5,-fluxb)) |
1007 |
|
|
|
1008 |
|
|
x00(i,j,2)=x00(i,j,2) |
1009 |
|
|
& +(fluxt-fluxb) |
1010 |
|
|
|
1011 |
|
|
x00(i,j,1)=x00(i,j,1) |
1012 |
|
|
cc & +fluxb |
1013 |
|
|
c & +pww(i,j,2) |
1014 |
|
|
c 062095 add dry deposition: |
1015 |
|
|
! & +max(0.0,pww(i,j,2)-ddepspd(i,j)) |
1016 |
|
|
& +(pww(i,j,2)-ddepspd(i,j)) |
1017 |
|
|
& *(x11(i,j,2)-x11(i,j,1))/dsig(1) |
1018 |
|
|
& *p00(i,j) |
1019 |
|
|
& *dta |
1020 |
|
|
|
1021 |
|
|
fluxt=pww(i,j,nlev)*(x00(i,j,nlev) |
1022 |
|
|
& +x00(i,j,nlev1)) |
1023 |
|
|
& /dsig(nlev) |
1024 |
|
|
& *dta*0.5 |
1025 |
|
|
|
1026 |
|
|
c 112796 |
1027 |
|
|
c fluxt=-max(-x00(i,j,nlev), |
1028 |
|
|
c & min( x00(i,j,nlev1),-fluxt)) |
1029 |
|
|
fluxt=-max(-x00(i,j,nlev)*0.5, |
1030 |
|
|
& min( x00(i,j,nlev1)*0.5,-fluxt)) |
1031 |
|
|
|
1032 |
|
|
fluxb=pww(i,j,nlev1)*(x00(i,j,nlev1) |
1033 |
|
|
& +x00(i,j,nlev2)) |
1034 |
|
|
& /dsig(nlev1) |
1035 |
|
|
& *dta*0.5 |
1036 |
|
|
|
1037 |
|
|
c 112796 |
1038 |
|
|
c fluxb=-max(-x00(i,j,nlev1), |
1039 |
|
|
c & min( x00(i,j,nlev2),-fluxb)) |
1040 |
|
|
fluxb=-max(-x00(i,j,nlev1)*0.5, |
1041 |
|
|
& min( x00(i,j,nlev2)*0.5,-fluxb)) |
1042 |
|
|
|
1043 |
|
|
x00(i,j,nlev1)=x00(i,j,nlev1) |
1044 |
|
|
& +(fluxt-fluxb) |
1045 |
|
|
|
1046 |
|
|
x00(i,j,nlev)=x00(i,j,nlev) |
1047 |
|
|
c & -fluxb |
1048 |
|
|
& +min(0.0,pww(i,j,nlev)) |
1049 |
|
|
& *(x11(i,j,nlev)-x11(i,j,nlev1))/dsig(nlev) |
1050 |
|
|
& *p00(i,j) |
1051 |
|
|
& *dta |
1052 |
|
|
|
1053 |
|
|
|
1054 |
|
|
c--- |
1055 |
|
|
c |
1056 |
|
|
c do 69 k=2,nlev1 |
1057 |
|
|
do 69 k=3,nlev2 |
1058 |
|
|
if(j.ne.1.and.j.ne.nlat)then |
1059 |
|
|
deltac = max(-1.0, |
1060 |
|
|
& min(+1.0,c(k+1)-c(k))) |
1061 |
|
|
x00(i,j,k)=x(k) |
1062 |
|
|
& +x00(i,j,k)*deltac |
1063 |
|
|
endif |
1064 |
|
|
69 continue |
1065 |
|
|
|
1066 |
|
|
c 051595: |
1067 |
|
|
|
1068 |
|
|
if( j.ne.1.and.j.ne.nlat |
1069 |
|
|
c & .and.j.ne.2.and.j.ne.nlat1 |
1070 |
|
|
& )then |
1071 |
|
|
c === |
1072 |
|
|
c === 081295: set limitation of xyz |
1073 |
|
|
c === |
1074 |
|
|
xyz = (pww(i,j,3)/dsig(3) |
1075 |
|
|
& -pww(i,j,2)/dsig(2))*dta |
1076 |
|
|
xyz = min( 1.0, |
1077 |
|
|
& max(-1.0 ,xyz)) |
1078 |
|
|
|
1079 |
|
|
x00(i,j,2)=x00(i,j,2) |
1080 |
|
|
& *(1.0-xyz) |
1081 |
|
|
|
1082 |
|
|
xyz = (pww(i,j,nlev) /dsig(nlev) |
1083 |
|
|
& -pww(i,j,nlev1)/dsig(nlev1))*dta |
1084 |
|
|
xyz = min( 1.0, |
1085 |
|
|
& max(-1.0 ,xyz)) |
1086 |
|
|
|
1087 |
|
|
x00(i,j,nlev1)=x00(i,j,nlev1) |
1088 |
|
|
& *(1.0-xyz) |
1089 |
|
|
endif |
1090 |
|
|
c===== |
1091 |
|
|
|
1092 |
|
|
66 continue |
1093 |
|
|
|
1094 |
|
|
c goto 2001 |
1095 |
|
|
c9000 continue |
1096 |
|
|
|
1097 |
|
|
c-------------------------------------------------------- |
1098 |
|
|
c Rescaling mixing ratio with PAI: |
1099 |
|
|
c |
1100 |
|
|
|
1101 |
|
|
do 200 k=1,nlev |
1102 |
|
|
do 200 i=1,n2dh |
1103 |
|
|
x00(i,1,k)=x00(i,1,k)/p11(i,1) |
1104 |
|
|
|
1105 |
|
|
c 012797: limit error |
1106 |
|
|
deltazu =1.2*x11(i,1,k) |
1107 |
|
|
deltazl =0.8*x11(i,1,k) |
1108 |
|
|
x00(i,1,k) = max(deltazl, min(deltazu, x00(i,1,k))) |
1109 |
|
|
|
1110 |
|
|
deltax =abs(x00(i,1,k)-x11(i,1,k)) |
1111 |
|
|
deltay =1.e-10*x11(i,1,k) |
1112 |
|
|
if(deltax.gt.deltay)then |
1113 |
|
|
x11(i,1,k)=x00(i,1,k) |
1114 |
|
|
else |
1115 |
|
|
x00(i,1,k)=x11(i,1,k) |
1116 |
|
|
endif |
1117 |
|
|
200 continue |
1118 |
|
|
|
1119 |
|
|
c---------------------------------------------------- |
1120 |
|
|
c Corner points: |
1121 |
|
|
c |
1122 |
|
|
|
1123 |
|
|
x00(1,1,1) = xxx1*(x00(1,1,2) + x00(1,2,1)) |
1124 |
|
|
& + xxx2* x00(1,1,1) |
1125 |
|
|
x11(1,1,1) = x00(1,1,1) |
1126 |
|
|
|
1127 |
|
|
x00(1,nlat,1) = xxx1*(x00(1,nlat,2) + x00(1,nlat1,1)) |
1128 |
|
|
& + xxx2* x00(1,nlat,1) |
1129 |
|
|
x11(1,nlat,1) = x00(1,nlat,1) |
1130 |
|
|
|
1131 |
|
|
x00(1,1,nlev) = xxx1*(x00(1,1,nlev1) + x00(1,2,nlev)) |
1132 |
|
|
& + xxx2* x00(1,1,nlev) |
1133 |
|
|
x11(1,1,nlev) = x00(1,1,nlev) |
1134 |
|
|
|
1135 |
|
|
x00(1,nlat,nlev) = xxx1*(x00(1,nlat,nlev1) + x00(1,nlat1,nlev)) |
1136 |
|
|
& + xxx2* x00(1,nlat,nlev) |
1137 |
|
|
x11(1,nlat,nlev) = x00(1,nlat,nlev) |
1138 |
|
|
|
1139 |
|
|
c----------------------------------------------------- |
1140 |
|
|
c LBC smoothing: |
1141 |
|
|
c |
1142 |
|
|
|
1143 |
|
|
do k=1,nlev |
1144 |
|
|
c x00(1,2,k) = xxx1*(x00(1,1,k) + x00(1,3,k)) |
1145 |
|
|
c & + xxx2* x00(1,2,k) |
1146 |
|
|
|
1147 |
|
|
c x00(1,nlat1,k) = xxx1*(x00(1,nlat2,k) + x00(1,nlat,k)) |
1148 |
|
|
c & + xxx2* x00(1,nlat1,k) |
1149 |
|
|
|
1150 |
|
|
x00(1,1,k) = yyy1*x00(1,1,k) + yyy2*x00(1,2,k) |
1151 |
|
|
& + yyy3*x00(1,3,k) |
1152 |
|
|
|
1153 |
|
|
x00(1,nlat,k) = yyy1*x00(1,nlat,k) + yyy2*x00(1,nlat1,k) |
1154 |
|
|
& + yyy3*x00(1,nlat2,k) |
1155 |
|
|
|
1156 |
|
|
x11(1,1,k) = x00(1,1,k) |
1157 |
|
|
c x11(1,2,k) = x00(1,2,k) |
1158 |
|
|
x11(1,nlat,k) = x00(1,nlat,k) |
1159 |
|
|
c x11(1,nlat1,k) = x00(1,nlat1,k) |
1160 |
|
|
|
1161 |
|
|
enddo |
1162 |
|
|
|
1163 |
|
|
c------------------------ |
1164 |
|
|
c Artificial diffusion |
1165 |
|
|
c for top two levels: |
1166 |
|
|
c |
1167 |
|
|
c ===== 091495: |
1168 |
|
|
c atfk=1.e-4 !138 d |
1169 |
|
|
c atfk=2.e-5 !690 d |
1170 |
|
|
atfk= 1.e-10 !1.e-6 better - 031696 !20*690 d |
1171 |
|
|
|
1172 |
|
|
i=1 |
1173 |
|
|
k=nlev1 |
1174 |
|
|
do 606 j=1,nlat |
1175 |
|
|
x00(i,j,k)=x00(i,j,k) |
1176 |
|
|
& +atfk |
1177 |
|
|
& *(x00(i,j,k+1)+x00(i,j,k-1)-2.0*x00(i,j,k)) |
1178 |
|
|
x11(i,j,k)=x00(i,j,k) |
1179 |
|
|
606 continue |
1180 |
|
|
|
1181 |
|
|
c k=nlev |
1182 |
|
|
c do 607 j=1,nlat |
1183 |
|
|
c x00(i,j,k)=x00(i,j,k) |
1184 |
|
|
c & +atfk |
1185 |
|
|
c & *min(0.0,(x00(i,j,k-1)-x00(i,j,k))) |
1186 |
|
|
c x11(i,j,k)=x00(i,j,k) |
1187 |
|
|
c607 continue |
1188 |
|
|
|
1189 |
|
|
c------------------------- |
1190 |
|
|
c Artificial diffusion |
1191 |
|
|
c for bottom two levels: |
1192 |
|
|
c |
1193 |
|
|
atfk = 1.e-6 !1.e-5 !1.e-4 |
1194 |
|
|
|
1195 |
|
|
c k=2 |
1196 |
|
|
c do 616 j=1,nlat |
1197 |
|
|
c x00(i,j,k)=x00(i,j,k) |
1198 |
|
|
c & +atfk |
1199 |
|
|
c & *(x00(i,j,k+1)+x00(i,j,k-1)-2.0*x00(i,j,k)) |
1200 |
|
|
c x11(i,j,k)=x00(i,j,k) |
1201 |
|
|
c616 continue |
1202 |
|
|
c |
1203 |
|
|
c k=1 |
1204 |
|
|
c do 617 j=1,nlat |
1205 |
|
|
c x00(i,j,k)=x00(i,j,k) |
1206 |
|
|
c & +atfk |
1207 |
|
|
c & *(x00(i,j,k+1)-x00(i,j,k)) |
1208 |
|
|
c x11(i,j,k)=x00(i,j,k) |
1209 |
|
|
c617 continue |
1210 |
|
|
|
1211 |
|
|
1000 continue |
1212 |
|
|
|
1213 |
|
|
c----------------------- |
1214 |
|
|
c Calculate eddy diffusion |
1215 |
|
|
c and re-scale mass: |
1216 |
|
|
c |
1217 |
|
|
do 501 k=1,nlev |
1218 |
|
|
do 501 i=1,n2dh |
1219 |
|
|
x00(i,1,k)=x00(i,1,k)*p00(i,1) |
1220 |
|
|
501 continue |
1221 |
|
|
|
1222 |
|
|
c 111596: |
1223 |
|
|
c |
1224 |
|
|
dteddy = dt1hr !GISS model calculate eddy diffusion |
1225 |
|
|
!at every 1 hr in new version |
1226 |
|
|
|
1227 |
|
|
if(meddy1.eq.1) call chemeddy(ifdiff,x00,x11,dteddy) |
1228 |
|
|
|
1229 |
|
|
do 502 k=1,nlev |
1230 |
|
|
do 502 i=1,n2dh |
1231 |
|
|
x00(i,1,k)=x00(i,1,k) |
1232 |
|
|
& +x11(i,1,k)*(p11(i,1)-p00(i,1)) |
1233 |
|
|
x00(i,1,k)=x00(i,1,k)/p11(i,1) |
1234 |
|
|
|
1235 |
|
|
c 012797: limit error |
1236 |
|
|
deltazu =1.2*x11(i,1,k) |
1237 |
|
|
deltazl =0.8*x11(i,1,k) |
1238 |
|
|
x00(i,1,k) = max(deltazl, min(deltazu, x00(i,1,k))) |
1239 |
|
|
|
1240 |
|
|
x11(i,1,k)=x00(i,1,k) |
1241 |
|
|
502 continue |
1242 |
|
|
|
1243 |
|
|
c |
1244 |
|
|
c----------------------- |
1245 |
|
|
#endif |
1246 |
|
|
|
1247 |
|
|
return |
1248 |
|
|
end |
1249 |
|
|
|