Infinite Prandtl limit of Rayleigh-Benard Convection

15 views
Skip to first unread message

Kyle Stephens

unread,
Apr 24, 2026, 12:09:34 PM (2 days ago) Apr 24
to Dedalus Users
Hello Dedalus users, 

I am trying to take the infinite Pr limit of Rayleigh-Benard Convection, but each time I do so I get a singularity error which I am unable to understand why. I seem to have the correct amount of tau terms, but maybe there's one that appears due to the limiting process?

Below is my code for the simulations, note that I am using a diffusion time-scale instead of the documented examples, which use free-fall time-scale.

Removing the dt(u) and convective term on line 60 results replicates the singularity error. If anyone is able to resolve the error, could you explain how you did so? It would be a big help.

Best,
Kyle
InfPrandtl.py

Benjamin Hyatt

unread,
Apr 25, 2026, 12:51:37 PM (yesterday) Apr 25
to Dedalus Users
Hi Kyle, 

If I understand correctly, you want to remove dt(u)/Pr and -u dot grad(u)/Pr from your momentum equation? That's the right thing to do to work in the infinite Pr limit, but you will need to make some additional changes–I think that once you remove those terms, you will now be trying to solve for more dependent variables than necessary, and a 'Factor is exactly singular error' will occur.  

I think what I would recommend is trying to eliminate the pressure variable from the problem and replacing u by a scalar streamfunction. I believe that if you take the curl of your new momentum equation you would end up with a biharmonic equation for the streamfunction involving T. You will have the same number of boundary conditions as before (rewriting the four for u in terms of the streamfunction), but there is no need for p nor its gauge constraint. I think you should end up solving for: a streamfunction, T, and six scalar tau fields. 

There are probably other valid ways of going about this, but the key insight is that your Dedalus error is due to attempting to solve for the same number of dependent variables after dropping the inertial terms. I hope this advice helps!

Best,
Ben

Stephane Labrosse

unread,
9:53 AM (3 hours ago) 9:53 AM
to dedalu...@googlegroups.com
Hi Kyle,
Here is an example that should get you going. This is for infinite Pr. I think your problem was in the boundary conditions. If you apply free-slip in both horizontal boundaries, the problem is degenerate with respect with any horizontal uniform translation. To avoid that, you need to specify that the mean velocity on one boundary is null. This is done here as 

problem.add_equation("(ez@strain_rate@ex)(z=0) = 0", condition="nx != 0") # free-slip
problem.add_equation("(u@ex)(z=0) = 0", condition="nx == 0") # to avoid global translation

All the best,
Stéphane


par.toml
rayleigh_benard_infPr.py
Reply all
Reply to author
Forward
0 new messages