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 |
|