# \[ANN\] OperatorLearning.jl: Functional mappings to solve parametric PDEs

**URL:** <https://discourse.julialang.org/t/ann-operatorlearning-jl-functional-mappings-to-solve-parametric-pdes/76078>\
**Category:** Package Announcements\
**Tags:** package, flux, sciml\
**Created:** [February 9, 2022, 1:31pm UTC](https://discourse.julialang.org/t/ann-operatorlearning-jl-functional-mappings-to-solve-parametric-pdes/76078 "2022-02-09T13:31:37Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![pzimbrod](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pzimbrod/32/33528_2.png) [@pzimbrod](https://discourse.julialang.org/u/pzimbrod)\
**Post date:** [February 9, 2022, 1:31pm UTC](https://discourse.julialang.org/t/ann-operatorlearning-jl-functional-mappings-to-solve-parametric-pdes/76078/1 "2022-02-09T13:31:38Z")

</div>

Dear Community,

I’d like to share a package with you (my first one actually) that I created recently in order to learn (nonlinear) operators to solve PDEs: [OperatorLearning.jl](https://github.com/pzimbrod/OperatorLearning.jl)

This is basically a port from Zongyi Li’s [Fourier Neural Operator](https://github.com/zongyi-li/fourier_neural_operator) and Lu Lu’s DeepONet that is currently implemented in [DeepXDE](https://github.com/lululxvi/deepxde).

I simply wanted to use these architectures in Julia, with some added flexibility and the nice syntax we all love 😊

Last time I checked, this implementation of the FNO even does training a little faster than the original version on the Burgers equation example that Li and colleagues provide, thanks to the awesome work of the Flux.jl team 🎉

It’s far from complete and there are still some features that I would like to incorporate, most importantly the use of physics-informed losses to alleviate the amount of data needed for training - following the respective recent works [1](https://www.science.org/doi/10.1126/sciadv.abi8605) [2](http://arxiv.org/abs/2111.03794).

I’m looking forward to your impressions! Of course, if you see something wrong in the code or with the package, feel free to let me know.

---

<div class="post-metadata">

**Author:** ![bad\_at\_math](https://avatars.discourse-cdn.com/v4/letter/b/51bf81/32.png) [@bad\_at\_math](https://discourse.julialang.org/u/bad_at_math)\
**Post date:** [February 9, 2022, 3:01pm UTC](https://discourse.julialang.org/t/ann-operatorlearning-jl-functional-mappings-to-solve-parametric-pdes/76078/2 "2022-02-09T15:01:29Z")

</div>

Looks like there is an existing implementation of some of these operator-learning methods ([https://github.com/foldfelis/NeuralOperators.jl](https://github.com/foldfelis/NeuralOperators.jl)). Did your implementations end up being similar?

---

<div class="post-metadata">

**Author:** ![pzimbrod](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pzimbrod/32/33528_2.png) [@pzimbrod](https://discourse.julialang.org/u/pzimbrod)\
**Post date:** [February 9, 2022, 3:54pm UTC](https://discourse.julialang.org/t/ann-operatorlearning-jl-functional-mappings-to-solve-parametric-pdes/76078/3 "2022-02-09T15:54:14Z")

</div>

Hi, thanks for bringing it up. I sort of realized that afterwards as well. Both packages include the Fourier Neural Operator (the rest going in different directions though), but as far as I can tell the implementations are rather different when comparing the relevant sources of [OperatorLearning](https://github.com/pzimbrod/OperatorLearning.jl/blob/master/src/FourierLayer.jl) vs. [NeuralOperators](https://github.com/foldfelis/NeuralOperators.jl/blob/master/src/fourier.jl) side by side.

I’m not really sure about which one would perform better on a given problem, but I guess having choices doesn’t hurt 😄
