Commit Graph

25 Commits

Author SHA1 Message Date
ApsisRS contributors ecbdaf92a2 docs: bilingual comments for access, coverage, isl and routing
This completes the network layer.
2026-10-02 01:26:58 +08:00
ApsisRS contributors b53f11eee7 docs: bilingual comments for the access finder and pass summary 2026-10-02 01:25:53 +08:00
ApsisRS contributors d8abab1f5f docs: bilingual comments for mesh and routing 2026-10-02 01:25:10 +08:00
ApsisRS contributors c25a721c08 docs: bilingual comments for handover and topology 2026-10-02 01:24:45 +08:00
ApsisRS contributors bd4b148386 docs: bilingual comments for the error types, links and mesh
The error modules across the remaining crates share a shape, so one table
covers them all. Also the inter-satellite link geometry and the mesh
connectivity analysis, including the Menger and Kosaraju notes.
2026-10-02 01:14:59 +08:00
ApsisRS contributors 2f62d2522b docs: extend the bilingual sweep into routing, topology, access and rf
A translation table for the sentences that recur across the error types
and the simple accessors let the same wording be applied everywhere at
once, which both keeps the Chinese consistent and covers a hundred and
twenty-nine sites in a single pass. Routing, topology, access and the radio
frequency crates are now part of the sweep.
2026-10-02 01:10:40 +08:00
ApsisRS contributors 7e545bf68a docs: describe the notation at the precision it uses
The comment said the inclination was rounded to one decimal place, but
the format prints it at full precision, so 53.25 degrees came out intact
where the comment promised 53.2. The notation is an identifier, so
truncating it would lose information for nothing.
2026-10-02 00:19:37 +08:00
ApsisRS contributors 4be2ac07c2 docs: make the constellation comments bilingual
The first crate of the sweep, so the layout can be checked before the
remaining forty. English paragraph, empty doc line, then the Chinese, per
the glossary. Terms with a standard Chinese name use it directly, so
semi-major axis reads 半长轴 rather than carrying the English each time;
Walker, SGP4 and the frame abbreviations stay as they are.

Every comment block in the crate now has both languages, the Display
strings are untouched because translating them would change what a program
prints, and the three formulas the comments state were checked against the
code: the phase offset is 2 pi f / t, the plane spacing 2 pi / p, and the
anomaly spacing 2 pi / (t / p), all of which match.
2026-10-02 00:17:21 +08:00
ApsisRS contributors a3028b2029 fix: reject an unordered sample sequence in the access search
The search binary searches the sample list to interpolate between the two
samples that straddle a crossing, and a binary search over an unordered
list returns a wrong index instead of failing. Only the first and last
times were checked, so a sequence whose ends were in order but whose
middle was not refined each crossing against the wrong pair of positions
and reported a pass that never happened. On a circular ground track,
shuffling two samples changed the result from three passes to two and
still returned Ok.

The whole sequence is now checked, with a new UnorderedSamples error kind
that says which pair is out of order. The test covers the middle-of-
sequence case that the end check missed.

Two comments also described something other than what the code does, and
two Option-returning accessors did not say what makes them None:

- GravityModel::x2o3 is the constant 2/3, used as an exponent in the
  mean motion and drag corrections, not 2 * xke^2 as its comment claimed;
  the sgp4 reference implementation uses the same constant the same way.
- WalkerPattern::plane_spacing and phase_offset returned None without
  saying so, which is the case a caller has to handle.

Both READMEs claimed twelve expect sites where there are thirteen, because
apsis-math/src/parallel.rs added one and the count was not carried over.
2026-10-02 00:03:22 +08:00
ApsisRS contributors 722a65b012 math, access: correct the parallel notes and a test's geometry
The parallelism note linked to a type the module does not import, which
rustdoc rejects, so it reads as plain text now. The access batch test
computed a propagated state it did not use; it now takes the shell radius
from it so the track sits at a realistic altitude.
2026-09-30 18:40:49 +08:00
ApsisRS contributors 1c5dddc229 isl: record where the threaded visibility sweep pays and where it does not
A single visibility test costs a few nanoseconds, so the thread start up is
only repaid by a large matrix. Measured on sixteen cores the parallel form
gains from a few hundred satellites and loses below that, so the note says
so and points a small shell at the sequential form.
2026-09-30 18:39:10 +08:00
ApsisRS contributors 9908d8e829 isl: decide every link of a constellation across several threads
Building a topology asks the same geometry question for every pair of
satellites, which is a quadratic number of independent tests, and that loop
is the dominant cost of the construction. The parallel form returns the
same row major matrix in the same order as the sequential one.
2026-09-30 18:38:04 +08:00
ApsisRS contributors e6ed78bdb0 access: search a constellation's tracks across several threads
A ground station's access schedule is one search per satellite, each
independent of the others, and a shell gives enough of them to pay for the
threads. The parallel form returns the same summaries in the same order as
the sequential one, including an error at the position the sequential form
would put it, so one bad track does not hide the rest.
2026-09-30 18:37:02 +08:00
ApsisRS contributors 0232790b4e topology: index the outgoing edges
Asking whether an edge already exists scanned the whole edge list, so
building a graph of E edges cost O(E^2). A visibility sweep adds a quadratic
number of edges, so the whole construction was cubic: 600 satellites took
twelve seconds. An index of outgoing edge positions makes the membership
test constant time, and the same index answers neighbours and out-degree
without a scan. Removal rebuilds the index in one pass, since it renumbers
every later position. Six hundred satellites now take 130 ms, a factor of
ninety five.
2026-09-30 18:29:18 +08:00
ApsisRS contributors c9d2605385 docs: fix the broken intra doc links and check them in CI
Running rustdoc with -D warnings found nine broken links: a misspelt
WGS84, links to methods and constants that are private or in a crate that
is not a dependency, and three redundant explicit targets. Fix each and add
a documentation step to CI so a doc comment cannot drift away from the code
it describes without the build noticing.
2026-09-26 23:37:48 +08:00
ApsisRS contributors 7531ebacd6 workspace: remove dependencies that are declared but never used
Thirty four crates listed apsis-core or apsis-math without referencing it,
and apsis-kepler listed apsis-time and apsis-tle as well. Each was verified
removable by compiling with it taken out. An unused dependency still costs
build time and makes the dependency graph and the layer check report
relations that do not exist. The layer check now reports 104 edges, down
from 141.
2026-09-26 23:36:38 +08:00
ApsisRS contributors eb8ef3fa3b network: add mesh connectivity and critical link analysis 2026-09-26 16:06:59 +08:00
ApsisRS contributors 0bc127277f network: add handover policy with hysteresis and dwell time 2026-09-26 16:04:52 +08:00
ApsisRS contributors 033c85a338 network: add shortest path and interval routing 2026-09-26 16:03:15 +08:00
ApsisRS contributors 84e62abe52 network: add time-varying topology graph and series 2026-09-26 16:01:19 +08:00
ApsisRS contributors 016c3a4b76 network: add inter-satellite link geometry 2026-09-26 15:58:49 +08:00
ApsisRS contributors dcd1774b3f network: add access window finder 2026-09-26 15:51:47 +08:00
ApsisRS contributors ea89c217eb network: add coverage geometry, footprint, and visibility 2026-09-26 15:48:14 +08:00
ApsisRS contributors bebf7c4df0 network: add Walker constellation construction 2026-09-26 15:44:38 +08:00
ApsisRS contributors 539f29c7b5 workspace: initialize workspace with all layer crates 2026-09-26 12:53:13 +08:00