67 SUBROUTINE ana_specir_tile (ng, tile, model, &
68 & LBi, UBi, LBj, UBj, &
69 & IminS, ImaxS, JminS, JmaxS, &
71 & cloud, Hair, Tair, Pair, &
91 integer,
intent(in) :: ng, tile, model
92 integer,
intent(in) :: LBi, UBi, LBj, UBj
93 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
96 real(r8),
intent(in) :: lonr(LBi:,LBj:)
97 real(r8),
intent(in) :: latr(LBi:,LBj:)
98 real(r8),
intent(in) :: cloud(LBi:,LBj:)
99 real(r8),
intent(in) :: Hair(LBi:,LBj:)
100 real(r8),
intent(in) :: Tair(LBi:,LBj:)
101 real(r8),
intent(in) :: Pair(LBi:,LBj:)
102 real(r8),
intent(in) :: Uwind(LBi:,LBj:)
103 real(r8),
intent(in) :: Vwind(LBi:,LBj:)
104 real(r8),
intent(out) :: SpecIr(LBi:,LBj:,:)
105 real(r8),
intent(out) :: avcos(LBi:,LBj:,:)
107 real(r8),
intent(in) :: lonr(LBi:UBi,LBj:UBj)
108 real(r8),
intent(in) :: latr(LBi:UBi,LBj:UBj)
109 real(r8),
intent(in) :: cloud(LBi:UBi,LBj:UBj)
110 real(r8),
intent(in) :: Hair(LBi:UBi,LBj:UBj)
111 real(r8),
intent(in) :: Tair(LBi:UBi,LBj:UBj)
112 real(r8),
intent(in) :: Pair(LBi:UBi,LBj:UBj)
113 real(r8),
intent(in) :: UWind(LBi:UBi,LBj:UBj)
114 real(r8),
intent(in) :: Vwind(LBi:UBi,LBj:UBj)
115 real(r8),
intent(out) :: SpecIr(LBi:UBi,LBj:UBj,NBands)
116 real(r8),
intent(out) :: avcos(LBi:UBi,LBj:UBj,NBands)
121 real(r8) :: am = 1.0_r8
122 real(r8) :: betalam = 0.55_r8
123 real(r8) :: p0 = 29.92_r8
124 real(r8) :: rex = -1.6364_r8
125 real(r8) :: roair = 1200.0_r8
126 real(r8) :: rn = 1.341_r8
127 real(r8) :: vis = 15.0_r8
128 real(r8) :: wv = 1.5_r8
132 integer :: i, iband, ic, j, nc
134 real(dp) :: hour, yday
135 real(r8) :: Dangle, Hangle, LatRad, LonRad
136 real(r8) :: cff, cff1, cff2
137 real(r8) :: alpha, beta, gamma, theta, rtheta, rthetar
138 real(r8) :: atra, gtra, otra, rtra, wtra
139 real(r8) :: alg, arg, asymp, cosunz, Fa
140 real(r8) :: frh, rh, rlam, rlogc
141 real(r8) :: rm, rmin, rmo, rmp, rod, rof
142 real(r8) :: ros, rospd, rosps, rpls
143 real(r8) :: sumx, sumx2, sumxy, sumy
144 real(r8) :: taa, tas, to3, wa, wspeed, zenith
146 real(r8),
dimension(NBands) :: Fo, Edir, Edif, Ed, qlam
148 real(r8),
dimension(3) :: a_arr, dndr
149 real(r8),
dimension(3) :: ro = (/ 0.03_r8, 0.24_r8, 2.00_r8 /)
150 real(r8),
dimension(3) :: r_arr = (/ 0.10_r8, 1.00_r8, 10.0_r8 /)
152#include "set_bounds.h"
164 dangle=23.44_dp*cos((172.0_dp-yday)*2.0_dp*
pi/365.25_dp)
169 hangle=(12.0_r8-hour)*
pi/12.0_r8
174 cff=1.0e-9_r8/(6.6256e-34_r8*2.998e8_r8*6.023e17_r8)
176 qlam(iband)=ec_wave_ab(iband)*cff
181 cff=(1.0_dp+0.0167_dp*cos(2.0_dp*
pi*(yday-3.0_dp)/365.0_dp))**2
183 fo(iband)=ec_fobar(iband)*cff
196 to3=(235.0_r8+(150.0_r8+40.0_r8* &
197 & sin(0.9865_dp*(yday-30.0_dp)*
deg2rad)+ &
198 & 20.0_r8*sin(3.0_r8*lonrad))* &
199 & sin(1.28_r8*latrad)*sin(1.28_r8*latrad))* &
205 cosunz=sin(latrad)*sin(dangle)+ &
206 & cos(latrad)*cos(dangle)*cos(hangle-lonr(i,j)*
deg2rad)
216 IF ((theta.ge.0.0_r8).and.(theta.le.90.0_r8))
THEN
220 rm=1.0_r8/(cosunz+0.50572_r8*(96.07995_r8-theta)**rex)
221 rmp=rm*(pair(i,j)*0.02952756_r8)/p0
222 rmo=(1.0_r8+22.0_r8/6370.0_r8)/ &
223 & sqrt(cosunz*cosunz+44.0_r8/6370.0_r8)
230 wspeed=sqrt(uwind(i,j)*uwind(i,j)+vwind(i,j)*vwind(i,j))
235 IF (rh.ge.100.0_r8) rh=99.9_r8
236 frh=((2.0_r8-rh*0.01_r8)/ &
237 (6.0_r8*(1.0_r8-rh*0.01_r8)))**0.333_r8
241 a_arr(1)=2000.0_r8*am*am
242 a_arr(2)=5.866_r8*(wspeed-2.2_r8)
243 a_arr(3)=0.01527_r8*(wspeed-2.2_r8)*0.05_r8
244 IF (a_arr(2).lt.0.5_r8) a_arr(2)=0.5_r8
245 IF (a_arr(3).lt.0.000014_r8) a_arr(3)=0.000014_r8
254 arg=log(r_arr(nc)/(frh*ro(ic)))
255 dndr(nc)=dndr(nc)+a_arr(ic)*exp(-arg*arg)*cff
266 cff1=log10(r_arr(ic))
270 sumxy=sumxy+cff1*cff2
271 sumx2=sumx2+cff1*cff1
274 rlogc=sumy/3.0_r8-gamma*sumx/3.0_r8
275 alpha=-(gamma+3.0_r8)
279 beta=(3.91_r8/vis)*betalam**alpha
283 IF (alpha.gt.1.2_r8)
THEN
285 ELSE IF (alpha .lt. 0.0_r8)
THEN
288 asymp=-0.14167_r8*alpha+0.82_r8
293 wa=(-0.0032_r8*am+0.972_r8)*exp(0.000306_r8*rh)
297 alg=log(1.0_r8-asymp)
299 & exp((alg*(1.459_r8+alg*(0.1595_r8+alg*0.4129_r8))+ &
300 & alg*(0.0783_r8+alg*(-0.3824_r8-alg*0.5874_r8))* &
309 IF (wspeed.gt.4.0_r8)
THEN
310 IF (wspeed.le.7.0_r8)
THEN
311 rof=roair*(0.00062_r8+0.00156_r8/wspeed)* &
312 & 0.000022_r8*wspeed*wspeed-0.00040_r8
314 rof=(roair*(0.00049_r8+0.000065_r8*wspeed)* &
315 & 0.000045_r8-0.000040_r8)*wspeed*wspeed
325 IF ((theta.lt.40.0_r8).or.(wspeed.lt.2.0_r8))
THEN
326 IF (theta.eq.0.0_r8)
THEN
330 rthetar=asin(sin(rtheta)/rn)
333 rospd=0.5_r8*((sin(rmin)*sin(rmin))/ &
334 & (sin(rpls)*sin(rpls))+ &
335 & (tan(rmin)*tan(rmin))/ &
336 & (tan(rpls)*tan(rpls)))
342 rospd=0.0253_r8*exp((-0.000714_r8*wspeed+0.0618_r8)* &
354 rlam=ec_wave_ab(iband)*0.001_r8
358 rtra=exp(-rmp/(115.6406_r8*rlam**4-1.335_r8*rlam**2))
362 otra=exp(-ec_aoz(iband)*to3*rmo)
366 arg=beta*rm*rlam**(-alpha)
368 taa=exp(-(1.0_r8-wa)*arg)
373 gtra=exp((-1.41_r8*ec_ag(iband)*rmp)/ &
374 & ((1.0_r8+118.3_r8*ec_ag(iband)*rmp)**0.45_r8))
378 wtra=exp((-0.2385_r8*ec_aw(iband)*wv*rm)/ &
379 & ((1.0_r8+20.07_r8*ec_aw(iband)*wv*rm)**0.45_r8))
383 edir(iband)=fo(iband)*cosunz*rtra*otra*atra*gtra* &
388 edif(iband)=(1.0_r8-ros)* &
389 & fo(iband)*cosunz*gtra*wtra*otra* &
390 & (taa*0.5_r8*(1.0_r8-rtra**0.95_r8)+ &
391 & taa*fa*(1.0_r8-tas)*rtra**1.5_r8)
396 IF (cloud(i,j).gt.0.25_r8)
THEN
397 ed(iband)=(edir(iband)+edif(iband))* &
398 & (1.0_r8-0.75_r8*cloud(i,j)**3.4_r8)
399 edif(iband)=ed(iband)* &
400 & (0.3_r8+0.7_r8*cloud(i,j)**2.0_r8)
402 ed(iband)=edir(iband)+edif(iband)
407 specir(i,j,iband)=ed(iband)*10.0_r8*qlam(iband)
411 cff1=cos(asin((sin(zenith))/rn))
412 cff2=edif(iband)/ed(iband)
413 avcos(i,j,iband)=cff1*(1.0_r8-cff2)+0.86_r8*cff2
417 specir(i,j,iband)=0.0_r8
418 avcos(i,j,iband)=0.66564_r8
428 & lbi, ubi, lbj, ubj, 1, nbands, &
431 & lbi, ubi, lbj, ubj, 1, nbands, &
437 & lbi, ubi, lbj, ubj, 1, nbands, &