/[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.7 - (hide annotations) (download)
Thu Jun 10 20:17:17 2004 UTC (19 years, 11 months ago) by molod
Branch: MAIN
Changes since 1.6: +92 -77 lines
Developing

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

  ViewVC Help
Powered by ViewVC 1.1.22