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

Contents 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 - (show annotations) (download)
Thu Sep 17 17:40:32 2009 UTC (15 years, 10 months ago) by jscott
Branch: MAIN
CVS Tags: HEAD
Error occurred while calculating annotation data.
chem module archive

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