5 SUBROUTINE oi_tsl(KDAT,KSSSSS,PLAT,PLON,PMU0,PMU0M,KH)
42 USE yomhook
, ONLY : lhook, dr_hook
43 USE parkind1
, ONLY : jprb
47 INTEGER,
INTENT(IN) :: kdat
48 INTEGER,
INTENT(IN) :: ksssss
49 REAL,
INTENT(IN) :: plat, plon
50 REAL,
INTENT(OUT) :: pmu0, pmu0m
51 INTEGER,
INTENT(OUT) :: kh
53 REAL :: zgemu, zgelam, ztime, zteta, zrdecli, zreqtim, zrhgmt, zrsovr, &
54 zrwsovr, zrcodec, zrsidec, zrcovsr, zrsivsr, zrtimtrm, ztetam, &
55 zrdeclim, zreqtimm, zrhgmtm, zrsovrm, zrwsovrm, zrcodecm, &
56 zrsidecm, zrcovsrm, zrsivsrm, zt
57 INTEGER :: id, im, ia, insssss
58 REAL(KIND=JPRB) :: zhook_handle
62 IF (lhook) CALL dr_hook(
'OI_TSL',0,zhook_handle)
64 zgemu = sin(plat*xpi/180.)
65 zgelam = plon*xpi/180.
68 im = mod((kdat-id)/100,100)
71 ztime =
rtime(ia,im,id,ksssss)
73 CALL
get_mu0(zgemu,zgelam,ztime,ksssss,pmu0)
79 ztime =
rtime(ia,im,id,ksssss-nitrad)
81 IF ( (ksssss-nitrad).LT.0 )
THEN
82 insssss = ksssss + 86400
87 CALL
get_mu0(zgemu,zgelam,ztime,insssss-nitrad,pmu0m)
93 zt = (ksssss + plon*xrcdtr*3600.)/3600.
96 ELSEIF (zt > 24.0)
THEN
103 IF (lhook) CALL dr_hook(
'OI_TSL',1,zhook_handle)
107 SUBROUTINE get_mu0(PGEMU,PGELAM,PTIME,KSSSSS,PMU)
113 REAL,
INTENT(IN) :: pgemu
114 REAL,
INTENT(IN) :: pgelam
115 REAL,
INTENT(IN) :: ptime
116 INTEGER,
INTENT(IN) :: ksssss
117 REAL,
INTENT(OUT) :: pmu
119 REAL :: zteta, zdecli, zeqtim, zhgmt, zwsovr
122 zteta = ptime/(xday*365.25)
127 zhgmt =
REAL( MOD(KSSSSS,NINT(XDAY)) )
128 zwsovr = (zeqtim + zhgmt) * 2. * xpi/xday
130 zinter = sqrt(1.-pgemu**2)
131 pmu = max( sin(zdecli) * pgemu + cos(zdecli) * zinter * &
132 ( sin(zwsovr)*sin(pgelam) - cos(zwsovr)*cos(pgelam) ) , 0. )
134 IF (pmu.GT.0.) pmu = sqrt(1224.*pmu*pmu +1.)/35.
144 REAL,
INTENT(IN) :: pt
145 REAL ::
rds, zls, zel
146 REAL(KIND=JPRB) :: zhook_handle
148 IF (lhook) CALL dr_hook(
'RDS',0,zhook_handle)
150 zel = 1.7535 + 6.283076 * pt
151 zls = 4.8952 + 6.283320 * pt &
152 - 0.0075*sin(zel) - 0.0326*cos(zel) &
153 - 0.0003*sin(2.*zel) + 0.0002*cos(2.*zel)
155 rds = asin(sin(xrepsm)*sin(zls))
157 IF (lhook) CALL dr_hook(
'RDS',1,zhook_handle)
165 REAL,
INTENT(IN) :: pt
166 REAL ::
ret, zem, zls
167 REAL(KIND=JPRB) :: zhook_handle
169 IF (lhook) CALL dr_hook(
'RET',0,zhook_handle)
171 zem = 6.240075 + 6.283020 * pt
172 zls = 4.8951 + 6.283076 * pt
173 ret = 591.8*sin(2.*zls) - 12.7 * sin(4.*zls) &
174 - 459.4*sin(zem) - 4.8 *sin(2.*zem) &
175 + 39.5 * sin(zem) * cos(2.*zls)
177 IF (lhook) CALL dr_hook(
'RET',1,zhook_handle)
187 INTEGER,
INTENT(IN) :: ka, km, kd, ks
190 REAL(KIND=JPRB) :: zhook_handle
192 IF (lhook) CALL dr_hook(
'RTIME',0,zhook_handle)
194 im = km + 6*(1-isign(1,km-3))
195 ia = ka - ( (1-isign(1,km-3))/2 )
198 float( 2 - ia/100 + (ia/100)/4 + &
199 int(365.25*float(ia)) + int(30.601*float(im+1)) + kd )
201 rtime = (zj-2451545.)*xday + float(ks)
203 IF (lhook) CALL dr_hook(
'RTIME',1,zhook_handle)
subroutine get_mu0(PGEMU, PGELAM, PTIME, KSSSSS, PMU)
subroutine oi_tsl(KDAT, KSSSSS, PLAT, PLON, PMU0, PMU0M, KH)
real function rtime(KA, KM, KD, KS)