Question on remeshing (OptimizeMesh2d)


I am working on ALE solver for two-phase flow. So I need to remesh when the mesh quality became low.
I found in Michael’s file ( at a procedure to remesh an affine mesh, which involves two steps:
(1) copy mesh and move points
(2) copy mesh and optimize it using OptimizeMesh2d

I have two questions regarding these steps:
(1) How to manually copy a higher order curved mesh with deformation to a high-order temporary mesh?
(2) What does OptimizeMesh2d do internally? Can it generate curved mesh? I also found it sometimes generates invalid mesh (with an extra node), see this one:

Attached is the code that generate this invalid mesh.

Thanks in advance! Best,

Opps… The code and the mesh.

The code…


Hi Guosheng,

the illegal meshes are fixed in the coming nightly, thanks for the report.

Arbitrary order curved meshes are treated differently than second-order curved meshes (obtained by mesh.SecondOrder), which use edge mid-points. For second-order your Python mesh manipulation could work.


Hi Joachim,

Thanks for the quick fix.
Now I get a seg. fault when I want to optimize a second order mesh:


So, what is the underlining algorithm for OptimizeMesh2d? Can you give me a quick explanation or a reference to look into?


Hi Guosheng,

There was a bug in 2d mesh optimization, which was only triggered on second-order curved meshes. It’s fixed on the master branch since commit