ASTR 474 · Computational Lab 02

Lab 02: A JPL Earth State in REBOUND

L03 · Kepler propagation, ephemeris vectors, and frames

Purpose and learning objectives

L03 · Kepler propagation, ephemeris vectors, and frames. This investigation develops a numerical method and tests its output against a declared benchmark, invariant, uncertainty model, or independent implementation.

Preparation, setup, and inputs

Software: CPython 3.14.6; dependencies in requirements.txt. From repository root run .venv/Scripts/python.exe materials/ASTR474/src/astr474_computations.py. Then use the corresponding CSV/JSON under materials/ASTR474/data/generated/. Required data: generated/jpl_earth_vectors.csv.

Apparatus: computer with local CPU, terminal, text editor, and browser; no telescope, GPU, network account, or paid service is required. Preserve the generated input files and record file hash/version.

Model scope: The ideal circular-orbit sweep is synthetic. The embedded JPL Horizons DE441 vector values are level-2 published ephemeris data not live-verified this session; see the request trace and checksum.

Procedure

  1. Read the two vector rows and use the data README's traceable request record for target 399, Sun center 10, TDB epochs, J2000 ecliptic frame, vector type, correction convention, and AU/AU-day units.
  2. Set REBOUND units before adding particles; use Astropy GM_sun and M_earth; transform the initial state consistently and propagate one day with WHFast and IAS15.
  3. Compare Sun-relative Earth position with the Jan 2 vector row; record residual in AU and km.
  4. Run the circular two-body timestep sweep; tabulate energy, angular momentum, and one-period endpoint errors.
  5. Explain why the ephemeris residual is not a pure integrator error and name omitted dynamics/frame assumptions.

Measurement record

QuantityValue or fieldUnit/conventionSource/method
Input configurationRecord solver, version, seed, timestep/grid/toleranceAs defined by the experimentCommand line and source file
Primary diagnosticRecord every resolution/sample/fit row, not just the preferred resultState units and normalizationGenerated CSV/JSON
Independent referenceUsing Astropy GM_sun, the circular 1-AU Kepler period is 365.25690 d. After one day, REBOUND and independent SciPy two-body runs differ from the DE441 Earth-center vector by 126.0 km and 126.1 km respectively; the residual is model/frame scope, not an accuracy claim.As stated in the generated exampleAnalytic/JPL/invariant cross-check
Uncertainty/sensitivityRepeat with changed resolution, seed, parameter, or methodReport interval or relative changeStudent analysis

Analysis and uncertainty

Separate floating-point/integration sensitivity from physical model discrepancy; vary timestep and compare REBOUND against independent SciPy DOP853.

Plot the diagnostic against the controlled parameter; label axes, units, normalization, and reference. Explain any non-monotonic point rather than smoothing or dropping it. If propagating independent errors, state why independence is plausible; preserve correlated/common-mode terms separately.

Deliverables and assessment

  1. Runnable source or notebook export with command, package versions, and all input/output paths.
  2. One scientific figure plus a machine-readable table of measurements and convergence/sampling/residual diagnostics.
  3. A 700-1000 word technical report describing model, method, validation, uncertainty categories, and one failed assumption.
  4. A short claim-evidence table separating result, numerical check, and domain limitation.

Rubric: 30% correct method and setup; 25% validation and numerical diagnostics; 20% uncertainty/provenance; 15% physical interpretation; 10% clarity and reproducibility. Revisions and resubmissions are encouraged under the syllabus mastery policy.

Data and source provenance

The ideal circular-orbit sweep is synthetic. The embedded JPL Horizons DE441 vector values are level-2 published ephemeris data not live-verified this session; see the request trace and checksum. Provenance levels, request records, and source verification limits are documented in reference-log.md; generated files and seeds are documented in data/README.md.

References: