89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | subroutine sun(y,m,DD,UT,lon,lat,RA,Dec,LST,Az,El,mjd,day) | ||
|  | 
 | ||
|  |   implicit none | ||
|  | 
 | ||
|  |   integer y                         !Year | ||
|  |   integer m                         !Month | ||
|  |   integer DD                        !Day | ||
|  |   integer mjd                       !Modified Julian Date | ||
|  |   real UT                           !UT!in hours | ||
|  |   real RA,Dec                       !RA and Dec of sun | ||
|  | 
 | ||
|  | ! NB: Double caps here are single caps in the writeup. | ||
|  | 
 | ||
|  | ! Orbital elements of the Sun (also N=0, i=0, a=1): | ||
|  |   real w                            !Argument of perihelion | ||
|  |   real e                            !Eccentricity | ||
|  |   real MM                           !Mean anomaly | ||
|  |   real Ls                           !Mean longitude | ||
|  | 
 | ||
|  | ! Other standard variables: | ||
|  |   real v                            !True anomaly | ||
|  |   real EE                           !Eccentric anomaly | ||
|  |   real ecl                          !Obliquity of the ecliptic | ||
|  |   real d                            !Ephemeris time argument in days | ||
|  |   real r                            !Distance to sun, AU | ||
|  |   real xv,yv                        !x and y coords in ecliptic | ||
|  |   real lonsun                       !Ecliptic long and lat of sun | ||
|  | !Ecliptic coords of sun (geocentric) | ||
|  |   real xs,ys | ||
|  | !Equatorial coords of sun (geocentric) | ||
|  |   real xe,ye,ze | ||
|  |   real lon,lat | ||
|  |   real GMST0,LST,HA | ||
|  |   real xx,yy,zz | ||
|  |   real xhor,yhor,zhor | ||
|  |   real Az,El | ||
|  | 
 | ||
|  |   real day | ||
|  |   real rad | ||
|  |   data rad/57.2957795/ | ||
|  | 
 | ||
|  | ! Time in days, with Jan 0, 2000 equal to 0.0: | ||
|  |   d=367*y - 7*(y+(m+9)/12)/4 + 275*m/9 + DD - 730530 + UT/24.0 | ||
|  |   mjd=d + 51543 | ||
|  |   ecl = 23.4393 - 3.563e-7 * d | ||
|  | 
 | ||
|  | ! Compute updated orbital elements for Sun: | ||
|  |   w = 282.9404 + 4.70935e-5 * d | ||
|  |   e = 0.016709 - 1.151e-9 * d | ||
|  |   MM = mod(356.0470d0 + 0.9856002585d0 * d + 360000.d0,360.d0) | ||
|  |   Ls = mod(w+MM+720.0,360.0) | ||
|  | 
 | ||
|  |   EE = MM + e*rad*sin(MM/rad) * (1.0 + e*cos(M/rad)) | ||
|  |   EE = EE - (EE - e*rad*sin(EE/rad)-MM) / (1.0 - e*cos(EE/rad)) | ||
|  | 
 | ||
|  |   xv = cos(EE/rad) - e | ||
|  |   yv = sqrt(1.0-e*e) * sin(EE/rad) | ||
|  |   v = rad*atan2(yv,xv) | ||
|  |   r = sqrt(xv*xv + yv*yv) | ||
|  |   lonsun = mod(v + w + 720.0,360.0) | ||
|  | ! Ecliptic coordinates of sun (rectangular): | ||
|  |   xs = r * cos(lonsun/rad) | ||
|  |   ys = r * sin(lonsun/rad) | ||
|  | 
 | ||
|  | ! Equatorial coordinates of sun (rectangular): | ||
|  |   xe = xs | ||
|  |   ye = ys * cos(ecl/rad) | ||
|  |   ze = ys * sin(ecl/rad) | ||
|  | 
 | ||
|  | ! RA and Dec in degrees: | ||
|  |   RA = rad*atan2(ye,xe) | ||
|  |   Dec = rad*atan2(ze,sqrt(xe*xe + ye*ye)) | ||
|  | 
 | ||
|  |   GMST0 = (Ls + 180.0)/15.0 | ||
|  |   LST = mod(GMST0+UT+lon/15.0+48.0,24.0)    !LST in hours | ||
|  |   HA = 15.0*LST - RA                        !HA in degrees | ||
|  |   xx = cos(HA/rad)*cos(Dec/rad) | ||
|  |   yy = sin(HA/rad)*cos(Dec/rad) | ||
|  |   zz =             sin(Dec/rad) | ||
|  |   xhor = xx*sin(lat/rad) - zz*cos(lat/rad) | ||
|  |   yhor = yy | ||
|  |   zhor = xx*cos(lat/rad) + zz*sin(lat/rad) | ||
|  |   Az = mod(rad*atan2(yhor,xhor) + 180.0 + 360.0,360.0) | ||
|  |   El = rad*asin(zhor) | ||
|  |   day=d-1.5 | ||
|  |    | ||
|  |   return | ||
|  | end subroutine sun |