;+ ; NAME: ; MessengerOrbit ; PURPOSE: ; Calculate position of Messenger Spacecraft ; CATEGORY: ; smei/gen/idl/ephem ; CALLING SEQUENCE: FUNCTION MessengerOrbit, T, degrees=degrees ; INPUTS: ; T array[n]; type: time structure ; times at which s/c positions are needed ; OPTIONAL INPUT PARAMETERS: ; /degrees if set then angles are output in degrees ; (default: radians) ; OUTPUTS: ; Result array[3,*]; type: float ; J2000 ecliptic longitude (deg/rad), latitude ; (deg/rad) and distance (AU). ; The angular units depend on the setting of /degrees ; INCLUDE: @compile_opt.pro ; On error, return to caller ; CALLS: ; TimeGet, TimeSet, ToDegrees, KeplerOrbit ; RESTRICTIONS: ; The precision is probably about 0.1 degrees in ecliptic longitude, ; provided orbital elements are added as needed (once or twice year?) ; PROCECURE: ; From http://ssd.jpl.nasa.gov/horizons.cgi ; (J2000.0 Orbital Elements) ; Elements cover four periods between 2007/01/01 and 2007/09/30: ; ; 2007/01/01 -> 2007/01/31 ; ; 2454115.500000000 = A.D. 2007-Jan-15 00:00:00.0000 (CT) ; EC= 9.509555173766652E-03 QR= 9.620747268989945E-01 IN= 1.306235954146905E-01 ; OM= 2.380953113698972E+02 W = 3.355229542907300E+02 Tp= 2454210.608155566733 ; N = 1.029594704279364E+00 MA= 2.620771466946642E+02 TA= 2.609996629128498E+02 ; A = 9.713114668842425E-01 AD= 9.805482068694904E-01 PR= 3.496521480770163E+02 ; ; 2007/02/01 -> 2007/02/28 ; ; 2454147.500000000 = A.D. 2007-Feb-16 00:00:00.0000 (CT) ; EC= 6.279052167650651E-03 QR= 9.596197332195503E-01 IN= 1.213139724936570E-01 ; OM= 2.169765459780858E+02 W = 5.374894575771112E+01 Tp= 2454265.510775187053 ; N = 1.038608771871410E+00 MA= 2.374329737152352E+02 TA= 2.368291467561132E+02 ; A = 9.656833090947861E-01 AD= 9.717468849700218E-01 PR= 3.466175231231067E+02 ; ; 2007/03/01 -> 2007/03/31 ; ; 2454175.500000000 = A.D. 2007-Mar-16 00:00:00.0000 (CT) ; EC= 6.226246274394636E-03 QR= 9.577018334129234E-01 IN= 1.234975641202794E-01 ; OM= 2.149185709343068E+02 W = 7.828787777683904E+01 Tp= 2454286.911843170412 ; N = 1.041813256894421E+00 MA= 2.439296648101152E+02 TA= 2.432909800026552E+02 ; A = 9.637020798975118E-01 AD= 9.697023263821002E-01 PR= 3.455513717238894E+02 ; ; 2007/04/01 -> 2007/10/01 ; ; 2454253.500000000 = A.D. 2007-Jun-02 00:00:00.0000 (CT) ; EC= 5.917966070544746E-03 QR= 9.565996862733112E-01 IN= 1.251469150146348E-01 ; OM= 2.143572837656983E+02 W = 9.239562034525594E+01 Tp= 2454299.754766134545 ; N = 1.044099914070154E+00 MA= 3.117054026536591E+02 TA= 3.111966164343318E+02 ; A = 9.622945125484443E-01 AD= 9.679893388235775E-01 PR= 3.447945882847869E+02 ; ; 2007/10/01 -> now ; ; 2454466.500000000 = A.D. 2008-Jan-01 00:00:00.0000 (CT) ; EC= 5.655394382946006E-03 QR= 9.564978161375505E-01 IN= 1.253836830038676E-01 ; OM= 2.142571411361414E+02 W = 9.225614784090398E+01 Tp= 2454299.536585085094 ; N = 1.044680486714094E+00 MA= 1.744234215566499E+02 TA= 1.744859573944121E+02 ; A = 9.619379546429810E-01 AD= 9.673780931484115E-01 PR= 3.446029715098184E+02 ; ; 2011/01/21 -> 2012/01/21 ; ; 2455583.500000000 = A.D. 2011-Jan-22 00:00:00.0000 (CT) ; EC= 5.649610774525156E-03 QR= 9.563712745374616E-01 IN= 1.256261457055498E-01 ; OM= 2.140504362161804E+02 W = 9.348075068567380E+01 Tp= 2455678.680902264081 ; N = 1.044896949233696E+00 MA= 2.605457655988884E+02 TA= 2.599079145507906E+02 ; A = 9.618050989876956E-01 AD= 9.672389234379295E-01 PR= 3.445315830082727E+02 ; ; 2012/01/21 -> now ; ; 2455948.500000000 = A.D. 2012-Jan-22 00:00:00.0000 (CT) ; EC= 5.705938568515530E-03 QR= 9.563266675804051E-01 IN= 1.257640058659871E-01 ; OM= 2.139833070619798E+02 W = 9.406913424182217E+01 Tp= 2456023.716625969391 ; N = 1.044881265762684E+00 MA= 2.814075566505216E+02 TA= 2.807657290779928E+02 ; A = 9.618147233058820E-01 AD= 9.673027790313589E-01 PR= 3.445367543624463E+02 ; ; ; JDCT Epoch Julian Date, Coordinate Time ; EC Eccentricity, e ; QR Periapsis distance, q (AU) ; IN Inclination w.r.t xy-plane, i (degrees) ; OM Longitude of Ascending Node, OMEGA, (degrees) ; W Argument of Perifocus, w (degrees) ; Tp Time of periapsis (Julian day number) ; N Mean motion, n (degrees/day) ; MA Mean anomaly, M (degrees) ; TA True anomaly, nu (degrees) ; A Semi-major axis, a (AU) ; AD Apoapsis distance (AU) ; PR Orbital period (day) ; MODIFICATION HISTORY: ; AUG-2007, George Megally (UCSD/CASS; gmegally@ucsd.edu) ; AUG-2007, John Clover (UCSD/CASS; jclover@ucsd.edu) ; JUL-2008, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ; Split up into seperate routines for A and B. ; Updated orbital elements from Horizon (almost, but not quite the ; same as the original ones). ; JUN-2009, John Clover (UCSD/CASS; jclover@ucsd.edu) ; Fixed time structure to cover the whole of the end of the day between ; elements. ;- dpm = ToDegrees(degrees=degrees) jd = TimeGet(T, /njd) p = replicate(BadValue(0.0),3,n_elements(jd)) tt = TimeGet(TimeSet(yr=[2004,2005], month='aug',day=[3, 4]), /njd) i = where( tt[0] LE jd AND jd LE tt[1] ) IF i[0] NE -1 THEN $ p[*,i] = KeplerOrbit(T[i], degrees=degrees , $ elements = [1.001663657497907d+00,8.168951593474302d-02,2.563280663025649d+02/dpm,2453124.628101623151d0-2451545.0d0], $ plane = [3.111249722587803d+02,6.845013980422952d+00]/dpm) tt = TimeGet(TimeSet(yr=[2005,2006], month=['aug', 'oct'], day=[4, 25]), /njd) i = where( tt[0] LE jd AND jd LE tt[1] ) IF i[0] NE -1 THEN $ p[*,i] = KeplerOrbit(T[i], degrees=degrees , $ elements = [8.019447095476302d-01,2.658523304784657d-01,2.063396658772084d+00/dpm,2453456.712469597347d0-2451545.0d0], $ plane = [1.305447284592106d+02,2.664216629562539d+00]/dpm) tt = TimeGet(TimeSet(yr=[2006,2007], month=['oct','jun'], day=[25, 6]), /njd) i = where( tt[0] LE jd AND jd LE tt[1] ) IF i[0] NE -1 THEN $ p[*,i] = KeplerOrbit(T[i], degrees=degrees , $ elements = [7.228282327538631d-01,2.463851525210938d-01,5.790967595762318d+01/dpm,2453985.644399113953d0-2451545.0d0], $ plane = [4.647221279089646d+01,8.212210576757776d+00]/dpm) tt = TimeGet(TimeSet(yr=[2007,2008], month=['jun','jan'], day=[6, 15]), /njd) i = where( tt[0] LE jd AND jd LE tt[1] ) IF i[0] NE -1 THEN $ p[*,i] = KeplerOrbit(T[i], degrees=degrees , $ elements = [5.282648296522885d-01,4.182978788124355d-01,3.585284077838588d+02/dpm,2454202.959927953314d0-2451545.0d0], $ plane = [4.837960301496808d+01,7.403689052585330d+00]/dpm) tt = TimeGet(TimeSet(yr=2008, month=['jan','oct'], day=[15, 7]), /njd) i = where( tt[0] LE jd AND jd LE tt[1] ) IF i[0] NE -1 THEN $ p[*,i] = KeplerOrbit(T[i], degrees=degrees , $ elements = [5.077205481037513d-01,3.828930538271369d-01,6.424844763538441d+00/dpm,2454488.927706247196d0-2451545.0d0], $ plane = [4.903726284801532d+01,6.920821620411199d+00]/dpm) tt = TimeGet(TimeSet(yr=[2008,2009], month=['oct','sep'], day=[7,30]), /njd) i = where( tt[0] LE jd AND jd LE tt[1] ) IF i[0] NE -1 THEN $ p[*,i] = KeplerOrbit(T[i], degrees=degrees , $ elements = [4.665958466483129d-01,3.520983387776521d-01,1.943142669334450d+01/dpm,2454754.833715905435d0-2451545.0d0], $ plane = [4.833131986457225d+01,7.003009660944397d+00]/dpm) tt = TimeGet(TimeSet(yr=[2009,2011], month=['sep','mar'], day=[30,20]), /njd) i = where( tt[0] LE jd AND jd LE tt[1] ) IF i[0] NE -1 THEN $ p[*,i] = KeplerOrbit(T[i], degrees=degrees , $ elements = [4.392148766241953d-01,3.109620288640121d-01,3.258748902171746d+01/dpm,2455109.302512918599d0-2451545.0d0], $ plane = [4.831869848958493d+01,7.008490679204085d+00]/dpm) tt = TimeGet(TimeSet(yr=[2011,2022], month='mar', day=20), /njd) i = where( tt[0] LE jd AND jd LE tt[1] ) IF i[0] NE -1 THEN $ p[*,i] = KeplerOrbit(T[i], degrees=degrees , $ elements = [4.216103227199027d-01,2.700790583878330d-01,2.460386393404945d+01/dpm,2455637.410266774241d0-2451545.0d0], $ plane = [5.597165374661773d+01,7.889636530862079d+00]/dpm) RETURN, p & END