14 个版本

0.1.9 2024年7月10日
0.1.8 2024年7月10日
0.1.6 2024年6月12日
0.1.5 2024年5月28日
0.1.1 2024年3月19日

#257 in 数学

Download history 17/week @ 2024-04-19 9/week @ 2024-04-26 1/week @ 2024-05-03 122/week @ 2024-05-10 28/week @ 2024-05-17 161/week @ 2024-05-24 107/week @ 2024-05-31 193/week @ 2024-06-07 76/week @ 2024-06-14 33/week @ 2024-06-21 66/week @ 2024-06-28 720/week @ 2024-07-05 126/week @ 2024-07-12 10/week @ 2024-07-19 57/week @ 2024-07-26 11/week @ 2024-08-02

298 每月下载量
用于 diffsol

自定义许可GPL-3.0-or-later

11MB
146K SLoC

C++ 69K SLoC // 0.1% comments LLVM 64K SLoC // 0.4% comments Rust 9K SLoC // 0.0% comments C 3K SLoC // 0.2% comments Bazel 729 SLoC // 0.0% comments Forge Config 253 SLoC // 0.9% comments Julia 145 SLoC // 0.1% comments FORTRAN Modern 113 SLoC // 0.2% comments Python 82 SLoC // 0.3% comments Shell 75 SLoC // 0.0% comments Pest 50 SLoC

DiffSL

CI build status badge

针对以下形式的普通微分方程(ODE)领域特定语言的编译器

$$ M(t) \frac{d\mathbf{u}}{dt} = F(\mathbf{u}, t) $$

以下代码定义了一个经典的 DAE 测试案例,即 Robertson (1966) 问题,该问题通过以下方程集建模自催化反应的动力学

$$ \begin{align} \frac{dx}{dt} &= -0.04x + 10^4 y z \ \frac{dy}{dt} &= 0.04x - 10^4 y z - 3 \cdot 10^7 y^2 \ 0 &= x + y + z - 1 \end{align} $$

该问题的 DiffSL 代码如下

in = [k1, k2, k3]
k1 { 0.04 }
k2 { 10000 }
k3 { 30000000 }
u_i {
  x = 1,
  y = 0,
  z = 0,
}
dudt_i {
  dxdt = 1,
  dydt = 0,
  dzdt = 0,
}
M_i {
  dxdt,
  dydt,
  0,
}
F_i {
  -k1 * x + k2 * y * z,
  k1 * x - k2 * y * z - k3 * y * y,
  1 - x - y - z,
}
out_i {
  x,
  y,
  z,
}

DiffSL 语言特性

有关完整说明,请参阅 DiffSL 语言文档

  • 张量类型
    • 标量(双精度浮点数)
    • 向量(标量的一维数组)
    • 标量的 n 维张量
    • 稀疏/密集/对角张量
  • 张量操作
    • 逐元素操作
    • 广播
    • 通过索引符号进行张量 contraction/matmul/translation 等

用法

通常,使用支持该语言的常微分方程求解器是使用 DiffSL 的最简单方法,例如 diffsol 库。请参阅 diffsol 文档并咨询 DiffSL 语言文档 获取更多信息。

如果您正在编写自己的常微分方程求解器并希望使用 DiffSL 编译器,请通过提交问题、联系 作者 或查看 diffsol 源代码 来取得联系。

依赖项

您需要安装 LLVM 项目。最简单的方法是使用您操作系统的包管理器。例如,在 Ubuntu 上,您可以使用以下命令安装这些依赖项

sudo apt-get install llvm

安装

您可以使用 cargo 安装 DiffSL。您需要通过特性标志来指定已安装的 llvm 版本。例如,对于 llvm 14

cargo add diffsl --features llvm14-0

支持其他版本的 llvm,特性包括 llvm13-0llvm14-0llvm15-0llvm16-0llvm17-0

依赖项

~5–8.5MB
~158K SLoC