Template Class IntegrationInterface

Nested Relationships

Nested Types

Class Documentation

template<system_state StateType, can_be_time TimeType>
class IntegrationInterface

General interface for ODE integration with real-time signal processing.

This unified interface handles all integration scenarios:

  1. Signal-triggered state modifications (discrete events)

  2. Signal-induced trajectory shifts (continuous influence)

  3. Real-time output streaming during integration

  4. Bidirectional communication between ODE and external processes

Public Types

enum class InfluenceMode

Signal influence modes.

Values:

enumerator DISCRETE_EVENT
enumerator CONTINUOUS_SHIFT
enumerator PARAMETER_UPDATE
enumerator OUTPUT_TRIGGER
using state_type = StateType
using time_type = TimeType
using signal_processor_type = signal::SignalProcessor<StateType>

Public Functions

inline explicit IntegrationInterface(std::shared_ptr<signal_processor_type> processor = nullptr)
template<typename SignalDataType>
inline void register_signal_influence(std::string_view signal_type, InfluenceMode mode, std::function<void(const SignalDataType&, state_type&, time_type)> handler, double priority = 1.0)

Register a signal influence on the ODE system.

inline void register_output_stream(std::string_view stream_id, std::function<void(const state_type&, time_type)> output_func, std::chrono::microseconds interval = std::chrono::microseconds{1000})

Register an output stream for real-time data export.

inline void add_trajectory_modifier(std::function<void(time_type, state_type&, state_type&)> modifier)

Add a continuous trajectory modifier.

These functions are called during ODE evaluation to modify the dynamics based on accumulated signal influences.

template<typename OriginalODE>
inline auto make_signal_aware_ode(OriginalODE &&original_ode)

ODE system wrapper that incorporates signal influences.

This function should be passed to your integrator. It wraps your original ODE system and adds signal-based modifications.

inline void apply_discrete_event(const std::string &signal_type, const std::any &signal_data)

Process discrete events (instantaneous state modifications)

inline std::optional<state_type> get_current_state() const

Get current integration state.

inline time_type get_current_time() const

Get current time.

inline void set_signal_influence_active(const std::string &signal_type, bool active)

Enable/disable signal influence.

inline void set_output_stream_active(const std::string &stream_id, bool active)

Enable/disable output stream.

inline std::shared_ptr<signal_processor_type> get_signal_processor()

Get signal processor for direct access.

struct OutputStream

Output stream descriptor.

Public Members

std::string stream_id
std::function<void(const state_type&, time_type)> output_func
std::chrono::microseconds interval = {1000}
std::chrono::steady_clock::time_point last_output
bool is_active = true
struct SignalInfluence

Signal influence descriptor.

Public Members

InfluenceMode mode
std::string signal_type
std::function<void(const std::any&, state_type&, time_type)> handler
double priority = 1.0
bool is_active = true