6 SUBROUTINE sunpos (KSIZE_OMP, KYEAR, KMONTH, KDAY, PTIME, &
7 plon, plat, ptsun, pzenith, pazimsol)
60 USE yomhook
,ONLY : lhook, dr_hook
61 USE parkind1
,ONLY : jprb
75 INTEGER,
DIMENSION(:),
INTENT(IN) :: ksize_omp
76 INTEGER,
INTENT(IN) :: kyear
77 INTEGER,
INTENT(IN) :: kmonth
78 INTEGER,
INTENT(IN) :: kday
79 REAL,
INTENT(IN) :: ptime
80 REAL,
DIMENSION(:),
INTENT(IN) :: plon
81 REAL,
DIMENSION(:),
INTENT(IN) :: plat
83 REAL,
DIMENSION(:),
INTENT(OUT) :: pzenith
84 REAL,
DIMENSION(:),
INTENT(OUT) :: pazimsol
85 REAL,
DIMENSION(:),
INTENT(OUT) :: ptsun
92 REAL,
DIMENSION(SIZE(PLON)) :: ztut ,&
100 INTEGER,
DIMENSION(0:11) :: ibis, inobis
110 INTEGER :: ji, jj, inkproma
111 INTEGER :: iindx1, iindx2
112 REAL(KIND=JPRB) :: zhook_handle
119 IF (lhook) CALL dr_hook(
'SUNPOS',0,zhook_handle)
120 zut = mod( 24.0+mod(ptime/3600.,24.0),24.0 )
122 inobis(:) = (/0,31,59,90,120,151,181,212,243,273,304,334/)
123 ibis(0:1) = inobis(0:1)
125 ibis(ji) = inobis(ji)+1
127 IF( mod(kyear,4).EQ.0 .AND. (mod(kyear,100).NE.0 .OR. mod(kyear,400).EQ.0))
THEN
128 zdate = float(kday + ibis(kmonth-1)) - 1 + ptime/xday
129 zad = 2.0*xpi*zdate/366.0
131 zdate = float(kday + inobis(kmonth-1)) - 1 + ptime/xday
132 zad = 2.0*xpi*zdate/365.0
135 za1 = (1.00554*zdate- 6.28306)*(xpi/180.0)
136 za2 = (1.93946*zdate+23.35089)*(xpi/180.0)
137 ztsider = (7.67825*sin(za1)+10.09176*sin(za2)) / 60.0
144 zdecsol = 0.006918-0.399912*cos(zad) +0.070257*sin(zad) &
145 -0.006758*cos(2.*zad)+0.000907*sin(2.*zad) &
146 -0.002697*cos(3.*zad)+0.00148 *sin(3.*zad)
147 zsindel = sin(zdecsol)
148 zcosdel = cos(zdecsol)
155 IF (nblock==nblocktot)
THEN
156 CALL
init_dim(ksize_omp,0,inkproma,iindx1,iindx2)
158 CALL
init_dim(ksize_omp,nblock,inkproma,iindx1,iindx2)
161 DO jj = iindx1,iindx2
166 zlat(jj) = plat(jj)*(xpi/180.)
167 zlon(jj) = plon(jj)*(xpi/180.)
174 ztut(jj) = zut - ztsider + zlon(jj)*((180./xpi)/15.0)
176 ptsun(jj) = mod(ptime -ztsider*3600. +plon(jj)*240., xday)
182 zsolang(jj) = (ztut(jj)-12.0)*15.0*(xpi/180.)
184 zcoszen(jj) = sin(zlat(jj))*zsindel + &
185 cos(zlat(jj))*zcosdel*cos(zsolang(jj))
187 zsinzen(jj) = sqrt( 1. - zcoszen(jj)*zcoszen(jj) )
194 pzenith(jj) = acos(zcoszen(jj))
201 IF (zsinzen(jj)/=0.)
THEN
203 zsinazi(jj) = - zcosdel * sin(zsolang(jj)) / zsinzen(jj)
204 zcosazi(jj) = (-sin(zlat(jj))*zcosdel*cos(zsolang(jj)) &
205 +cos(zlat(jj))*zsindel &
207 pazimsol(jj) = atan2(zsinazi(jj),zcosazi(jj))
216 IF (lhook) CALL dr_hook(
'SUNPOS',1,zhook_handle)
subroutine sunpos(KSIZE_OMP, KYEAR, KMONTH, KDAY, PTIME, PLON, PLAT, PTSUN, PZENITH, PAZIMSOL)
subroutine init_dim(KSIZE_OMP, KBLOCK, KKPROMA, KINDX1, KINDX2)