Hi Christophe,

Thank you for the quick response. I wouldn't feel very comfortable emailing OpenCascade developers since I didn't know their project's existence until a google search 5 minutes ago – I wouldn't know how to describe the problem properly to them, seeing that the gmsh–OpenCascade connection is but a black box to me, as a naive new user of the program. I would assume they'll have heard of the underlying problem though, if this is a common operation?

I'd appreciate if there's a possible workaround to circumvent this issue from the gmsh side, but otherwise I'll have to hope the little glitches don't have a serious effect on the results (the results do seem fine).

Best regards,

baptiste


On 20/04/20 9:22 pm, Christophe Geuzaine wrote:
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



On 20 Apr 2020, at 10:16, baptiste auguie <[email protected]> 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
[email protected]
http://onelab.info/mailman/listinfo/gmsh
—
Prof. Christophe Geuzaine
University of Liege, Electrical Engineering and Computer Science
http://www.montefiore.ulg.ac.be/~geuzaine



_______________________________________________
gmsh mailing list
[email protected]
http://onelab.info/mailman/listinfo/gmsh

Reply via email to