JuliaSpaceMissionDesign Ecosystem
Open-source Julia packages for space mission analysis and design. Org: JuliaSpaceMissionDesign
Package Dependency Graph
JSMDInterfaces.jl (abstract types, @interface macro)
├── JSMDUtils.jl (math, file I/O, AD wrappers)
├── SMDGraphs.jl (graph data structures via Graphs.jl)
├── Tempo.jl (timescales, Epoch type)
├── Ephemerides.jl (SPK/PCK kernel reader)
├── CalcephEphemeris.jl (CALCEPH wrapper)
├── IERSConventions.jl (Earth orientation, precession, nutation)
├── AstroModels.jl (force models: gravity, SRP, drag)
└── FrameTransformations.jl (frame graph, state transformations)
Shared Design Patterns
- Order-parameterized: All computations use
vector3/6/9/12 and rotation3/6/9/12 for position through jerk (up to 4th order)
- Graph-based: Frames and timescales are directed graphs with automatic path-finding
- AD-compatible: ForwardDiff via
JSMDDiffTag and FunctionWrappersWrapper with pre-baked dual-number types
- Allocation-free: StaticArrays, FunctionWrappers, PreallocationTools throughout
- NAIF IDs: Integer body/frame identifiers (399=Earth, 301=Moon, etc.)
- Time: Seconds since J2000 (TDB by default) via
Tempo.Epoch
JSMDInterfaces.jl (Foundation)
Defines abstract types and interface stubs via @interface macro:
JSMDInterfaces.Frames: vector3/6/9/12, rotation3/6/9/12
JSMDInterfaces.Ephemeris: ephem_compute!, ephem_orient!, AbstractEphemerisProvider
JSMDInterfaces.Graph: add_vertex!, add_edge!, get_path, has_path
JSMDInterfaces.Models: parse_data, parse_model, compute_acceleration
JSMDInterfaces.Bodies: body_rotational_elements + derivatives
JSMDUtils.jl (Utilities)
- Math:
unitvec, cross3/6/9/12, angle conversions, Akima spline interpolation, rotation derivative helpers (angle_to_δdcm, skew)
- AD:
derivative, gradient!, jacobian!, hessian! wrappers around ForwardDiff
- File I/O:
JSON, YAML, TXT file type wrappers with load()
SMDGraphs.jl (Graph Infrastructure)
Lightweight wrappers around Graphs.jl implementing the JSMDInterfaces.Graph interface. Provides MappedGraphs with Dijkstra path-finding used by Tempo and FrameTransformations.
1---2name: jsmd-ecosystem3description: JuliaSpaceMissionDesign (JSMD) ecosystem overview covering package dependencies, shared interfaces, utilities, and graph infrastructure. Use when working across multiple JSMD packages or understanding ecosystem architecture.4---5
6# JuliaSpaceMissionDesign Ecosystem
7
8Open-source Julia packages for space mission analysis and design. Org: [JuliaSpaceMissionDesign](https://github.com/JuliaSpaceMissionDesign)
9
10## Package Dependency Graph
11
12```
13JSMDInterfaces.jl (abstract types, @interface macro)
14├── JSMDUtils.jl (math, file I/O, AD wrappers)
15├── SMDGraphs.jl (graph data structures via Graphs.jl)
16├── Tempo.jl (timescales, Epoch type)
17├── Ephemerides.jl (SPK/PCK kernel reader)
18├── CalcephEphemeris.jl (CALCEPH wrapper)
19├── IERSConventions.jl (Earth orientation, precession, nutation)
20├── AstroModels.jl (force models: gravity, SRP, drag)
21└── FrameTransformations.jl (frame graph, state transformations)
22```
23
24## Shared Design Patterns
25
26- **Order-parameterized**: All computations use `vector3/6/9/12` and `rotation3/6/9/12` for position through jerk (up to 4th order)
27- **Graph-based**: Frames and timescales are directed graphs with automatic path-finding
28- **AD-compatible**: ForwardDiff via `JSMDDiffTag` and `FunctionWrappersWrapper` with pre-baked dual-number types
29- **Allocation-free**: StaticArrays, FunctionWrappers, PreallocationTools throughout
30- **NAIF IDs**: Integer body/frame identifiers (399=Earth, 301=Moon, etc.)
31- **Time**: Seconds since J2000 (TDB by default) via `Tempo.Epoch`
32
33## JSMDInterfaces.jl (Foundation)
34
35Defines abstract types and interface stubs via `@interface` macro:
36- `JSMDInterfaces.Frames`: `vector3/6/9/12`, `rotation3/6/9/12`
37- `JSMDInterfaces.Ephemeris`: `ephem_compute!`, `ephem_orient!`, `AbstractEphemerisProvider`
38- `JSMDInterfaces.Graph`: `add_vertex!`, `add_edge!`, `get_path`, `has_path`
39- `JSMDInterfaces.Models`: `parse_data`, `parse_model`, `compute_acceleration`
40- `JSMDInterfaces.Bodies`: `body_rotational_elements` + derivatives
41
42## JSMDUtils.jl (Utilities)
43
44- **Math**: `unitvec`, `cross3/6/9/12`, angle conversions, Akima spline interpolation, rotation derivative helpers (`angle_to_δdcm`, `skew`)
45- **AD**: `derivative`, `gradient!`, `jacobian!`, `hessian!` wrappers around ForwardDiff
46- **File I/O**: `JSON`, `YAML`, `TXT` file type wrappers with `load()`
47
48## SMDGraphs.jl (Graph Infrastructure)
49
50Lightweight wrappers around Graphs.jl implementing the JSMDInterfaces.Graph interface. Provides `MappedGraphs` with Dijkstra path-finding used by Tempo and FrameTransformations.