1 |
C $Header: /u/gcmpack/MITgcm/pkg/fizhi/fizhi_init_chem.F,v 1.14 2004/09/01 18:35:33 molod Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "FIZHI_OPTIONS.h" |
5 |
subroutine fizhi_init_chem(mythid,nozlats,nozlevs,ntimesoz, |
6 |
. ozlats,ozlevs,o3, |
7 |
. nwatlats,nwatlevs,ntimesq,watlats,watlevs,water, |
8 |
. Nrphys,pressure,n2o,methane,co2,cfc11,cfc12,cfc22) |
9 |
C*********************************************************************** |
10 |
C Subroutine fizhi_init_chem - routine to read in the ozone and upper |
11 |
C atmosphere water vapor, and set the methane, n2o and cfc values |
12 |
C |
13 |
C INPUT: |
14 |
C |
15 |
C mythid - thread number (processor number) |
16 |
C |
17 |
C OUTPUT: |
18 |
C |
19 |
C*********************************************************************** |
20 |
implicit none |
21 |
integer mythid,nozlevs,nozlats,nwatlevs,nwatlats,Nrphys |
22 |
integer ntimesoz,ntimesq |
23 |
_RL o3(nozlats,nozlevs,ntimesoz) |
24 |
_RL water(nwatlats,nwatlevs,ntimesq) |
25 |
_RL ozlats(nozlats), ozlevs(nozlevs) |
26 |
_RL watlats(nwatlats), watlevs(nwatlevs) |
27 |
_RL pressure(Nrphys),methane(Nrphys),n2o(Nrphys) |
28 |
_RL co2,cfc11,cfc12,cfc22 |
29 |
|
30 |
_RL getcon |
31 |
integer kqz,koz |
32 |
call mdsfindunit( kqz, myThid ) |
33 |
call mdsfindunit( koz, myThid ) |
34 |
|
35 |
call read_qz (kqz,water,watlats,watlevs,nwatlats,nwatlevs,ntimesq) |
36 |
call read_oz (koz,o3,ozlats,ozlevs,nozlats,nozlevs,ntimesoz) |
37 |
|
38 |
call get_methane_n2o (pressure,Nrphys,n2o,methane) |
39 |
|
40 |
co2 = getcon('CO2' )*1.e-6 |
41 |
cfc11 = getcon('CFC11')*1.e-9 |
42 |
cfc12 = getcon('CFC12')*1.e-9 |
43 |
cfc22 = getcon('CFC22')*1.e-9 |
44 |
|
45 |
RETURN |
46 |
END |
47 |
|
48 |
subroutine read_qz (ku,qz,lats,levs,nlat,nlev,ntime) |
49 |
C*********************************************************************** |
50 |
C PURPOSE |
51 |
C To Read Stratospheric Moisture Data |
52 |
C |
53 |
C ARGUMENTS DESCRIPTION |
54 |
C ku ...... Unit to Read Moisture Data |
55 |
C qz ...... Stratospheric Moisture Data |
56 |
C lats .... Stratospheric Moisture Data Latitudes (degrees) |
57 |
C levs .... Stratospheric Moisture Data Levels (mb) |
58 |
C nlat .... Number of ozone latitudes |
59 |
C nlev .... Number of ozone levels |
60 |
C ntime ... Number of ozone time values |
61 |
C |
62 |
C*********************************************************************** |
63 |
|
64 |
implicit none |
65 |
integer ku,nlat,nlev,ntime |
66 |
|
67 |
_RL qz(nlat,nlev,ntime) |
68 |
_RL lats(nlat) |
69 |
_RL levs(nlev) |
70 |
|
71 |
integer time0 |
72 |
integer lat |
73 |
integer lev |
74 |
|
75 |
_RL voltomas |
76 |
parameter ( voltomas = 0.622e-6 ) |
77 |
|
78 |
open(ku,file='data.sage',form='formatted') |
79 |
rewind ku |
80 |
|
81 |
c Set Moisture Data Latitudes |
82 |
c --------------------------- |
83 |
do lat = 1,nlat |
84 |
lats(lat) = -85. + (lat-1)*10. |
85 |
enddo |
86 |
|
87 |
c Read Moisture Pressure Levels |
88 |
c ----------------------------- |
89 |
read(ku,1000) (levs(lev),lev=1,nlev) |
90 |
|
91 |
c Read Moisture Amounts by Month and Level |
92 |
c ---------------------------------------- |
93 |
do time0=1,ntime |
94 |
read (ku,1001) |
95 |
do lat=1,nlat |
96 |
read(ku,1000) (qz(lat,lev,time0),lev=1,nlev) |
97 |
enddo |
98 |
enddo |
99 |
|
100 |
c Convert from Volume Mixing Ratio to Mass Mixing Ratio |
101 |
c ----------------------------------------------------- |
102 |
do time0 = 1,ntime |
103 |
do lev = 1,nlev |
104 |
do lat = 1,nlat |
105 |
qz(lat,lev,time0) = qz(lat,lev,time0)*voltomas |
106 |
enddo |
107 |
enddo |
108 |
enddo |
109 |
|
110 |
1000 format (3(5x,7(2x,f6.1)/)) |
111 |
1001 format (1x) |
112 |
return |
113 |
end |
114 |
|
115 |
subroutine read_oz (ku,oz,lats,levs,nlat,nlev,ntime) |
116 |
C*********************************************************************** |
117 |
C PURPOSE |
118 |
C To Read Ozone Value |
119 |
C |
120 |
C ARGUMENTS DESCRIPTION |
121 |
C ku ...... Unit to Read Ozone Data |
122 |
C oz ...... Ozone Data |
123 |
C lats .... Ozone Data Latitudes (degrees) |
124 |
C levs .... Ozone Data Levels (mb) |
125 |
C nlat .... Number of ozone latitudes |
126 |
C nlev .... Number of ozone levels |
127 |
C ntime ... Number of ozone time values |
128 |
C |
129 |
C*********************************************************************** |
130 |
|
131 |
implicit none |
132 |
integer ku,nlat,nlev,ntime |
133 |
|
134 |
_RL oz(nlat,nlev,ntime) |
135 |
real*4 o3(nlat) |
136 |
_RL lats(nlat) |
137 |
_RL levs(nlev) |
138 |
|
139 |
integer time0 |
140 |
integer lat |
141 |
integer lev |
142 |
integer nrec |
143 |
|
144 |
_RL plevs(34) |
145 |
data plevs/ 0.003, 0.005, 0.007, 0.01, 0.015, 0.02, 0.03, 0.05, |
146 |
. 0.07, 0.1, 0.15, 0.2, 0.3, 0.5, 0.7, 1.0, 1.5, 2.0, |
147 |
. 3.0, 5.0, 7.0, 10.0, 15.0, 20.0, 30.0, 50.0, 70.0, |
148 |
. 100.0, 150.0, 200.0, 300.0, 500.0, 700.0, 1000.0 / |
149 |
|
150 |
c Set Ozone Data Latitudes |
151 |
c ------------------------ |
152 |
do lat = 1,nlat |
153 |
lats(lat) = -90. + (lat-1)*5. |
154 |
enddo |
155 |
|
156 |
c Set Ozone Data Levels |
157 |
c ------------------------ |
158 |
do lev = 1,nlev |
159 |
levs(lev) = plevs(lev) |
160 |
enddo |
161 |
|
162 |
c Read Ozone Amounts by Month and Level |
163 |
c ------------------------------------- |
164 |
close (ku) |
165 |
open(ku,file='data.gcmo3',form='unformatted',access='direct', |
166 |
. recl=nlat*4) |
167 |
|
168 |
do time0=1,ntime |
169 |
do lev=1,nlev |
170 |
C Note: 2 quantities in Ozone Dataset |
171 |
nrec = lev+(time0-1)*nlev*2 |
172 |
read(ku,rec=nrec) o3 |
173 |
#if defined( _BYTESWAPIO ) |
174 |
call mds_byteswapr4(nlat,o3) |
175 |
#endif |
176 |
do lat=1,nlat |
177 |
oz(lat,nlev-lev+1,time0) = o3(lat) |
178 |
enddo |
179 |
enddo |
180 |
enddo |
181 |
|
182 |
close (ku) |
183 |
return |
184 |
end |
185 |
|
186 |
subroutine get_methane_n2o (pres,Nrphys,n2o,methane) |
187 |
C*********************************************************************** |
188 |
C PURPOSE |
189 |
C Compute methane and n2o |
190 |
C |
191 |
C ARGUMENTS DESCRIPTION |
192 |
C |
193 |
C*********************************************************************** |
194 |
C* Climatological Annual and Global Mean Height Data * |
195 |
C*********************************************************************** |
196 |
|
197 |
implicit none |
198 |
|
199 |
integer Nrphys |
200 |
_RL n2o(Nrphys),methane(Nrphys) |
201 |
_RL pres(Nrphys) |
202 |
_RL hght(Nrphys), slope,pr1,pr2,hpr1,hpr2 |
203 |
integer L,L1,L2,lup,ldn |
204 |
|
205 |
_RL plevc (46), plevz(46) |
206 |
_RL hghtc (46), hghtz(46) |
207 |
|
208 |
data plevc /1000.00, 975.00, 950.00, 925.00, 900.00, |
209 |
. 875.00, 850.00, 825.00, 800.00, 750.00, |
210 |
. 700.00, 650.00, 600.00, 550.00, 500.00, |
211 |
. 450.00, 400.00, 350.00, 300.00, 250.00, |
212 |
. 200.00, 150.00, 100.00, 70.00, 50.00, |
213 |
. 40.00, 30.00, 20.00, 10.00, 7.00, |
214 |
. 5.00, 4.00, 3.00, 2.00, 1.00, |
215 |
. 0.70, 0.50, 0.40, 0.30, 0.20, |
216 |
. 0.10, 0.07, 0.05, 0.04, 0.03, |
217 |
. 0.02 / |
218 |
|
219 |
data hghtc/ 0.128733 , 0.316985 , 0.528275 , 0.749515 , 0.976471 , |
220 |
. 1.208910 , 1.446800 , 1.690980 , 1.941630 , 2.463530 , |
221 |
. 3.016200 , 3.603490 , 4.229410 , 4.899870 , 5.622320 , |
222 |
. 6.405940 , 7.263450 , 8.211920 , 9.275540 , 10.49150 , |
223 |
. 11.92420 , 13.70200 , 16.12980 , 18.24120 , 20.26480 , |
224 |
. 21.63100 , 23.41250 , 25.96570 , 30.45890 , 32.85240 , |
225 |
. 35.17360 , 36.75040 , 38.82900 , 41.84600 , 47.15580 , |
226 |
. 49.90100 , 52.46230 , 54.13890 , 56.26340 , 59.17640 , |
227 |
. 63.89980 , 66.20240 , 68.29210 , 69.63550 , 71.32330 , |
228 |
. 73.62110 / |
229 |
|
230 |
do L=1,46 |
231 |
plevz(L) = plevc(47-L) |
232 |
hghtz(L) = hghtc(47-L) |
233 |
enddo |
234 |
|
235 |
C ********************************************************************** |
236 |
C Interpolate Heights to Model Pressures **** |
237 |
C ********************************************************************** |
238 |
|
239 |
do L2 = 1,Nrphys |
240 |
|
241 |
do L1 = 1,46 |
242 |
if( plevz(L1).gt.pres(L2) ) then |
243 |
if( L1.eq.1 ) then |
244 |
lup = 1 |
245 |
ldn = 2 |
246 |
else |
247 |
lup = L1-1 |
248 |
ldn = L1 |
249 |
endif |
250 |
goto 10 |
251 |
endif |
252 |
enddo |
253 |
lup = 45 |
254 |
ldn = 46 |
255 |
|
256 |
10 continue |
257 |
pr1 = plevz(lup) |
258 |
pr2 = plevz(ldn) |
259 |
hpr1 = hghtz(lup) |
260 |
hpr2 = hghtz(ldn) |
261 |
|
262 |
slope = ( hpr1-hpr2 )/( pr1-pr2 ) |
263 |
hght(L2) = hpr2 + ( pres(L2)-pr2 )*slope |
264 |
|
265 |
enddo |
266 |
|
267 |
C ********************************************************************** |
268 |
C Set the profiles of N2O and CH4 based on Bresser and Pawson 1996 **** |
269 |
C ********************************************************************** |
270 |
|
271 |
do L = 1,Nrphys |
272 |
if( hght(L).gt.26. ) then |
273 |
n2o(L) = 120.* exp( (26.- hght(L)) / 5.69 ) * 1.e-9 |
274 |
else if( hght(L).gt.16. ) then |
275 |
n2o(L) = 307.* exp( (16.- hght(L)) /10.47 ) * 1.e-9 |
276 |
else |
277 |
n2o(L) = 307.e-9 |
278 |
endif |
279 |
enddo |
280 |
|
281 |
do L = 1,Nrphys |
282 |
if( hght(L).gt.55. ) then |
283 |
methane(L) = 0.2e-6 |
284 |
else if( hght(L).gt.14. ) then |
285 |
methane(L) = 1.7* exp( (14.- hght(L)) /19.16 ) * 1.e-6 |
286 |
else |
287 |
methane(L) = 1.7e-6 |
288 |
endif |
289 |
enddo |
290 |
|
291 |
return |
292 |
end |