我已经对 Matlab 的 PDE 工具箱进行了一段时间的修改,但想知道这里是否有人使用 Julia 构建了 PDE 求解器。如果是这样,Julia 对 PDE 的优势和局限性是什么?我最感兴趣的是具有恒定系数的简单 PDE,但我也在考虑使用可变系数进行建模。
您可以指出我的任何文档将不胜感激。
我已经对 Matlab 的 PDE 工具箱进行了一段时间的修改,但想知道这里是否有人使用 Julia 构建了 PDE 求解器。如果是这样,Julia 对 PDE 的优势和局限性是什么?我最感兴趣的是具有恒定系数的简单 PDE,但我也在考虑使用可变系数进行建模。
您可以指出我的任何文档将不胜感激。
是的,很多人都有。自动雅可比稀疏处理出现在DifferentialEquations.jl 的第二个教程中,它能够在普通Julia 代码上运行稀疏检测以获得稀疏形式并执行着色,然后专门化矩阵计算。然后本教程最后展示了如何将线性求解器替换为 Newton-Krylov 方法并添加预处理器。DifferentialEquations.jl 文档中还有很多内容,您可能会发现它们对时间相关的 PDE 很有用,例如GPU 支持,所以请在那里挖掘。
此外,还有很多其他的回购。Oceananigans.jl是一个基于 CPU 和 GPU 的流体动力学库。CLIMA是一个使用离散 Galerkin 离散化方法的完整气候模型。NeuralNetDiffEq.jl具有反向 SDE 方法,可有效求解 1,000 多维抛物线 PDE。DiffEqOperators.jl具有使用无矩阵运算符自动构造高阶有限差分方法的方法。等等。然后是用于自动拟合模型的DiffEqFlux.jl之类的东西,我们用它来展示PDE 的自动发现。
这里强调的一些优点是多重分派和 Julia 结构良好的 AST 使得编译器方法与求解器方法的集成非常简单,这意味着您可以直接在 Julia 代码中从用户那里获取任意函数,而且不仅它会很快(因为它是他们给你的 Julia 函数),你可以修改和分析它。你可以找出它的稀疏模式,你可以改变他们的代码以提高并行性,你可以重新排列他们代码中的方程,你可以用神经网络替换部分,然后把它扔到传统的数值方法中。这就是我们正在用DifferentialEquations.jl 做的事情,我' 很快将提供更多资源,说明如何在不同的 PDE 求解器组件和包中使用它,以改进后端数值方法,这些方法传统上被认为是更具符号性或建模 DSL 功能。然后将其与结构化矩阵库匹配,例如BlockBandedMatrices.jl,它可以重新编译另一个库的内部结构,以专门针对“稀疏”矩阵而不是像 BlockBandedMatrices (来自高维 PDE)这样的结构进行计算,然后进一步提高了必须将所有内容视为公正的库的速度一个很大的非结构化稀疏问题。
这些是我脑海中浮现的那些。有关更全面的列表,请参阅最近的 PDE 包调查。