[Gmsh] fillet producing irregular mesh

Christophe Geuzaine cgeuzaine at uliege.be
Mon Apr 20 11:22:57 CEST 2020


Hi Baptiste,

The issue is with the geometry: OpenCASCADE seems to generate invalid surfaces, that extend outside of the bounding curves. You can check by showing the STL mesh generated by OpenCASCADE itself, e.g. for surface 129.

You could send the attached bug.brep to the OpenCASCADE developers so they can have a look.

Christophe

-------------- next part --------------
A non-text attachment was scrubbed...
Name: bug.png
Type: image/png
Size: 58107 bytes
Desc: not available
URL: <http://onelab.info/pipermail/gmsh/attachments/20200420/3cac9683/attachment-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bug.brep
Type: application/octet-stream
Size: 502934 bytes
Desc: not available
URL: <http://onelab.info/pipermail/gmsh/attachments/20200420/3cac9683/attachment-0001.brep>
-------------- next part --------------


> On 20 Apr 2020, at 10:16, baptiste auguie <auguieba at gmail.com> wrote:
> 
> Hi,
> 
> I'm very new to the program so I may well have overlooked something basic. I adapted one of the examples for constructive geometry with boolean union between a central sphere and a number of conical spikes. I end the shape by rounding off sharp edges with a fillet, but when inspecting the mesh visually I find some strange irregularities where fillet was applied (and applying Smooth 2D doesn't seem to be enough to smoothen them out).
> 
> Thankfully the model doesn't seem too bothered by this and produces reasonable results; I'd still be keen to know if the mesh could be improved. I attach the geo file as well as a rendering of the structure for clarity.
> 
> Best regards,
> 
> baptiste
> 
> 
> 
> ----
> 
> geo file
> 
> //+
> SetFactory("OpenCASCADE");
> 
> Mesh.CharacteristicLengthMin = 0.001;
> Mesh.CharacteristicLengthMax = 0.005;
> Sphere(1) = {0, 0, 0, 0.030, -Pi/2, Pi/2, 2*Pi};
> 
> Cone(2) = {0, 0, 0, -0.043, 0.01, -0.01, 0.015, 0.003, 2*Pi};
> Cone(3) = {0, 0, 0, -0.038, -0.024, 0, 0.015, 0.003, 2*Pi};
> Cone(4) = {0, 0, 0, -0.034, 0.022, 0.02, 0.015, 0.003, 2*Pi};
> Cone(5) = {0, 0, 0, -0.029, -0.004, -0.034, 0.015, 0.003, 2*Pi};
> Cone(6) = {0, 0, 0, -0.025, -0.022, 0.03, 0.015, 0.003, 2*Pi};
> Cone(7) = {0, 0, 0, -0.02, 0.039, -0.008, 0.015, 0.003, 2*Pi};
> Cone(8) = {0, 0, 0, -0.016, -0.036, -0.022, 0.015, 0.003, 2*Pi};
> Cone(9) = {0, 0, 0, -0.011, 0.012, 0.042, 0.015, 0.003, 2*Pi};
> Cone(10) = {0, 0, 0, -0.007, 0.02, -0.04, 0.015, 0.003, 2*Pi};
> Cone(11) = {0, 0, 0, -0.002, -0.042, 0.016, 0.015, 0.003, 2*Pi};
> Cone(12) = {0, 0, 0, 0.002, 0.042, 0.016, 0.015, 0.003, 2*Pi};
> Cone(13) = {0, 0, 0, 0.007, -0.02, -0.04, 0.015, 0.003, 2*Pi};
> Cone(14) = {0, 0, 0, 0.011, -0.012, 0.042, 0.015, 0.003, 2*Pi};
> Cone(15) = {0, 0, 0, 0.016, 0.036, -0.022, 0.015, 0.003, 2*Pi};
> Cone(16) = {0, 0, 0, 0.02, -0.039, -0.008, 0.015, 0.003, 2*Pi};
> Cone(17) = {0, 0, 0, 0.025, 0.022, 0.03, 0.015, 0.003, 2*Pi};
> Cone(18) = {0, 0, 0, 0.029, 0.004, -0.034, 0.015, 0.003, 2*Pi};
> Cone(19) = {0, 0, 0, 0.034, -0.022, 0.02, 0.015, 0.003, 2*Pi};
> Cone(20) = {0, 0, 0, 0.038, 0.024, 0, 0.015, 0.003, 2*Pi};
> Cone(21) = {0, 0, 0, 0.043, -0.01, -0.01, 0.015, 0.003, 2*Pi};
> BooleanUnion(22) = {Volume{1}; Delete; }{ Volume{2}; Delete; };
> BooleanUnion(23) = {Volume{3}; Delete; }{ Volume{22}; Delete; };
> BooleanUnion(24) = {Volume{4}; Delete; }{ Volume{23}; Delete; };
> BooleanUnion(25) = {Volume{5}; Delete; }{ Volume{24}; Delete; };
> BooleanUnion(26) = {Volume{6}; Delete; }{ Volume{25}; Delete; };
> BooleanUnion(27) = {Volume{7}; Delete; }{ Volume{26}; Delete; };
> BooleanUnion(28) = {Volume{8}; Delete; }{ Volume{27}; Delete; };
> BooleanUnion(29) = {Volume{9}; Delete; }{ Volume{28}; Delete; };
> BooleanUnion(30) = {Volume{10}; Delete; }{ Volume{29}; Delete; };
> BooleanUnion(31) = {Volume{11}; Delete; }{ Volume{30}; Delete; };
> BooleanUnion(32) = {Volume{12}; Delete; }{ Volume{31}; Delete; };
> BooleanUnion(33) = {Volume{13}; Delete; }{ Volume{32}; Delete; };
> BooleanUnion(34) = {Volume{14}; Delete; }{ Volume{33}; Delete; };
> BooleanUnion(35) = {Volume{15}; Delete; }{ Volume{34}; Delete; };
> BooleanUnion(36) = {Volume{16}; Delete; }{ Volume{35}; Delete; };
> BooleanUnion(37) = {Volume{17}; Delete; }{ Volume{36}; Delete; };
> BooleanUnion(38) = {Volume{18}; Delete; }{ Volume{37}; Delete; };
> BooleanUnion(39) = {Volume{19}; Delete; }{ Volume{38}; Delete; };
> BooleanUnion(40) = {Volume{20}; Delete; }{ Volume{39}; Delete; };
> BooleanUnion(41) = {Volume{21}; Delete; }{ Volume{40}; Delete; };
> f() = Abs(Boundary{ Volume{41}; });
> e() = Unique(Abs(Boundary{ Surface{f()}; }));
> 
> Fillet{41}{e()}{0.003}
> 
> 
> <starn.png><fullstar20.geo><Screen Shot 2020-04-20 at 8.14.36 PM.png>_______________________________________________
> gmsh mailing list
> gmsh at onelab.info
> http://onelab.info/mailman/listinfo/gmsh

? 
Prof. Christophe Geuzaine
University of Liege, Electrical Engineering and Computer Science 
http://www.montefiore.ulg.ac.be/~geuzaine





More information about the gmsh mailing list