Program Listing for File diffeq.hpp

Return to documentation for file (include/diffeq.hpp)

#pragma once

// Core concepts and base classes
#include <core/concepts.hpp>
#include <core/abstract_integrator.hpp>
#include <core/adaptive_integrator.hpp>
#include <core/timeout_integrator.hpp>
#include <core/composable_integration.hpp>

// ODE integrator implementations (organized by method type)
#include <integrators/ode/euler.hpp>           // Simple Euler method
#include <integrators/ode/improved_euler.hpp>  // Heun's method
#include <integrators/ode/rk4.hpp>             // Classic 4th order Runge-Kutta
#include <integrators/ode/rk23.hpp>            // RK23 (adaptive, Bogacki-Shampine)
#include <integrators/ode/rk45.hpp>            // RK45 (adaptive, Dormand-Prince)
#include <integrators/ode/dop853.hpp>          // DOP853 (8th order, high accuracy)
#include <integrators/ode/bdf.hpp>             // BDF (multistep, stiff systems) - SciPy-compatible
#include <integrators/ode/lsoda.hpp>           // LSODA (automatic stiff/non-stiff switching)

// SDE (Stochastic Differential Equation) integrators (organized by method type)
#include <sde/sde_base.hpp>                    // SDE base infrastructure
#include <integrators/sde/euler_maruyama.hpp>  // Basic SDE solver (strong order 0.5)
#include <integrators/sde/milstein.hpp>        // Milstein method with Lévy area (strong order 1.0)
#include <integrators/sde/sri1.hpp>            // Stochastic Runge-Kutta method (strong order 1.0)
#include <integrators/sde/implicit_euler_maruyama.hpp>  // Implicit method for stiff SDEs
#include <integrators/sde/sra.hpp>             // SRA base implementation
#include <integrators/sde/sra1.hpp>            // SRA1 variant for additive noise
#include <integrators/sde/sra2.hpp>            // SRA2 variant for additive noise
#include <integrators/sde/sosra.hpp>           // Stability-optimized SRA
#include <integrators/sde/sri.hpp>             // SRI base implementation
#include <integrators/sde/sriw1.hpp>           // SRIW1 variant for general SDEs
#include <integrators/sde/sosri.hpp>           // Stability-optimized SRI

// Modern async and signal processing components (standard C++ only)
#include <async/async_integrator.hpp>    // Async integration with std::future
#include <signal/signal_processor.hpp>   // Generic signal processing
#include <interfaces/integration_interface.hpp>  // Unified interface for all domains

// Standard parallelism library integration examples
// Note: Use standard libraries (std::execution, OpenMP, TBB, Thrust) instead of custom parallel classes
// See docs/STANDARD_PARALLELISM.md and examples/standard_parallelism_demo.cpp for integration examples

namespace diffeq {
    // Re-export core functionality
    using core::TimeoutIntegrator;
    using core::IntegrationResult;
    using core::IntegrationTimeoutException;
    using core::make_timeout_integrator;
    using core::integrate_with_timeout;

    // Note: ParallelTimeoutIntegrator was removed in favor of composable architecture
    // Use make_builder(base).with_timeout().with_parallel().build() instead

    // Re-export composable integration facilities
    using core::composable::IntegratorDecorator;
    using core::composable::TimeoutDecorator;
    using core::composable::ParallelDecorator;
    using core::composable::OutputDecorator;
    using core::composable::SignalDecorator;
    using core::composable::IntegratorBuilder;
    using core::composable::make_builder;
    using core::composable::with_timeout_only;
    using core::composable::with_parallel_only;
    using core::composable::TimeoutConfig;
    using core::composable::TimeoutResult;
    using core::composable::ParallelConfig;
    using core::composable::OutputConfig;
    using core::composable::OutputMode;
    using core::composable::SignalConfig;

    // Re-export integrator classes for convenience
    // Note: Integrators are already in diffeq namespace, no need to re-export

    // Re-export SDE integrators
    // Note: SDE integrators are already in diffeq namespace, no need to re-export

    // Common type aliases for system_state concept
    template<typename T>
    using VectorState = std::vector<T>;

    template<typename T, std::size_t N>
    using ArrayState = std::array<T, N>;

    // Default scalar types for can_be_time concept
    using DefaultScalar = double;
    using DefaultTime = double;
}