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.



