# JuliaPDE: Survey of PDE Packages

**URL:** <https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672>\
**Category:** Package Announcements\
**Created:** [March 7, 2020, 12:26am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672 "2020-03-07T00:26:55Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [March 7, 2020, 12:26am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/1 "2020-03-07T00:26:55Z")

</div>

Request for comment:

> **[GitHub - JuliaPDE/SurveyofPDEPackages: Survey of the packages of the Julia...](https://github.com/JuliaPDE/SurveyofPDEPackages)**
>
> Survey of the packages of the Julia ecosystem for solving partial differential equations - GitHub - JuliaPDE/SurveyofPDEPackages: Survey of the packages of the Julia ecosystem for solving partial d...

The survey is certainly far from complete. Hence my request: If you think something was missed, if you’d like to amend or complement the information, or if, for any reason, you wish your software not to be included, file an issue, or even better, make it a **PR**.

The maintainers look forward to hearing from you.

Update 03/11: Several packages added. But there are sure to be some holes. Do help me to fill them in please.

---

<div class="post-metadata">

**Author:** ![Albert\_Zevelev](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/albert_zevelev/32/11844_2.png) [@Albert\_Zevelev](https://discourse.julialang.org/u/Albert_Zevelev)\
**Post date:** [March 7, 2020, 1:15am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/2 "2020-03-07T01:15:37Z")

</div>

Thanks. Is there any sort of community roadmap to when we expect an automated pde package?  
Also: you forgot [https://github.com/matthieugomez/EconPDEs.jl](https://github.com/matthieugomez/EconPDEs.jl)

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [March 7, 2020, 1:16am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/3 "2020-03-07T01:16:39Z")

</div>

Ask the guy who’s gonna write it.

---

<div class="post-metadata">

**Author:** ![Albert\_Zevelev](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/albert_zevelev/32/11844_2.png) [@Albert\_Zevelev](https://discourse.julialang.org/u/Albert_Zevelev)\
**Post date:** [March 7, 2020, 1:23am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/4 "2020-03-07T01:23:24Z")

</div>

Combining:  
[https://github.com/matthieugomez/EconPDEs.jl](https://github.com/matthieugomez/EconPDEs.jl)  
[GitHub - ABAtanasov/GalerkinSparseGrids.jl: Sparse Grid Discretization with the Discontinuous Galerkin Method for solving PDEs](https://github.com/ABAtanasov/GalerkinSparseGrids.jl)  
[https://github.com/JerryLingjieMei/NonlinearPDE](https://github.com/JerryLingjieMei/NonlinearPDE)  
[https://github.com/DanPSilva/Partial-Differential-Equations](https://github.com/DanPSilva/Partial-Differential-Equations)  
[https://github.com/ooreilly/sbp.jl](https://github.com/ooreilly/sbp.jl)  
[GitHub - FourierFlows/FourierFlows.jl: Tools for building fast, hackable, pseudospectral partial differential equation solvers on periodic domains](https://github.com/FourierFlows/FourierFlows.jl)  
[https://github.com/PtFEM/PtFEM.jl](https://github.com/PtFEM/PtFEM.jl)  
[https://github.com/samuelpowell/LibTOAST.jl](https://github.com/samuelpowell/LibTOAST.jl)  
[https://github.com/Paulms/HDiscontinuousGalerkin.jl](https://github.com/Paulms/HDiscontinuousGalerkin.jl)

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [March 7, 2020, 1:42am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/5 "2020-03-07T01:42:28Z")

</div>

Thanks for the pointers. Much appreciated.

About the automated PDE package: Comsol comes to mind. I used to know it when it was still called Femlab, perhaps 15 years ago. Even then there was several dozen man-years in the software. So throw in several dozen more, and we are getting up to some serious effort.

I must ask: What is the point of an automated PDE package? I mean for someone who likes to tinker with Julia? Is it for the person who just likes to get up in the morning and solve a PDE? Or for someone who does that as part of their job description? I think the former would be quite happy to hack on their own tool using whatever Julia provides, and does not need a bells and-whistles, kitchen sink included (pardon the mixed metaphor) grab bag, and the latter should probably get the employer to pay for a commercial package. Just my two cents worth…

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [March 7, 2020, 1:50am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/6 "2020-03-07T01:50:49Z")

</div>

> [@Albert\_Zevelev](#):
>
> Is there any sort of community roadmap to when we expect an automated pde package?

About a year. We’re finishing DiffEqOperators for finite difference this summer, finishing the [universal PDE interface](https://github.com/JuliaDiffEq/DifferentialEquations.jl/issues/469#issuecomment-533542895) is finishing this summer as well with the first thing supporting it likely being a neural network approach. After that we plan to hook in the finite difference and pseudospectral methods, and then hook in FEniCS. Then build FVM tools and hook up with whatever Julia FEM library fits well.

That’s the plan at least.

(One other huge portion is a revision of the nonlinear solver interface of DifferentialEquaitons so that it can better specialize on linearity: something that never shows up in normal ODE contexts but shows up in large PDEs)

---

<div class="post-metadata">

**Author:** ![Albert\_Zevelev](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/albert_zevelev/32/11844_2.png) [@Albert\_Zevelev](https://discourse.julialang.org/u/Albert_Zevelev)\
**Post date:** [March 7, 2020, 1:50am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/7 "2020-03-07T01:50:57Z")

</div>

I want an automated PDE solver for the same reason I want an automated ODE solver.  
Currently, I use Mathematica’s DSolve & NDSolve.  
For ODEs & BVPs I find Julia to kick ass & outperform the competition.  
I bet it will be the same when a pde solver is ready.

As a side note, for DAEs both Mathematica & Matlab can only solve IVPs. The only BVP solve for DAEs I know is Fortran’s coldae. Not sure if Julia has this yet…

---

<div class="post-metadata">

**Author:** ![ranocha](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ranocha/32/35588_2.png) [@ranocha](https://discourse.julialang.org/u/ranocha)\
**Post date:** [March 7, 2020, 2:53am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/8 "2020-03-07T02:53:06Z")

</div>

Thanks for the survey. I have three remarks:

- You could add my package [SummationByPartsOperators.jl](https://github.com/ranocha/SummationByPartsOperators.jl) under finite difference methods.
- You should replace the link [https://github.com/ranocha/PositiveFactorizations.jl](https://github.com/ranocha/PositiveFactorizations.jl) by [GitHub - timholy/PositiveFactorizations.jl: Positive-definite "approximations" to matrices](https://github.com/timholy/PositiveFactorizations.jl). I just forked the package to fix a bug (and made a PR).
- You could categorize the package [https://github.com/ooreilly/sbp.jl](https://github.com/ooreilly/sbp.jl) as finite difference method and mention that it is not registered.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [March 7, 2020, 3:04am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/9 "2020-03-07T03:04:59Z")

</div>

Excellent, thank you. My mistake, I will fix it.

---

<div class="post-metadata">

**Author:** ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)\
**Post date:** [March 7, 2020, 8:07am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/10 "2020-03-07T08:07:47Z")

</div>

This is a very nice list, thank you for putting it together! I’d argue for inclusion only of packages that have been updated in the last six months or so. Could also be interesting to list applications (ie programs that solve a particular PDE), I know of a few but I’d be interested to see how many there are.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [March 7, 2020, 3:47pm UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/11 "2020-03-07T15:47:38Z")

</div>

> [@antoine-levitt](#):
>
> I’d argue for inclusion only of packages that have been updated in the last six months or so.

On the one hand, this intuitively makes sense. However what if there is a stable library that doesn’t take much maintenance, and would be excluded by such a rule?

> [@antoine-levitt](#):
>
> Could also be interesting to list applications (ie programs that solve a particular PDE), I know of a few but I’d be interested to see how many there are.

Good idea, thanks. About that list: would you share please?

---

<div class="post-metadata">

**Author:** ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)\
**Post date:** [March 7, 2020, 4:53pm UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/12 "2020-03-07T16:53:22Z")

</div>

Unfortunately things don’t seem to work out this way… Either packages get updated regularly, or they bitrot.

Regarding applications, there are at least

[https://github.com/climate-machine/Oceananigans.jl](https://github.com/climate-machine/Oceananigans.jl)  
[https://github.com//JuliaMolSim/DFTK.jl/](https://github.com//JuliaMolSim/DFTK.jl/)  
But I’m sure there are plenty more

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [March 7, 2020, 5:20pm UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/13 "2020-03-07T17:20:10Z")

</div>

How would you classify the latter? It appears you are it’s co-author 🙂

---

<div class="post-metadata">

**Author:** ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)\
**Post date:** [March 7, 2020, 5:38pm UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/14 "2020-03-07T17:38:50Z")

</div>

Of course, that’s why I’m talking about applications :-p Essentially it’s an engine to solve nonlinear eigenvector equations discretized in a Fourier basis, applied to the Kohn-Sham equations of electronic structure theory (as well as a couple of others).

There’s also [https://qojulia.org/](https://qojulia.org/), and a couple more at [https://github.com/climate-machine](https://github.com/climate-machine)

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [March 7, 2020, 5:53pm UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/15 "2020-03-07T17:53:13Z")

</div>

Very cool! Thanks.

I think it is clear why the input of many people will be required to construct the list of relevant PDE packages. I only know my little neck of the woods well, so the more we hear from developers from other areas the better.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [March 7, 2020, 7:19pm UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/16 "2020-03-07T19:19:48Z")

</div>

The more I dig into what has been done in Julia already, the more impressed I am. There are so many great projects out there!

---

<div class="post-metadata">

**Author:** ![Albert\_Zevelev](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/albert_zevelev/32/11844_2.png) [@Albert\_Zevelev](https://discourse.julialang.org/u/Albert_Zevelev)\
**Post date:** [March 8, 2020, 1:09am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/17 "2020-03-08T01:09:54Z")

</div>

@rveltz

> **[GitHub - bifurcationkit/BifurcationKit.jl: A Julia package to perform...](https://github.com/bifurcationkit/BifurcationKit.jl)**
>
> A Julia package to perform Bifurcation Analysis. Contribute to bifurcationkit/BifurcationKit.jl development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![mfh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mfh/32/13787_2.png) [@mfh](https://discourse.julialang.org/u/mfh)\
**Post date:** [March 8, 2020, 9:56am UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/18 "2020-03-08T09:56:12Z")

</div>

For formally working with operators and to build matrix-free applies there is also:

> **[GitHub - kul-optec/AbstractOperators.jl: Abstract operators for large scale...](https://github.com/kul-optec/AbstractOperators.jl)**
>
> Abstract operators for large scale optimization in Julia - GitHub - kul-optec/AbstractOperators.jl: Abstract operators for large scale optimization in Julia

and

> **[GitHub - JuliaLinearAlgebra/LinearMaps.jl: A Julia package for defining and...](https://github.com/JuliaLinearAlgebra/LinearMaps.jl)**
>
> A Julia package for defining and working with linear maps, also known as linear transformations or linear operators acting on vectors. The only requirement for a LinearMap is that it can act on a v...

and for playing with low-rank factorisations there is

> **[GitHub - lanaperisa/TensorToolbox.jl: Julia package for tensors as...](https://github.com/lanaperisa/TensorToolbox.jl)**
>
> Julia package for tensors as multidimensional arrays, with functionalty within Tucker format, Kruskal (CP) format, Hierarchical Tucker format and Tensor Train format. - GitHub - lanaperisa/TensorTo...

---

<div class="post-metadata">

**Author:** ![dpo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpo/32/3335_2.png) [@dpo](https://discourse.julialang.org/u/dpo)\
**Post date:** [March 8, 2020, 2:28pm UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/19 "2020-03-08T14:28:59Z")

</div>

> **[GitHub - JuliaSmoothOptimizers/LinearOperators.jl: Linear Operators for Julia](https://github.com/JuliaSmoothOptimizers/LinearOperators.jl)**
>
> Linear Operators for Julia. Contribute to JuliaSmoothOptimizers/LinearOperators.jl development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [March 11, 2020, 9:52pm UTC](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672/20 "2020-03-11T21:52:49Z")

</div>

Thank you all who posted above. Please keep the suggestions coming. PRs at [https://github.com/JuliaPDE/SurveyofPDEPackages](https://github.com/JuliaPDE/SurveyofPDEPackages) are welcome!

[Next page](https://discourse.julialang.org/t/juliapde-survey-of-pde-packages/35672.md?page=2)
