2 SUBROUTINE ana_srflux (ng, tile, model)
23 integer,
intent(in) :: ng, tile, model
27 character (len=*),
parameter :: MyFile = &
32 CALL ana_srflux_tile (ng, tile, model, &
33 & lbi, ubi, lbj, ubj, &
34 & imins, imaxs, jmins, jmaxs, &
59 SUBROUTINE ana_srflux_tile (ng, tile, model, &
60 & LBi, UBi, LBj, UBj, &
61 & IminS, ImaxS, JminS, JmaxS, &
64 & cloud, Hair, Tair, Pair, &
80 integer,
intent(in) :: ng, tile, model
81 integer,
intent(in) :: LBi, UBi, LBj, UBj
82 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
85 real(r8),
intent(in) :: lonr(LBi:,LBj:)
86 real(r8),
intent(in) :: latr(LBi:,LBj:)
88 real(r8),
intent(in) :: cloud(LBi:,LBj:)
89 real(r8),
intent(in) :: Hair(LBi:,LBj:)
90 real(r8),
intent(in) :: Tair(LBi:,LBj:)
91 real(r8),
intent(in) :: Pair(LBi:,LBj:)
93 real(r8),
intent(out) :: srflx(LBi:,LBj:)
95 real(r8),
intent(in) :: lonr(LBi:UBi,LBj:UBj)
96 real(r8),
intent(in) :: latr(LBi:UBi,LBj:UBj)
98 real(r8),
intent(in) :: cloud(LBi:UBi,LBj:UBj)
99 real(r8),
intent(in) :: Hair(LBi:UBi,LBj:UBj)
100 real(r8),
intent(in) :: Tair(LBi:UBi,LBj:UBj)
101 real(r8),
intent(in) :: Pair(LBi:UBi,LBj:UBj)
103 real(r8),
intent(out) :: srflx(LBi:UBi,LBj:UBj)
110#if defined ALBEDO || defined DIURNAL_SRFLUX
111 real(dp) :: hour, yday
112 real(r8) :: Dangle, Hangle, LatRad
113 real(r8) :: cff1, cff2
115 real(r8) :: Rsolar, e_sat, vap_p, zenith
120 real(r8),
parameter :: alb_w=0.06_r8
122#include "set_bounds.h"
124#if defined ALBEDO || defined DIURNAL_SRFLUX
157 dangle=23.44_dp*cos((172.0_dp-yday)*2.0_dp*
pi/365.2425_dp)
162 hangle=(12.0_r8-hour)*
pi/12.0_r8
175 cff1=sin(latrad)*sin(dangle)
176 cff2=cos(latrad)*cos(dangle)
193 zenith=cff1+cff2*cos(hangle-lonr(i,j)*
deg2rad)
194 IF (zenith.gt.0.0_r8)
THEN
195 cff=(0.7859_r8+0.03477_r8*tair(i,j))/ &
196 & (1.0_r8+0.00412_r8*tair(i,j))
198 vap_p=e_sat*hair(i,j)
199 srflx(i,j)=rsolar*zenith*zenith* &
200 & (1.0_r8-0.6_r8*cloud(i,j)**3)/ &
201 & ((zenith+2.7_r8)*vap_p*1.0e-3_r8+ &
202 & 1.085_r8*zenith+0.1_r8)
209 srflx(i,j)=(1.0_r8-alb_w)*srflx(i,j)
211# elif defined DIURNAL_SRFLUX
224 IF (abs(cff1).gt.abs(cff2))
THEN
225 IF (cff1*cff2.gt.0.0_r8)
THEN
227 srflx(i,j)=max(0.0_r8, &
229 & (cff1+cff2*cos(hangle-lonr(i,j)*
deg2rad)))
234 cff=(cff1*acos(-cff1/cff2)+sqrt(cff2*cff2-cff1*cff1))/
pi
235 srflx(i,j)=max(0.0_r8, &
237 & (cff1+cff2*cos(hangle-lonr(i,j)*
deg2rad)))
254# if defined UPWELLING
257 srflx(i,j)=cff*150.0_r8
273 & lbi, ubi, lbj, ubj, &
279 & lbi, ubi, lbj, ubj, &
subroutine ana_srflux_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, lonr, latr, cloud, hair, tair, pair, srflx)
subroutine, public caldate(currenttime, yy_i, yd_i, mm_i, dd_i, h_i, m_i, s_i, yd_dp, dd_dp, h_dp, m_dp, s_dp)
subroutine mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, a, b, c, d)