#!/usr/bin/python
# Constants for calculating the position of the sun relative to the earth
# Copyright 2008 Brandon Stafford
#
# This file is part of Pysolar.
#
# Pysolar is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Pysolar is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with Pysolar. If not, see <http://www.gnu.org/licenses/>.
# Note about sources for the constants below:
#
# Most of the constants below come from a 2005 paper by Reda and Andreas:
#
# I. Reda and A. Andreas, "Solar Position Algorithm for Solar Radiation Applications,"
# National Renewable Energy Laboratory, NREL/TP-560-34302, revised November 2005.
# http://www.osti.gov/bridge/servlets/purl/15003974-iP3z6k/native/15003974.PDF
#
# However, it seems that Reda and Andreas took the bulk of the constants (L0, etc.)
# from VSOP87:
# http://en.wikipedia.org/wiki/Secular_variations_of_the_planetary_orbits#VSOP87
#
# See also ftp://ftp.imcce.fr/pub/ephem/planets/vsop87/VSOP87D.ear
earth_radius = 6378140.0 # meters
aberration_sin_terms = [[0,0,0,0,1],
[-2,0,0,2,2],
[0,0,0,2,2],
[0,0,0,0,2],
[0,1,0,0,0],
[0,0,1,0,0],
[-2,1,0,2,2],
[0,0,0,2,1],
[0,0,1,2,2],
[-2,-1,0,2,2],
[-2,0,1,0,0],
[-2,0,0,2,1],
[0,0,-1,2,2],
[2,0,0,0,0],
[0,0,1,0,1],
[2,0,-1,2,2],
[0,0,-1,0,1],
[0,0,1,2,1],
[-2,0,2,0,0],
[0,0,-2,2,1],
[2,0,0,2,2],
[0,0,2,2,2],
[0,0,2,0,0],
[-2,0,1,2,2],
[0,0,0,2,0],
[-2,0,0,2,0],
[0,0,-1,2,1],
[0,2,0,0,0],
[2,0,-1,0,1],
[-2,2,0,2,2],
[0,1,0,0,1],
[-2,0,1,0,1],
[0,-1,0,0,1],
[0,0,2,-2,0],
[2,0,-1,2,1],
[2,0,1,2,2],
[0,1,0,2,2],
[-2,1,1,0,0],
[0,-1,0,2,2],
[2,0,0,2,1],
[2,0,1,0,0],
[-2,0,2,2,2],
[-2,0,1,2,1],
[2,0,-2,0,1],
[2,0,0,0,1],
[0,-1,1,0,0],
[-2,-1,0,2,1],
[-2,0,0,0,1],
[0,0,2,2,1],
[-2,0,2,0,1],
[-2,1,0,2,1],
[0,0,1,-2,0],
[-1,0,1,0,0],
[-2,1,0,0,0],
[1,0,0,0,0],
[0,0,1,2,0],
[0,0,-2,2,2],
[-1,-1,1,0,0],
[0,1,1,0,0],
[0,-1,1,2,2],
[2,-1,-1,2,2],
[0,0,3,2,2],
[2,-1,0,2,2]]
nutation_coefficients = [[-171996,-174.2,92025,8.9],
[-13187,-1.6,5736,-3.1],
[-2274,-0.2,977,-0.5],
[2062,0.2,-895,0.5],
[1426,-3.4,54,-0.1],
[712,0.1,-7,0],
[-517,1.2,224,-0.6],
[-386,-0.4,200,0],
[-301,0,129,-0.1],
[217,-0.5,-95,0.3],
[-158,0,0,0],
[129,0.1,-70,0],
[123,0,-53,0],
[63,0,0,0],
[63,0.1,-33,0],
[-59,0,26,0],
[-58,-0.1,32,0],
[-51,0,27,0],
[48,0,0,0],
[46,0,-24,0],
[-38,0,16,0],
[-31,0,13,0],
[29,0,0,0],
[29,0,-12,0],
[26,0,0,0],
[-22,0,0,0],
[21,0,-10,0],
[17,-0.1,0,0],
[16,0,-8,0],
[-16,0.1,7,0],
[-15,0,9,0],
[-13,0,7,0],
[-12,0,6,0],
[11,0,0,0],
[-10,0,5,0],
[-8,0,3,0],
[7,0,-3,0],
[-7,0,0,0],
[-7,0,3,0],
[-7,0,3,0],
[6,0,0,0],
[6,0,-3,0],
[6,0,-3,0],
[-6,0,3,0],
[-6,0,3,0],
[5,0,0,0],
[-5,0,3,0],
[-5,0,3,0],
[-5,0,3,0],
[4,0,0,0],
[4,0,0,0],
[4,0,0,0],
[-4,0,0,0],
[-4,0,0,0],
[-4,0,0,0],
[3,0,0,0],
[-3,0,0,0],
[-3,0,0,0],
[-3,0,0,0],
[-3,0,0,0],
[-3,0,0,0],
[-3,0,0,0],
[-3,0,0,0]]
L0 = [[175347046.0,0,0],
[3341656.0,4.6692568,6283.07585],
[34894.0,4.6261,12566.1517],
[3497.0,2.7441,5753.3849],
[3418.0,2.8289,3.5231],
[3136.0,3.6277,77713.7715],
[2676.0,4.4181,7860.4194],
[2343.0,6.1352,3930.2097],
[1324.0,0.7425,11506.7698],
[1273.0,2.0371,529.691],
[1199.0,1.1096,1577.3435],
[990,5.233,5884.927],
[902,2.045,26.298],
[857,3.508,398.149],
[780,1.179,5223.694],
[753,2.533,5507.553],
[505,4.583,18849.228],
[492,4.205,775.523],
[357,2.92,0.067],
[317,5.849,11790.629],
[284,1.899,796.298],
[271,0.315,10977.079],
[243,0.345,5486.778],
[206,4.806,2544.314],
[205,1.869,5573.143],
[202,2.4458,6069.777],
[156,0.833,213.299],
[132,3.411,2942.463],
[126,1.083,20.775],
[115,0.645,0.98],
[103,0.636,4694.003],
[102,0.976,15720.839],
[102,4.267,7.114],
[99,6.21,2146.17],
[98,0.68,155.42],
[86,5.98,161000.69],
[85,1.3,6275.96],
[85,3.67,71430.7],
[80,1.81,17260.15],
[79,3.04,12036.46],
[71,1.76,5088.63],
[74,3.5,3154.69],
[74,4.68,801.82],
[70,0.83,9437.76],
[62,3.98,8827.39],
[61,1.82,7084.9],
[57,2.78,6286.6],
[56,4.39,14143.5],
[56,3.47,6279.55],
[52,0.19,12139.55],
[52,1.33,1748.02],
[51,0.28,5856.48],
[49,0.49,1194.45],
[41,5.37,8429.24],
[41,2.4,19651.05],
[39,6.17,10447.39],
[37,6.04,10213.29],
[37,2.57,1059.38],
[36,1.71,2352.87],
[36,1.78,6812.77],
[33,0.59,17789.85],
[30,0.44,83996.85],
[30,2.74,1349.87],
[25,3.16,4690.48]]
L1 = [[628331966747.0,0,0],
[206059.0,2.678235,6283.07585],
[4303.0,2.6351,12566.1517],
[425.0,1.59,3.523],
[119.0,5.796,26.298],
[109.0,2.966,1577.344],
[93,2.59,18849.23],
[72,1.14,529.69],
[68,1.87,398.15],
[67,4.41,5507.55],
[59,2.89,5223.69],
[56,2.17,155.42],
[45,0.4,796.3],
[36,0.47,775.52],
[29,2.65,7.11],
[21,5.34,0.98],
[19,1.85,5486.78],
[19,4.97,213.3],
[17,2.99,6275.96],
[16,0.03,2544.31],
[16,1.43,2146.17],
[15,1.21,10977.08],
[12,2.83,1748.02],
[12,3.26,5088.63],
[12,5.27,1194.45],
[12,2.08,4694],
[11,0.77,553.57],
[10,1.3,3286.6],
[10,4.24,1349.87],
[9,2.7,242.73],
[9,5.64,951.72],
[8,5.3,2352.87],
[6,2.65,9437.76],
[6,4.67,4690.48]]
L2 = [[52919.0,0,0],
[8720.0,1.0721,6283.0758],
[309.0,0.867,12566.152],
[27,0.05,3.52],
[16,5.19,26.3],
[16,3.68,155.42],
[10,0.76,18849.23],
[9,2.06,77713.77],
[7,0.83,775.52],
[5,4.66,1577.34],
[4,1.03,7.11],
[4,3.44,5573.14],
[3,5.14,796.3],
[3,6.05,5507.55],
[3,1.19,242.73],
[3,6.12,529.69],
[3,0.31,398.15],
[3,2.28,553.57],
[2,4.38,5223.69],
[2,3.75,0.98]]
L3 = [[289.0,5.844,6283.076],
[35,0,0],
[17,5.49,12566.15],
[3,5.2,155.42],
[1,4.72,3.52],
[1,5.3,18849.23],
[1,5.97,242.73]]
L4 = [[114.0,3.142,0],
[8,4.13,6283.08],
[1,3.84,12566.15]]
L5 = [[1,3.14,0]]
B0 = [[280.0,3.199,84334.662],
[102.0,5.422,5507.553],
[80,3.88,5223.69],
[44,3.7,2352.87],
[32,4,1577.34]]
B1 = [[9,3.9,5507.55],
[6,1.73,5223.69]]
R0 = [[100013989.0,0,0],
[1670700.0,3.0984635,6283.07585],
[13956.0,3.05525,12566.1517],
[3084.0,5.1985,77713.7715],
[1628.0,1.1739,5753.3849],
[1576.0,2.8469,7860.4194],
[925.0,5.453,11506.77],
[542.0,4.564,3930.21],
[472.0,3.661,5884.927],
[346.0,0.964,5507.553],
[329.0,5.9,5223.694],
[307.0,0.299,5573.143],
[243.0,4.273,11790.629],
[212.0,5.847,1577.344],
[186.0,5.022,10977.079],
[175.0,3.012,18849.228],
[110.0,5.055,5486.778],
[98,0.89,6069.78],
[86,5.69,15720.84],
[86,1.27,161000.69],
[85,0.27,17260.15],
[63,0.92,529.69],
[57,2.01,83996.85],
[56,5.24,71430.7],
[49,3.25,2544.31],
[47,2.58,775.52],
[45,5.54,9437.76],
[43,6.01,6275.96],
[39,5.36,4694],
[38,2.39,8827.39],
[37,0.83,19651.05],
[37,4.9,12139.55],
[36,1.67,12036.46],
[35,1.84,2942.46],
[33,0.24,7084.9],
[32,0.18,5088.63],
[32,1.78,398.15],
[28,1.21,6286.6],
[28,1.9,6279.55],
[26,4.59,10447.39]]
R1 = [[103019.0,1.10749,6283.07585],
[1721.0,1.0644,12566.1517],
[702.0,3.142,0],
[32,1.02,18849.23],
[31,2.84,5507.55],
[25,1.32,5223.69],
[18,1.42,1577.34],
[10,5.91,10977.08],
[9,1.42,6275.96],
[9,0.27,5486.78]]
R2 = [[4359.0,5.7846,6283.0758],
[124.0,5.579,12566.152],
[12,3.14,0],
[9,3.63,77713.77],
[6,1.87,5573.14],
[3,5.47,18849]]
R3 = [[145.0,4.273,6283.076],
[7,3.92,12566.15]]
R4 = [[4,2.56,6283.08]]