Ian Jordan
November 6, 2002
A BSTRACT
An updated model using post-SM3B ephemerides shows a significant difference between the December 2001 projection of the HST orbital plane compared with what the current model indicates for July 4, 2005. HST orbits near and after 06:00 July 4, 2005 are projected to be impacted by the SAA.
The November/December 2001 draft on estimating HST’s ascending node and the resulting SAA-impacts for the DI encounter time contained uncertainty estimates too small and underestimated the duration of solar max. Solar activity picked up, dropping HST at a rate of 20 km/year in the last half of ’01 and continued until after SM3B. The cumulative effect propagated to July 2005 from the lower altitude and higher precession rates accounts for the new projection and adjustment of the model to produce more realistic uncertainty estimates in the projected orbit plane. The major uncertainty in projecting the
HST orbit plane is still solar behaviour.
Figure 1 shows an updated projection of the HST orbit plane for July 4, 2005. Three separate orbit planes are drawn in green (July 2002 nominal projection), blue and red
(uncertainty limits from July 2002 projection). The precise position of the HST icons within the orbital planes should be ignored, since it is impossible to predict the actual location within the orbit so far in advance. However, prediction of the relative positioning of the orbital plane is what is addressed here.
The most recent model runs indicate that the orbit plane will intersect or come close to intersecting the
South Atlantic Anomaly during one of the prime encounter times (06:00UT, July 4, 2005). Under current rules of HST science instrument operation, this orbit and subsequent ones (stretching for nearly 12 hours) would be unavailable for STIS/MAMA observations. This projection is at odds with model runs performed in December 2001, and the next section discusses the reasons for this.
Figure 1: A snapshot of an STK Map window showing ground stations, Temple 1 sub-earth point, and ground traces of the projected HST orbit plane at 06:42UT, July 4, 2005. Three ground traces for the HST orbit plane are shown which represent the uncertainty in the projection of the orientation of the orbit plane (red and blue traces), and the nominal model projection (solid green).
Note especially the string of pink sites labelled “SAA25_##” stretching from Chile to South Africa which represent the boundary of the South Atlantic Anomaly avoidance contour for the HST
STIS/MAMA detectors.
Since the model predictions are at odds with those peformed 1 year ago, an investigation into the cause is warranted. Table 1 summarizes a set of projections based upon previous forecast assumptions. These
“hindsight predictions” are provided as perspective for evaluation of the model behaviour. Each line shows the result of running the model starting at the given date (column 1) using as input the best estimates of significant events such as shuttle reboosts and projections of Solar Maximum behaviour as that was known at that time.
2
The first two entries use data and uncertainty estimates based upon historical ephemerides. The third entry is based upon a projection done in January 2001, with the one difference being that “realistic” uncertainties of solar maximum behaviour are included.
The fourth entry in the table are the results of the December 2001 projection which use the “original optimistic” assumptions of the predictability of Solar Maximum end time. The fifth entry shows a re-run of the model using more realistic uncertainties and altitude history seen over the past year.
The last two lines show projections run during the last 4 months with updated altitude behaviour and with the definitive reboost result of the SM3B shuttle-HST servicing mission included.
Prediction
#
Table 1: Historical HST Orbit Plane Predictions for July 4, 2005
Projection Start
Date (TJD)
7091.5
(98/10/04)***
7448.5
(99/09/28)**
7939.5
(01/01/30)*
8250.0
(01/12/07) optimistic
8250.0
(01/12/07) revised
8462.5
(02/07/07) realistic
8581.5
(02/11/04) realistic
Predicted RA of
HST Ascending node
209
194
204
242
200
171
166
Predicted
Longitude of HST
Ascending node
199
183
193
231
189
160
155 uncertainty
(degrees)
76
61
56
20
48
30
22
Predictions for assumed impact date of JD = 2444000+9555.746 July 4, 2005.
*** = Before SM3 was split into SM3A & SM3B.
** = About 6 weeks before HST Zero-Gyro-Safe-Mode & before SM3A.
* = Initial projection run using the current model.
-----------------------------------------------------------------------
Note that the currently projected nodal value is outside the edge of the original Nov/Dec 2001’s projected uncertainty, showing the assumptions were not really conservative enough. Note also that there is a
3
trending for decreasing values of RA or Longitude of the Ascending Node of the projections with time.
This trending has been found to be largely due to repeated underestimates of the activity level of the current Solar Maximum’s affect on the Earth’s atmosphere.
The computational model allows a projection not only of the orbit plane, but how the uncertainty itself evolves. Table 2 contains updated projections (values updated from the December 2001 projection are in red ) of what the uncertainty in the orientation of the orbit plane will be after various critical events for
HST. Note that once solar activity transitions to its minimum, higher confidences can be attached to predictions of the orbit plane orientation.
Table 2: Modelled Uncertainty Evolution in HST Orbit Plane Orientation
Effect on HST Orbit Plane given Simulation Start Date
Source
2-Sigma
Estimate of
Variance
Nodal Regression Rate
Eccentricity
Inclination
Initial Orbital Altitude
SM3B Launch Date
SM3B Reboost
Solar Max Orbit Decay Rate
Solar Min -> Solar Max Date
SM4 Launch Date
SM4 Reboost
Solar Min Orbit Decay Rate
Net Uncertainty
0.0002 deg/day
0.
0012
0.
03 deg
1 km
50 days
8 km
8 km/yr
200 days
100 days
8 km
0.5 km/yr
Dec
2001
Post
SM3B
Solar
Min
Post
SM4
Encounter minus 60 days
0.01 deg
-
-0.
11 deg
-0.2 deg
0
0
0
0
0.01 deg
1.0
deg
0
0
The python source code used to run this model is included as an appendix. The elements of this model are described below.
The orbit plane precession rate is computed using the relations set forth in reference 1, and include solar and lunar perturbations (small terms compared to that produced by Earth’s J2). Orbit plane precession rate is rigorously tied to the altitude of the spacecraft. The altitude projection is the critical element of the
4
model. Altitude decay rates during solar maximum and solar minimum are user inputs for piecewise linear decay rates depending upon whether the timestep is within solar maximum (defined by user) or solar minimum (also user defined).
This model projects that the HST orbit will begin intersecting South Atlantic Anomaly STIS/MAMA high-voltage-off contours near 06:00 UT. This projection is based upon a transition from Solar Maximum to Solar Minimum (piece-wise linear altitude decay rates) in the summer of 2003 which is by no means definitive. SM4’s launch date has recently been announced as scheduled for February 2005, but launch slips and variations in the reboost amount will only contribute about 6 degrees to the uncertainty in the orbit plane orientation. The unpredictability of Solar Maximum continues to plague attempts to predict the plane with high precision, and the uncertainties had to be relaxed since the previous projections. Trending of successive model predictions appears to be decreasing as we approach Deep Impact encounter time.
Boden, Daryl G, “Introduction to Astrodynamics”, in Space Mission Analysis and Design, Larson, W.
and Wertz J., eds,.Kluwer 1992, pp.139-143.
import math import copy
#
# This program projects the ascending node RA and longitude of the
# HST orbit at the provided Deep Impact impactor encounter time,
# produces an altitude history, and generates aggregate uncertainty
# estimates of the predicted nodal position.
#
#
#
# Revision history documentation start date 02-09-06.
#
#
#actual SM3B boost date 8343.
#approximate sm3b boost amount 6.75 km.
# Constants: deg2rad = math.pi / 180.0
# Mission parameters: impact_date = 9555.746 # TJD of deep impact encounter
#impact_date = impact_date - 0 * 365.25
#impact_date = 8746
5
dt = 1.0 # timestep interval (days)
# nominal settings of the orbit parameters (some values are tied to sim_start_date):
# simulation
Solmax launch boost solar
# start, nodeRA, end, sm4, sm4, min
# TJD/MJD degrees
Delta-d Delta-d km km/yr eccen, incli, degrees semim, kms launch sm3b,
Delta-d boost sm3b, km
Solar max, km/yr names = ["TJD/MJD", "RAAN (deg)", "ecc", "incl", "semimajor axis", "3B launch D(days)", "3B boost (km)", "Max rate (km/yr)",
"Max end D(days)", "4 launch D(days)", "4 boost (km)", "Min rate (km/yr)"]
# October 5, 1998
#nominal = [7091.5, 246.75,
1700, 2300, 8, 0.7]
#twang = [ 0.0, 1.00,
400, 300, 2, 0.5]
0.0014,
0.0010,
28.453,
0.030,
6983.75,
1.00,
450,
100,
8.00,
8.00,
11.0,
6.0,
# September 28, 1999.
#nominal = [7448.5, 126.20,
1300, 1700, 8, 0.7]
#twang = [ 0.0, 1.00,
350, 200, 2, 0.5]
0.0014,
0.0010,
28.453,
0.030,
6979.00,
1.00,
900,
150,
8.00,
8.00,
# January 30, 2001. set defined for shortly after contact with W. Blume JPL.
#nominal = [7939.5, 210.70, 0.0014, 28.453, 6965.49, 350, 8.00,
700, 1150, 8, 0.7]
#twang = [ 0.0, 1.00,
200, 200, 2, 0.5]
0.0010, 0.030, 1.00, 50, 8.00, launch boost # simulation
Solmax launch boost solar
# start, nodeRA, end, sm4, sm4, min
# TJD/MJD degrees
Delta-d Delta-d km km/yr eccen, incli, degrees semim, kms sm3b,
Delta-d sm3b, km
11.0,
6.0,
11.0,
6.0,
Solar max, km/yr
# December 7, 2001. previous update before SM3B ephem.
#nominal = [8250.0, 5.50, 0.0014, 28.453, 6956.50,
365, 850, 8, 0.7]
#twang = [ 0.0, 1.00,
200, 100, 2, 0.5]
0.0002, 0.010, 1.00,
# July 7, 2002. new set defined 02-07-23.
#nominal = [8462.5, 68.26, 0.0004, 28.453,
360, 700, 8, 0.7]
#twang = [ 0.0, 1.00,
150, 100, 2, 0.5]
0.0003, 0.030,
6954.19,
1.00,
# July 16, 2002. new set defined 02-07-23.
#nominal = [8471.5, 10.13, 0.0003, 28.453,
360, 700, 8, 0.7]
#twang = [ 0.0, 1.00,
150, 100, 2, 0.5]
0.0003, 0.030,
6954.19,
1.00,
100,
50,
-100,
0,
-100,
0,
15.00,
3.00,
6.75,
0.00,
6.75,
0.00,
7.5,
3.5,
10.0,
9.5,
10.0,
9.5,
6
# November 6, 2002. new set defined 02-11-05.
nominal = [8581.5, 16.56, 0.0014, 28.453,
250, 800, 8, 0.7] twang = [ 0.0, 1.00, 0.0012, 0.030,
200, 100, 8, 0.5]
# simulation
Solmax launch boost solar
# start, nodeRA, eccen, incli, end, sm4, sm4, min
# TJD/MJD degrees
Delta-d Delta-d km km/yr degrees
6951.71,
1.00, semim, kms
-100, 6.75,
0, 0.00, launch boost sm3b, sm3b,
Delta-d km
10.0,
9.5,
Solar max, km/yr
################################### dreamland....
# set trying to emulate Dec 7, 2001 + realistic condition uncertainties.
#nominal = [8250.0, 5.5 , 0.0014, 28.453, 6956.5 , +100, 8.0 ,
365, 850, 8, 0.7]
#twang = [ 0.0, 1.00,
200, 100, 8, 0.5]
0.0012, 0.030, 1.00, 50, 8.0 ,
#Post SM3B emulation
#nominal = [8350.0, 5.5 ,
265, 750, 8, 0.7]
#twang = [ 0.0, 1.00,
200, 100, 8, 0.5]
0.0014,
0.0012,
28.453,
0.030,
# Post SM3B and solar min emulation
#nominal = [8600.0, 5.5 , 0.0014, 28.453,
-10, 500, 8, 0.7]
#twang = [ 0.0, 1.00,
0, 100, 8, 0.5]
0.0012, 0.030,
# Post SM3B and solar min and SM4 emulation
#nominal = [9100.0, 5.5 , 0.0014, 28.453,
-10, -10, 8, 0.7]
#twang = [ 0.0, 1.00,
0, 0, 0, 0.5]
0.0012, 0.030,
# Encounter - 60 days emulation
#nominal = [9495.0, 5.5 ,
-10, -10, 8, 0.7]
#twang = [ 0.0, 1.00,
0, 0, 0, 0.5]
0.0014,
0.0012,
28.453,
0.030,
6956.5 ,
1.00,
6948
1.00,
6948
1.00,
6948
1.00,
,
,
,
-10,
0,
-10,
0,
-10,
0,
-10,
0,
6.75,
0.0,
6.75,
0.0,
6.75,
0.0,
6.75,
0.0,
12.0,
8.0,
12.0,
8.0,
12.0,
0.0,
12.0,
0.0,
12.0,
0.0,
# simulation
Solmax launch boost solar
# start, nodeRA, end, sm4, sm4, min
# TJD/MJD degrees
Delta-d Delta-d km km/yr eccen, incli, degrees semim, kms launch boost sm3b, sm3b,
Delta-d km
Solar max, km/yr
#
#a = # initial semimajor axis of orbit (km)
#sm3b_date = # delta TJD of SM3B launch
#sm4_date = # delta TJD of SM4 launch
#solar_min_date = # delta TJD onset date for solar minimum
7
#max_decay_rate = # decay rate of HST altitude at solar maximum (km/year)
#min_decay_rate = # decay rate of HST altitude at solar minimum (km/yr)
#sm3b_reboost = # amount of altitude increase during SM3B (km)
#sm4_reboost = # amount of altitude increase during SM4 (km)
#eccentricity = # HST mean orbit eccentricity 2000.
#inclination = # HST orbit inclination in degrees.
#
#uncert_quad = # cumulative uncertainty (in quadrature) uncert_quad = 0.0
fileobject = open("modern_altitude_profile.rpt",’w’) for i in range(12):
print "---------------------------------------------------------------------------"
# fundamental matrix contains parameters in model which can be altered to allow
# computation of uncertainties. By using the copy and twang, iteration in the for
# loop allows this to proceed.
test_variance = copy.deepcopy(nominal)
test_variance[i] = test_variance[i] + twang[i]
# print test_variance
print "Variation of ", names[i], " parameter = ", test_variance[i], " by ", twang[i]
# time and cumulative precession...
delta_alpha = 0 # accumulated orbit plane precession (degrees)
ref_date = 8250 # reference TJD (December 6, 2001 = 8250)
# grab values out of the fundamental matrix.
sim_start_date = test_variance[0]
alpha = test_variance[1]
eccentricity = test_variance[2]
inclination = test_variance[3]
semimajor = test_variance[4]
sm3b_date = test_variance[5]
sm3b_reboost = test_variance[6]
max_decay_rate = test_variance[7]
solar_min_date = test_variance[8]
sm4_date = test_variance[9]
sm4_reboost = test_variance[10]
min_decay_rate = test_variance[11]
# compute some fundamental constants before proceeding.
angle_terms = math.cos(inclination*deg2rad) * (1-eccentricity**2.0)**-2.0
# print "angle terms " , angle_terms
precess_con = ( -2.06474*10**14.0) * angle_terms # initial plane precession constant
(deg*km^3.5/timestep).
# print "precession constant " , precess_con
decay_rate = max_decay_rate # initial decay rate
# if you want to start on a different day, here is where to set it.
day = sim_start_date # start day
# day = ref_date + 1 + sm3b_date
# day = ref_date + 1 + solar_min_date
# day = ref_date + 1 + sm4_date
8
# day = impact_date - 60
rate_7000 = 4.0 # km/yr
rate_7420 = 10.5 # km/yr
sm3b_date = day + sm3b_date # TJD of predicted SM3B reboost
sm4_date = day + sm4_date # TJD of SM4 launch
solar_min_date = day + solar_min_date # TJD onset date for solar minimum
if (day > 8343):
sm3b_date = 8343
print "SM3B reboost date: ", sm3b_date
print "SM4 reboost date: ", sm4_date
print "Solar max-->min date: ", solar_min_date
# loop though the simulation date range...
while day < impact_date:
# logic to capture decay rate transitions and altitude reboosts.
if ( (day > 7000) and (day < 7420) and (decay_rate != rate_7000) ):
decay_rate = rate_7000
# use historic, because this would have been a likely projection at the time.
print "Pre- Solar Max Decay rate transition on day ", day
if ( (day > 7420) and (day < 8000) and (decay_rate != rate_7420) ):
decay_rate = rate_7420
# use historic "".
print "Pre-Max decay rate: ", day, " decay rate = ", decay_rate
if ( (day > 8000) and (day < solar_min_date) and (decay_rate != max_decay_rate) ):
decay_rate = max_decay_rate
# about time to change the projection rate.
print "Update SolarMax decay rate: ", day, " decay rate = ", decay_rate
# now, assume the next change is the onset of Solar Min...
if (day > solar_min_date and decay_rate != min_decay_rate):
decay_rate = min_decay_rate
print "Solar Min onset: ", day, " decay rate = ", decay_rate
# boost at SM3b.
if (day > sm3b_date) and (day <= (sm3b_date + dt)):
semimajor = semimajor + sm3b_reboost
print "SM3B reboost on day ", day
# boost at SM4.
if (day > sm4_date) and (day <= (sm4_date + dt)):
semimajor = semimajor + sm4_reboost
print "SM4 reboost on day ", day
# step along...compute the critical quantities.
revs_per_day = 8681660.4 * semimajor**(-3./2.) # Larson & Wertz (Boden)
semimajor = semimajor - ( dt * decay_rate) / 365.25
9
cap_omega_dot_j2 = precess_con * semimajor**(-7./2.)
cap_omega_dot_moon = -0.00338 * math.cos(inclination*deg2rad) / revs_per_day
cap_omega_dot_sun = -0.00154 * math.cos(inclination*deg2rad) / revs_per_day
cap_omega_dot = cap_omega_dot_j2 + cap_omega_dot_moon + cap_omega_dot_sun
delta_alpha = delta_alpha + cap_omega_dot * dt
day = day + dt
# print out the altitude profile to file.
if (i < 1):
if (day == sim_start_date + dt): fileobject.write("TJD semimaj deltaalpha cap_omegadot alpha
Version A2\n") print " revs/day = ", revs_per_day, " Sun omega-dot = ", cap_omega_dot_sun, " Moon omega-dot = ", cap_omega_dot_moon
fileobject.write("%s, %s, %s, %s, %s\n" % (day,semimajor,delta_alpha,cap_omega_dot,
((alpha+delta_alpha)%360) ))
# update for the final fraction of a timestep interval between impact and simulation end.
delta_alpha = delta_alpha + cap_omega_dot * (impact_date - day)
# sum of start RA and delta(RA)
alpha = alpha + delta_alpha
# modulo 360...
alpha = alpha % 360
# "benchmark" will be the run through with no twangs.
if i==0:
benchmark_alpha = alpha
benchmark_delta_alpha = delta_alpha
variance = benchmark_alpha - alpha
print "Resulting ascending node RA = ", alpha, " +/- ", variance, ", delta_alpha = ", delta_alpha
# quadrature sum of uncertainties
uncert_quad = math.sqrt(uncert_quad*uncert_quad + variance*variance) print "
=============================================================================================
=================== " print " " print "Predicted ascending node RA = delta_alpha = ", benchmark_delta_alpha print " "
", benchmark_alpha, " +/- ", uncert_quad, ",
# from The Cambridge Handbook of Physics Formulas:
T = (impact_date -(2451545.0-2444000.0) )/36525.0 # Julian centuries from Jan 1, 2000.
print "Centuries from 2000-01-01 = ",T
RAASMs = 24110.54841 + 8640184.812866 * T + 0.093104 * T**2.0 - 0.0000062 * T**3.0 # RA of antisolar meridian (seconds time).
RAASMd = 360.0 * RAASMs/86400.0
of antisolar meridian (degrees)
# RA
RAASM = RAASMd % 360.0
print "RA of antisolar meridian: ", RAASM,
# modulo 360
GMSTd = RAASM + (360 * ( (impact_date-0.5) % 1) )
10
GMST = GMSTd % 360.0 # modulo 360 print ", Greenwich Mean Sidereal Time= ", GMST, " degrees"
Lambda = benchmark_alpha - GMST
#print "Longitude = ", Lambda
Lambda = (720 + Lambda) % 360 # modulo 360 print "Predicted Longitude of ascending node = ", Lambda, " =or= ", Lambda - 360, " degrees" fileobject.close()
# end program
#
#$ do list_hst_orbit_fits 2001.330 nov0101.rpt P
#$ do fit_hst_orbit 7500 8200 8250 out until the 3rd date.
P (using data between first two dates, project
#$ do fit_hst_orbit 7500 8000 8250 P
#$ do fit_hst_orbit 7500 8000 8450 P
#
# the current ephemeris values can be found in set def passops:[ephem.def.merged] in the .sum
file.
11
Figure 2: Slightly enlarged version of Figure 1.
12