Codebase for the ARIADNA Study between TU Munich and ESA's Advanced Concepts Team. A more detailed project description can be found on the Advanced Concepts Team's webpage.
- CMake >= 3.19
- make (build-essentials, or equivalent)
- A C++17 Compiler (recommended: gcc >=7 or clang >=8, only clang-10 is tested)
- OpenMP >= 4.5
- git (for fetching dependencies)
- TBB (Breakup-Model needs this)
- Doxygen
- clang-format-9
- MPI
The following codes play an important role in this project. They are downloaded and managed via CMake at configure time:
mkdir build && cd build
CC=clang CXX=clang++ ccmake .. # Set Variables according to your preferences
make -j12 # choose number according to your CPUTesting is done with help of GoogleTest, which is downloaded by CMake.
cmake -DLADDS_BUILD_TESTS=ON .. # Should be enabled by default
make ladds_tests -j12
ctest -j12The simulation requires one yaml file as argument which specifies the necessary options.
./ladds myInput.yamlor with MPI and e.g. 42 ranks:
mpiexec -n 42 ./ladds myInput.yamlFor an overview of all possible options see cfg/default_cfg.yaml. Most parameters have
a default value which is used when they are left unspecified. The full configuration, including defaulted
values, is shown in the console output when executing the simulation.
LADDS features a checkpoint mechanic where a simulation can be restarted from an HDF5 file. To create a checkpoint the simulation just needs to write an HDF5 file. This is done via the following part of the configuration:
io:
csv:
fileName: initial_population.csv # = input
hdf5:
fileName: checkpointFile.h5 # = output
writeFrequency: 100 # how often LADDS writes to HDF5The next simulation, which starts from checkpointFile.h5 then needs to have the following:
io:
hdf5:
checkpoint:
file: checkpointFile.h5 # = input AND output
iteration: 99 # Iteration where to start from. Will use last if not given.
writeFrequency: 100 # how often LADDS writes to HDF5LADDS will append any new data to the checkpoint file. This will load iteration 99 (which is the 100th iteration)
from the checkpoint and start the simulation with iteration 100. Note that no io/csv/fileName or differing io/hdf5/fileName should be provided when loading a checkpoint.
IMPORTANT: All file paths are relative to the data directory!
The code is capable to simulate fatal collisions between two bodies via the
NASA Breakup Model. This feature can be activated in
the yaml file via:
sim:
breakup:
enabled: trueBy default, some robust but static configuration is set by LADDS. You can change this by specifying the algorithmic options AutoPas is allowed to use in the YAML file. If more than one configuration can be built from these options AutoPas will tune over them at run time.
If you are unsure what algorithmic configuration you want to use for AutoPas just let AutoPas guide you.
For this, the following needs be activated in the yaml file:
autopas:
tuningMode: trueIn this mode, the simulation is only executed for one AutoPas tuning-phase. At the end of this phase, a copy of the full configuration is created, which contains the algorithm configuration that AutoPas deemed to be the fastest. This configuration can then be used to run the actual simulation at optimal speed.
AutoPas can be compiled to dump information about the performance of the algorithms it uses to .csv files.
For this set the CMake variables: AUTOPAS_LOG_TUNINGDATA=ON and AUTOPAS_LOG_TUNINGRESULTS=ON.
AutoPas_tuningData.csvcontains the timing data of all samples AutoPas collected.AutoPas_tuningResults.csvcontains the result of each tuning phase.
Data on current satellites etc. is often found online in the TLE format. We include a Jupyter notebook which can be used to process TLE data with pykep to create and analyze suitable datasets. Detailed instructions can be found in the notebook in notebooks/Data Processing.ipynb.
Satellite constellations (e.g. Starlink, OneWeb) are usually described by a list of orbital shells.
An orbital shell is described by a 4-tuple with information about altitude, inclination, number of planes, and number of satellites per plane. We provide a notebook
notebooks/ConstellationGeneration/ConstellationGeneration.ipynb that can be used
The insertion of a constellation takes as long as specified by the duration
parameter in the respective .yaml file. The time it takes to insert one shell of
a constellation depends on the percentage of satellites the shell contributes to
the constellation. Satellites of each orbital shell are inserted plane by plane
and linearly over time.
In the configuration file for the simulation, include the constellation(s) by defining the following fields:
constellationList: Semicolon (;) separated list of constellation names. E.g.Astra;Starlink;OneWebconstellationFrequency: Number of timesteps between constellation insertions.constellationCutoff: Satellites are inserted with a delay, if there is an object within this range.altitudeSpread:[km]Three times the standard deviation of the normal distribution describing the imprecision of orbital insertion. ~99.74% of satellites deviate by less than this value from the mean altitude.
LADDS has multiple options for output that can be (de)activated mostly independent of each other via YAML. See cfg/default_cfg.yaml for relevant options.
.vtu files in XML/ASCII layout that can be loaded into Paraview for visualization. They contain all particles positions and (most of) their properties.
There will be one vtu file per rank and visualization step, as well as one pvtu file per step, which links to all files of the same step.
If the selected MPI decomposition supports it, vts and pvts files are created similar to those for particles.
These however, contain information to visualize the spacial MPI decomposition in Paraview.
A single .h5 containing particle and conjunction data from a full simulation run with the following structure:
/
├── CollisionData
│ └── <IterationNr>
│ └── (Dataset) Collisions
│ idA idB distanceSquared
├── EvasionData
│ └── <IterationNr>
│ └── (Dataset) Evasions
│ idA idB distanceSquared
└── ParticleData
└── <IterationNr>
│ └── Particles
│ ├── (Dataset) IDs
│ ├── (Dataset) Positions
│ │ x y z
│ └── (Dataset) Velocities
│ x y z
└─── (Dataset) ConstantProperties
id cosparId mass radius bcInv activityState
Collision and evasion data is tracked every iteration, particle data only in intervals that are defined in the YAML file.
ConstantProperties contains properties of all particles that existed over the course of the simulation.
Due to burn ups or breakups the number of particles in any iteration might differ but ids are unique!
To keep file size reasonable compression is supported.
If MPI is used one HDF5 file per rank is written.
ParticleData contains the information of all particles that at any point passed through this rank.
CollisionData contains all collisions that happened in this rank.
EvasionData contains all evasions (i.e. an active particle evading a conjunction) that happened in this rank.
If HDF5 output is disabled entirely, collision and evasion data is written in a .csv file in ASCII layout.
- [cascade]: Long-term fast and deterministic propagation of debris populations.
- [dsgp4]: Differentiable SGP4 orbital propgator.
- [NASA-breakup model]: NASA's breakup model.
