# Solving PDE on the sphere

**URL:** https://discourse.julialang.org/t/solving-pde-on-the-sphere/134513
**Category:** General Usage
**Tags:** question
**Created:** [December 12, 2025, 9:10am UTC](https://discourse.julialang.org/t/solving-pde-on-the-sphere/134513 "2025-12-12T09:10:33Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)
#### Post date: [December 12, 2025, 9:10am UTC](https://discourse.julialang.org/t/solving-pde-on-the-sphere/134513/1 "2025-12-12T09:10:34Z")

</div>

Hi,

I would like to study some PDEs on the sphere and compute the spectrum of infinitesimal generator of Markov processes. It seems that [HarmonicOrthogonalPolynomials](https://github.com/JuliaApproximation/HarmonicOrthogonalPolynomials.jl/tree/master) is a very good start because it provides that Laplace Beltrami operator 😃 and because it would be quite precise.

In effect, I want to study the spectrum of  
 \Delta\_{\mathbb S^2} + \nabla\_{\mathbb S^2} U\cdot \nabla\_{\mathbb S^2}

However, I do not find a nabla \nabla\_{\mathbb S^2} operator. Is this hidden somewhere or in another package?

---

<div class="post-metadata">

### Author: ![termi-official](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/termi-official/32/47815_2.png) [@termi-official](https://discourse.julialang.org/u/termi-official)
#### Post date: [December 12, 2025, 9:50am UTC](https://discourse.julialang.org/t/solving-pde-on-the-sphere/134513/2 "2025-12-12T09:50:14Z")

</div>

I am not aware of something finished which you can just call and get the analysis done in Julia. However, you can use finite elements to analyze the spectrum of operators of spheres. You could start by stripping down the reactive surface example here [Reactive surface · Ferrite.jl](https://ferrite-fem.github.io/Ferrite.jl/stable/tutorials/reactive_surface/) to assemble a discrete version of your operator. You can then analyze the spectrum of the discretized operator (i.e. the sparse matrix), e.g. using ARPACK [Home · Arpack.jl](https://arpack.julialinearalgebra.org/stable/) . It might not the optimal way to do the analysis, but you can probably get to some results in a short amount of time.

---

<div class="post-metadata">

### Author: ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)
#### Post date: [December 12, 2025, 11:30am UTC](https://discourse.julialang.org/t/solving-pde-on-the-sphere/134513/3 "2025-12-12T11:30:01Z")

</div>

Thank you for the reference. How do I know that the diffusion is the Laplace Beltrami operator in your example?

---

<div class="post-metadata">

### Author: ![bmxam](https://avatars.discourse-cdn.com/v4/letter/b/b38774/32.png) [@bmxam](https://discourse.julialang.org/u/bmxam)
#### Post date: [December 13, 2025, 7:51am UTC](https://discourse.julialang.org/t/solving-pde-on-the-sphere/134513/4 "2025-12-13T07:51:15Z")

</div>

Hi Romain, if you’re working in R^2 or R^3, then [GitHub - bcube-project/Bcube.jl](https://github.com/bcube-project/Bcube.jl) might also suit your needs. You can checkout [this example](https://bcube-project.github.io/BcubeTutorials.jl/stable/example/heat_equation_sphere/) of a heat equation on a sphere with FEM (or [this example](https://bcube-project.github.io/BcubeTutorials.jl/stable/example/transport_hypersurface/) for transport equations with DG).

---

<div class="post-metadata">

### Author: ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)
#### Post date: [December 13, 2025, 12:00pm UTC](https://discourse.julialang.org/t/solving-pde-on-the-sphere/134513/5 "2025-12-13T12:00:31Z")

</div>

Just adding to the thread that Meshes.jl provides `laplacematrix` for all kinds of meshes. If you are mostly interested in extracting these matrices for further analysis with matrix algorithms, that should be straightforward:

> **[Matrices - Meshes · Meshes.jl](https://juliageometry.github.io/MeshesDocs/stable/domains/meshes/#Matrices)**
>
> Meshes can be constructed directly (e.g. CartesianGrid) or based on other constructs such as connectivity lists and topological structures (e.g. SimpleMesh). | Documentation for Meshes.jl.

---

<div class="post-metadata">

### Author: ![photor](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/photor/32/14343_2.png) [@photor](https://discourse.julialang.org/u/photor)
#### Post date: [December 13, 2025, 3:25pm UTC](https://discourse.julialang.org/t/solving-pde-on-the-sphere/134513/6 "2025-12-13T15:25:19Z")

</div>

You can use Chebyshev spectral expansion in \theta and Fourier spectral expansion in \varphi to discretize PDEs on the sphere.
