[Gmsh] Gmsh API run-time crash

Tommy Binford tbinford at gmail.com
Wed Apr 20 02:49:13 CEST 2011


Resolved this problem.  I have the Terminal option enabled so I missed
the error message telling me SVD needed LAPACK.  When running
CMake-GUI, I forgot to change the CMakeLists.txt to correctly locate
my LAPACK and BLAS as I did originally.

The problem manifested itself in the section requiring the results of
computeMeanPlane() to be valid.  The library crashes in meshGenerator()
when LAPACK is not correctly linked.

Trilinos was a red herring.  There was no conflict between the libraries.

Best,
Tommy

On Tue, Apr 19, 2011 at 11:50 AM, Tommy Binford <tbinford at gmail.com> wrote:
> I have been using the Gmsh API for about two weeks now on Windows.  I ran into
> some trouble with a library conflict using Trilinos and Gmsh together
> in the same
> project in Release mode.  Before that, Gmsh was working fine.
>
> I purged Gmsh and started a separate project to test my hypothesis against all
> the Trilinos libraries.  After finding that one particular library
> seemed to cause the
> problem, I started putting things back together.
>
> Once again, I purged Gmsh, untarred the source, ran cmake-gui, and generated
> a VS2010 project.  There were no errors in the build, as before.  However, now
> Gmsh crashes during the call to meshGenerator() [meshGFace.cpp] attempting
> to loop over doc.numTriangles.  Debugging shows doc.points is empty.  No errors
> were thrown except what amounts to a segfault.  If I skip this section
> in the debugger,
> the mesh file is generated.
>
> Can you suggest what I may have missed when configuring and building the Gmsh
> lib on my second time around?  Perhaps I added a package or removed a package
> that causes this error?  Everything works perfectly in Linux.
>
> List of enabled options (need 2d mesh generation only):
> ACIS
> ANN
> BAMG
> GMM
> MATHEX
> MESH
> OCC
> PLUGINS
> PARSER
> POST
>
> Offending section of code with annotation:
> ====================================================
> // Builds An initial triangular mesh that respects the boundaries of
> // the domain, including embedded points and surfaces
> static bool meshGenerator(GFace *gf, int RECUR_ITER,
>                          bool repairSelfIntersecting1dMesh,
>                          bool debug = true)
> .
> .
> .
>    Msg::Debug("Meshing of the convex hull (%d points)", points.size());
>    doc.MakeMeshWithPoints();
>    Msg::Debug("Meshing of the convex hull (%d points) done", points.size());
>
> //// CRASHES IN THIS LOOP
>    for(int i = 0; i < doc.numTriangles; i++) {
>      BDS_Point *p1 = (BDS_Point*)doc.points[doc.triangles[i].a].data;
>      BDS_Point *p2 = (BDS_Point*)doc.points[doc.triangles[i].b].data;
>      BDS_Point *p3 = (BDS_Point*)doc.points[doc.triangles[i].c].data;
>      m->add_triangle(p1->iD, p2->iD, p3->iD);
>    }
> .
> .
> .
> ====================================================
>