Ejemplo n.º 1
0
def geom_mean_long(time):
    '''
    Sun mean longitude (degrees)
    '''
    julian_cent = julian_century(time)
    angle = 280.46646 + julian_cent * (julian_cent * 3.032e-4 + 36000.76983)
    return angle % 360
Ejemplo n.º 2
0
def daytime_length(time, latitude):
    '''
    Length of day time (Sunlight duration) in hours.
    '''
    julian_cent = julian_century(time)
    hour_angle = sunrise_hour_angle(time, latitude)
    return 8 * hour_angle / 60
Ejemplo n.º 3
0
def geom_mean_anom(time):
    '''
    Sun Mean Anomaly (degrees)
    '''
    julian_cent = julian_century(time)
    angle = 357.52911 + julian_cent * (35999.05029 - julian_cent * 1.537e-4)
    return angle
Ejemplo n.º 4
0
def sunset(time, latitude, longitude):
    '''
    Sunset time
    '''
    noon = solar_noon(time, longitude)
    julian_cent = julian_century(time)
    hour_angle = sunrise_hour_angle(time, latitude)
    delta = datetime.timedelta(minutes=4 * hour_angle)
    return noon + delta
Ejemplo n.º 5
0
def solar_zenith(time, latitude, longitude):
    '''
    Solar Zenith Angle in degrees
    '''
    julian_cent = julian_century(time)
    decn = solar_declination(time)
    h_angle = hour_angle(time, longitude)
    a1 = sin(radians(latitude)) * sin(radians(decn))
    a2 = cos(radians(latitude)) * cos(radians(decn)) * cos(radians(h_angle))
    return degrees(acos(a1 + a2))
Ejemplo n.º 6
0
def equation_of_center(time):
    '''
    Sun Equation of Center
    '''
    julian_cent = julian_century(time)
    anom = geom_mean_anom(time)
    anom = radians(anom)
    t1 = sin(anom) * (1.914602 - julian_cent * (0.004817 + 1.4e-5 * julian_cent))
    t2 = sin(2 * anom) * (0.019993 - 0.000101 * julian_cent)
    t3 = sin(3 * anom) * 0.000289
    return t1 + t2 + t3
Ejemplo n.º 7
0
def true_solar_time(time, longitude):
    '''
    True solar time in minutes from midnight
    '''
    utc = pytz.timezone('UTC')
    julian_cent = julian_century(time)
    eot = equation_of_time(time)
    delta = datetime.timedelta(minutes=eot + longitude * 4)
    true_time = (time + delta).astimezone(utc)
    hour = true_time.hour
    minute = true_time.minute
    second = true_time.second
    return get_minutes(true_time)
Ejemplo n.º 8
0
def solar_noon(time, longitude):
    '''
    Solar noon time
    '''
    tz = time.tzinfo
    utc = pytz.timezone('UTC')
    julian_cent = julian_century(time)
    eot = equation_of_time(time)
    noon_offset = (720 - 4 * longitude - eot) / 1440
    base_time = datetime.time()
    midnight = datetime.datetime.combine(time.date(), base_time)
    midnight = utc.localize(midnight)
    noon_utc = midnight + datetime.timedelta(days=noon_offset)
    return noon_utc.astimezone(tz)
Ejemplo n.º 9
0
def solar_azimuth(time, latitude, longitude):
    '''
    Azimuth angle (measured Clockwise from North)
    '''
    julian_cent = julian_century(time)
    zenith = radians(solar_zenith(time, latitude, longitude))
    decln = radians(solar_declination(time))
    h_angle = hour_angle(time, longitude)
    lat = radians(latitude)
    if h_angle > 0:
        a1 = sin(lat) * cos(zenith) - sin(decln)
        a2 = cos(lat) * sin(zenith)
        azimuth = degrees(acos( a1 / a2)) + 180
        return azimuth%360

    else:
        a1 = sin(lat) * cos(zenith) - sin(decln)
        a2 = cos(lat) * sin(zenith)
        azimuth = 540 - degrees(acos(a1 /a2))
        return azimuth%360
Ejemplo n.º 10
0
def obeliq_corr(time):
    julian_cent = julian_century(time)
    moe = mean_obliq_ecliptic(time)
    return moe + 0.00256 * cos(radians(125.04 - 1934.136 * julian_cent))
Ejemplo n.º 11
0
def mean_obliq_ecliptic(time):
    julian_cent = julian_century(time)
    res = 46.815 + julian_cent * (0.00059 - julian_cent * 0.001813)
    res = 21.448 - julian_cent * (res)
    res = 23 + (26 + res / 60) / 60
    return res
Ejemplo n.º 12
0
def app_long(time):
    julian_cent = julian_century(time)
    tlon = true_longitude(time)
    return tlon - 0.00569 - 0.00478 * sin(
        radians(125.04 - 1934.136 * julian_cent))
Ejemplo n.º 13
0
def eccent_earth_orbit(time):
    '''
    Eccentricity of Earth orbit
    '''
    julian_cent = julian_century(time)
    return 0.016708634 - julian_cent * (4.2037e-5 + 1.267e-7 * julian_cent)
Ejemplo n.º 14
0
 def test_julian_century(self):
     tz = pytz.timezone('Australia/Perth')
     time = datetime.datetime(2010, 6, 21, 4, 45)
     time = tz.localize(time)
     self.assertAlmostEqual(julian_century(time), 0.10467801733972)