Force vertices coincidence at the interface of two meshes

Hi,

I would like to force two glued meshes to have coincident vertices on their shared border, so that it is possible to save the mesh in a file.

For example, the example below:

int n=8;
mesh Th1=square(n,n);
border B(t=1,2) { x=t; y=0; }
border R(t=0,1) { x=2; y=t; }
border U(t=-2,-1) { x=-t; y=1; }
border L(t=-1,0) { x=1; y=-t; }
mesh Th2=buildmesh(L(n)+B(n * 1.5)+R(n * 1.5)+U(n * 1.5));
mesh Th=Th1+Th2;
plot(Th);
savemesh(Th,“th.mesh”);

fails on the savemesh command, because, I suppose, the vertices at the interface between the two meshes do not coincide. Is there a way to do this?

Many thanks

There is. You can extract the nodes of the boundary of the mesh using extractborder(...) function from load "Curvature" module (it gives you an option which boundary to extract through boundary labels). And then, when using buildmesh(...) you can enforce the desired distribution of nodes, a priori prescribed, by passing the option fixedborder=true.

load "Curvature"

int n=8;
mesh Th1=square(n,n); //plot(Th1,wait=1);

int[int] labs=[2];
real[int,int] nodesTh1(3,1);
extractborder(Th1,labs,nodesTh1);

border B(t=1,2) { x=t; y=0; }
border R(t=0,1) { x=2; y=t; }
border U(t=-2,-1) { x=-t; y=1; }
border L(t=0,nodesTh1.m-1) { P.x=nodesTh1(0,t); P.y=nodesTh1(1,t); label=2; }
mesh Th2=buildmesh( L(-(nodesTh1.m-1)) + B(n*1.5) + R(n*1.5) + U(n*1.5),fixedborder=true);
mesh Th=Th1+Th2; //plot(Th,wait=1);

savemesh(Th,"th.mesh");

Above, in extractborder(Th1,labs,nodesTh1);, node coordinates of boundary labeled 2 of mesh Th1 are extracted into nodesTh1(0,:) and nodesTh1(1,:), x and y coordinates, respectively. Also, orientation is preserved from Th1 - bcs of that, when construction Th2 you have to be careful with orientation (note, L(-(nodesTh1.m-1)) → negative sign changes orientation).

if

OK, perfect, thank you very much.

C