/[MITgcm]/MITgcm/pkg/fizhi/update_earth_exports.F
ViewVC logotype

Contents of /MITgcm/pkg/fizhi/update_earth_exports.F

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


Revision 1.13 - (show annotations) (download)
Fri Jul 16 19:37:04 2004 UTC (19 years, 11 months ago) by molod
Branch: MAIN
Changes since 1.12: +116 -68 lines
Debugging
Add Land Surface Model (Koster-Suarez) code to fizhi

1 C $Header: /u/gcmpack/MITgcm/pkg/fizhi/update_earth_exports.F,v 1.12 2004/07/14 17:31:58 molod Exp $
2 C $Name: $
3
4 subroutine update_earth_exports (myTime, myIter, myThid)
5 c----------------------------------------------------------------------
6 c Subroutine update_earth_exports - 'Wrapper' routine to update
7 c the fields related to the earth's surface that are needed
8 c by fizhi.
9 c
10 c Call: getlgr (Set the leaf area index and surface greenness,
11 c based on veg type and month)
12 c getalb (Set the 4 albedos based on veg type, snow and time)
13 c getemiss (Set the surface emissivity based on the veg type
14 c and the snow depth)
15 c-----------------------------------------------------------------------
16 implicit none
17 #include "CPP_OPTIONS.h"
18 #include "SIZE.h"
19 #include "GRID.h"
20 #include "fizhi_land_SIZE.h"
21 #include "fizhi_SIZE.h"
22 #include "fizhi_coms.h"
23 #include "chronos.h"
24 #include "gridalt_mapping.h"
25 #include "fizhi_land_coms.h"
26 #include "fizhi_earth_coms.h"
27 #include "fizhi_ocean_coms.h"
28 #include "EEPARAMS.h"
29
30 integer myTime, myIter, myThid
31
32 logical alarm
33 external alarm
34 real lats(sNx,sNy), lons(sNx,sNy), cosz(sNx,sNy)
35 real fraci(sNx,sNy), fracl(sNx,sNy)
36 real ficetile(nchp)
37 real radius
38 real tmpij(sNx,sNy)
39 real tmpchp(nchp)
40 integer i, j, n, bi, bj
41 integer im1, im2, jm1, jm2, idim1, idim2, jdim1, jdim2
42 integer sec, day, month
43 integer nmonf,ndayf,nsecf
44 nsecf(n) = n/10000*3600 + mod(n,10000)/100* 60 + mod(n,100)
45 nmonf(n) = mod(n,10000)/100
46 ndayf(n) = mod(n,100)
47
48 idim1 = 1-OLx
49 idim2 = sNx+OLx
50 jdim1 = 1-OLy
51 jdim2 = sNy+OLy
52 im1 = 1
53 im2 = sNx
54 jm1 = 1
55 jm2 = sNy
56 month = nmonf(nymd)
57 day = ndayf(nymd)
58 sec = nsecf(nhms)
59
60 do bj = myByLo(myThid), myByHi(myThid)
61 do bi = myBxLo(myThid), myBxHi(myThid)
62 do j = jm1,jm2
63 do i = im1,im2
64 lons(i,j) = xC(i,j,bi,bj)
65 lats(i,j) = yC(i,j,bi,bj)
66 enddo
67 enddo
68
69 call get_landfrac(im2,jm2,nSx,nSy,bi,bj,maxtyp,surftype,tilefrac,
70 . fracl)
71 do j = jm1,jm2
72 do i = im1,im2
73 if(sice(i,j,bi,bj).gt.0.) then
74 fraci(i,j) = 1.
75 else
76 fraci(i,j) = 0.
77 endif
78 enddo
79 enddo
80
81 C***********************************************************************
82 C* Get Leaf-Area-Index and Greenness Index *
83 C***********************************************************************
84
85 if( alarm('turb') .or. alarm('radsw') ) then
86 call getlgr (sec,month,day,chlt,ityp,nchpland,nSx,nSy,bi,bj,
87 . alai,agrn )
88 endif
89
90 C **********************************************************************
91 C Compute Surface Albedo
92 C **********************************************************************
93
94 if( alarm('radsw') ) then
95 call astro(nymd,nhms,lats,lons,im2*jm2,cosz,radius)
96 call getalb(sec,month,day,cosz,snodep,fraci,fracl,im2,jm2,nchp,
97 . nchpland,nSx,nSy,bi,bj,igrd,ityp,chfr,chlt,alai,agrn,
98 . albvisdr,albvisdf,albnirdr,albnirdf )
99 endif
100
101
102 C **********************************************************************
103 C Compute Surface Emissivity
104 C **********************************************************************
105
106 if( alarm('radlw') ) then
107 call grd2msc(fraci,im2,jm2,igrd,ficetile,nchp,nchp)
108 call getemiss(fracl,im2,jm2,nchp,nSx,nSy,bi,bj,igrd,ityp,chfr,
109 . snodep,ficetile,emiss)
110 endif
111
112
113 C*********************************************************************
114 C Ground Temperature Over Ocean is from SST array,
115 C Over land is from tcanopy
116 C*********************************************************************
117
118 do j = jm1,jm2
119 do i = im1,im2
120 tmpij(i,j) = 0.
121 enddo
122 enddo
123 do i = 1,nchp
124 tmpchp(i) = tcanopy(i,bi,bj)
125 enddo
126 call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),tmpchp,
127 . nchp,nchp,fracl,tmpij,im2,jm2)
128 do j = jm1,jm2
129 do i = im1,im2
130 tgz(i,j,bi,bj) = tmpij(i,j)
131 if(fracl(i,j).lt.0.3.and.sice(i,j,bi,bj).eq.0.0)
132 . tgz(i,j,bi,bj) = sst(i,j,bi,bj)
133 enddo
134 enddo
135
136 enddo
137 enddo
138
139 return
140 end
141
142 SUBROUTINE SIBALB ( AVISDR, ANIRDR, AVISDF, ANIRDF,
143 . VLAI, VGRN, ZTH, SNW, ITYP, IRUN )
144
145 C*********************************************************************
146 C The input list is as follows:
147 C VLAI: the leaf area index.
148 C VGRN: the greenness index.
149 C ZTH: The cosine of the solar zenith angle.
150 C SNW: Snow cover in meters water equivalent.
151 C ITYP: The surface type (grass, bare soil, etc.)
152 C IRUN: Number of tiles (same as used for SUBROUTINE TILE).
153 C
154 C The output list is as follows:
155 C
156 C AVISDR: visible, direct albedo.
157 C ANIRDR: near infra-red, direct albedo.
158 C AVISDF: visible, diffuse albedo.
159 C ANIRDF: near infra-red, diffuse albedo.
160 C*******************************************************************
161
162 IMPLICIT NONE
163 #include "CPP_EEOPTIONS.h"
164
165 INTEGER IRUN
166 real AVISDR (IRUN), ANIRDR (IRUN), AVISDF (IRUN), ANIRDF (IRUN)
167 _RL VLAI(IRUN),VGRN (IRUN), SNW(IRUN)
168 REAL ZTH(IRUN)
169 INTEGER ITYP (IRUN)
170
171 _RL ALVDRS, ALIDRS
172 _RL ALVDRDL, ALIDRDL
173 _RL ALVDRDD, ALIDRDD
174 _RL ALVDRI, ALIDRI
175 _RL minval
176 external minval
177
178 C Albedo of soil for visible direct solar radiation.
179 PARAMETER ( ALVDRS = 0.100 )
180 C Albedo of soil for infra-red direct solar radiation.
181 PARAMETER ( ALIDRS = 0.200 )
182 C Albedo of light desert for visible direct solar radiation.
183 PARAMETER ( ALVDRDL = 0.300 )
184 C Albedo of light desert for infra-red direct solar radiation.
185 PARAMETER ( ALIDRDL = 0.350 )
186 C Albedo of dark desert for visible direct solar radiation.
187 PARAMETER ( ALVDRDD = 0.250 )
188 C Albedo of dark desert for infra-red direct solar radiation.
189 PARAMETER ( ALIDRDD = 0.300 )
190 C Albedo of ice for visible direct solar radiation.
191 PARAMETER ( ALVDRI = 0.800 )
192 C Albedo of ice for infra-red direct solar radiation.
193 PARAMETER ( ALIDRI = 0.800 )
194
195 * --------------------------------------------------------------------------------------------
196
197 INTEGER NTYPS
198 INTEGER NLAI
199 _RL ZERO, ONE
200 _RL EPSLN, BLAI, DLAI
201 _RL ALATRM
202 PARAMETER (NLAI = 14 )
203 PARAMETER (EPSLN = 1.E-6)
204 PARAMETER (BLAI = 0.5)
205 PARAMETER (DLAI = 0.5)
206 PARAMETER (ZERO=0., ONE=1.0)
207 PARAMETER (ALATRM = BLAI + (NLAI - 1) * DLAI - EPSLN)
208 PARAMETER (NTYPS=10)
209
210
211 C ITYP: Vegetation type as follows:
212 C 1: BROADLEAF EVERGREEN TREES
213 C 2: BROADLEAF DECIDUOUS TREES
214 C 3: NEEDLELEAF TREES
215 C 4: GROUND COVER
216 C 5: BROADLEAF SHRUBS
217 C 6: DWARF TREES (TUNDRA)
218 C 7: BARE SOIL
219 C 8: LIGHT DESERT
220 C 9: GLACIER
221 C 10: DARK DESERT
222 C
223
224 INTEGER I, LAI
225 real FAC,GAMMA,BETA,ALPHA,DX,DY,ALA,GRN (2),SNWALB(4,NTYPS)
226 real COEFF
227
228 real ALVDR (NLAI, 2, NTYPS)
229 real BTVDR (NLAI, 2, NTYPS)
230 real GMVDR (NLAI, 2, NTYPS)
231 real ALIDR (NLAI, 2, NTYPS)
232 real BTIDR (NLAI, 2, NTYPS)
233 real GMIDR (NLAI, 2, NTYPS)
234
235 C (Data statements for ALVDR described in full; data statements for
236 C other constants follow same framework.)
237
238 C BROADLEAF EVERGREEN (ITYP=4); GREEN=0.33; LAI: .5-7
239 DATA (ALVDR (I, 1, 1), I = 1, 14)
240 ` /0.0808, 0.0796, 0.0792, 0.0790, 10*0.0789/
241
242 C BROADLEAF EVERGREEN (ITYP=4); GREEN=0.67; LAI: .5-7
243 DATA (ALVDR (I, 2, 1), I = 1, 14)
244 ` /0.0788, 0.0775, 0.0771, 0.0769, 10*0.0768/
245
246 C BROADLEAF DECIDUOUS (ITYP=1); GREEN=0.33; LAI: .5-7
247 DATA (ALVDR (I, 1, 2), I = 1, 14)
248 ` /0.0803, 0.0790, 0.0785, 0.0784, 3*0.0783, 7*0.0782/
249
250 C BROADLEAF DECIDUOUS (ITYP=1); GREEN=0.67; LAI: .5-7
251 DATA (ALVDR (I, 2, 2), I = 1, 14)
252 ` /0.0782, 0.0770, 0.0765, 0.0763, 10*0.0762/
253
254 C NEEDLELEAF (ITYP=3); GREEN=0.33; LAI=.5-7
255 DATA (ALVDR (I, 1, 3), I = 1, 14)
256 ` /0.0758, 0.0746, 0.0742, 0.0740, 10*0.0739/
257
258 C NEEDLELEAF (ITYP=3); GREEN=0.67; LAI=.5-7
259 DATA (ALVDR (I, 2, 3), I = 1, 14)
260 ` /0.0683, 0.0672, 0.0667, 2*0.0665, 9*0.0664/
261
262 C GROUNDCOVER (ITYP=2); GREEN=0.33; LAI=.5-7
263 DATA (ALVDR (I, 1, 4), I = 1, 14)
264 ` /0.2436, 0.2470, 0.2486, 0.2494, 0.2498, 0.2500, 2*0.2501,
265 ` 6*0.2502
266 ` /
267 C GROUNDCOVER (ITYP=2); GREEN=0.67; LAI=.5-7
268 DATA (ALVDR (I, 2, 4), I = 1, 14) /14*0.1637/
269
270 C BROADLEAF SHRUBS (ITYP=5); GREEN=0.33,LAI=.5-7
271 DATA (ALVDR (I, 1, 5), I = 1, 14)
272 & /0.0807, 0.0798, 0.0794, 0.0792, 0.0792, 9*0.0791/
273
274 C BROADLEAF SHRUBS (ITYP=5); GREEN=0.67,LAI=.5-7
275 DATA (ALVDR (I, 2, 5), I = 1, 14)
276 & /0.0787, 0.0777, 0.0772, 0.0771, 10*0.0770/
277
278 C DWARF TREES, OR TUNDRA (ITYP=6); GREEN=0.33,LAI=.5-7
279 DATA (ALVDR (I, 1, 6), I = 1, 14)
280 & /0.0802, 0.0791, 0.0787, 0.0786, 10*0.0785/
281
282 C DWARF TREES, OR TUNDRA (ITYP=6); GREEN=0.67,LAI=.5-7
283 DATA (ALVDR (I, 2, 6), I = 1, 14)
284 & /0.0781, 0.0771, 0.0767, 0.0765, 0.0765, 9*0.0764/
285
286
287 C BARE SOIL
288 DATA (ALVDR (I, 1, 7), I = 1, 14) /14*ALVDRS/
289 DATA (ALVDR (I, 2, 7), I = 1, 14) /14*ALVDRS/
290
291 C LIGHT DESERT (SAHARA, EG)
292 DATA (ALVDR (I, 1, 8), I = 1, 14) /14*ALVDRDL/
293 DATA (ALVDR (I, 2, 8), I = 1, 14) /14*ALVDRDL/
294
295 C ICE
296 DATA (ALVDR (I, 1, 9), I = 1, 14) /14*ALVDRI/
297 DATA (ALVDR (I, 2, 9), I = 1, 14) /14*ALVDRI/
298
299 C DARK DESERT (AUSTRALIA, EG)
300 DATA (ALVDR (I, 1, 10), I = 1, 14) /14*ALVDRDD/
301 DATA (ALVDR (I, 2, 10), I = 1, 14) /14*ALVDRDD/
302 C****
303 C**** -------------------------------------------------
304 DATA (BTVDR (I, 1, 1), I = 1, 14)
305 ` /0.0153, 0.0372, 0.0506, 0.0587, 0.0630, 0.0652, 0.0663,
306 ` 0.0668, 0.0671, 0.0672, 4*0.0673
307 ` /
308 DATA (BTVDR (I, 2, 1), I = 1, 14)
309 * /0.0135, 0.0354, 0.0487, 0.0568, 0.0611, 0.0633, 0.0644,
310 ` 0.0650, 0.0652, 0.0654, 0.0654, 3*0.0655
311 ` /
312 DATA (BTVDR (I, 1, 2), I = 1, 14)
313 * /0.0148, 0.0357, 0.0462, 0.0524, 0.0554, 0.0569, 0.0576,
314 ` 0.0579, 0.0580, 0.0581, 0.0581, 3*0.0582
315 ` /
316 DATA (BTVDR (I, 2, 2), I = 1, 14)
317 * /0.0131, 0.0342, 0.0446, 0.0508, 0.0539, 0.0554, 0.0560,
318 ` 0.0564, 0.0565, 5*0.0566
319 ` /
320 DATA (BTVDR (I, 1, 3), I = 1, 14)
321 * /0.0108, 0.0334, 0.0478, 0.0571, 0.0624, 0.0652, 0.0666,
322 ` 0.0673, 0.0677, 0.0679, 4*0.0680
323 ` /
324 DATA (BTVDR (I, 2, 3), I = 1, 14)
325 * /0.0034, 0.0272, 0.0408, 0.0501, 0.0554, 0.0582, 0.0597,
326 * 0.0604, 0.0608, 0.0610, 4*0.0611
327 ` /
328 DATA (BTVDR (I, 1, 4), I = 1, 14)
329 * /0.2050, 0.2524, 0.2799, 0.2947, 0.3022, 0.3059, 0.3076,
330 * 0.3085, 0.3088, 0.3090, 4*0.3091
331 ` /
332 DATA (BTVDR (I, 2, 4), I = 1, 14)
333 * /0.1084, 0.1404, 0.1617, 0.1754, 0.1837, 0.1887, 0.1915,
334 * 0.1931, 0.1940, 0.1946, 0.1948, 0.1950, 2*0.1951
335 ` /
336 DATA (BTVDR (I, 1, 5), I = 1, 14)
337 & /0.0203, 0.0406, 0.0548, 0.0632, 0.0679, 0.0703, 0.0716,
338 & 0.0722, 0.0726, 0.0727, 0.0728, 0.0728, 0.0728, 0.0729
339 ` /
340
341 DATA (BTVDR (I, 2, 5), I = 1, 14)
342 & /0.0184, 0.0385, 0.0526, 0.0611, 0.0658, 0.0683, 0.0696,
343 & 0.0702, 0.0705, 0.0707, 4*0.0708
344 ` /
345
346 DATA (BTVDR (I, 1, 6), I = 1, 14)
347 & /0.0199, 0.0388, 0.0494, 0.0554, 0.0584, 0.0599, 0.0606,
348 & 0.0609, 0.0611, 5*0.0612
349 ` /
350
351 DATA (BTVDR (I, 2, 6), I = 1, 14)
352 & /0.0181, 0.0371, 0.0476, 0.0537, 0.0568, 0.0583, 0.0590,
353 & 0.0593, 0.0595, 0.0595, 4*0.0596
354 ` /
355
356 DATA (BTVDR (I, 1, 7), I = 1, 14) /14*0./
357 DATA (BTVDR (I, 2, 7), I = 1, 14) /14*0./
358
359 DATA (BTVDR (I, 1, 8), I = 1, 14) /14*0./
360 DATA (BTVDR (I, 2, 8), I = 1, 14) /14*0./
361
362 DATA (BTVDR (I, 1, 9), I = 1, 14) /14*0./
363 DATA (BTVDR (I, 2, 9), I = 1, 14) /14*0./
364
365 DATA (BTVDR (I, 1, 10), I = 1, 14) /14*0./
366 DATA (BTVDR (I, 2, 10), I = 1, 14) /14*0./
367
368 C****
369 C**** -----------------------------------------------------------
370 DATA (GMVDR (I, 1, 1), I = 1, 14)
371 ` /0.0814, 0.1361, 0.2078, 0.2650, 0.2986, 0.3169, 0.3265,
372 * 0.3313, 0.3337, 0.3348, 0.3354, 0.3357, 2*0.3358
373 ` /
374 DATA (GMVDR (I, 2, 1), I = 1, 14)
375 * /0.0760, 0.1336, 0.2034, 0.2622, 0.2969, 0.3159, 0.3259,
376 * 0.3309, 0.3333, 0.3346, 0.3352, 0.3354, 2*0.3356
377 ` /
378 DATA (GMVDR (I, 1, 2), I = 1, 14)
379 * /0.0834, 0.1252, 0.1558, 0.1927, 0.2131, 0.2237, 0.2290,
380 * 0.2315, 0.2327, 0.2332, 0.2335, 2*0.2336, 0.2337
381 ` /
382 DATA (GMVDR (I, 2, 2), I = 1, 14)
383 * /0.0789, 0.1235, 0.1531, 0.1912, 0.2122, 0.2232, 0.2286,
384 * 0.2312, 0.2324, 0.2330, 0.2333, 0.2334, 2*0.2335
385 ` /
386 DATA (GMVDR (I, 1, 3), I = 1, 14)
387 * /0.0647, 0.1342, 0.2215, 0.2968, 0.3432, 0.3696, 0.3838,
388 * 0.3912, 0.3950, 0.3968, 0.3978, 0.3982, 0.3984, 0.3985
389 ` /
390 DATA (GMVDR (I, 2, 3), I = 1, 14)
391 * /0.0258, 0.1227, 0.1999, 0.2825, 0.3339, 0.3634, 0.3794,
392 * 0.3877, 0.3919, 0.3940, 0.3950, 0.3956, 0.3958, 0.3959
393 ` /
394 DATA (GMVDR (I, 1, 4), I = 1, 14)
395 * /0.3371, 0.5762, 0.7159, 0.7927, 0.8324, 0.8526, 0.8624,
396 * 0.8671, 0.8693, 0.8704, 0.8709, 0.8710, 2*0.8712
397 ` /
398 DATA (GMVDR (I, 2, 4), I = 1, 14)
399 * /0.2634, 0.4375, 0.5532, 0.6291, 0.6763, 0.7048, 0.7213,
400 * 0.7310, 0.7363, 0.7395, 0.7411, 0.7420, 0.7426, 0.7428
401 ` /
402 DATA (GMVDR (I, 1, 5), I = 1, 14)
403 & /0.0971, 0.1544, 0.2511, 0.3157, 0.3548, 0.3768, 0.3886,
404 & 0.3948, 0.3978, 0.3994, 0.4001, 0.4006, 0.4007, 0.4008
405 ` /
406
407 DATA (GMVDR (I, 2, 5), I = 1, 14)
408 & /0.0924, 0.1470, 0.2458, 0.3123, 0.3527, 0.3756, 0.3877,
409 & 0.3942, 0.3974, 0.3990, 0.3998, 0.4002, 0.4004, 0.4005
410 ` /
411
412 DATA (GMVDR (I, 1, 6), I = 1, 14)
413 & /0.0970, 0.1355, 0.1841, 0.2230, 0.2447, 0.2561, 0.2617,
414 & 0.2645, 0.2658, 0.2664, 0.2667, 3*0.2669
415 ` /
416
417 DATA (GMVDR (I, 2, 6), I = 1, 14)
418 & /0.0934, 0.1337, 0.1812, 0.2213, 0.2437, 0.2554, 0.2613,
419 & 0.2642, 0.2656, 0.2662, 0.2665, 0.2667, 0.2667, 0.2668
420 ` /
421
422 DATA (GMVDR (I, 1, 7), I = 1, 14) /14*1./
423 DATA (GMVDR (I, 2, 7), I = 1, 14) /14*1./
424
425 DATA (GMVDR (I, 1, 8), I = 1, 14) /14*1./
426 DATA (GMVDR (I, 2, 8), I = 1, 14) /14*1./
427
428 DATA (GMVDR (I, 1, 9), I = 1, 14) /14*1./
429 DATA (GMVDR (I, 2, 9), I = 1, 14) /14*1./
430
431 DATA (GMVDR (I, 1, 10), I = 1, 14) /14*1./
432 DATA (GMVDR (I, 2, 10), I = 1, 14) /14*1./
433
434 C****
435 C**** -----------------------------------------------------------
436
437 DATA (ALIDR (I, 1, 1), I = 1, 14)
438 * /0.2867, 0.2840, 0.2828, 0.2822, 0.2819, 0.2818, 2*0.2817,
439 * 6*0.2816
440 ` /
441 DATA (ALIDR (I, 2, 1), I = 1, 14)
442 * /0.3564, 0.3573, 0.3577, 0.3580, 2*0.3581, 8*0.3582/
443 DATA (ALIDR (I, 1, 2), I = 1, 14)
444 * /0.2848, 0.2819, 0.2804, 0.2798, 0.2795, 2*0.2793, 7*0.2792/
445 DATA (ALIDR (I, 2, 2), I = 1, 14)
446 * /0.3544, 0.3550, 0.3553, 2*0.3555, 9*0.3556/
447 DATA (ALIDR (I, 1, 3), I = 1, 14)
448 * /0.2350, 0.2311, 0.2293, 0.2285, 0.2281, 0.2280, 8*0.2279/
449 DATA (ALIDR (I, 2, 3), I = 1, 14)
450 * /0.2474, 0.2436, 0.2418, 0.2410, 0.2406, 0.2405, 3*0.2404,
451 * 5*0.2403
452 ` /
453 DATA (ALIDR (I, 1, 4), I = 1, 14)
454 * /0.5816, 0.6157, 0.6391, 0.6556, 0.6673, 0.6758, 0.6820,
455 * 0.6866, 0.6899, 0.6924, 0.6943, 0.6956, 0.6966, 0.6974
456 ` /
457 DATA (ALIDR (I, 2, 4), I = 1, 14)
458 * /0.5489, 0.5770, 0.5955, 0.6079, 0.6163, 0.6221, 0.6261,
459 * 0.6288, 0.6308, 0.6321, 0.6330, 0.6337, 0.6341, 0.6344
460 ` /
461 DATA (ALIDR (I, 1, 5), I = 1, 14)
462 & /0.2845, 0.2837, 0.2832, 0.2831, 0.2830, 9*0.2829/
463 DATA (ALIDR (I, 2, 5), I = 1, 14)
464 & /0.3532, 0.3562, 0.3578, 0.3586, 0.3590, 0.3592, 0.3594,
465 & 0.3594, 0.3594, 5*0.3595
466 ` /
467 DATA (ALIDR (I, 1, 6), I = 1, 14)
468 & /0.2825, 0.2812, 0.2806, 0.2803, 0.2802, 9*0.2801/
469 DATA (ALIDR (I, 2, 6), I = 1, 14)
470 & /0.3512, 0.3538, 0.3552, 0.3559, 0.3562, 0.3564, 0.3565,
471 & 0.3565, 6*0.3566
472 ` /
473
474 DATA (ALIDR (I, 1, 7), I = 1, 14) /14*ALIDRS/
475 DATA (ALIDR (I, 2, 7), I = 1, 14) /14*ALIDRS/
476
477 DATA (ALIDR (I, 1, 8), I = 1, 14) /14*ALIDRDL/
478 DATA (ALIDR (I, 2, 8), I = 1, 14) /14*ALIDRDL/
479
480 DATA (ALIDR (I, 1, 9), I = 1, 14) /14*ALIDRI/
481 DATA (ALIDR (I, 2, 9), I = 1, 14) /14*ALIDRI/
482
483 DATA (ALIDR (I, 1, 10), I = 1, 14) /14*ALIDRDD/
484 DATA (ALIDR (I, 2, 10), I = 1, 14) /14*ALIDRDD/
485
486 C****
487 C**** -----------------------------------------------------------
488 DATA (BTIDR (I, 1, 1), I = 1, 14)
489 * /0.1291, 0.1707, 0.1969, 0.2125, 0.2216, 0.2267, 0.2295,
490 * 0.2311, 0.2319, 0.2323, 0.2326, 2*0.2327, 0.2328
491 ` /
492 DATA (BTIDR (I, 2, 1), I = 1, 14)
493 * /0.1939, 0.2357, 0.2598, 0.2735, 0.2810, 0.2851, 0.2874,
494 * 0.2885, 0.2892, 0.2895, 0.2897, 3*0.2898
495 ` /
496 DATA (BTIDR (I, 1, 2), I = 1, 14)
497 * /0.1217, 0.1522, 0.1713, 0.1820, 0.1879, 0.1910, 0.1926,
498 * 0.1935, 0.1939, 0.1942, 2*0.1943, 2*0.1944
499 ` /
500 DATA (BTIDR (I, 2, 2), I = 1, 14)
501 * /0.1781, 0.2067, 0.2221, 0.2301, 0.2342, 0.2363, 0.2374,
502 * 0.2379, 0.2382, 0.2383, 2*0.2384, 2*0.2385
503 ` /
504 DATA (BTIDR (I, 1, 3), I = 1, 14)
505 * /0.0846, 0.1299, 0.1614, 0.1814, 0.1935, 0.2004, 0.2043,
506 * 0.2064, 0.2076, 0.2082, 0.2085, 2*0.2087, 0.2088
507 ` /
508 DATA (BTIDR (I, 2, 3), I = 1, 14)
509 * /0.0950, 0.1410, 0.1722, 0.1921, 0.2042, 0.2111, 0.2151,
510 * 0.2172, 0.2184, 0.2191, 0.2194, 0.2196, 2*0.2197
511 ` /
512 DATA (BTIDR (I, 1, 4), I = 1, 14)
513 * /0.5256, 0.7444, 0.9908, 1.2700, 1.5680, 1.8505, 2.0767,
514 * 2.2211, 2.2808, 2.2774, 2.2362, 2.1779, 2.1160, 2.0564
515 ` /
516 DATA (BTIDR (I, 2, 4), I = 1, 14)
517 * /0.4843, 0.6714, 0.8577, 1.0335, 1.1812, 1.2858, 1.3458,
518 * 1.3688, 1.3685, 1.3546, 1.3360, 1.3168, 1.2989, 1.2838
519 ` /
520 DATA (BTIDR (I, 1, 5), I = 1, 14)
521 & /0.1498, 0.1930, 0.2201, 0.2364, 0.2460, 0.2514, 0.2544,
522 & 0.2560, 0.2569, 0.2574, 0.2577, 0.2578, 0.2579, 0.2579
523 ` /
524
525 DATA (BTIDR (I, 2, 5), I = 1, 14)
526 & /0.2184, 0.2656, 0.2927, 0.3078, 0.3159, 0.3202, 0.3224,
527 & 0.3235, 0.3241, 0.3244, 0.3245, 3*0.3246
528 ` /
529
530 DATA (BTIDR (I, 1, 6), I = 1, 14)
531 & /0.1369, 0.1681, 0.1860, 0.1958, 0.2010, 0.2038, 0.2053,
532 & 0.2060, 0.2064, 0.2066, 0.2067, 3*0.2068
533 ` /
534
535 DATA (BTIDR (I, 2, 6), I = 1, 14)
536 & /0.1969, 0.2268, 0.2416, 0.2488, 0.2521, 0.2537, 0.2544,
537 & 0.2547, 0.2548, 5*0.2549
538 ` /
539
540
541 DATA (BTIDR (I, 1, 7), I = 1, 14) /14*0./
542 DATA (BTIDR (I, 2, 7), I = 1, 14) /14*0./
543
544 DATA (BTIDR (I, 1, 8), I = 1, 14) /14*0./
545 DATA (BTIDR (I, 2, 8), I = 1, 14) /14*0./
546
547 DATA (BTIDR (I, 1, 9), I = 1, 14) /14*0./
548 DATA (BTIDR (I, 2, 9), I = 1, 14) /14*0./
549
550 DATA (BTIDR (I, 1, 10), I = 1, 14) /14*0./
551 DATA (BTIDR (I, 2, 10), I = 1, 14) /14*0./
552
553 C****
554 C**** --------------------------------------------------------------
555 DATA (GMIDR (I, 1, 1), I = 1, 14)
556 * /0.1582, 0.2581, 0.3227, 0.3635, 0.3882, 0.4026, 0.4108,
557 * 0.4154, 0.4179, 0.4193, 0.4200, 0.4204, 0.4206, 0.4207
558 ` /
559 DATA (GMIDR (I, 2, 1), I = 1, 14)
560 * /0.1934, 0.3141, 0.3818, 0.4200, 0.4415, 0.4533, 0.4598,
561 * 0.4633, 0.4651, 0.4662, 0.4667, 0.4671, 2*0.4672
562 ` /
563 DATA (GMIDR (I, 1, 2), I = 1, 14)
564 * /0.1347, 0.1871, 0.2277, 0.2515, 0.2651, 0.2727, 0.2768,
565 * 0.2790, 0.2801, 0.2808, 0.2811, 0.2812, 0.2813, 0.2814
566 ` /
567 DATA (GMIDR (I, 2, 2), I = 1, 14)
568 * /0.1440, 0.2217, 0.2629, 0.2839, 0.2947, 0.3003, 0.3031,
569 * 0.3046, 0.3054, 0.3058, 0.3060, 2*0.3061, 0.3062
570 ` /
571 DATA (GMIDR (I, 1, 3), I = 1, 14)
572 * /0.1372, 0.2368, 0.3235, 0.3839, 0.4229, 0.4465, 0.4602,
573 * 0.4679, 0.4722, 0.4745, 0.4758, 0.4764, 0.4768, 0.4770
574 ` /
575 DATA (GMIDR (I, 2, 3), I = 1, 14)
576 * /0.1435, 0.2524, 0.3370, 0.3955, 0.4332, 0.4563, 0.4697,
577 * 0.4773, 0.4815, 0.4839, 0.4851, 0.4858, 0.4861, 0.4863
578 ` /
579 DATA (GMIDR (I, 1, 4), I = 1, 14)
580 * /0.4298, 0.9651, 1.6189, 2.4084, 3.2992, 4.1928, 4.9611,
581 * 5.5095, 5.8085, 5.9069, 5.8726, 5.7674, 5.6346, 5.4944
582 ` /
583 DATA (GMIDR (I, 2, 4), I = 1, 14)
584 * /0.4167, 0.8974, 1.4160, 1.9414, 2.4147, 2.7803, 3.0202,
585 * 3.1468, 3.1954, 3.1932, 3.1676, 3.1328, 3.0958, 3.0625
586 ` /
587 DATA (GMIDR (I, 1, 5), I = 1, 14)
588 & /0.1959, 0.3203, 0.3985, 0.4472, 0.4766, 0.4937, 0.5034,
589 & 0.5088, 0.5117, 0.5134, 0.5143, 0.5147, 0.5150, 0.5152
590 ` /
591
592 DATA (GMIDR (I, 2, 5), I = 1, 14)
593 & /0.2328, 0.3859, 0.4734, 0.5227, 0.5498, 0.5644, 0.5720,
594 & 0.5761, 0.5781, 0.5792, 0.5797, 0.5800, 0.5802, 0.5802
595 ` /
596
597 DATA (GMIDR (I, 1, 6), I = 1, 14)
598 & /0.1447, 0.2244, 0.2698, 0.2953, 0.3094, 0.3170, 0.3211,
599 & 0.3233, 0.3244, 0.3250, 0.3253, 0.3255, 0.3256, 0.3256
600 ` /
601
602 DATA (GMIDR (I, 2, 6), I = 1, 14)
603 & /0.1643, 0.2624, 0.3110, 0.3347, 0.3461, 0.3517, 0.3543,
604 & 0.3556, 0.3562, 0.3564, 0.3565, 0.3566, 0.3566, 0.3566
605 ` /
606
607 DATA (GMIDR (I, 1, 7), I = 1, 14) /14*1./
608 DATA (GMIDR (I, 2, 7), I = 1, 14) /14*1./
609
610 DATA (GMIDR (I, 1, 8), I = 1, 14) /14*1./
611 DATA (GMIDR (I, 2, 8), I = 1, 14) /14*1./
612
613 DATA (GMIDR (I, 1, 9), I = 1, 14) /14*1./
614 DATA (GMIDR (I, 2, 9), I = 1, 14) /14*1./
615
616 DATA (GMIDR (I, 1, 10), I = 1, 14) /14*1./
617 DATA (GMIDR (I, 2, 10), I = 1, 14) /14*1./
618
619
620 C**** -----------------------------------------------------------
621
622 DATA GRN /0.33, 0.67/
623
624 #include "snwmid.h"
625 DATA SNWALB /.65, .38, .65, .38,
626 * .65, .38, .65, .38,
627 * .65, .38, .65, .38,
628 * .65, .38, .65, .38,
629 * .65, .38, .65, .38,
630 & .65, .38, .65, .38,
631 & .65, .38, .65, .38,
632 & .65, .38, .65, .38,
633 & .80, .60, .80, .60,
634 & .65, .38, .65, .38
635 ` /
636
637 #if CRAY
638 #if f77
639 cfpp$ expand (coeff)
640 #endif
641 #endif
642
643 DO 100 I=1,IRUN
644 ALA = MIN (MAX (ZERO, VLAI(I)), ALATRM)
645 LAI = 1 + MAX(0, INT((ALA-BLAI)/DLAI) )
646 DX = (ALA - (BLAI+(LAI-1)*DLAI)) * (ONE/DLAI)
647 DY = (VGRN(I)- GRN(1)) * (ONE/(GRN(2) - GRN(1)))
648
649 ALPHA = COEFF (ALVDR (1, 1, ITYP (I)), NLAI, LAI ,DX, DY)
650 BETA = COEFF (BTVDR (1, 1, ITYP (I)), NLAI, LAI ,DX, DY)
651 GAMMA = COEFF (GMVDR (1, 1, ITYP (I)), NLAI, LAI ,DX, DY)
652
653 AVISDR(I) = ALPHA - ZTH(I)*BETA / (GAMMA+ZTH(I))
654 AVISDF(I) = ALPHA-BETA
655 * + 2.*BETA*GAMMA*(1.-GAMMA*LOG((1.+GAMMA)/GAMMA))
656
657 ALPHA = COEFF (ALIDR (1, 1, ITYP (I)), NLAI, LAI ,DX, DY)
658 BETA = COEFF (BTIDR (1, 1, ITYP (I)), NLAI, LAI ,DX, DY)
659 GAMMA = COEFF (GMIDR (1, 1, ITYP (I)), NLAI, LAI ,DX, DY)
660
661 ANIRDR(I) = ALPHA - ZTH(I)*BETA / (GAMMA+ZTH(I))
662 ANIRDF(I) = ALPHA-BETA
663 * + 2.*BETA*GAMMA*(1.-GAMMA*LOG((1.+GAMMA)/GAMMA))
664
665 IF (SNW (I) .GT. ZERO) THEN
666 FAC = SNW(I) / (SNW(I) + SNWMID(ITYP(I)))
667
668 AVISDR(I) = AVISDR(I) + (SNWALB(1,ITYP(I)) - AVISDR(I)) * FAC
669 ANIRDR(I) = ANIRDR(I) + (SNWALB(2,ITYP(I)) - ANIRDR(I)) * FAC
670 AVISDF(I) = AVISDF(I) + (SNWALB(3,ITYP(I)) - AVISDF(I)) * FAC
671 ANIRDF(I) = ANIRDF(I) + (SNWALB(4,ITYP(I)) - ANIRDF(I)) * FAC
672 ENDIF
673
674 100 CONTINUE
675
676 RETURN
677 END
678 FUNCTION COEFF(TABLE, NTABL, LAI ,DX, DY)
679 #include "CPP_EEOPTIONS.h"
680
681 INTEGER NTABL, LAI
682 real coeff
683 real TABLE (NTABL, 2), DX, DY
684
685 COEFF = (TABLE(LAI, 1)
686 * + (TABLE(LAI ,2) - TABLE(LAI ,1)) * DY ) * (1.0-DX)
687 * + (TABLE(LAI+1,1)
688 * + (TABLE(LAI+1,2) - TABLE(LAI+1,1)) * DY ) * DX
689
690 RETURN
691 END
692
693 SUBROUTINE GETLGR(sec,IMON,IDAY,ALAT,ITYP,NCHPS,nSx,nSy,bi,bj,
694 . ALAI,AGRN)
695 C*********************************************************************
696 implicit none
697 #include "CPP_EEOPTIONS.h"
698
699 integer ntyps
700 _RL one,daylen
701 PARAMETER (NTYPS=10)
702 parameter (one = 1.)
703 parameter (daylen = 86400.)
704
705 integer sec, imon, iday, nchps, nSx, nSy, bi, bj
706 _RL ALAI(NCHPS,nSx,nSy), AGRN(NCHPS,nSx,nSy)
707 _RL ALAT(NCHPS)
708 integer ITYP(NCHPS,nSx,nSy)
709
710 integer i,midmon,midm,midp,id,k1,k2,kk1,kk2
711 _RL fac
712
713 INTEGER DAYS(12)
714 DATA DAYS/31,28,31,30,31,30,31,31,30,31,30,31/
715
716 _RL VGLA(12,NTYPS), VGGR(12,NTYPS)
717
718 DATA VGLA /
719 1 5.117, 5.117, 5.117, 5.117, 5.117, 5.117, 5.117, 5.117,
720 1 5.117, 5.117, 5.117, 5.117,
721 2 0.520, 0.520, 0.867, 2.107, 4.507, 6.773, 7.173, 6.507,
722 2 5.040, 2.173, 0.867, 0.520,
723 3 8.760, 9.160, 9.827,10.093,10.360,10.760,10.493,10.227,
724 3 10.093, 9.827, 9.160, 8.760,
725 4 0.782, 0.893, 1.004, 1.116, 1.782, 3.671, 4.782, 4.227,
726 4 2.004, 1.227, 1.004, 0.893,
727 5 3.760, 3.760, 2.760, 1.760, 1.760, 1.760, 1.760, 5.760,
728 5 10.760, 7.760, 4.760, 3.760,
729 6 0.739, 0.739, 0.739, 0.739, 0.739, 1.072, 5.072, 5.739,
730 6 4.405, 0.739, 0.739, 0.739,
731 7 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,
732 7 0.001, 0.001, 0.001, 0.001,
733 8 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,
734 8 0.001, 0.001, 0.001, 0.001,
735 9 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,
736 9 0.001, 0.001, 0.001, 0.001,
737 1 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,
738 1 0.001, 0.001, 0.001, 0.001
739 & /
740
741
742 DATA VGGR
743 1 /0.905, 0.905, 0.905, 0.905, 0.905, 0.905, 0.905, 0.905,
744 1 0.905, 0.905, 0.905, 0.905,
745 2 0.026, 0.026, 0.415, 0.759, 0.888, 0.925, 0.836, 0.697,
746 2 0.331, 0.166, 0.015, 0.026,
747 3 0.913, 0.917, 0.923, 0.925, 0.927, 0.905, 0.902, 0.913,
748 3 0.898, 0.855, 0.873, 0.913,
749 4 0.568, 0.622, 0.664, 0.697, 0.810, 0.908, 0.813, 0.394,
750 4 0.443, 0.543, 0.553, 0.498,
751 5 0.798, 0.532, 0.362, 0.568, 0.568, 0.568, 0.568, 0.868,
752 5 0.651, 0.515, 0.630, 0.798,
753 6 0.451, 0.451, 0.451, 0.451, 0.451, 0.622, 0.920, 0.697,
754 6 0.076, 0.451, 0.451, 0.451,
755 7 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,
756 7 0.001, 0.001, 0.001, 0.001,
757 8 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,
758 8 0.001, 0.001, 0.001, 0.001,
759 9 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,
760 9 0.001, 0.001, 0.001, 0.001,
761 1 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,
762 1 0.001, 0.001, 0.001, 0.001
763 & /
764
765
766 MIDMON = DAYS(IMON)/2 + 1
767
768
769 IF (IDAY .LT. MIDMON) THEN
770 K2 = IMON
771 K1 = MOD(IMON+10,12) + 1
772 ELSE
773 K1 = IMON
774 K2 = MOD(IMON,12) + 1
775 ENDIF
776
777 IF (IDAY .LT. MIDMON) THEN
778 MIDM = DAYS(K1)/2 + 1
779 MIDP = DAYS(K1) + MIDMON
780 ID = IDAY + DAYS(K1)
781 ELSE
782 MIDM = MIDMON
783 MIDP = DAYS(K2)/2 + 1 + DAYS(K1)
784 ID = IDAY
785 ENDIF
786
787 FAC = (float(ID -MIDM)*DAYLEN + SEC) /
788 * (float(MIDP-MIDM)*DAYLEN )
789
790 DO 220 I=1,NCHPS
791
792 IF(ALAT(I).GT.0.) THEN
793 KK1 = K1
794 KK2 = K2
795 ELSE
796 KK1 = MOD(K1+5,12) + 1
797 KK2 = MOD(K2+5,12) + 1
798 ENDIF
799
800 ALAI(I,bi,bj) = VGLA(KK2,ITYP(I,bi,bj))*FAC+
801 . VGLA(KK1,ITYP(I,bi,bj))*(ONE-FAC)
802 AGRN(I,bi,bj) = VGGR(KK2,ITYP(I,bi,bj))*FAC+
803 . VGGR(KK1,ITYP(I,bi,bj))*(ONE-FAC)
804
805 220 CONTINUE
806
807 RETURN
808 END
809
810 subroutine getalb(sec,month,day,cosz,snodep,fraci,fracg,im,jm,
811 . nchp,nchpland,nSx,nSy,bi,bj,igrd,ityp,chfr,chlt,
812 . alai,agrn,albvr,albvf,albnr,albnf)
813 C***********************************************************************
814 C PURPOSE
815 C To act as an interface to routine sibalb, which calculates
816 C the four albedos for use by the shortwave radiation routine
817 C
818 C INPUT:
819 C sec - number of seconds into the day of current time
820 C month - month of the year of current time
821 C day - day of the month of current time
822 C cosz - local cosine of the zenith angle [im,jm]
823 C snodep - snow cover in meters [nchp,nSx,nSy]
824 C fraci - real array in grid space of total sea ice fraction [im,jm]
825 C fracg - real array in grid space of total land fraction [im,jm]
826 C im - model grid longitude dimension
827 C jm - model grid latitude dimension (number of lat. points)
828 C nchp - integer actual number of tiles in tile space
829 C nchpland - integer number of land tiles
830 C nSx - number of processors in x-direction
831 C nSy - number of processors in y-direction
832 C bi - processors index in x-direction
833 C bj - processors index in y-direction
834 C igrd - integer array in tile space of grid point number for each
835 C tile [nchp,nSx,nSy]
836 C ityp - integer array in tile space of land surface type for each
837 C tile [nchp,nSx,nSy]
838 C chfr - real array in tile space of land surface type fraction for
839 C each tile [nchp,nSx,nSy]
840 C chlt - real array in tile space of latitude value for each tile
841 C [nchp,nSx,nSy]
842 C
843 C OUTPUT:
844 C albvr - real array [im,jm] of visible direct beam albedo
845 C albvf - real array [im,jm] of visible diffuse beam albedo
846 C albnr - real array [im,jm] of near-ir direct beam albedo
847 C albnf - real array [im,jm] of near-ir diffuse beam albedo
848 C
849 C***********************************************************************
850 implicit none
851 #include "CPP_EEOPTIONS.h"
852
853 integer sec,month,day,im,jm,nchp,nchpland,nSx,nSy,bi,bj
854 real cosz(im,jm),fraci(im,jm),fracg(im,jm)
855 _RL snodep(nchp,nSx,nSy),chfr(nchp,nSx,nSy),chlt(nchp,nSx,nSy)
856 integer igrd(nchp,nSx,nSy),ityp(nchp,nSx,nSy)
857 _RL alai(nchp,nSx,nSy),agrn(nchp,nSx,nSy)
858 _RL albvr(im,jm,nSx,nSy),albvf(im,jm,nSx,nSy)
859 _RL albnr(im,jm,nSx,nSy),albnf(im,jm,nSx,nSy)
860
861 _RL one,a0,a1,a2,a3,ocnalb,albsi
862 PARAMETER (one = 1.)
863 PARAMETER (A0= 0.40670980)
864 PARAMETER (A1=-1.2523634 )
865 PARAMETER (A2= 1.4224051 )
866 PARAMETER (A3=-0.55573341)
867 PARAMETER (OCNALB=0.08)
868 PARAMETER (ALBSI=0.7)
869
870 real alboc(im,jm)
871 real AVISDR(nchp),ANIRDR(nchp),AVISDF(nchp)
872 real ANIRDF(nchp)
873 real zenith(nchp)
874 real tmpij(im,jm)
875 integer i,j
876
877 DO I=1,IM
878 DO J=1,JM
879 ALBOC(I,J) = A0 + (A1 + (A2 + A3*cosz(I,J))*cosz(I,J))*cosz(I,J)
880 ALBVR(I,J,bi,bj) = ALBSI*FRACI(I,J) + ALBOC(I,J)*(ONE-FRACI(I,J))
881 ALBNR(I,J,bi,bj) = ALBVR(I,J,bi,bj)
882 ALBVF(I,J,bi,bj) = ALBSI * FRACI(I,J) + OCNALB * (ONE-FRACI(I,J))
883 ALBNF(I,J,bi,bj) = ALBVF(I,J,bi,bj)
884 ENDDO
885 ENDDO
886
887
888 C and now some conversions from grid space to tile space before sibalb
889
890 call grd2msc(cosz,im,jm,igrd,zenith,nchp,nchpland)
891
892 C and now call sibalb
893
894 call sibalb(avisdr,anirdr,avisdf,anirdf,alai(1,bi,bj),
895 . agrn(1,bi,bj),zenith,snodep(1,bi,bj),ityp(1,bi,bj),nchpland)
896
897 C finally some transformations back to grid space for albedos
898
899 DO I=1,IM
900 DO J=1,JM
901 tmpij(i,j) = 0.
902 ENDDO
903 ENDDO
904 call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),avisdr,nchp,nchpland,
905 . fracg,tmpij,im,jm)
906 DO I=1,IM
907 DO J=1,JM
908 albvr(i,j,bi,bj) = tmpij(i,j)
909 ENDDO
910 ENDDO
911 DO I=1,IM
912 DO J=1,JM
913 tmpij(i,j) = 0.
914 ENDDO
915 ENDDO
916 call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),avisdf,nchp,nchpland,
917 . fracg,tmpij,im,jm)
918 DO I=1,IM
919 DO J=1,JM
920 albvf(i,j,bi,bj) = tmpij(i,j)
921 ENDDO
922 ENDDO
923 DO I=1,IM
924 DO J=1,JM
925 tmpij(i,j) = 0.
926 ENDDO
927 ENDDO
928 call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),anirdr,nchp,nchpland,
929 . fracg,tmpij,im,jm)
930 DO I=1,IM
931 DO J=1,JM
932 albnr(i,j,bi,bj) = tmpij(i,j)
933 ENDDO
934 ENDDO
935 DO I=1,IM
936 DO J=1,JM
937 tmpij(i,j) = 0.
938 ENDDO
939 ENDDO
940 call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),anirdf,nchp,nchpland,
941 . fracg,tmpij,im,jm)
942 DO I=1,IM
943 DO J=1,JM
944 albnf(i,j,bi,bj) = tmpij(i,j)
945 ENDDO
946 ENDDO
947
948 return
949 end
950
951 subroutine getemiss(fracg,im,jm,nchp,nSx,nSy,bi,bj,igrd,ityp,
952 . chfr,snowdep,fraci,emiss)
953 C***********************************************************************
954 C PURPOSE
955 C To act as an interface to routine to emissivity, which calculates
956 C ten bands of surface emissivities for use by the longwave radiation
957 C
958 C INPUT:
959 C fracg - real array in grid space of total land fraction [im,jm]
960 C im - model grid longitude dimension
961 C jm - model grid latitude dimension (number of lat. points)
962 C nchp - integer actual number of tiles in tile space
963 C nSx - number of processors in x-direction
964 C nSy - number of processors in y-direction
965 C bi - processors index in x-direction
966 C bj - processors index in y-direction
967 C igrd - integer array in tile space of grid point number for each
968 C tile [nchp]
969 C ityp - integer array in tile space of land surface type for each
970 C tile [nchp]
971 C chfr - real array in tile space of land surface type fraction for
972 C each tile [nchp]
973 C snowdep - real array in tile space of snow depth (liquid water equiv)
974 C in mm [nchp]
975 C fraci - real array in tile space of sea ice fraction [nchp]
976 C
977 C OUTPUT:
978 C emiss - real array [im,jm,10,nSx,nSy] - surface emissivity (frac)
979 C
980 C***********************************************************************
981 implicit none
982 #include "CPP_EEOPTIONS.h"
983 integer im,jm,nchp,nSx,nSy,bi,bj
984 real fracg(im,jm)
985 _RL chfr(nchp,nSx,nSy)
986 integer igrd(nchp,nSx,nSy), ityp(nchp,nSx,nSy)
987 _RL snowdep(nchp,nSx,nSy)
988 real fraci(nchp)
989 _RL emiss(im,jm,10,nSx,nSy)
990
991 real emisstile(nchp,10)
992 real tmpij(im,jm)
993 integer i,j,k,n
994
995 do i = 1,10
996 do n = 1,nchp
997 emisstile(n,i) = 1.
998 enddo
999 enddo
1000
1001 c call emissivity to get values in tile space
1002 c -------------------------------------------
1003 call emissivity(snowdep(1,bi,bj),fraci,nchp,ityp(1,bi,bj),
1004 . emisstile)
1005
1006 c transform back to grid space for emissivities
1007 c ---------------------------------------------
1008 do k = 1,10
1009 do j = 1,jm
1010 do i = 1,im
1011 tmpij(i,j) = 0.0
1012 enddo
1013 enddo
1014 call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),emisstile(1,k),nchp,nchp,
1015 . fracg,tmpij,im,jm)
1016 do j = 1,jm
1017 do i = 1,im
1018 emiss(i,j,k,bi,bj) = tmpij(i,j)
1019 enddo
1020 enddo
1021 enddo
1022
1023 return
1024 end
1025
1026 subroutine emissivity (snowdepth,fraci,numpts,ityp,newemis)
1027 implicit none
1028 #include "CPP_EEOPTIONS.h"
1029 integer numpts
1030 integer ityp(numpts)
1031 _RL snowdepth(numpts)
1032 real fraci(numpts)
1033 real newemis(numpts,10)
1034
1035 real emis(12,11)
1036 real fac
1037 integer i,j
1038
1039 c-----------------------------------------------------------------------
1040 c NOTE: Emissivities were obtained for the following surface types:
1041 c ( 1) evergreen needleleaf = conifer
1042 c ( 2) evergreen broadleaf = conifer
1043 c ( 3) deciduous needleleaf = deciduous
1044 c ( 4) deciduous broadleaf = deciduous
1045 c ( 5) mixed forests = 1/2 conifer + 1/2 deciduous = tree
1046 c ( 6) closed shrublands = 3/4 tree + 1/4 quartz
1047 c ( 7) open shrubland = 1/4 tree + 3/4 quartz
1048 c ( 8) woody savannas = grass
1049 c ( 9) savannas = grass
1050 c (10) grasslands = grass
1051 c (11) permanent wetlands = 1/2 grass + 1/2 water
1052 c (12) croplands = grass
1053 c (13) urban = black body
1054 c (14) mosaic = 1/2 grass + 1/2 mixed forest
1055 c (15) snow/ice
1056 c (16) barren/sparsely vegetated = desert(quartz)
1057 c (17) water
1058 c (18) tundra = frost
1059 c
1060 c NOTE: Translation to Koster-Suarez surface types was as follows:
1061 c ( 1) broadleaf evergreen FROM above type 1 (conifer)
1062 c ( 2) broadleaf deciduous FROM above type 2 (deciduous)
1063 c ( 3) needleleaf evergreen FROM above type 1 (conifer)
1064 c ( 4) groundcover FROM above type 10 (grass)
1065 c ( 5) broadleaf shrubs FROM above type 6 (closed shrublands)
1066 c ( 6) dwarf trees (tundra) FROM above type 18 (tundra)
1067 c ( 7) bare soil FROM above type 16 (desert)
1068 c ( 8) light desert FROM above type 16 (desert)
1069 c ( 9) glacier FROM above type 15 (snow/ice)
1070 c ( 10) dark desert FROM above type 16 (desert)
1071 c (100) ocean FROM above type 17 (water)
1072 c
1073 c NOTE: snow-covered ground uses interpolated emissivities based on snow depth
1074 c =============================================================================
1075 c -----------------------------------------------------------------------------
1076 c Emmissivities for 12 bands in Fu/Liou
1077 c band 1: 4.5 - 5.3 um
1078 c band 2: 5.3 - 5.9 um
1079 c band 3: 5.9 - 7.1 um
1080 c band 4: 7.1 - 8.0 um
1081 c band 5: 8.0 - 9.1 um
1082 c band 6: 9.1 - 10.2 um
1083 c band 7: 10.2 - 12.5 um
1084 c band 8: 12.5 - 14.9 um
1085 c band 9: 14.9 - 18.5 um
1086 c band 10: 18.5 - 25.0 um
1087 c band 11: 25.0 - 35.7 um
1088 c band 12: 35.7 - oo um
1089 c
1090 c-------------------------------------------------------------------------
1091 data ((emis(i,j),i=1,12),j=1,11) /
1092 C evergreen needleleaf
1093 & 0.9891, 0.9892, 0.9900, 0.9914, 0.9908, 0.9903,
1094 & 0.9898, 0.9948, 1.0000, 1.0000, 1.0000, 1.0000,
1095 C deciduous needleleaf
1096 & 0.9849, 0.9856, 0.9841, 0.9831, 0.9789, 0.9805,
1097 & 0.9733, 0.9869, 1.0000, 1.0000, 1.0000, 1.0000,
1098 C evergreen needleleaf
1099 & 0.9891, 0.9892, 0.9900, 0.9914, 0.9908, 0.9903,
1100 & 0.9898, 0.9948, 1.0000, 1.0000, 1.0000, 1.0000,
1101 C grasslands
1102 & 0.9867, 0.9897, 0.9920, 0.9933, 0.9830, 0.9752,
1103 & 0.9853, 0.9928, 1.0000, 1.0000, 1.0000, 1.0000,
1104 C closed shrublands
1105 & 0.9490, 0.9697, 0.9738, 0.9712, 0.9474, 0.9582,
1106 & 0.9663, 0.9747, 0.9836, 0.9836, 0.9836, 0.9836,
1107 C tundra
1108 & 0.9469, 0.9670, 0.9883, 0.9795, 0.9751, 0.9767,
1109 & 0.9920, 0.9888, 0.9888, 0.9888, 0.9888, 0.9888,
1110 C barren
1111 & 0.8353, 0.9163, 0.9342, 0.9229, 0.8354, 0.8766,
1112 & 0.9210, 0.9262, 0.9345, 0.9345, 0.9345, 0.9345,
1113 C barren
1114 & 0.8353, 0.9163, 0.9342, 0.9229, 0.8354, 0.8766,
1115 & 0.9210, 0.9262, 0.9345, 0.9345, 0.9345, 0.9345,
1116 C snow/ice
1117 & 0.9998, 0.9998, 0.9998, 0.9998, 0.9998, 0.9999,
1118 & 0.9997, 0.9994, 0.9995, 0.9995, 0.9995, 0.9995,
1119 C barren
1120 & 0.8353, 0.9163, 0.9342, 0.9229, 0.8354, 0.8766,
1121 & 0.9210, 0.9262, 0.9345, 0.9345, 0.9345, 0.9345,
1122 C water
1123 & 0.9788, 0.9833, 0.9819, 0.9820, 0.9835, 0.9865,
1124 & 0.9886, 0.9719, 0.9719, 0.9719, 0.9719, 0.9719/
1125
1126 #include "snwmid.h"
1127
1128 c Convert to the 10 bands needed by Chou Radiation
1129 c ------------------------------------------------
1130 do i=1,numpts
1131
1132 c land points
1133 c------------
1134 if(ityp(i).le.10)then
1135 newemis(i, 1) = (emis( 1,ityp(i))+emis(2,ityp(i)))/2.
1136 newemis(i, 2) = (emis( 2,ityp(i))+emis(3,ityp(i)))/2.
1137 newemis(i, 3) = (emis( 4,ityp(i))+emis(5,ityp(i)))/2.
1138 newemis(i, 4) = emis( 6,ityp(i))
1139 newemis(i, 5) = emis( 7,ityp(i))
1140 newemis(i, 6) = emis( 8,ityp(i))
1141 newemis(i, 7) = emis( 9,ityp(i))
1142 newemis(i, 8) = (emis(10,ityp(i))+emis(11,ityp(i)))/2.
1143 newemis(i, 9) = emis(12,ityp(i))
1144 newemis(i,10) = emis( 4,ityp(i))
1145
1146 c modify emissivity for snow based on snow depth (like albedo)
1147 c-------------------------------------------------------------
1148 if(snowdepth (i).gt.0.) then
1149 fac = snowdepth(i) / (snowdepth(i) + snwmid(ityp(i)))
1150 newemis(i, 1) = newemis(i, 1) + (((emis( 1,9)+emis( 2,9))/2.)
1151 . - newemis(i, 1)) * fac
1152 newemis(i, 2) = newemis(i, 2) + (((emis( 2,9)+emis( 3,9))/2.)
1153 . - newemis(i, 2)) * fac
1154 newemis(i, 3) = newemis(i, 3) + (((emis( 4,9)+emis( 5,9))/2.)
1155 . - newemis(i, 3)) * fac
1156 newemis(i, 4) = newemis(i, 4) + (emis( 6,9)
1157 . - newemis(i, 4)) * fac
1158 newemis(i, 5) = newemis(i, 5) + (emis( 7,9)
1159 . - newemis(i, 5)) * fac
1160 newemis(i, 6) = newemis(i, 6) + (emis( 8,9)
1161 . - newemis(i, 6)) * fac
1162 newemis(i, 7) = newemis(i, 7) + (emis( 9,9)
1163 . - newemis(i, 7)) * fac
1164 newemis(i, 8) = newemis(i, 8) + (((emis(10,9)+emis(11,9))/2.)
1165 . - newemis(i, 8)) * fac
1166 newemis(i, 9) = newemis(i, 9) + (emis(12,9)
1167 . - newemis(i, 9)) * fac
1168 newemis(i,10) = newemis(i,10) + (emis( 4,9)
1169 . - newemis(i,10)) * fac
1170 endif
1171
1172 c open water
1173 c-----------
1174 else
1175 if(fraci(i).eq.0.)then
1176 newemis(i, 1) = (emis( 1,11)+emis(2,11))/2.
1177 newemis(i, 2) = (emis( 2,11)+emis(3,11))/2.
1178 newemis(i, 3) = (emis( 4,11)+emis(5,11))/2.
1179 newemis(i, 4) = emis( 6,11)
1180 newemis(i, 5) = emis( 7,11)
1181 newemis(i, 6) = emis( 8,11)
1182 newemis(i, 7) = emis( 9,11)
1183 newemis(i, 8) = (emis(10,11)+emis(11,11))/2.
1184 newemis(i, 9) = emis(12,11)
1185 newemis(i,10) = emis( 4,11)
1186
1187 c sea ice (like glacier and snow)
1188 c--------------------------------
1189 else
1190 newemis(i, 1) = (emis( 1,9)+emis(2,9))/2.
1191 newemis(i, 2) = (emis( 2,9)+emis(3,9))/2.
1192 newemis(i, 3) = (emis( 4,9)+emis(5,9))/2.
1193 newemis(i, 4) = emis( 6,9)
1194 newemis(i, 5) = emis( 7,9)
1195 newemis(i, 6) = emis( 8,9)
1196 newemis(i, 7) = emis( 9,9)
1197 newemis(i, 8) = (emis(10,9)+emis(11,9))/2.
1198 newemis(i, 9) = emis(12,9)
1199 newemis(i,10) = emis( 4,9)
1200 endif
1201 endif
1202 enddo
1203
1204 return
1205 end
1206 subroutine get_landfrac(im,jm,nSx,nSy,bi,bj,maxtyp,surftype,
1207 . tilefrac,frac)
1208 C***********************************************************************
1209 C Purpose
1210 C To compute the total fraction of land within a model grid-box
1211 C
1212 C***********************************************************************
1213 implicit none
1214 #include "CPP_EEOPTIONS.h"
1215
1216 integer im,jm,nSx,nSy,bi,bj,maxtyp
1217 integer surftype(im,jm,maxtyp,nSx,nSy)
1218 _RL tilefrac(im,jm,maxtyp,nSx,nSy)
1219 real frac(im,jm)
1220
1221 integer i,j,k
1222
1223 do j=1,jm
1224 do i=1,im
1225 frac(i,j) = 0.0
1226 enddo
1227 enddo
1228
1229 do k=1,maxtyp
1230 do j=1,jm
1231 do i=1,im
1232 if( (surftype(i,j,k,bi,bj).lt.100.).and.
1233 . (tilefrac(i,j,k,bi,bj).gt.0.0))then
1234 frac(i,j) = frac(i,j) + tilefrac(i,j,k,bi,bj)
1235 endif
1236 enddo
1237 enddo
1238 enddo
1239
1240 return
1241 end

  ViewVC Help
Powered by ViewVC 1.1.22