Undesired elements inside the region during meshing

Dear all,
I’m having trouble with meshing. I’m trying to mesh a region that has a hole inside, but instead, I’m getting elements in yellow within that region. I want no elements in that area. How can I fix this?

int nbseg = 80, n = 10;
mesh Th;
real r1=1, r2=r1/4., r3=r1/8, r4=r1/12,anchoaleta=(r3/10); // Tubes dimensions
border circleO(t=-pi/2,pi/2){label=1;x=r1cos(t); y=r1sin(t);}
border gamma3(t=(r1/2)-sqrt(r3^2-anchoaleta^2)-r3,-r1/2+sqrt(r3^2-anchoaleta^2)+r3){label=2;x=0;y=t;} // pared simetria al medio
border gamma4(t=-(r1/2)-sqrt(r3^2-anchoaleta^2)-r3,-r1){label=2;x=0;y=t;} // pared superior
border gamma5(t=r1,r1/2+sqrt(r3^2-anchoaleta^2)+r3){label=2;x=0;y=t;} // pared inferior

///////// aletas tubo derecho completo /////////

//aleta derecha
border gammaTCD1(t=((r1/2)+sqrt(r3^2-anchoaleta^2)),((r1/2)+sqrt(r3^2-anchoaleta^2))+r3){label=4;x=t;y=anchoaleta;}
border gammaTCD2(t=anchoaleta,-anchoaleta){label=4;x=(r1/2)+sqrt(r3^2-anchoaleta^2)+r3;y=t;}
border gammaTCD3(t=((r1/2)+sqrt(r3^2-anchoaleta^2))+r3,(r1/2)+sqrt(r3^2-anchoaleta^2)){label=4;x=t;y=-anchoaleta;}
//aleta izquierda
border gammaTCI1(t=((r1/2)-sqrt(r3^2-anchoaleta^2))-r3,(r1/2)-sqrt(r3^2-anchoaleta^2)){label=4;x=t;y=anchoaleta;}
border gammaTCI2(t=-anchoaleta,anchoaleta){label=4;x=(r1/2)-sqrt(r3^2-anchoaleta^2)-r3;y=t;}
border gammaTCI3(t=(r1/2)-sqrt(r3^2-anchoaleta^2),(r1/2)-sqrt(r3^2-anchoaleta^2)-r3){label=4;x=t;y=-anchoaleta;}
//aleta superior
border gammaTCS1(t=(sqrt(r3^2-anchoaleta^2)),(sqrt(r3^2-anchoaleta^2))+r3){label=4;x=(r1/2)+anchoaleta;y=t;}
border gammaTCS2(t=(r1/2)-anchoaleta,(r1/2)+anchoaleta){label=4;x=t;y=sqrt(r3^2-anchoaleta^2)+r3;}
border gammaTCS3(t=sqrt(r3^2-anchoaleta^2),sqrt(r3^2-anchoaleta^2)+r3){label=4;x=(r1/2)-anchoaleta;y=t;}
//aleta inferior
border gammaTCB1(t=-(sqrt(r3^2-anchoaleta^2)),-((sqrt(r3^2-anchoaleta^2))+r3)){label=4;x=(r1/2)+anchoaleta;y=t;}
border gammaTCB2(t=anchoaleta,-anchoaleta){label=4;x=(r1/2)+t;y=-sqrt(r3^2-anchoaleta^2)-r3;}
border gammaTCB3(t=-(sqrt(r3^2-anchoaleta^2))±r3,-(sqrt(r3^2-anchoaleta^2))){label=4;x=(r1/2)-anchoaleta;y=t;}

////// aleta superior semi ///////

//aleta derecha
border gammaTSD1(t=(sqrt(r3^2-anchoaleta^2)),(sqrt(r3^2-anchoaleta^2))+r3){label=2;x=t;y=(r1/2)+anchoaleta;}
border gammaTSD2(t=anchoaleta,-anchoaleta){label=2;x=(sqrt(r3^2-anchoaleta^2)+r3);y=(r1/2)+t;}
border gammaTSD3(t=(sqrt(r3^2-anchoaleta^2))+r3,(sqrt(r3^2-anchoaleta^2))){label=2;x=t;y=(r1/2)-anchoaleta;}
//aleta superior
border gammaTSS1(t=((sqrt(r3^2-anchoaleta^2))+r3),(sqrt(r3^2-anchoaleta^2))){label=2;x=anchoaleta;y=(r1/2)+t;}
border gammaTSS2(t=0,anchoaleta){label=2;x=t;y=r1/2+sqrt(r3^2-anchoaleta^2)+r3;}
//aleta inferior
border gammaTSI1(t=-(sqrt(r3^2-anchoaleta^2)),-((sqrt(r3^2-anchoaleta^2))+r3)){label=2;x=anchoaleta;y=(r1/2)+t;}
border gammaTSI2(t=anchoaleta,0){label=2;x=t;y=+(r1/2)-sqrt(r3^2-anchoaleta^2)-r3;}

///// aleta inferior semi ///////

// aleta derecha
border gammaTID1(t=(sqrt(r3^2-anchoaleta^2)),((sqrt(r3^2-anchoaleta^2))+r3)){label=2;x=t;y=-(r1/2)+anchoaleta;}
border gammaTID2(t=anchoaleta,-anchoaleta){label=2;x=(sqrt(r3^2-anchoaleta^2)+r3);y=-(r1/2)+t;}
border gammaTID3(t=(sqrt(r3^2-anchoaleta^2))+r3,(sqrt(r3^2-anchoaleta^2))){label=2;x=t;y=-(r1/2)-anchoaleta;}
// aleta superior
border gammaTIS1(t=((sqrt(r3^2-anchoaleta^2))+r3),(sqrt(r3^2-anchoaleta^2))){label=2;x=anchoaleta;y=-(r1/2)+t;}
border gammaTIS2(t=0,anchoaleta){label=2;x=t;y=-r1/2+sqrt(r3^2-anchoaleta^2)+r3;}
//aleta inferior
border gammaTII1(t=-(sqrt(r3^2-anchoaleta^2)),-((sqrt(r3^2-anchoaleta^2))+r3)){label=2;x=anchoaleta;y=-(r1/2)+t;}
border gammaTII2(t=anchoaleta,0){label=2;x=t;y=-(r1/2)-sqrt(r3^2-anchoaleta^2)-r3;}

// bordes circulo completo
border segcircint1(t=acos(anchoaleta/r3),asin(anchoaleta/r3)){label=4;x=r1/2.+r3cos(t); y=r3sin(t);} // primer cuadrante
border segcircint2(t=pi-asin(anchoaleta/r3),pi-acos(anchoaleta/r3)){label=4;x=r1/2.+r3cos(t); y=r3sin(t);} // segundo cuadrante
border segcircint3(t=pi+acos(anchoaleta/r3),pi-asin(-anchoaleta/r3)){label=4;x=r1/2.+r3cos(t); y=r3sin(t);} // // tercer cuadrante
border segcircint4(t=2pi+asin(-anchoaleta/r3),2pi-acos(anchoaleta/r3)){label=4;x=r1/2.+r3cos(t); y=r3sin(t);} // cuarto cuadrante

//bordes ciruclo superior
border segcircsup1(t=acos(anchoaleta/r3),asin(anchoaleta/r3)){label=3;x=+r3cos(t); y=(r1/2)+r3sin(t);}
border segcircsup2(t=2pi+asin(-anchoaleta/r3),2pi-acos(anchoaleta/r3)){label=3;x=r3cos(t); y=(r1/2)+r3sin(t);}

//bordes ciculo inferior
border segcircinf1(t=acos(anchoaleta/r3),asin(anchoaleta/r3)){label=3;x=+r3cos(t); y=-(r1/2)+r3sin(t);}
border segcircinf2(t=2pi+asin(-anchoaleta/r3),2pi-acos(anchoaleta/r3)){label=3;x=r3cos(t); y=-(r1/2)+r3sin(t);}

// Construcción de la malla principal con exclusión de la región rosada
Th = buildmesh(
circleO(n8) // Contorno exterior
+ gamma3(n
3) + gamma4(n) + gamma5(n) // Bordes adicionales
+ segcircsup1(n) + segcircsup2(n) // Segmentos superiores
+ segcircinf1(n) + segcircinf2(n) // Segmentos inferiores
+ gammaTSD1(n) + gammaTSD2(n/3) + gammaTSD3(n) // Aletas semiderecha
+ gammaTID1(n) + gammaTID2(n/3) + gammaTID3(n) // Aletas semizquierda
+ gammaTSS1(n) + gammaTSS2(n) // Aletas superiores semicirculares
+ gammaTIS1(n) + gammaTIS2(n) // Aletas inferiores semicirculares
+ gammaTSI1(n) + gammaTSI2(n) // Aletas inferiores laterales
+ gammaTII1(n) + gammaTII2(n) // Aletas inferiores internas
+ segcircint1(n) + segcircint2(n) + segcircint3(n) + segcircint4(n)
+ gammaTCD1(n) + gammaTCD2(n/3) + gammaTCD3(n)
+ gammaTCI1(n) + gammaTCI2(n/3) + gammaTCI3(n)
+ gammaTCS1(n) + gammaTCS2(n/3) + gammaTCS3(n)
+ gammaTCB1(n) + gammaTCB2(n/3) + gammaTCB3(n)
);

plot(Th, wait=1);

May be you should use a negative number of 1D meshes on the part of the boundary of the hole region. As in the example “Heat echanger” in the FF++ manual (see p. 51:53).

I tried this, but I’m still getting the same result.

First you should make sure that all borders are properly oriented. For this take all you have inside buildmeshand plot it say

plot(
circleO(n*8) // Contorno exterior

Inspect allboundary orientation and make sure that they are all the same for the hole. This might be the reason that chanig inside these does not solves the problem.

Anyway the following might be a bit artificial, but this should solve your problem
1 - Get you region number for example

fespace Ph(th, P0); //constant discontinuous functions / element
Ph reg=region; //defined the P0 function associated to region number
plot(reg, fill=true, wait=true, value=true);

2 - trunc out this region… maybe something like this

Th=trunc(Th, reg!=undesiredregion);

Soyez en bonne santé,

Me too I tried that, but I didn’t get the expected results.
The mesh is not working as it should. Strange.
We need to check all the border definitions. I don’t have time to do that.
May be asking to FH his advice.

Que la paix soit avec vous,

R. Michel

Your border gammaTCS1 is wrongly oriented. It has to be
border gammaTCS1(t=(sqrt(r3^2-anchoaleta^2))+r3,(sqrt(r3^2-anchoaleta^2))){label=4;x=(r1/2)+anchoaleta;y=t;}

It works, thank you very much :grinning_face:

Bonjour,

Merci.

Mais je ne suis pas vraiment le destinataire de courriel.
Le bon destinataire est un certain Luciano de la “liste FF++”.

C’est l’auteur du maillage en question. Je n’ai fait que répondre à sa question.

Il m’a contacté hier ou avant hier pour me dire que le changement de signe

du nombre de mailles 1D des parties du bord relatives aux trous de son maillage

ne fonctionnait pas. J’ai répondu à son courriel (mais via la liste, donc l’a-t-il reçu ?)
pour lui dire que moi aussi j’avais constaté que cela ne fonctionnait pas et lui
avais suggéré de contrôler ses objets de classe border. De mon coté, je n’avais pas

le temps de le faire. Vous avez eu le temps de le faire. Soyez-en remercier.

Luciano est-il au courant de votre solution ?

Je vous souhaite une bonne journée,

R. Michel

PS. Pouvez svp m’indiquer si vous avez reçu le présent courriel car je l’envoie

en réponse à un couriel visiblement généré par un intermédiaire à savoir

“FreeFEM” incoming+d964bb577c0aaf351309223096f6f726@freefem.discoursemail.com;