[Gmsh] C++ API for using GMSH::Mesher

Josef Weinbub weinbub at gmail.com
Thu Jan 15 09:42:08 CET 2009


problem solved - something went wrong on the contribution of tetgen. 
The problem was, that gmsh didn't find tetgen. hence, the input
geometry/topology set was passed through without meshing. 
A new "clean" tetgen contribution and a reinstall of gmsh solved the
problem. 

anyways, thanks to robert for his replies and his time!

josef

On Wed, 2009-01-14 at 11:26 +0100, Josef Weinbub wrote:
> hi robert, thx for your reply!
> 
> i think that this is the right direction but still no success.
> 
> due to your hint about the surface loop and the corresponding volume, i
> rechecked the gmsh::manual again, regarding surface loop and relation to
> volume objects. i skipped the implementation of the surface loop object,
> as the list of incident surfaces is interally copied to the volumes
> surface list. hence i directly assembled the volumes object surface
> list:
> 
> --------------------------------------------------
> I.   create new volume 
> II.  set volume properties:
>      Num          = 0   // there is only one volume to be meshed ..
>      Color.type   = 0
>      Visible      = 1
>      Typ          = MSH_VOLUME
>      Method       = MESH_UNSTRUCTURED
> 
> for_each(boundary_triangle)
>    1. setup 3 Curves for each boundary triangle representing the 
>       the edges of the boundary triangle
>    2. -) create a Surface, and add the Curve objects to the 
>       Generatrices List. 
>       -) increase surface id
>    3. add the Surface object to the Volume->Surface list. 
> 
> 
> // add the volume to the GModel
> Tree_Add(m->getGEOInternals()->Volumes, &vol);
> 
> // start meshing
> m->mesh(3);
> --------------------------------------------------
> 
> unfortunatly, still the same. I get the input surface mesh by viewing
> the plotted *msh or *.unv file. (see attachment ..)
> 
> hints of any kind would be great!
> 
> thank you very much!
> 
> regards, josef
> 
> 
> 
> On Tue, 2009-01-13 at 08:11 -0500, Robert Funnell wrote:
> > Josef -
> > 
> > I'm quite fuzzy about this, but are you doing the equivalent of the
> >     Surface Loop(1) = {1};
> >     Volume(1) = {1};
> > seen in demos/sphere-discrete.geo?
> > 
> > - Robert
> > 
> > On Tue, 13 Jan 2009, Josef Weinbub wrote:
> > 
> > > Hi all!
> > > 
> > > What I am working on:
> > > ---------------------
> > > I am working on an C++ API which should allow my application to use the
> > > 3D mesher capabilities of GMSH. The goal is to feed the GMSH::Mesher
> > > with geometry information (boundary points and interior points) and
> > > topology (the boundary facets/triangles as in this case). As a result
> > > the mesher should provide me with a 3D tet mesh where the interior
> > > points and the given boundary(points/facets) should be respected. After
> > > a successful mesh is created the GMSH::Mesh domain should be written
> > > back to my domain via some kind of writeback() function, which copies
> > > the geometry(the points) and the topology(of the meshed tetrahedras)
> > > back.
> > > 
> > > The following parts describe my approach. It would be great if someone
> > > can look it through and give me some hints.
> > > 
> > > The problem:
> > > ------------
> > > The problem is that the mesher doesn't mesh anything. The *.msh output
> > > after calling mesh(3) only contains the previously entered points and
> > > the triangles(which should act as the boundary of the volume).
> > > 
> > > The approach:
> > > -------------
> > > So far I've used the readMSH() function within GModelIO_Mesh.cpp as a
> > > basis for the API implementation. I tried to copy the mechanisms within
> > > the readMSH() function. 
> > > 
> > > the key steps are:
> > >  -) setting up geometry: creating MVertex objects and store them on the
> > >                          GModel object via "_storeVerticesInEntities()"
> > >  -) setting up topology: creating MElement objects of type 2 (triangles
> > >                          as these triangles should bound my 3D volume).
> > >                          (note that reg=physical=part=0)
> > >                          the elements are stored on the GModel object
> > >                          via "_storeElementsInEntities()"
> > >  -) associateEntityWithMeshVertices: calling the function
> > >                          _associateEntityWithMeshVertices()
> > >
> > >  -) mesh(3): call the mesh algorithm ...
> > > 
> > > 
> > > Thank you very much for your time,
> > > yours Josef
> >