43 using DerivativeFunc = std::function<JanusVector<Scalar>(Scalar,
const JanusVector<Scalar> &)>;
97 const JanusVector<Scalar> &X, Scalar t, Scalar dt) {
99 throw std::runtime_error(
100 "IntegrationManager: integrator not configured. Call Configure() first.");
102 return integrator_->Step(deriv_func, X, t, dt);
117 const JanusVector<Scalar> &X, Scalar t,
120 throw std::runtime_error(
121 "IntegrationManager: integrator not configured. Call Configure() first.");
123 if (!integrator_->IsAdaptive()) {
124 throw std::runtime_error(
125 "IntegrationManager: AdaptiveStep() requires an adaptive integrator. "
126 "Current integrator: " +
127 integrator_->Name());
132 throw std::runtime_error(
"IntegrationManager: failed to cast to AdaptiveIntegrator");
134 return adaptive->AdaptiveStep(deriv_func, X, t, dt_request);
142 return integrator_->Type();
155 [[nodiscard]] std::string
Name()
const {
157 return integrator_->Name();
165 [[nodiscard]]
bool IsConfigured()
const {
return integrator_ !=
nullptr; }
170 [[nodiscard]]
bool IsAdaptive()
const {
return integrator_ && integrator_->IsAdaptive(); }
183 std::unique_ptr<Integrator<Scalar>> integrator_;
Core type definitions, concepts, and configuration for Icarus.
Factory for creating integrators from configuration.
Integrator type enumeration and configuration.
Abstract interface for numerical integrators.
Interface for adaptive step integrators.
Definition Integrator.hpp:101
const IntegratorConfig< Scalar > & Config() const
Get current configuration.
Definition IntegrationManager.hpp:150
IntegrationManager()=default
void Configure(IntegratorType type)
Configure from integrator type enum.
Definition IntegrationManager.hpp:64
void ConfigureDefault()
Configure with default integrator (RK4).
Definition IntegrationManager.hpp:82
void Configure(const std::string &type_name)
Configure from type name string.
Definition IntegrationManager.hpp:74
std::string Name() const
Get integrator name.
Definition IntegrationManager.hpp:155
Integrator< Scalar > * GetIntegrator()
Get direct access to integrator (expert use).
Definition IntegrationManager.hpp:175
const Integrator< Scalar > * GetIntegrator() const
Get direct const access to integrator (expert use).
Definition IntegrationManager.hpp:180
bool IsAdaptive() const
Check if current integrator supports adaptive stepping.
Definition IntegrationManager.hpp:170
void Configure(const IntegratorConfig< Scalar > &config)
Configure from IntegratorConfig.
Definition IntegrationManager.hpp:54
IntegratorType Type() const
Get current integrator type.
Definition IntegrationManager.hpp:140
bool IsConfigured() const
Check if integrator is configured.
Definition IntegrationManager.hpp:165
JanusVector< Scalar > Step(const DerivativeFunc &deriv_func, const JanusVector< Scalar > &X, Scalar t, Scalar dt)
Perform fixed-step integration.
Definition IntegrationManager.hpp:96
AdaptiveStepResult< Scalar > AdaptiveStep(const DerivativeFunc &deriv_func, const JanusVector< Scalar > &X, Scalar t, Scalar dt_request)
Perform adaptive-step integration.
Definition IntegrationManager.hpp:116
std::function< JanusVector< Scalar >(Scalar, const JanusVector< Scalar > &)> DerivativeFunc
Derivative function signature: (t, X) -> X_dot.
Definition IntegrationManager.hpp:43
static std::unique_ptr< Integrator< Scalar > > Create(const IntegratorConfig< Scalar > &config)
Create integrator from configuration.
Definition IntegratorFactory.hpp:35
Abstract interface for numerical integrators.
Definition Integrator.hpp:45
Definition AggregationTypes.hpp:13
const char * to_string(SignalKind kind)
Convert SignalKind to string.
Definition Signal.hpp:86
IntegratorType
Available integrator methods.
Definition IntegratorTypes.hpp:27
IntegratorType parse_integrator_type(const std::string &name)
Parse integrator type from string (case-insensitive).
Definition IntegratorTypes.hpp:56
Result from adaptive step integrators.
Definition Integrator.hpp:26
Configuration for integrator creation.
Definition IntegratorTypes.hpp:83
static IntegratorConfig RK4Default()
Create default RK4 config.
Definition IntegratorTypes.hpp:96
static IntegratorConfig ForMethod(IntegratorType method)
Create config for specified method.
Definition IntegratorTypes.hpp:117