[Gmsh] "Perfect Match Failed" Problem with Blossom
Johannes Reinhardt
johannes.reinhardt at unifr.ch
Wed Mar 13 13:32:42 CET 2013
Hello everybody,
first I want to thank everybody involved in the development of gmsh. It
is a really great tool and has helped me a lot in my research.
However I run into a probem when I try to create a 2D quad mesh with the
outline of two superimposed disks embedded. However Blossom almost
always fails with the message:
Warning : Perfect Match Failed in Quadrangulation, Applying Graph Splits
printed 10 times. I attached a simple geometry file that shows this
problem.
For small distances (e.g. dist=2.1) this problem does not occur, but for
larger distances (and these are the ones that I want to study), I always
get this error.
For other geometries where I had this problem, playing a bit with the
mesh element sizes helped, but I could not find good numbers for this
case. I also tried both DelQuad and MeshAdapt as Meshing Algorithms, but
I always get the error above.
I briefly looked at the Blossom Quad publication, but could not find any
explanation for this behaviour. My best guess is, that the embedded
curve conflicts with a perfect matching, and the extra edges mechanism
fails in this case.
I tested both gmsh 2.6.1 compiled from source and the precompiled gmsh
2.7.0 Linux 64bit binary on Ubuntu 11.10, both show the same behaviour.
Has anybody an idea how to reformulate the geometry description to avoid
this problem?
Thanks in advance and greetings
Johannes
-------------- next part --------------
dist = 2.1;
r_disk = 2;
tip_dist = Sqrt(r_disk*r_disk - dist*dist/4);
width_outer = 10;
height_outer = 10;
size_outer = 8e-1;
size_outline = 5e-1;
size_tip = 1e-1;
Mesh.RecombinationAlgorithm = 1; //Blossom
Mesh.Algorithm=1; //MeshAdapt
//centers of disks
Point(2) = {-dist/2,0,0,size_outline};
Point(3) = {+dist/2,0,0,size_outline};
//outer corners
Point(4) = {+width_outer,+height_outer,0,size_outer};
Point(5) = {+width_outer,-height_outer,0,size_outer};
Point(6) = {-width_outer,-height_outer,0,size_outer};
Point(7) = {-width_outer,+height_outer,0,size_outer};
//outline left
Point(8) = {-dist/2,+r_disk,0,size_outline};
Point(9) = {-dist/2-r_disk,0,0,size_outline};
Point(10) = {-dist/2,-r_disk,0,size_outline};
//outline right
Point(11) = {+dist/2,-r_disk,0,size_outline};
Point(12) = {+dist/2+r_disk,0,0,size_outline};
Point(13) = {+dist/2,+r_disk,0,size_outline};
//tip
Point(14) = {0,+tip_dist,0,size_tip};
Point(15) = {0,-tip_dist,0,size_tip};
//Box
Line(1) = {4,5};
Line(2) = {5,6};
Line(3) = {6,7};
Line(4) = {7,4};
Line Loop(5) = {1,2,3,4};
//contact line
Circle(6) = {8,2,9};
Circle(7) = {9,2,10};
Circle(8) = {10,2,15};
Circle(9) = {15,3,11};
Circle(10) = {11,3,12};
Circle(11) = {12,3,13};
Circle(12) = {13,3,14};
Circle(13) = {14,2,8};
Plane Surface(1) = {5};
Recombine Surface {1};
//outline
Line {6,7,8,9,10,11,12,13} In Surface {1};
Physical Surface(2) = {1};