File indexing completed on 2024-12-17 18:39:14 UTC
view on githubraw file Latest commit 6d4cc123 on 2024-01-17 14:47:18 UTC
27f9df093b Oliv*0001 #include "SUN_OPTIONS.h"
0002
0003
0004
0005
0006 SUBROUTINE SUN_SFCSOLZ(
0007 O solz,
0008 I isec,
0009 I bi, bj, iMin, iMax, jMin, jMax,
0010 I myTime, myIter, myThid )
0011
0012
0013
0014
0015
0016 IMPLICIT NONE
0017 #include "SIZE.h"
0018 #include "EEPARAMS.h"
0019 #include "PARAMS.h"
6d4cc12339 Oliv*0020 #include "GRID.h"
27f9df093b Oliv*0021 #include "SUN_FIELDS.h"
0022
0023
0024
0025
0026
0027
0028
0029 _RL myTime
0030 INTEGER isec, bi, bj, iMin, iMax, jMin, jMax, myIter, myThid
0031
0032
0033
0034 _RL solz(1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
0035
0036
0037 #ifdef ALLOW_SUN
0038
0039
0040 INTEGER SUN_JD
0041 EXTERNAL SUN_JD
0042
0043
0044 INTEGER i,j,l
0045 INTEGER iyr,imon,iday,isecnow,lp,wd,myDate(4)
6d4cc12339 Oliv*0046 _RL sec, suni(3), sung(3), sunv, sunn, sune, rs, gha, rlon
27f9df093b Oliv*0047 _RL rjd, t
0048 _RL xls, gs, xlm, asc, dpsi, eps
0049
0050
0051 CALL CAL_GETDATE( myIter,myTime,myDate,myThid )
0052 CALL CAL_CONVDATE( mydate,iyr,imon,iday,isecnow,lp,wd,myThid )
0053 IF ( isec .GE. 0 )THEN
0054
0055 sec = isec
0056 ELSE
0057 sec = isecnow
0058 ENDIF
0059
0060
0061
0062 rjd = SUN_JD(iyr,imon,iday)
0063 t = rjd - 2451545 _d 0 + (sec-43200 _d 0)/86400 _d 0
0064
0065
0066 CALL SUN_EPHPARMS (t,xls,gs,xlm,asc)
0067
0068
0069 CALL SUN_NUTATE (t,xls,gs,xlm,asc,dpsi,eps)
0070
0071
0072 CALL SUN_SUN2000 (t,xls,gs,xlm,asc,dpsi,eps,suni,rs)
0073
0074
0075 CALL SUN_GHA2000 (t,dpsi,eps,gha)
0076 gha = gha*deg2rad
0077
6d4cc12339 Oliv*0078 IF ( isec .GE. 0 )THEN
0079
0080 DO j=jMin,jMax
0081 DO i=iMin,iMax
0082
0083
0084 rlon = XC(i,j,bi,bj)*deg2rad
0085
27f9df093b Oliv*0086
6d4cc12339 Oliv*0087 sung(1) = suni(1)*COS(gha-rlon) + suni(2)*SIN(gha-rlon)
0088 sung(2) = suni(2)*COS(gha-rlon) - suni(1)*SIN(gha-rlon)
0089 sung(3) = suni(3)
27f9df093b Oliv*0090
0091
0092
6d4cc12339 Oliv*0093 sunv = 0 _d 0
0094 sunn = 0 _d 0
0095 sune = 0 _d 0
0096 DO l=1,3
0097 sunv = sunv + sung(l)*SUN_up(i,j,bi,bj,l)
0098 sunn = sunn + sung(l)*SUN_no(i,j,bi,bj,l)
0099 sune = sune + sung(l)*SUN_ea(i,j,bi,bj,l)
0100 ENDDO
0101
0102
0103 solz(i,j) = ATAN2(SQRT(sunn*sunn+sune*sune), sunv)/deg2rad
27f9df093b Oliv*0104 ENDDO
6d4cc12339 Oliv*0105 ENDDO
0106
0107 ELSE
0108
0109
0110 sung(1) = suni(1)*COS(gha) + suni(2)*SIN(gha)
0111 sung(2) = suni(2)*COS(gha) - suni(1)*SIN(gha)
0112 sung(3) = suni(3)
0113
0114 DO j=jMin,jMax
0115 DO i=iMin,iMax
0116
0117
0118 sunv = 0 _d 0
0119 sunn = 0 _d 0
0120 sune = 0 _d 0
0121 DO l=1,3
0122 sunv = sunv + sung(l)*SUN_up(i,j,bi,bj,l)
0123 sunn = sunn + sung(l)*SUN_no(i,j,bi,bj,l)
0124 sune = sune + sung(l)*SUN_ea(i,j,bi,bj,l)
0125 ENDDO
27f9df093b Oliv*0126
0127
6d4cc12339 Oliv*0128 solz(i,j) = ATAN2(SQRT(sunn*sunn+sune*sune), sunv)/deg2rad
0129 ENDDO
27f9df093b Oliv*0130 ENDDO
6d4cc12339 Oliv*0131
0132 ENDIF
27f9df093b Oliv*0133
0134 #endif /* ALLOW_SUN */
0135
0136 RETURN
0137 END