/[MITgcm]/MITgcm_contrib/jscott/igsm/src_chem/chemeddy.F
ViewVC logotype

Annotation of /MITgcm_contrib/jscott/igsm/src_chem/chemeddy.F

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


Revision 1.1 - (hide annotations) (download)
Thu Sep 17 17:40:32 2009 UTC (15 years, 10 months ago) by jscott
Branch: MAIN
CVS Tags: HEAD
chem module archive

1 jscott 1.1
2     #include "ctrparam.h"
3    
4     ! ============================================================
5     !
6     ! CHEMEDDY.F: Subroutine for calculating zonal-average eddy
7     ! diffusion of MIT Global Chemistry Model
8     !
9     ! ------------------------------------------------------------
10     !
11     ! Author: Chien Wang
12     ! MIT Joint Program on Science and Policy
13     ! of Global Change
14     !
15     ! ----------------------------------------------------------
16     !
17     ! Revision History:
18     !
19     ! When Who What
20     ! ---- ---------- -------
21     ! 013096 Chien Wang rev.
22     ! 080100 Chien Wang repack based on CliChem3 & add cpp
23     ! 051804 Chien Wang rev. for 46x11
24     !
25     ! ==========================================================
26    
27     Subroutine chemeddy(ifdiff,x00,x11,dta)
28    
29     #include "chem_para"
30     #include "chem_com"
31     #include "BD2G04.COM"
32    
33     dimension x00 (nlon,nlat,nlev)
34     dimension x11 (nlon,nlat,nlev)
35    
36     dimension vc (nlat,nlev)
37     dimension beta5(nlat)
38    
39     dimension dcdy(nlat,nlev)
40     dimension dcdz(nlat,nlev)
41     dimension dcdc(nlat,nlev)
42    
43     ! ----------------------------------------------------------
44    
45     #if ( defined CPL_CHEM )
46    
47     c-------------------------------------------------------
48     c Definitions of parameters:
49     c
50    
51     istart=1
52     iend =nlon
53    
54     beta5(1)=0.0
55     do j=2,nlat1
56     beta5(j)=0.573*sqrt(beta2(j))/(1.-0.427*beta2(j)**0.302)
57     end do
58     beta5(nlat)=0.0
59    
60     c=====
61     c Calculate dcdy and dcdz:
62     c
63     do 5 i=istart,iend
64     do 5 j=2,nlat
65     do 5 k=1,nlev
66     dcdy(j,k)=(x11(i,j,k)-x11(i,j-1,k))/dyv(j)
67     5 continue
68    
69     do 6 i=istart,iend
70     do 6 j=1,nlat
71     do 6 k=1,nlev1
72     dcdz(j,k)=-(x11(i,j,k+1)-x11(i,j,k))*deltap(j,k)
73     6 continue
74    
75     do 61 i=istart,iend
76     do 61 j=1,nlat
77     do 62 k=2,nlev
78     dcdz(j,k)=dcdz(j,k-1)*dp2dz(j,k-1)
79     62 continue
80     dcdz(j,1)=dcdz(j,2)
81     61 continue
82    
83     do 7 j=2,nlat1
84     do 7 k=2,nlev1
85     dcdc(j,k)=dcdz(j,k)*4.0
86     & /(dcdy(j,k) +dcdy(j+1,k)
87     & +dcdy(j,k+1)+dcdy(j+1,k+1)+1.e-20)
88     7 continue
89    
90     do 8 j=2,nlat1
91     alamor =beta5(j)/beta2(j)
92     alamor2 =alamor /beta2(j)
93     oneoalam1=1./(1.+beta5(j))
94     do 8 k=2,nlev1
95     dcdc(j,k)=oneoalam1*beta1(j)*beta3(j,k)
96     & *(1.0+alamor
97     & +beta3(j,k)*0.25*beta1(j)*dcdc(j,k)
98     & *(1.+alamor2))
99     8 continue
100    
101     c=====
102     c Calculate meridional eddy diffusion:
103     c
104     do 10 k=1,nlev
105     paver = 0.5*(p00(1,1)+p00(1,2))
106     fluxl =-fkt(2,k)
107     & /dyv(2)*dcdy(2,k)*dta
108     & * paver
109     fluxl=max(-0.5*x00(1,2,k),min(0.5*x00(1,1, k),fluxl))
110     vc(2,k)=fluxl/(paver+1.e-20)
111     do 11 j=2,nlat1
112     paver = 0.5*(p00(1,j)+p00(1,j+1))
113     fluxr =-fkt(j+1,k)
114     & /dyv(j+1)*dcdy(j+1,k)*dta
115     & * paver
116     fluxr=max(-0.5*x00(1,j+1,k),min(0.5*x00(1,j,k),fluxr))
117     vc (j+1,k)=fluxr/(paver+1.e-20)
118     x00(1,j,k)=x00(1,j,k)-(fluxr-fluxl)
119     fluxl=fluxr
120     11 continue
121     10 continue
122    
123     c=====
124     c Calculate vertical eddy diffusion:
125     c
126     c 112696 changed also in eddypa.f for beta4
127     c
128     do 12 j=2,nlat1
129     fluxb=0.0
130     do 14 k=1,n_tropopause ! ktrop = 7 for both 9 and 11 layer model
131     fluxt=0.25*(vc(j,k)+vc(j,k+1)+vc(j+1,k)+vc(j+1,k+1))
132     & *dcdc(j,k+1)
133     & *beta4(j,k+1)
134     & *p00(1,j)
135    
136     c fluxt=max(-0.5*x00(1,j,k) *dsig(k),
137     c & min( 0.5*x00(1,j,k+1)*dsig(k+1),fluxt))
138     c if(fluxt*dcdz(j,k+1).lt.0.0) fluxt=0.0
139     c x00(1,j,k)=x00(1,j,k)+(fluxt-fluxb)/dsig(k)
140    
141     fluxt=max(-0.5*x00(1,j,k+1)*dsig(k+1),
142     & min( 0.5*x00(1,j,k) *dsig(k),fluxt))
143     if(fluxt*dcdz(j,k+1).gt.0.0) fluxt=0.0
144     x00(1,j,k)=x00(1,j,k)-(fluxt-fluxb)/dsig(k)
145     fluxb=fluxt
146     14 continue
147     12 continue
148    
149     c write(6,*)"FKT = "
150     c write(6,*)fkt
151     c write(6,*)"VC = "
152     c write(6,*)vc
153     c write(6,*)"DCDY = "
154     c write(6,*)dcdy
155     c
156     c 040895 test:
157     c
158    
159     1996 continue
160    
161     c ======
162     c 013096
163     c Apply horizontal diffussion to some tracers
164     c to reduce initialization errors in the
165     c global distribution:
166     c
167     if(ifdiff.ne.0) call chemdiff(ifdiff,x00,x11,dta)
168    
169     call chemcheck(x00)
170    
171     #endif
172    
173     return
174     end
175    

  ViewVC Help
Powered by ViewVC 1.1.22