Does Dolfinx's solver have an issue or require some preconditioning when handling certain meshes like the Icosahedral mesh?

I’m sorry, I had the plots switched. This plot uses the icosahedral mesh, sphere_ico4

and here is the one obtained using the gmsh mesh for comparison

Additionally, I found out that my first icosahedral plot over 1000 seconds used sphere_ico5, which is a higher resolution version of sphere_ico4 (and sphere_ico6 is a higher resolution version of sphere_ico5, they all seem to use the same base sphere and increase resolution as the number in the name increases). If I compare the results for the 2 different resolutions of the same icosahedral style mesh, the results are visibly indistinguishable, so resolution is not the culprit in causing the icosphere mesh’s results not converging to those in the paper.

I looked it up, and yes, it is the case that legacy Dolfin .xml meshes only supported up to first order, or linear meshes. Setting the div conforming functionspace created from this first degree icosahedral mesh to 2nd degree, or quadratic (and the corresponding scalar space to degree-1), by running

S = df.fem.functionspace(mesh, ("RT", 2))
V = df.fem.functionspace(mesh, ("DG", 1))
W = ufl.MixedFunctionSpace(*(S, V))

changed the results to

This plot shows that the energies are now closer to those shown in the paper, but are not exact. Here is the 1000 second plot, in case you were curious

If what you instead meant was modifying the mesh itself to make it second order, I haven’t figured out how to do that. I did find this post which talked about it, but it’s possibly outdated due to being about 6 years old and over 200 messages long. Here’s what I tried:

import meshio
import gmsh

meshfile = "supplement/examples/mixed-poisson/hdiv-l2/meshes/sphere_ico4.xml"
mesh = meshio.read(meshfile)
meshio.write("sphere_ico4.xdmf", mesh)
gmsh.initialize()
gmsh.open("sphere_ico4.xdmf")
gmsh.model.mesh.setOrder(2)

but I wasn’t able to open the converted .xdmf file due to an error

Error   : 'sphere_ico4.xdmf', line 0: syntax error (<)

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
/tmp/ipykernel_1832/3453081995.py in ?()
----> 1 gmsh.open("sphere_ico4.xdmf")
      2 gmsh.model.mesh.setOrder(2)

/usr/local/lib/gmsh.py in ?(fileName)
    342     lib.gmshOpen(
    343         c_char_p(fileName.encode()),
    344         byref(ierr))
    345     if ierr.value != 0:
--> 346         raise Exception(logger.getLastError())

Exception: 'sphere_ico4.xdmf', line 0: syntax error (<)

So, if that’s what you meant for me to do, I haven’t figured out how to do that yet.