[Gmsh] Adding capability for multiple overlaps

James O'Beirne james.obeirne at gmail.com
Thu Sep 16 20:09:17 CEST 2010


Hello,

I would like to patch gmsh in order to output multiple ``layers'' of ghost
nodes when partitioning.

I work on a finite-volume solver called FiPy (
http://www.ctcms.nist.gov/fipy/). FiPy has been built to dovetail with Gmsh
in a few regards, one of which is mesh partitioning. We have been using
gmsh-2.5.0-svn to output partitioned meshes with ghost-node information,
which we then read back into FiPy for use within our system.

This has all been working fine and dandy, but FiPy users often want to solve
fourth-order equations like Cahn-Hilliard. Obviously, we'd like to support
parallel solving for these problems and thus we need to partition meshes
accordingly. The problem is that gmsh only currently outputs one layer of
ghost nodes and a higher-order problem like Cahn Hilliard requires two
layers of ghost nodes to work properly in parallel.

I've taken a look at the Gmsh source, and I think I can patch the
PartitionMesh(GModel *const model, meshPartitionOptions &options) function
within ``Mesh/meshPartition.cpp'' to support multiple layers of ghost nodes.
It looks straightforward (perhaps deceptively so).

Unfortunately, I am unable to build the nightly source. I get the follow
error during make:

[ 21%] Building CXX object CMakeFiles/gmsh.dir/Solver/elasticityTerm.cpp.o
[ 21%] Building CXX object CMakeFiles/gmsh.dir/Solver/elasticitySolver.cpp.o
In file included from
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:8:
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.h:82:
error: ‘lua_State’ has not been declared
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.h:84:
error: ‘lua_State’ has not been declared
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:265:
error: ‘lua_State’ has not been declared
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:
In member function ‘void elasticitySolver::addDirichletBCLua(int, int, int,
std::string, int*)’:
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:268:
error: expected type-specifier before ‘simpleFunctionLua’
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:268:
error: cannot convert ‘int*’ to ‘simpleFunction<double>*’ in assignment
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:268:
error: expected `;' before ‘simpleFunctionLua’
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:
At global scope:
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:295:
error: ‘lua_State’ has not been declared
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:
In member function ‘void elasticitySolver::addNeumannBCLua(int, int,
std::string, int*)’:
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:298:
error: expected type-specifier before ‘simpleFunctionLua’
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:298:
error: cannot convert ‘int*’ to ‘simpleFunction<SVector3>*’ in assignment
/users/obeirne/gmsh/gmsh-2.5.0-svn-20100615-source/Solver/elasticitySolver.cpp:298:
error: expected `;' before ‘simpleFunctionLua’
make[2]: *** [CMakeFiles/gmsh.dir/Solver/elasticitySolver.cpp.o] Error 1
make[1]: *** [CMakeFiles/gmsh.dir/all] Error 2
make: *** [all] Error 2

If anyone can provide any insight on what's going on with the nightly
source, that would be welcome. Also, if anyone can comment on patching for
multiple layers of ghost nodes, I would really appreciate it.

James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.geuz.org/pipermail/gmsh/attachments/20100916/82b86e83/attachment.html>