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

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

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


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

1 molod 1.13 C $Header: /u/gcmpack/MITgcm/pkg/fizhi/update_earth_exports.F,v 1.12 2004/07/14 17:31:58 molod Exp $
2 molod 1.1 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 molod 1.5 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 molod 1.1 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 molod 1.13 #include "GRID.h"
20 molod 1.2 #include "fizhi_land_SIZE.h"
21 molod 1.1 #include "fizhi_SIZE.h"
22     #include "fizhi_coms.h"
23 molod 1.13 #include "chronos.h"
24 molod 1.1 #include "gridalt_mapping.h"
25 molod 1.2 #include "fizhi_land_coms.h"
26 molod 1.5 #include "fizhi_earth_coms.h"
27 molod 1.6 #include "fizhi_ocean_coms.h"
28 molod 1.1 #include "EEPARAMS.h"
29    
30 molod 1.3 integer myTime, myIter, myThid
31 molod 1.1
32 molod 1.11 logical alarm
33     external alarm
34 molod 1.13 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 molod 1.3 integer im1, im2, jm1, jm2, idim1, idim2, jdim1, jdim2
42 molod 1.5 integer sec, day, month
43 molod 1.13 integer nmonf,ndayf,nsecf
44     nsecf(n) = n/10000*3600 + mod(n,10000)/100* 60 + mod(n,100)
45 molod 1.5 nmonf(n) = mod(n,10000)/100
46     ndayf(n) = mod(n,100)
47 molod 1.1
48 molod 1.3 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 molod 1.5 month = nmonf(nymd)
57     day = ndayf(nymd)
58     sec = nsecf(nhms)
59 molod 1.1
60 molod 1.3 do bj = myByLo(myThid), myByHi(myThid)
61     do bi = myBxLo(myThid), myBxHi(myThid)
62 molod 1.5 do j = jm1,jm2
63     do i = im1,im2
64 molod 1.13 lons(i,j) = xC(i,j,bi,bj)
65     lats(i,j) = yC(i,j,bi,bj)
66 molod 1.5 enddo
67     enddo
68 molod 1.1
69 molod 1.6 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 molod 1.13 if(sice(i,j,bi,bj).gt.0.) then
74 molod 1.6 fraci(i,j) = 1.
75     else
76     fraci(i,j) = 0.
77     endif
78     enddo
79     enddo
80    
81 molod 1.3 C***********************************************************************
82     C* Get Leaf-Area-Index and Greenness Index *
83     C***********************************************************************
84    
85 molod 1.10 if( alarm('turb') .or. alarm('radsw') ) then
86     call getlgr (sec,month,day,chlt,ityp,nchpland,nSx,nSy,bi,bj,
87 molod 1.7 . alai,agrn )
88 molod 1.10 endif
89 molod 1.3
90     C **********************************************************************
91     C Compute Surface Albedo
92     C **********************************************************************
93    
94 molod 1.10 if( alarm('radsw') ) then
95 molod 1.13 call astro(nymd,nhms,lats,lons,im2*jm2,cosz,radius)
96 molod 1.10 call getalb(sec,month,day,cosz,snodep,fraci,fracl,im2,jm2,nchp,
97 molod 1.6 . nchpland,nSx,nSy,bi,bj,igrd,ityp,chfr,chlt,alai,agrn,
98     . albvisdr,albvisdf,albnirdr,albnirdf )
99 molod 1.10 endif
100 molod 1.3
101    
102     C **********************************************************************
103     C Compute Surface Emissivity
104     C **********************************************************************
105    
106 molod 1.10 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 molod 1.6 . snodep,ficetile,emiss)
110 molod 1.10 endif
111 molod 1.3
112    
113     C*********************************************************************
114     C Ground Temperature Over Ocean is from SST array,
115 molod 1.10 C Over land is from tcanopy
116 molod 1.3 C*********************************************************************
117    
118 molod 1.10 do j = jm1,jm2
119     do i = im1,im2
120 molod 1.13 tmpij(i,j) = 0.
121 molod 1.10 enddo
122     enddo
123 molod 1.13 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 molod 1.10 do j = jm1,jm2
129     do i = im1,im2
130 molod 1.13 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 molod 1.10 . tgz(i,j,bi,bj) = sst(i,j,bi,bj)
133     enddo
134     enddo
135 molod 1.3
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 molod 1.8 #include "CPP_EEOPTIONS.h"
164 molod 1.3
165     INTEGER IRUN
166 molod 1.13 real AVISDR (IRUN), ANIRDR (IRUN), AVISDF (IRUN), ANIRDF (IRUN)
167     _RL VLAI(IRUN),VGRN (IRUN), SNW(IRUN)
168     REAL ZTH(IRUN)
169 molod 1.3 INTEGER ITYP (IRUN)
170    
171 molod 1.7 _RL ALVDRS, ALIDRS
172     _RL ALVDRDL, ALIDRDL
173     _RL ALVDRDD, ALIDRDD
174     _RL ALVDRI, ALIDRI
175     _RL minval
176 molod 1.3 external minval
177    
178 molod 1.9 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 molod 1.3
195     * --------------------------------------------------------------------------------------------
196    
197     INTEGER NTYPS
198     INTEGER NLAI
199 molod 1.7 _RL ZERO, ONE
200     _RL EPSLN, BLAI, DLAI
201     _RL ALATRM
202 molod 1.3 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 molod 1.13 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 molod 1.3
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 molod 1.12 #include "snwmid.h"
625 molod 1.3 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 molod 1.8 #include "CPP_EEOPTIONS.h"
680 molod 1.3
681     INTEGER NTABL, LAI
682 molod 1.13 real coeff
683     real TABLE (NTABL, 2), DX, DY
684 molod 1.3
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 molod 1.7 SUBROUTINE GETLGR(sec,IMON,IDAY,ALAT,ITYP,NCHPS,nSx,nSy,bi,bj,
694     . ALAI,AGRN)
695 molod 1.3 C*********************************************************************
696     implicit none
697 molod 1.8 #include "CPP_EEOPTIONS.h"
698 molod 1.3
699     integer ntyps
700 molod 1.7 _RL one,daylen
701 molod 1.3 PARAMETER (NTYPS=10)
702     parameter (one = 1.)
703     parameter (daylen = 86400.)
704    
705 molod 1.7 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 molod 1.3
710     integer i,midmon,midm,midp,id,k1,k2,kk1,kk2
711 molod 1.7 _RL fac
712 molod 1.3
713     INTEGER DAYS(12)
714     DATA DAYS/31,28,31,30,31,30,31,31,30,31,30,31/
715    
716 molod 1.7 _RL VGLA(12,NTYPS), VGGR(12,NTYPS)
717 molod 1.3
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 molod 1.8 FAC = (float(ID -MIDM)*DAYLEN + SEC) /
788     * (float(MIDP-MIDM)*DAYLEN )
789 molod 1.3
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 molod 1.7 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 molod 1.3
805     220 CONTINUE
806    
807     RETURN
808     END
809    
810 molod 1.7 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 molod 1.3 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 molod 1.7 C snodep - snow cover in meters [nchp,nSx,nSy]
824 molod 1.3 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 molod 1.7 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 molod 1.3 C igrd - integer array in tile space of grid point number for each
835 molod 1.7 C tile [nchp,nSx,nSy]
836 molod 1.3 C ityp - integer array in tile space of land surface type for each
837 molod 1.7 C tile [nchp,nSx,nSy]
838 molod 1.3 C chfr - real array in tile space of land surface type fraction for
839 molod 1.7 C each tile [nchp,nSx,nSy]
840 molod 1.3 C chlt - real array in tile space of latitude value for each tile
841 molod 1.7 C [nchp,nSx,nSy]
842 molod 1.3 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 molod 1.8 #include "CPP_EEOPTIONS.h"
852 molod 1.7
853     integer sec,month,day,im,jm,nchp,nchpland,nSx,nSy,bi,bj
854 molod 1.13 real cosz(im,jm),fraci(im,jm),fracg(im,jm)
855 molod 1.7 _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 molod 1.3 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 molod 1.7 PARAMETER (ALBSI=0.7)
869 molod 1.3
870 molod 1.13 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 molod 1.3 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 molod 1.13 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 molod 1.3 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 molod 1.7 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 molod 1.3
897     C finally some transformations back to grid space for albedos
898    
899 molod 1.13 DO I=1,IM
900     DO J=1,JM
901     tmpij(i,j) = 0.
902     ENDDO
903     ENDDO
904 molod 1.7 call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),avisdr,nchp,nchpland,
905 molod 1.13 . 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 molod 1.7 call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),avisdf,nchp,nchpland,
917 molod 1.13 . 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 molod 1.7 call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),anirdr,nchp,nchpland,
929 molod 1.13 . 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 molod 1.7 call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),anirdf,nchp,nchpland,
941 molod 1.13 . 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 molod 1.3
948     return
949     end
950    
951 molod 1.8 subroutine getemiss(fracg,im,jm,nchp,nSx,nSy,bi,bj,igrd,ityp,
952     . chfr,snowdep,fraci,emiss)
953 molod 1.3 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 molod 1.8 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 molod 1.3 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 molod 1.8 C emiss - real array [im,jm,10,nSx,nSy] - surface emissivity (frac)
979 molod 1.3 C
980     C***********************************************************************
981     implicit none
982 molod 1.8 #include "CPP_EEOPTIONS.h"
983     integer im,jm,nchp,nSx,nSy,bi,bj
984 molod 1.13 real fracg(im,jm)
985 molod 1.8 _RL chfr(nchp,nSx,nSy)
986     integer igrd(nchp,nSx,nSy), ityp(nchp,nSx,nSy)
987 molod 1.13 _RL snowdep(nchp,nSx,nSy)
988     real fraci(nchp)
989 molod 1.8 _RL emiss(im,jm,10,nSx,nSy)
990 molod 1.3
991 molod 1.13 real emisstile(nchp,10)
992     real tmpij(im,jm)
993 molod 1.8 integer i,j,k,n
994 molod 1.3
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 molod 1.8 call emissivity(snowdep(1,bi,bj),fraci,nchp,ityp(1,bi,bj),
1004     . emisstile)
1005 molod 1.3
1006     c transform back to grid space for emissivities
1007     c ---------------------------------------------
1008 molod 1.8 do k = 1,10
1009     do j = 1,jm
1010     do i = 1,im
1011 molod 1.13 tmpij(i,j) = 0.0
1012 molod 1.8 enddo
1013     enddo
1014     call msc2grd(igrd(1,bi,bj),chfr(1,bi,bj),emisstile(1,k),nchp,nchp,
1015 molod 1.13 . 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 molod 1.3 enddo
1022    
1023     return
1024     end
1025    
1026     subroutine emissivity (snowdepth,fraci,numpts,ityp,newemis)
1027     implicit none
1028 molod 1.8 #include "CPP_EEOPTIONS.h"
1029 molod 1.3 integer numpts
1030     integer ityp(numpts)
1031 molod 1.13 _RL snowdepth(numpts)
1032     real fraci(numpts)
1033     real newemis(numpts,10)
1034 molod 1.3
1035 molod 1.13 real emis(12,11)
1036     real fac
1037 molod 1.3 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 molod 1.9 C evergreen needleleaf
1093     & 0.9891, 0.9892, 0.9900, 0.9914, 0.9908, 0.9903,
1094 molod 1.3 & 0.9898, 0.9948, 1.0000, 1.0000, 1.0000, 1.0000,
1095 molod 1.9 C deciduous needleleaf
1096     & 0.9849, 0.9856, 0.9841, 0.9831, 0.9789, 0.9805,
1097 molod 1.3 & 0.9733, 0.9869, 1.0000, 1.0000, 1.0000, 1.0000,
1098 molod 1.9 C evergreen needleleaf
1099     & 0.9891, 0.9892, 0.9900, 0.9914, 0.9908, 0.9903,
1100 molod 1.3 & 0.9898, 0.9948, 1.0000, 1.0000, 1.0000, 1.0000,
1101 molod 1.9 C grasslands
1102     & 0.9867, 0.9897, 0.9920, 0.9933, 0.9830, 0.9752,
1103 molod 1.3 & 0.9853, 0.9928, 1.0000, 1.0000, 1.0000, 1.0000,
1104 molod 1.9 C closed shrublands
1105     & 0.9490, 0.9697, 0.9738, 0.9712, 0.9474, 0.9582,
1106 molod 1.3 & 0.9663, 0.9747, 0.9836, 0.9836, 0.9836, 0.9836,
1107 molod 1.9 C tundra
1108     & 0.9469, 0.9670, 0.9883, 0.9795, 0.9751, 0.9767,
1109 molod 1.3 & 0.9920, 0.9888, 0.9888, 0.9888, 0.9888, 0.9888,
1110 molod 1.9 C barren
1111     & 0.8353, 0.9163, 0.9342, 0.9229, 0.8354, 0.8766,
1112 molod 1.3 & 0.9210, 0.9262, 0.9345, 0.9345, 0.9345, 0.9345,
1113 molod 1.9 C barren
1114     & 0.8353, 0.9163, 0.9342, 0.9229, 0.8354, 0.8766,
1115 molod 1.3 & 0.9210, 0.9262, 0.9345, 0.9345, 0.9345, 0.9345,
1116 molod 1.9 C snow/ice
1117     & 0.9998, 0.9998, 0.9998, 0.9998, 0.9998, 0.9999,
1118 molod 1.3 & 0.9997, 0.9994, 0.9995, 0.9995, 0.9995, 0.9995,
1119 molod 1.9 C barren
1120     & 0.8353, 0.9163, 0.9342, 0.9229, 0.8354, 0.8766,
1121 molod 1.3 & 0.9210, 0.9262, 0.9345, 0.9345, 0.9345, 0.9345,
1122 molod 1.9 C water
1123     & 0.9788, 0.9833, 0.9819, 0.9820, 0.9835, 0.9865,
1124 molod 1.3 & 0.9886, 0.9719, 0.9719, 0.9719, 0.9719, 0.9719/
1125    
1126 molod 1.12 #include "snwmid.h"
1127 molod 1.3
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 molod 1.9 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 molod 1.3 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 molod 1.6 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 molod 1.8 #include "CPP_EEOPTIONS.h"
1215 molod 1.6
1216 molod 1.13 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 molod 1.6
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 molod 1.13 if( (surftype(i,j,k,bi,bj).lt.100.).and.
1233     . (tilefrac(i,j,k,bi,bj).gt.0.0))then
1234 molod 1.6 frac(i,j) = frac(i,j) + tilefrac(i,j,k,bi,bj)
1235     endif
1236     enddo
1237     enddo
1238 molod 1.3 enddo
1239    
1240     return
1241     end

  ViewVC Help
Powered by ViewVC 1.1.22