For now the required entities aren’t taken into account in isosurface discretization mode.
In level-set discretization, if a required boundary is intersected by the level-set, we have 2 choices:
- Ignore the level-set definition and respect the required entity: it is hard to implement because we don’t have any info on how to modify the level-set, we can’t just “cut it” before the required boundary. Moreover, it may lead to tricky topology issues;
- Ignore the “required” attribute and respect the input level-set. It is safe and easy to do… but not yet implemented. In this case, normally, if a periodic required boundary is splitted by the level-set, the matching periodic edge is also splitted (along the opposite boundary) and, in 2D, the new boundary edges of both sides must match (at epsilon accuracy). Can you handle your periodic mesh as it?
I am really overbusy (due to the confinement I can’t work at full time) so I can’t impement it before few month. But a way to simulate the same behaviour may be to run Mmg twice:
you discretize your isovalue but forbid the overall boundary remeshing with
mmg2d_O3 your-mesh.mesh -ls -nosurf
It is normal if the mesh quality is very poor.
you set the “true” required edges: as the interface between the new domains created by the level-set splitting has the reference 10, you can set all edges that have a ref not equal to 10 as required. Then you can try to improve your mesh:
If you test this and if it works, I think that it worth to temporarly hack the
libmmg3d.c file so you can do that in one command only (I can send you the patch).
I hope that it will helps,