Update: Predicting HST SAA orbit plane orientation for Deep Impact

advertisement

Update: Predicting HST SAA orbit plane orientation for Deep Impact

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.

Introduction

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.

Result and meaning of current projection

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.

An adjusted HST orbit plane evolution model

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.

Prospects for future projections

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

Model elements

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).

Summary

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.

Reference

Boden, Daryl G, “Introduction to Astrodynamics”, in Space Mission Analysis and Design, Larson, W.

and Wertz J., eds,.Kluwer 1992, pp.139-143.

Appendix 1: Python source code for orbit projection model.

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

Download