Maybe this is helpful for anyone:
int nn=6;
border C01(t=0, 1){x=t; y=0; label=4;}
border C02(t=0, 1){x=1; y=t; label=1;}
border C03(t=0, 1){x=1-t; y=1; label=1;}
border C04(t=0, 1){x=0; y=1-t; label=1;}
border C05(t=0, 1){x=1-t; y=0.5; label=1;}
border C06(t=0, 0.5){x=0.5; y=0.5+t; label=1;}
mesh Th=buildmesh(C01(nn)+C02(nn)+C03(nn)+C04(nn)+C05(nn)+C06(nn));
int[int,int] interfaceLabels = [[0,1,1],[0,3,2],[1,3,3]];
func int Mylab(int k, int nTri, int lab){
if (nTri == 2)
{ // assign the label to the interface edges
int Edge = Th.be(k).whoinElement;
int kk = int(Th.be(k).Element);
int Adjacent = Th[kk].adj(Edge);
// cout << Th[kk].region << " " << Th[Adjacent].region << endl;
for (int j=0;j<interfaceLabels.n;j++)
{
if ( (Th[kk].region == interfaceLabels(j,0) && Th[Adjacent].region == interfaceLabels(j,1) ) ||
(Th[kk].region == interfaceLabels(j,1) && Th[Adjacent].region == interfaceLabels(j,0) ) )
{
return interfaceLabels(j,2);
break;
}
}
return 0;
}
else // leave the boundary labels unchanged
return lab;
}
int jj=0;
Th = change(Th, flabel=Mylab(jj++,nTonEdge,label));