@@ -8,6 +8,23 @@ C++20 explicit Runge-Kutta integrator for non-stiff ODEs:
88- RKF78 (embedded adaptive 7(8), fixed-step using high-order solution also supported)
99- RK8 alias (fixed-step using RKF78 high-order weights)
1010
11+ ## Architecture
12+
13+ ``` mermaid
14+ flowchart TD
15+ A[Client code] --> B[integrate API]
16+ B --> C[Runtime method dispatch]
17+ B --> D[Compile-time tableau API]
18+ C --> E[Drivers]
19+ D --> E
20+ E --> F[ExplicitRKStepper]
21+ F --> G[RK4 tableau]
22+ F --> H[RKF45 tableau]
23+ F --> I[RKF78 tableau]
24+ E --> J[Error norm and step-size controller]
25+ E --> K[Integration result and stats]
26+ ```
27+
1128## Build and test
1229
1330``` bash
@@ -16,10 +33,48 @@ cmake --build --preset macos-debug -j
1633ctest --preset macos-debug --output-on-failure
1734```
1835
19- ## API quick start
36+ ## Sanitizer runs
37+
38+ AddressSanitizer:
39+
40+ ``` bash
41+ cmake --preset macos-asan
42+ cmake --build --preset macos-asan -j
43+ ctest --preset macos-asan --output-on-failure
44+ ```
45+
46+ UndefinedBehaviorSanitizer:
47+
48+ ``` bash
49+ cmake --preset macos-ubsan
50+ cmake --build --preset macos-ubsan -j
51+ ctest --preset macos-ubsan --output-on-failure
52+ ```
53+
54+ ## Install and package consumption
55+
56+ ``` bash
57+ cmake --preset macos-release
58+ cmake --build --preset macos-release -j
59+ cmake --install build/macos-release --prefix /tmp/ode-install
60+ ```
61+
62+ Downstream CMake usage:
63+
64+ ``` cmake
65+ find_package(ode CONFIG REQUIRED)
66+ target_link_libraries(your_target PRIVATE ode::ode)
67+ ```
68+
69+ The repository includes a package consumer smoke test (` ode_package_install_smoke ` ).
70+
71+ ## API usage
72+
73+ Runtime method selection:
2074
2175``` cpp
2276#include < ode/ode.hpp>
77+ #include < vector>
2378
2479using State = std::vector<double >;
2580State y0{1.0};
@@ -36,3 +91,48 @@ opt.atol = 1e-12;
3691
3792auto res = ode::integrate(ode::RKMethod::RKF78, rhs, 0.0 , y0, 1.0 , opt);
3893```
94+
95+ Compile-time tableau selection:
96+
97+ ``` cpp
98+ #include < ode/integrate_method.hpp>
99+ #include < ode/tableaus/rkf45.hpp>
100+
101+ auto res = ode::integrate_with_tableau<ode::TableauRKF45>(rhs, t0, y0, t1, opt);
102+ ```
103+
104+ ## Simple 2-body orbital example
105+
106+ Build and run:
107+
108+ ``` bash
109+ cmake --preset macos-debug
110+ cmake --build --preset macos-debug -j
111+ ./build/macos-debug/ode_two_body_example
112+ ```
113+
114+ This integrates a circular LEO two-body problem for approximately one orbital period and prints final state and step stats.
115+
116+ ## Profiling
117+
118+ ``` bash
119+ tools/profile.sh
120+ ```
121+
122+ Optional overrides:
123+ - ` ODE_PERF_SAMPLES `
124+ - ` ODE_PERF_ITERATIONS `
125+
126+ ## API docs (Doxygen)
127+
128+ ``` bash
129+ cmake --preset macos-debug -DODE_BUILD_DOCS=ON
130+ cmake --build --preset macos-debug --target ode_docs
131+ ```
132+
133+ Generated HTML is written under ` build/<preset>/docs/html/ ` .
134+
135+ ## License
136+
137+ This project is licensed under the GNU General Public License v3.0.
138+ See ` LICENSE ` .
0 commit comments