Releases: Space-Systems/OPI
Propagation Recording
- Add PropagationRecord class for easy recording and plotting of propagations
- Use OPI Logger in support plugins
- Fix Fortran interface
- Various small changes and bugfixes
OPI-2021.0 Release Candidate 0
OPI-2021 introduces changes to the way Julian Dates are stored, in order to achieve higher accuracy. See updated README.md for details.
Epoch Extension
- Index Lists can now be copied and added
- Added "initial_epoch" fiield to Population/Epoch that can be used by the propagator to keep a record of when the propagation started. Epoch now has the following fields:
- beginning_of_life: The date when the object was launched. Set by the host.
- end_of_life: The date when the object deorbited. Can be set by the host to mark historic objects, or by the propagator to mark objects that decayed during propagation. Objects with a set EOL date should not be propagated past this date.
Population::markedAsDeorbited(int index)
checks for this. - current_epoch: The date where the object is currently at. Should be updated by the propagator at every step during propagation.
- original_epoch: The date for which the data set for the object was created. Set by the host and used for reference (e.g. against current_epoch to check whether an object has been propagated from its original state).
- initial_epoch: The date at which propagation commenced. Set by the propagator at the start of propagation and used for reference during the process.
Logging and Versioning
- Added the OPI::Logger to handle debug output. Messages now go to a destination (stdout or file) specified by
host.logToFile(logFileName)
. The host can also set the desired verbose level (0 to 4) usinghost.setVerboseLevel(v)
. C++ Propagators (and hosts) can direct output to the logger like this:OPI::Logger::out(v) << "This is a debug message with verbose level " << v << std::endl;
. Propagators should make theirsupportsOPILogger()
function return 1 to signal logger support to the host. - Version requirements: Propagators should set
minimumOPIVersionRequired()
andminorOPIVersionRequired()
to match the minimum major (e.g. 2019) and minor (e.g. 6) OPI version required. - Added a function to the host to retrieve the plugin path.
- Fixed covariance matrix output in JSON.
Hotfix for OPI-2019.4
- Fix passing string arguments to Fortran
- Starting to provide some precompiled binaries again
Binaries are compiled with OpenCL support so you will either need OpenCL headers in your include path or #define OPI_DISABLE_OPENCL
before including opi_cpp.h (if you are developing a host or not planning on using OpenCL at all).
Interface Fixes
- Fix handling of string parameters in Fortran interface
- Change Python Population getter functions to "get*ByIndex()"
- Add support for indexed Population alignment
New Population Features
- Added original_epoch field to Population/Epoch. It can be used to set the date at which the object's data set was created.
- Added Population::markedAsDeorbited function to query whether an object has been marked as deorbited by the propagator (current epoch larger than end of life, and both fields set).
- Added progress output to Propagator::align as well as the option to align to a user-defined date.
- Python version (2 or 3) can now be selected during the build process.
Population Copying
- Properly implemented copy constructors for Population and Perturbations
- Populations can be concatenated using the + and += operators
- Perturbations can be added directly to a Population using the + and += operators
Minor additions and license change
- Adopt MIT license
- Propagators and perturbation modules can now read files from resource archives
- Populations can be exported to JSON files
- Minor enhancements and fixes
Major Interface Update
This is the first release of the overhauled interface. Several changes have been made that deprecate the old version and require you to make updates to hosts and propagators:
Combined propagation functions: indexedPropagation and multiTimePropagation have been merged into the main propagate function.
New Epoch field in Population: Beginning of life, end of life and current epoch of each object are now tracked in the Population's epoch field.
New Perturbations class: Perturbation modules return changes to the Population in a new Perturbations class rather than changing the population itself. The Perturbations class works and behaves exactly like Population, just with different fields.
Support for covariance matrices: Covariance matrices have been added to Population and Perturbations classes.
New Population features: Functions have been added to copy and append Populations, to align all objects to the same epoch, and to allow perturbation modules to read config files individually.
Loading Populations: Propagators can now implement a loadPopulation() function to create a Population from a propagator-specific input file.
Increased storage efficiency: Populations are now written to files in a compressed format.