Are there good remesh methods in 2D besides extractborder

I am using ALE method which need to move the mesh and even remesh when it is necessary.
I use fixed times remesh before. And now I try to use checkmovemesh to make the remesh more flexible. The latter shows that it can last longer time until the first remesh. However, it needs more frequent remesh afterwards.

So are there other robust remesh methods besides extractborder which I always use.

The attachment is a hyperelastic solid which I try to simulate the locomotion of a worm. And there is some problem with the mesh
Fatal error in Convect (R2) operator: loop => velocity too high ??? or NaN F. Hecht
current line = 77
Assertion fail : (0)
line :5364, in file lgfem.cpp
Assertion fail : (0)
line :5364, in file lgfem.cpp
err code 6 , mpirank 0

try3.edp (3.7 KB)

I think your scheme explose

I have print the convect speed, in the last iteration
it is complete wrong!

Simulation Time: 0.795
 speed convert = 0.0699228 max len convect 0.000349614
Simulation Time: 0.8
 speed convert = 0.0700191 max len convect 0.000350096
Simulation Time: 0.805
 speed convert = 0.0701542 max len convect 0.000350771
Simulation Time: 0.81
 speed convert = 0.0702279 max len convect 0.000351139
Simulation Time: 0.815
 speed convert = 0.0703513 max len convect 0.000351757
Simulation Time: 0.82
 speed convert = 0.0704213 max len convect 0.000352107
Simulation Time: 0.825
 speed convert = 0.0705268 max len convect 0.000352634
Simulation Time: 0.83
 speed convert = 0.095296 max len convect 0.00047648
Simulation Time: 0.835
 speed convert = 0.136587 max len convect 0.000682935
Simulation Time: 0.84
 speed convert = 0.203443 max len convect 0.00101721
Simulation Time: 0.845
 speed convert = 0.314617 max len convect 0.00157308
Simulation Time: 0.85
 speed convert = 0.501222 max len convect 0.00250611
 Remsh times 1
Simulation Time: 0.855
 speed convert = 0.506105 max len convect 0.00253052
 Remsh times 2
Simulation Time: 0.86
 speed convert = 963106 max len convect 4815.53
Fatal  error  in Convect (R2) operator: loop  => velocity too high ???? or NaN F. Hecht  
  current line = 79
Assertion fail : (0)
        line :5364, in file lgfem.cpp
Assertion fail : (0)
        line :5364, in file lgfem.cpp
 err code 6 ,  mpirank 0

An error occurs also in the following remesh test code (simplified code extracted from yours):

load "Curvature"

int[int] labs1=[1];
int[int] labs2=[2];
real[int,int] Points1(3,1);
real[int,int] Points2(3,1);

mesh Mesh=readmesh("mymesh.msh");

		extractborder(Mesh,labs1,Points1);
		extractborder(Mesh,labs2,Points2);
		border L1(t=0,Points1.m-1) { P.x=Points1(0,t); P.y=Points1(1,t); label=1; }
		border L2(t=0,Points2.m-1) { P.x=Points2(0,t); P.y=Points2(1,t); label=2; }
		Mesh = buildmesh(L1((Points1.m-1))+L2((Points2.m-1)),fixedborder=true);

the file “mymesh.msh” is

5 4 6
0 0 2
5 0 2
5 0.5 1
5 -0.5 1
10 0 2
1 2 3 0
5 3 2 0
2 4 5 1
1 4 2 1
1 2 2
2 5 2
4 5 1
5 3 1
3 1 1
1 4 1

Its shape is the most simple corresponding to your code:

I get the error

 --  mesh:  Nb of Triangles =      4, Nb of Vertices 5
 bamg2msh: Error: missing 1 vertices ???? 
 I  May be: Some giving point are outside the domain ???? 
  current line = 12
Exec error : Buildmesh : bamg2msh missing vertices
   -- number :1
 catch Err bamg

However if you use 3 borders instead of 2 it seems to work (after correction of the loop content in case of remesh):
try3.edp (3.8 KB)

Hi, Frédéric

Sorry to be late to reply.

When I reduce the amplitude of its locomotion from L/25 to L/50, It works well.
9c160bf5b67eb1105883976ff97b55d

So I think the problem is because of the mesh distortion causing by large deformation.

So I question is there better method to do remesh?
try3.edp (3.7 KB)

Sorry, I am not familiar with the .msh file. Can you give more details like this
as verticees, tiangles and edges listed.
th1.mesh (16.7 KB)

It is difficult to “see” what happens for a large mesh file like this.
What I meant in my message by showing this example is that I think there is a bug in a FF++ routine, that shows up in this example. But maybe you did not observe such a case.
********************************f
Nevertheless the main point is that your loop of remesh had a problem:
when you remesh, you update the velocity but do not update the displacement. I think this produces an incoherence that generates an instability.
I corrected it in the file attached in my previous message: there is no more instability.
My opinion is that the remeshing method is good.