Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dzhang314/rktk
A Runge-Kutta Toolkit
https://github.com/dzhang314/rktk
Last synced: 6 days ago
JSON representation
A Runge-Kutta Toolkit
- Host: GitHub
- URL: https://github.com/dzhang314/rktk
- Owner: dzhang314
- License: mit
- Created: 2018-01-05T23:50:18.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-09-28T03:49:31.000Z (3 months ago)
- Last Synced: 2024-11-09T15:33:39.451Z (2 months ago)
- Language: Julia
- Homepage:
- Size: 1.83 MB
- Stars: 6
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# RKTK
**Copyright © 2018-2024 by David K. Zhang. Released under the [MIT License][1].**
**RKTK** (Runge–Kutta toolkit) is a collection of scripts and tools, written in the [Julia][2] programming language, for discovering and optimizing new [Runge–Kutta methods][3]. This software powered my discovery of the first explicit 10th-order Runge–Kutta method with 16 stages, as described in [my undergraduate thesis][4], marking the first advance in over 40 years since [Ernst Hairer's discovery of a method with 17 stages in 1978][5].
> The algorithms that underlie **RKTK** are described in **[this paper][9]**, which is **[freely available in read-only form][10]**.
**RKTK** is closely related to its sister repository, **[RungeKuttaToolKit.jl][6]**.
* **[RungeKuttaToolKit.jl][6]** implements the core mathematical operations of the algebraic theory of Runge–Kutta methods, such as computing Butcher weights $\Phi_t(A)$ and evaluating the gradient of the sum-of-squares residual function. **RungeKuttaToolKit.jl** is intended to be useful to all researchers studying Runge–Kutta methods and is [registered in the Julia General package registry][7], so it can be installed into any Julia environment with the command `]add RungeKuttaToolKit`.
* **RKTK** (this repository) contains parallel search and nonlinear optimization scripts that specifically target the discovery of new Runge–Kutta methods. In contrast to the pure mathematical operations in **RungeKuttaToolKit.jl**, the programs in **RKTK** establish a number of RKTK-specific conventions regarding optimization hyperparameters and file structure. Consequently, **RKTK** is not a registered Julia package.
Both **RungeKuttaToolKit.jl** and **RKTK** are designed with reproducibility as an explicit goal. The [RKTKSearch.jl][8] program has been tested to produce bit-for-bit identical results across multiple architectures (i686, x86-64, ARMv8) and multiple CPU generations (Haswell, Skylake, Rocket Lake, Zen 4).
## Getting Started
Clone this repository, then run:
```
julia -O3 --threads= RKTKSearch.jl
```Set ``, ``, and `` appropriately. On processors with SMT (e.g., Intel Hyper-Threading Technology), it is worth experimenting with setting `` equal to the number of logical or physical processor cores. We find that results vary across CPU generations. Logical cores are favored on Haswell and Skylake, while physical cores are favored on Rocket Lake and Zen 4.
[1]: https://github.com/dzhang314/RKTK/blob/master/LICENSE
[2]: https://julialang.org/
[3]: https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods
[4]: https://arxiv.org/abs/1911.00318
[5]: https://doi.org/10.1093/imamat/21.1.47
[6]: https://github.com/dzhang314/RungeKuttaToolKit.jl
[7]: https://juliahub.com/ui/Packages/General/RungeKuttaToolKit
[8]: https://github.com/dzhang314/RKTK/blob/master/RKTKSearch.jl
[9]: https://link.springer.com/article/10.1007/s11075-024-01783-2
[10]: https://rdcu.be/dz7sy