Question on remeshing (OptimizeMesh2d)

Hello,

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 particle_remesh.py file ( at https://ngsolve.org/user-meeting2019/) 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:
[attachment=undefined]mesh.png[/attachment]

Attached is the code that generate this invalid mesh.

Thanks in advance! Best,
Guosheng

Opps… The code and the mesh.

The code…
https://ngsolve.org/media/kunena/attachments/758/optimize_mesh.py

Attachment: optimize_mesh_2020-01-08-2.py

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.

Joachim

Hi Joachim,

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

tmpngmesh.SecondOrder()
...
tmpngmesh.OptimizeMesh2d()

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

Best,
Guosheng

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

Best,
Matthias