[Gmsh] Problem with the Boolean Operation

Juan E. Sanchez juan.e.sanchez at gmail.com
Tue Jul 17 16:37:35 CEST 2018


Hi Benoit,

I am not a gmsh developer.

A recommendation I received in the past with the background mesh was to 
use this option in the geo file:

Mesh.CharacteristicLengthExtendFromBoundary=0;

The background mesh uses the pos format.  An example which is here:

https://github.com/devsim/devsim_bjt_example/blob/master/simdir/bjt_bgmesh.pos

To make the scripting a lot easier, I recommend this project

https://github.com/nschloe/pygmsh

to generate your .geo file from python scripts.

Regards,

Juan

On 7/17/18 8:41 AM, Benoit CURVERS wrote:
> Hello Juan,
> 
> Thank you very much for your answer.
> I already tried the solution you gave me. I tried to add a specific box in order to refine the mesh in specific part but unfortunately, I did not obtain the result I wanted
> As a result, this solution is not suitable for my problem (in 2D and 3D case)
> 
> So, I just would like to know : how does GMSH keep the mesh size on the points after a Boolean operation ? Does GMSH chose the size randomly ? Does GMSH chose the size thank to the points' index ?
> 
> Thank you very much for your answer,
> Kind regards,
> 
> Benoît CURVERS
> Laser Systems & Solutions of Europe (LASSE)
> SCREEN Semiconductor Solutions Co. Ltd
> Taïwan Cell : +886 (0)965-875-974 or 7629511
> Email : benoit.curvers at screen-lasse.com
> 
> 
> 
> -----Message d'origine-----
> De : gmsh <gmsh-bounces at ace20.montefiore.ulg.ac.be> De la part de Juan E. Sanchez
> Envoyé : vendredi 13 juillet 2018 17:51
> À : gmsh at onelab.info
> Objet : Re: [Gmsh] Problem with the Boolean Operation
> 
> Hi Benoit,
> 
> I recommend a background field.  Here is a project where I did some refinement (based on electric field) for a semiconductor simulation.
> 
> https://github.com/devsim/devsim_bjt_example
> 
> All the simulation files are there, as well as a book chapter in pdf form.
> 
> At that time of the work, the boolean operations were not available in gmsh.
> 
> Regards,
> 
> Juan
> 
> 
> On 7/12/18 9:56 AM, Benoit CURVERS wrote:
>> Dear,
>>
>> I am writing in connection with the Boolean operation with GMSH. I
>> have some trouble with the meshing size on points after a Boolean operation.
>>
>> For example, on the picture below, I have four main surface. In the
>> geo file, I create my surface according to the mesh size.
>>
>> So, first, I create the surface 6 and 8 with the mesh size of 1 and
>> after the layer 3 and 5 with the mesh size of 10.
>>
>> But when I perform the Boolean operation (Boolean fragment), in one
>> case, the minimal size is keeping and in the other case, the maximal
>> size is keeping (as you can see with the red circle).
>>
>> So, I would like to know, How does GMSH keep the size after a Boolean
>> operation ? Is there a specific condition or GMSH chose the size randomly ?
>>
>> Because it seems that the size is not chosen according to the index,
>> or to the creation's order or to the mesh size
>>
>> I also see this problem in 3D.
>>
>> You can find the geo file below.
>>
>> Thank you for your answer,
>>
>> Kind regards,
>>
>> Benoît CURVERS
>>
>> *Laser Systems & Solutions of Europe (LASSE)*
>>
>> SCREEN Semiconductor Solutions Co. Ltd
>>
>> Taïwan Cell : +886 (0)965-875-974 or 7629511
>>
>> Email : benoit.curvers at screen-lasse.com
>> <mailto:benoit.curvers at screen-lasse.com>
>>
>> SetFactory("OpenCASCADE");
>>
>> // TopFin
>>
>> p10=newp; Point(p10) = {-2.5,60,0, 0.5};
>>
>> p11=newp; Point(p11) = {-2.5,22.5,0, 0.5};
>>
>> p12=newp; Point(p12) = {-1.75,20.5,0, 0.5};
>>
>> p13=newp; Point(p13) = {-1,20,0, 0.5};
>>
>> p14=newp; Point(p14) = {1,20,0, 0.5};
>>
>> p15=newp; Point(p15) = {1.75,20.5,0, 0.5};
>>
>> p16=newp; Point(p16) = {2.5,22.5,0, 0.5};
>>
>> p17=newp; Point(p17) = {2.5,60,0, 0.5};
>>
>> l10=newl; Line(l10) = {p10,p11};
>>
>> l11=newl; Line(l11) = {p11,p12};
>>
>> l12=newl; Line(l12) = {p12,p13};
>>
>> l13=newl; Line(l13) = {p13,p14};
>>
>> l14=newl; Line(l14) = {p14,p15};
>>
>> l15=newl; Line(l15) = {p15,p16};
>>
>> l16=newl; Line(l16) = {p16,p17};
>>
>> l17=newl; Line(l17) = {p17,p10};
>>
>> ll10 = newll; Line Loop(ll10) = {l10,l11,l12,l13,l14,l15,l16,l17};
>>
>> Plane Surface(1) = {ll10};
>>
>> Physical Surface(1)={1};
>>
>> // Bot1
>>
>> p20=newp; Point(p20) = {-15.235,120,0, 0.5};
>>
>> p21=newp; Point(p21) = {-13,119.3,0, 0.5};
>>
>> p22=newp; Point(p22) = {-12,119,0, 0.5};
>>
>> p23=newp; Point(p23) = {-10.9,118.1,0, 0.5};
>>
>> p24=newp; Point(p24) = {-10,117,0, 0.5};
>>
>> p25=newp; Point(p25) = {-9.7,116,0, 0.5};
>>
>> p26=newp; Point(p26) = {-9.235,114,0, 0.5};
>>
>> p27=newp; Point(p27) = {-10,120,0, 0.5};
>>
>> l20=newl; Line(l20) = {p20,p21};
>>
>> l21=newl; Line(l21) = {p21,p22};
>>
>> l22=newl; Line(l22) = {p22,p23};
>>
>> l23=newl; Line(l23) = {p23,p24};
>>
>> l24=newl; Line(l24) = {p24,p25};
>>
>> l25=newl; Line(l25) = {p25,p26};
>>
>> l26=newl; Line(l26) = {p26,p27};
>>
>> l27=newl; Line(l27) = {p27,p20};
>>
>> ll20 = newll; Line Loop(ll20) = {l20,l21,l22,l23,l24,l25,l26,l27};
>>
>> Plane Surface(2) = {ll20};
>>
>> Physical Surface(2)={2};
>>
>> // Bot2
>>
>> p40=newp; Point(p40) = {10,120,0, 0.5};
>>
>> p41=newp; Point(p41) = {9.235,114,0, 0.5};
>>
>> p42=newp; Point(p42) = {9.7,116,0, 0.5};
>>
>> p43=newp; Point(p43) = {10,117,0, 0.5};
>>
>> p44=newp; Point(p44) = {10.9,118.1,0, 0.5};
>>
>> p45=newp; Point(p45) = {12,119,0, 0.5};
>>
>> p46=newp; Point(p46) = {13,119.3,0, 0.5};
>>
>> p47=newp; Point(p47) = {15.235,120,0, 0.5};
>>
>> l40=newl; Line(l40) = {p40,p41};
>>
>> l41=newl; Line(l41) = {p41,p42};
>>
>> l42=newl; Line(l42) = {p42,p43};
>>
>> l43=newl; Line(l43) = {p43,p44};
>>
>> l44=newl; Line(l44) = {p44,p45};
>>
>> l45=newl; Line(l45) = {p45,p46};
>>
>> l46=newl; Line(l46) = {p46,p47};
>>
>> l47=newl; Line(l47) = {p47,p40};
>>
>> ll40 = newll; Line Loop(ll40) = {l40,l41,l42,l43,l44,l45,l46,l47};
>>
>> Plane Surface(4) = {ll40};
>>
>> Physical Surface(4)={4};
>>
>> // BotFin
>>
>> p60=newp; Point(p60) = {-10,120,0, 0.5};
>>
>> p61=newp; Point(p61) = {-9.235,114,0, 0.5};
>>
>> p62=newp; Point(p62) = {-2.5,60,0, 0.5};
>>
>> p63=newp; Point(p63) = {2.5,60,0, 0.5};
>>
>> p64=newp; Point(p64) = {9.235,114,0, 0.5};
>>
>> p65=newp; Point(p65) = {10,120,0, 0.5};
>>
>> l60=newl; Line(l60) = {p60,p61};
>>
>> l61=newl; Line(l61) = {p61,p62};
>>
>> l62=newl; Line(l62) = {p62,p63};
>>
>> l63=newl; Line(l63) = {p63,p64};
>>
>> l64=newl; Line(l64) = {p64,p65};
>>
>> l65=newl; Line(l65) = {p65,p60};
>>
>> ll60 = newll; Line Loop(ll60) = {l60,l61,l62,l63,l64,l65};
>>
>> Plane Surface(6) = {ll60};
>>
>> Physical Surface(6)={6};
>>
>> // Substrate
>>
>> p80=newp; Point(p80) = {-67.5,120,0, 1};
>>
>> p81=newp; Point(p81) = {-15.235,120,0, 1};
>>
>> p82=newp; Point(p82) = {-10,120,0, 1};
>>
>> p83=newp; Point(p83) = {10,120,0, 1};
>>
>> p84=newp; Point(p84) = {15.235,120,0, 1};
>>
>> p85=newp; Point(p85) = {67.5,120,0, 1};
>>
>> p86=newp; Point(p86) = {67.5,140,0, 1};
>>
>> p87=newp; Point(p87) = {-67.5,140,0, 1};
>>
>> l80=newl; Line(l80) = {p80,p81};
>>
>> l81=newl; Line(l81) = {p81,p82};
>>
>> l82=newl; Line(l82) = {p82,p83};
>>
>> l83=newl; Line(l83) = {p83,p84};
>>
>> l84=newl; Line(l84) = {p84,p85};
>>
>> l85=newl; Line(l85) = {p85,p86};
>>
>> l86=newl; Line(l86) = {p86,p87};
>>
>> l87=newl; Line(l87) = {p87,p80};
>>
>> ll80 = newll; Line Loop(ll80) = {l80,l81,l82,l83,l84,l85,l86,l87};
>>
>> Plane Surface(8) = {ll80};
>>
>> Physical Surface(8)={8};
>>
>> // Ins
>>
>> p90=newp; Point(p90) = {-3.5,60,0, 1};
>>
>> p91=newp; Point(p91) = {-3.5,22.5,0, 1};
>>
>> p92=newp; Point(p92) = {-2.75,20,0, 1};
>>
>> p93=newp; Point(p93) = {-1,19,0, 1};
>>
>> p94=newp; Point(p94) = {1,19,0, 1};
>>
>> p95=newp; Point(p95) = {2.75,20,0, 1};
>>
>> p96=newp; Point(p96) = {3.5,22.5,0, 1};
>>
>> p97=newp; Point(p97) = {3.5,60,0, 1};
>>
>> p98=newp; Point(p98) = {2.5,60,0, 1};
>>
>> p99=newp; Point(p99) = {2.5,22.5,0, 1};
>>
>> p910=newp; Point(p910) = {1.75,20.5,0, 1};
>>
>> p911=newp; Point(p911) = {1,20,0, 1};
>>
>> p912=newp; Point(p912) = {-1,20,0, 1};
>>
>> p913=newp; Point(p913) = {-1.75,20.5,0, 1};
>>
>> p914=newp; Point(p914) = {-2.5,22.5,0, 1};
>>
>> p915=newp; Point(p915) = {-2.5,60,0, 1};
>>
>> l90=newl; Line(l90) = {p90,p91};
>>
>> l91=newl; Line(l91) = {p91,p92};
>>
>> l92=newl; Line(l92) = {p92,p93};
>>
>> l93=newl; Line(l93) = {p93,p94};
>>
>> l94=newl; Line(l94) = {p94,p95};
>>
>> l95=newl; Line(l95) = {p95,p96};
>>
>> l96=newl; Line(l96) = {p96,p97};
>>
>> l97=newl; Line(l97) = {p97,p98};
>>
>> l98=newl; Line(l98) = {p98,p99};
>>
>> l99=newl; Line(l99) = {p99,p910};
>>
>> l910=newl; Line(l910) = {p910,p911};
>>
>> l911=newl; Line(l911) = {p911,p912};
>>
>> l912=newl; Line(l912) = {p912,p913};
>>
>> l913=newl; Line(l913) = {p913,p914};
>>
>> l914=newl; Line(l914) = {p914,p915};
>>
>> l915=newl; Line(l915) = {p915,p90};
>>
>> ll90 = newll; Line Loop(ll90) =
>> {l90,l91,l92,l93,l94,l95,l96,l97,l98,l99,l910,l911,l912,l913,l914,l915
>> };
>>
>> Plane Surface(9) = {ll90};
>>
>> Physical Surface(9)={9};
>>
>> // Ox1
>>
>> p30=newp; Point(p30) = {-67.5,120,0, 10};
>>
>> p31=newp; Point(p31) = {-67.5,60,0, 10};
>>
>> p32=newp; Point(p32) = {-3.5,60,0, 10};
>>
>> p33=newp; Point(p33) = {-2.5,60,0, 10};
>>
>> p34=newp; Point(p34) = {-9.235,114,0, 10};
>>
>> p35=newp; Point(p35) = {-9.7,116,0, 10};
>>
>> p36=newp; Point(p36) = {-10,117,0, 10};
>>
>> p37=newp; Point(p37) = {-10.9,118.1,0, 10};
>>
>> p38=newp; Point(p38) = {-12,119,0, 10};
>>
>> p39=newp; Point(p39) = {-13,119.3,0, 10};
>>
>> p310=newp; Point(p310) = {-15.235,120,0, 10};
>>
>> l30=newl; Line(l30) = {p30,p31};
>>
>> l31=newl; Line(l31) = {p31,p32};
>>
>> l32=newl; Line(l32) = {p32,p33};
>>
>> l33=newl; Line(l33) = {p33,p34};
>>
>> l34=newl; Line(l34) = {p34,p35};
>>
>> l35=newl; Line(l35) = {p35,p36};
>>
>> l36=newl; Line(l36) = {p36,p37};
>>
>> l37=newl; Line(l37) = {p37,p38};
>>
>> l38=newl; Line(l38) = {p38,p39};
>>
>> l39=newl; Line(l39) = {p39,p310};
>>
>> l310=newl; Line(l310) = {p310,p30};
>>
>> ll30 = newll; Line Loop(ll30) =
>> {l30,l31,l32,l33,l34,l35,l36,l37,l38,l39,l310};
>>
>> Plane Surface(3) = {ll30};
>>
>> Physical Surface(3)={3};
>>
>> // Ox2
>>
>> p50=newp; Point(p50) = {15.235,120,0, 10};
>>
>> p51=newp; Point(p51) = {13,119.3,0, 10};
>>
>> p52=newp; Point(p52) = {12,119,0, 10};
>>
>> p53=newp; Point(p53) = {10.9,118.1,0, 10};
>>
>> p54=newp; Point(p54) = {10,117,0, 10};
>>
>> p55=newp; Point(p55) = {9.7,116,0, 10};
>>
>> p56=newp; Point(p56) = {9.235,114,0, 10};
>>
>> p57=newp; Point(p57) = {2.5,60,0, 10};
>>
>> p58=newp; Point(p58) = {3.5,60,0, 10};
>>
>> p59=newp; Point(p59) = {67.5,60,0, 10};
>>
>> p510=newp; Point(p510) = {67.5,120,0, 10};
>>
>> l50=newl; Line(l50) = {p50,p51};
>>
>> l51=newl; Line(l51) = {p51,p52};
>>
>> l52=newl; Line(l52) = {p52,p53};
>>
>> l53=newl; Line(l53) = {p53,p54};
>>
>> l54=newl; Line(l54) = {p54,p55};
>>
>> l55=newl; Line(l55) = {p55,p56};
>>
>> l56=newl; Line(l56) = {p56,p57};
>>
>> l57=newl; Line(l57) = {p57,p58};
>>
>> l58=newl; Line(l58) = {p58,p59};
>>
>> l59=newl; Line(l59) = {p59,p510};
>>
>> l510=newl; Line(l510) = {p510,p50};
>>
>> ll50 = newll; Line Loop(ll50) =
>> {l50,l51,l52,l53,l54,l55,l56,l57,l58,l59,l510};
>>
>> Plane Surface(5) = {ll50};
>>
>> Physical Surface(5)={5};
>>
>> // Cap
>>
>> p70=newp; Point(p70) = {-67.5,60,0, 10};
>>
>> p71=newp; Point(p71) = {-67.5,10,0, 10};
>>
>> p72=newp; Point(p72) = {67.5,10,0, 10};
>>
>> p73=newp; Point(p73) = {67.5,60,0, 10};
>>
>> p74=newp; Point(p74) = {3.5,60,0, 10};
>>
>> p75=newp; Point(p75) = {3.5,22.5,0, 10};
>>
>> p76=newp; Point(p76) = {2.75,20,0, 10};
>>
>> p77=newp; Point(p77) = {1,19,0, 10};
>>
>> p78=newp; Point(p78) = {-1,19,0, 10};
>>
>> p79=newp; Point(p79) = {-2.75,20,0, 10};
>>
>> p710=newp; Point(p710) = {-3.5,22.5,0, 10};
>>
>> p711=newp; Point(p711) = {-3.5,60,0, 10};
>>
>> l70=newl; Line(l70) = {p70,p71};
>>
>> l71=newl; Line(l71) = {p71,p72};
>>
>> l72=newl; Line(l72) = {p72,p73};
>>
>> l73=newl; Line(l73) = {p73,p74};
>>
>> l74=newl; Line(l74) = {p74,p75};
>>
>> l75=newl; Line(l75) = {p75,p76};
>>
>> l76=newl; Line(l76) = {p76,p77};
>>
>> l77=newl; Line(l77) = {p77,p78};
>>
>> l78=newl; Line(l78) = {p78,p79};
>>
>> l79=newl; Line(l79) = {p79,p710};
>>
>> l710=newl; Line(l710) = {p710,p711};
>>
>> l711=newl; Line(l711) = {p711,p70};
>>
>> ll70 = newll; Line Loop(ll70) =
>> {l70,l71,l72,l73,l74,l75,l76,l77,l78,l79,l710,l711};
>>
>> Plane Surface(7) = {ll70};
>>
>> Physical Surface(7)={7};
>>
>> // AddedSubstrate
>>
>> p100=newp; Point(p100) = {-67.5,140,0, 5};
>>
>> p101=newp; Point(p101) = {67.5,140,0, 5};
>>
>> p102=newp; Point(p102) = {67.5,2140,0, 5};
>>
>> p103=newp; Point(p103) = {-67.5,2140,0, 5};
>>
>> l100=newl; Line(l100) = {p100,p101};
>>
>> l101=newl; Line(l101) = {p101,p102};
>>
>> l102=newl; Line(l102) = {p102,p103};
>>
>> l103=newl; Line(l103) = {p103,p100};
>>
>> ll100 = newll; Line Loop(ll100) = {l100,l101,l102,l103};
>>
>> Plane Surface(10) = {ll100};
>>
>> Physical Surface(10)={10};
>>
>> // AddedSubstrate
>>
>> p110=newp; Point(p110) = {-67.5,2140,0, 10};
>>
>> p111=newp; Point(p111) = {67.5,2140,0, 10};
>>
>> p112=newp; Point(p112) = {67.5,3140,0, 10};
>>
>> p113=newp; Point(p113) = {-67.5,3140,0, 10};
>>
>> l110=newl; Line(l110) = {p110,p111};
>>
>> l111=newl; Line(l111) = {p111,p112};
>>
>> l112=newl; Line(l112) = {p112,p113};
>>
>> l113=newl; Line(l113) = {p113,p110};
>>
>> ll110 = newll; Line Loop(ll110) = {l110,l111,l112,l113};
>>
>> Plane Surface(11) = {ll110};
>>
>> Physical Surface(11)={11};
>>
>> // AddedSubstrate
>>
>> p120=newp; Point(p120) = {-67.5,3140,0, 20};
>>
>> p121=newp; Point(p121) = {67.5,3140,0, 20};
>>
>> p122=newp; Point(p122) = {67.5,5140,0, 20};
>>
>> p123=newp; Point(p123) = {-67.5,5140,0, 20};
>>
>> l120=newl; Line(l120) = {p120,p121};
>>
>> l121=newl; Line(l121) = {p121,p122};
>>
>> l122=newl; Line(l122) = {p122,p123};
>>
>> l123=newl; Line(l123) = {p123,p120};
>>
>> ll120 = newll; Line Loop(ll120) = {l120,l121,l122,l123};
>>
>> Plane Surface(12) = {ll120};
>>
>> Physical Surface(12)={12};
>>
>> pAir1=newp; Point(pAir1) = {-67.5,-190,0, 30};
>>
>> pAir2=newp; Point(pAir2) = {67.5,-190,0, 30};
>>
>> pAir3=newp; Point(pAir3) = {67.5,5140,0, 30};
>>
>> pAir4=newp; Point(pAir4) = {-67.5,5140,0, 30};
>>
>> lAir1=newl; Line(lAir1) = {pAir1,pAir2};
>>
>> lAir2=newl; Line(lAir2) = {pAir2,pAir3};
>>
>> lAir3=newl; Line(lAir3) = {pAir3,pAir4};
>>
>> lAir4=newl; Line(lAir4) = {pAir4,pAir1};
>>
>> llAir = newll; Line Loop(llAir) = {lAir1,lAir2,lAir3,lAir4};
>>
>> rsAir = news ; Plane Surface(rsAir) = {llAir};
>>
>> v() = BooleanFragments{ Surface{1:12}; Delete; }{ Surface{rsAir};
>> Delete; };
>>
>> Physical Surface(0)={13};
>>
>>
>>
>> This body part will be downloaded on demand.
>>
> 
> 
> _______________________________________________
> gmsh mailing list
> gmsh at onelab.info
> http://onelab.info/mailman/listinfo/gmsh
> 




More information about the gmsh mailing list