165 subroutine clearsky_bird(alt, Io,Rsun,Press, Uo,Uw, Ta5,Ta3,Ba,K1, Rg, Itot,Idir,Idif,Igr)
166 use sufr_kinds,
only: double
167 use sufr_constants,
only: pio2, r2d
170 real(double),
intent(in) :: alt
171 real(double),
intent(in),
optional :: Io,Rsun,Press, Uo,Uw, Ta5,Ta3,Ba,K1, Rg
172 real(double),
intent(out),
optional :: Itot, Idir, Idif, Igr
174 real(double) :: Z,cosZ, AM,AMp, Tr, Xo,To, Tum, Xw,Tw, Tau,Ta,Taa,Tas, Rs, tmpVar
175 real(double) :: RsunL,IoL,PressL, UoL,UwL, Ta5L,Ta3L,BaL,K1L, RgL, ItotL,IdirL,IdifL
179 if(
present(rsun)) rsunl = rsun
181 if(
present(io)) iol = io
183 if(
present(press)) pressl = press
186 if(
present(uo)) uol = uo
188 if(
present(uw)) uwl = uw
191 if(
present(ta5)) ta5l = ta5
193 if(
present(ta3)) ta3l = ta3
195 if(
present(ba)) bal = ba
197 if(
present(k1)) k1l = k1
200 if(
present(rg)) rgl = rg
209 am = 1.d0/(cosz + 0.15d0 * (93.885-z*r2d)**(-1.25d0))
210 amp = am * pressl / 1013.d0
214 tr = exp( -0.0903d0 * amp**0.84d0 * (1.d0 + amp - amp**1.01d0) )
218 to = 1.d0 - 0.1611d0 * xo * (1.d0+139.48d0*xo)**(-0.3035d0) - 0.002715 * xo / (1.d0 + 0.044d0*xo + 0.0003d0*xo**2)
221 tum = exp(-0.0127d0 * amp**0.26d0)
225 tw = 1.d0 - 2.4959d0 * xw / ((1.d0 + 79.034d0*xw)**0.6828d0 + 6.385d0*xw)
228 tau = 0.2758d0*ta3l + 0.35d0*ta5l
229 ta = exp( -tau**0.873d0 * (1.d0 + tau - tau**0.7088d0) * am**0.9108d0 )
230 taa = 1.d0 - k1l * (1.d0 - am + am**1.06d0) * (1.d0-ta)
232 rs = 0.0685d0 + (1.d0-bal) * (1.d0-tas)
238 tmpvar = iol * cosz * to * tum * tw
239 idirl = 0.9662d0 * tmpvar * tr * ta / rsunl**2
242 idifl = 0.79d0 * tmpvar * taa * (0.5d0*(1.d0-tr) + bal*(1.d0-tas)) / (1.d0 - am + am**1.02d0)
245 itotl = (idirl+idifl) / (1.d0 - rgl*rs)
249 if(
present(itot)) itot = itotl
250 if(
present(idir)) idir = idirl
251 if(
present(idif)) idif = idifl
252 if(
present(igr)) igr = itotl - (idirl+idifl)
285 use sufr_kinds,
only: double
286 use sufr_constants,
only: pi2,pio2, d2r,r2d
289 integer,
intent(in) :: DoY
290 real(double),
intent(in) :: alt, surfIncl, theta, Gbeam_n,Gdif_hor
291 real(double),
intent(out) :: Gdif_inc
292 real(double),
intent(out),
optional :: Gdif_inc_is, Gdif_inc_cs, Gdif_inc_hz
293 integer :: f11,f12,f13, f21,f22,f23
294 real(double) :: zeta, AM0rad, Mair,Delta,epsilon, alpha, psiC,psiH, chiC,chiH, F(6),F1,F2, A,C
295 real(double) :: Gdif_inc_iso, Gdif_inc_csl, Gdif_inc_hzl
301 am0rad = 1370.d0 * (1.d0 + 0.00333d0 * cos(pi2/365.d0 * doy))
304 if(alt .lt. -3.885d0*d2r)
then
306 else if(alt .lt. 10.d0*d2r)
then
307 mair = 1.d0 / ( sin(alt) + 0.15d0 * (alt*r2d + 3.885d0)**(-1.253d0) )
309 mair = 1.d0 / sin(alt)
311 delta = gdif_hor * mair / am0rad
316 if(gdif_hor.le.0.d0)
then
317 if(gbeam_n.le.0.d0)
then
323 epsilon = (gdif_hor + gbeam_n) / gdif_hor
328 f11=1; f12=2; f13=3; f21=4; f22=5; f23=6
329 if(epsilon .le. 1.056d0)
then
330 f = [-0.011d0, 0.748d0, -0.080d0, -0.048d0, 0.073d0, -0.024d0]
331 else if(epsilon .le. 1.253d0)
then
332 f = [-0.038d0, 1.115d0, -0.109d0, -0.023d0, 0.106d0, -0.037d0]
333 else if(epsilon .le. 1.586d0)
then
334 f = [ 0.166d0, 0.909d0, -0.179d0, 0.062d0, -0.021d0, -0.050d0]
335 else if(epsilon .le. 2.134d0)
then
336 f = [ 0.419d0, 0.646d0, -0.262d0, 0.140d0, -0.167d0, -0.042d0]
337 else if(epsilon .le. 3.230d0)
then
338 f = [ 0.710d0, 0.025d0, -0.290d0, 0.243d0, -0.511d0, -0.004d0]
339 else if(epsilon .le. 5.980d0)
then
340 f = [ 0.857d0, -0.370d0, -0.279d0, 0.267d0, -0.792d0, 0.076d0]
341 else if(epsilon .le. 10.080d0)
then
342 f = [ 0.734d0, -0.073d0, -0.228d0, 0.231d0, -1.180d0, 0.199d0]
344 f = [ 0.421d0, -0.661d0, 0.097d0, 0.119d0, -2.125d0, 0.446d0]
348 f1 = f(f11) + f(f12) * delta + f(f13) * zeta
349 f2 = f(f21) + f(f22) * delta + f(f23) * zeta
362 if(zeta .gt. pio2 - alpha)
then
363 psih = 0.5d0 * (pio2 - zeta + alpha) / alpha
369 if(zeta .lt. pio2 - alpha)
then
372 chih = psih * sin(psih*alpha)
375 c = 2 * (1.d0 - cos(alpha)) * chih
381 psic = 0.5d0 * (pio2 - theta + alpha) / alpha
384 if(theta .lt. pio2 - alpha)
then
385 chic = psih * cos(theta)
386 else if(theta .lt. pio2 + alpha)
then
387 chic = psih * psic * sin(psic*alpha)
392 a = 2 * (1.d0 - cos(alpha)) * chic
397 gdif_inc_iso = gdif_hor * 0.5d0 * (1.d0 + cos(surfincl)) * (1.d0 - f1)
398 gdif_inc_csl = gdif_hor * f1 * a/c
399 gdif_inc_hzl = gdif_hor * f2 * sin(surfincl)
401 gdif_inc = max(gdif_inc_iso + gdif_inc_csl + gdif_inc_hzl, 0.d0)
404 if(
present(gdif_inc_is)) gdif_inc_is = gdif_inc_iso
405 if(
present(gdif_inc_cs)) gdif_inc_cs = gdif_inc_csl
406 if(
present(gdif_inc_hz)) gdif_inc_hz = gdif_inc_hzl
subroutine clearsky_bird(alt, io, rsun, press, uo, uw, ta5, ta3, ba, k1, rg, itot, idir, idif, igr)
A simplified clear-sky model for direct and diffuse insolation on horizontal surfaces (a....