Skip to content

Commit

Permalink
Improve NETGEN detection and support V6.
Browse files Browse the repository at this point in the history
  • Loading branch information
jobermayr authored and wwmayer committed Jul 16, 2016
1 parent 8051d32 commit 5b738f9
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 34 deletions.
53 changes: 38 additions & 15 deletions cMake/FindNETGEN.cmake
Expand Up @@ -17,8 +17,6 @@ SET(NETGEN_DEFINITIONS -DNO_PARALLEL_THREADS -DOCCGEOMETRY)
IF(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX)
# We haven't supported Netgen prior to 5.3.1 on MacOS, and the current
# plan is for the next Netgen version to be 6.1 (currently unreleased).
LIST( APPEND NETGEN_DEFINITIONS -DNETGEN_V5 )

IF(DEFINED HOMEBREW_PREFIX)
EXEC_PROGRAM(brew ARGS --prefix nglib OUTPUT_VARIABLE NGLIB_PREFIX)
ELSE(DEFINED HOMEBREW_PREFIX)
Expand All @@ -39,26 +37,51 @@ IF(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX)
ENDIF(NOT NETGENDATA)

ELSE(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX)
FIND_PATH(NGLIB_INCLUDE_DIR nglib.h /usr/include)
FIND_LIBRARY(NGLIB_LIBRARIES nglib /usr/lib /usr/local/lib)
FIND_PATH(NGLIB_INCLUDE_DIR NAMES nglib.h PATHS ${NETGEN_INCLUDEDIR} /usr/include)
FIND_LIBRARY(NGLIB_LIBRARIES nglib PATHS ${NETGEN_LIBDIR} /usr/lib /usr/local/lib)

IF(NOT NETGENDATA)
SET(NETGENDATA /usr/share/netgen/libsrc)
ENDIF(NOT NETGENDATA)

ENDIF(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX)

FIND_PATH(NETGEN_DIR_csg csg.hpp PATHS ${NETGENDATA}/csg)
FIND_PATH(NETGEN_DIR_gen array.hpp PATHS ${NETGENDATA}/general)
FIND_PATH(NETGEN_DIR_geom2d geom2dmesh.hpp PATHS ${NETGENDATA}/geom2d)
FIND_PATH(NETGEN_DIR_gprim gprim.hpp PATHS ${NETGENDATA}/gprim)
FIND_PATH(NETGEN_DIR_la linalg.hpp PATHS ${NETGENDATA}/linalg)
FIND_PATH(NETGEN_DIR_mesh meshing.hpp PATHS ${NETGENDATA}/meshing)
FIND_PATH(NETGEN_DIR_occ occgeom.hpp PATHS ${NETGENDATA}/occ)
FIND_PATH(NETGEN_DIR_stlgeom stlgeom.hpp PATHS ${NETGENDATA}/stlgeom)
FIND_PATH(NETGEN_DIR_include NAMES mydefs.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/include)
FIND_PATH(NETGEN_DIR_csg NAMES csg.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/csg)
FIND_PATH(NETGEN_DIR_gen NAMES array.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/general)
FIND_PATH(NETGEN_DIR_geom2d NAMES geom2dmesh.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/geom2d)
FIND_PATH(NETGEN_DIR_gprim NAMES gprim.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/gprim)
FIND_PATH(NETGEN_DIR_la NAMES linalg.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/linalg)
FIND_PATH(NETGEN_DIR_mesh NAMES meshing.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/meshing)
FIND_PATH(NETGEN_DIR_occ NAMES occgeom.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/occ)
FIND_PATH(NETGEN_DIR_stlgeom NAMES stlgeom.hpp PATHS ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR} ${NETGENDATA}/stlgeom)

IF(NOT NGLIB_INCLUDE_DIR AND NOT NETGEN_DIR_include)
MESSAGE(STATUS "Cannot find NETGEN header files.")
ELSE()
file(STRINGS ${NETGEN_DIR_include}/mydefs.hpp NETGEN_VERSION
REGEX "#define PACKAGE_VERSION.*"
)
string(REGEX MATCH "[0-9]+" NETGEN_VERSION ${NETGEN_VERSION})
# EXECUTE_PROCESS(COMMAND grep -e ".*define.*PACKAGE_VERSION" ${NETGEN_DIR_include}/mydefs.hpp
# COMMAND sed -r "s:.*PACKAGE_VERSION \"([0-9]*).*:\\1:g"
# OUTPUT_VARIABLE NETGEN_VERSION
# OUTPUT_STRIP_TRAILING_WHITESPACE)
ENDIF()

LIST( APPEND NETGEN_INCLUDE_DIRS
IF(NOT NGLIB_LIBRARIES)
MESSAGE(STATUS "Cannot find NETGEN library.")
ENDIF()

IF(NGLIB_INCLUDE_DIR AND NGLIB_LIBRARIES)
SET(NETGEN_FOUND TRUE)
SET(NETGEN_INCLUDE_DIRS ${NETGEN_DIR_include} ${NGLIB_INCLUDE_DIR}
${NETGEN_DIR_csg} ${NETGEN_DIR_gen} ${NETGEN_DIR_geom2d}
${NETGEN_DIR_gprim} ${NETGEN_DIR_la} ${NETGEN_DIR_mesh}
${NETGEN_DIR_occ} ${NETGEN_DIR_stlgeom} )

${NETGEN_DIR_occ} ${NETGEN_DIR_stlgeom})
LIST(REMOVE_DUPLICATES NETGEN_INCLUDE_DIRS)
MESSAGE(STATUS "Found NETGEN version ${NETGEN_VERSION}")
LIST(APPEND NETGEN_DEFINITIONS -DNETGEN_VERSION=${NETGEN_VERSION})
ELSE()
SET(NETGEN_FOUND FALSE)
ENDIF()
2 changes: 1 addition & 1 deletion src/3rdParty/salomesmesh/CMakeLists.txt
Expand Up @@ -373,7 +373,7 @@ TARGET_LINK_LIBRARIES(NETGENPlugin SMDS SMESHDS SMESH StdMeshers ${SMESH_LIBS} )

SET_BIN_DIR(NETGENPlugin NETGENPlugin)
if(WIN32)
set_target_properties(NETGENPlugin PROPERTIES COMPILE_FLAGS "-DNETGENPLUGIN_EXPORTS -DNO_PARALLEL_THREADS -DOCCGEOMETRY -DNETGEN_V5")
set_target_properties(NETGENPlugin PROPERTIES COMPILE_FLAGS "-DNETGENPLUGIN_EXPORTS -DNO_PARALLEL_THREADS -DOCCGEOMETRY -DNETGEN_VERSION=${NETGEN_VERSION}")
endif(WIN32)

endif (BUILD_FEM_NETGEN)
Expand Down
44 changes: 31 additions & 13 deletions src/3rdParty/salomesmesh/src/NETGENPlugin/NETGENPlugin_Mesher.cpp
Expand Up @@ -81,7 +81,9 @@ namespace nglib {
#include <meshing.hpp>
//#include <ngexception.hpp>
namespace netgen {
#ifdef NETGEN_V5
#if NETGEN_VERSION > 5
DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, shared_ptr<Mesh>&, MeshingParameters&, int, int);
#elif NETGEN_VERSION == 5
DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, MeshingParameters&, int, int);
#else
DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*);
Expand Down Expand Up @@ -2491,15 +2493,15 @@ bool NETGENPlugin_Mesher::Compute()
occgeo.face_maxh = mparams.maxh;

// Let netgen create _ngMesh and calculate element size on not meshed shapes
#ifndef NETGEN_V5
#if NETGEN_VERSION < 5
char *optstr = 0;
#endif
int startWith = netgen::MESHCONST_ANALYSE;
int endWith = netgen::MESHCONST_ANALYSE;
try
{
OCC_CATCH_SIGNALS;
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
err = netgen::OCCGenerateMesh(occgeo, _ngMesh, mparams, startWith, endWith);
#else
err = netgen::OCCGenerateMesh(occgeo, _ngMesh, startWith, endWith, optstr);
Expand Down Expand Up @@ -2587,7 +2589,7 @@ bool NETGENPlugin_Mesher::Compute()
//OCCSetLocalMeshSize(intOccgeo, *_ngMesh); it deletes _ngMesh->localH

// let netgen create a temporary mesh
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
netgen::OCCGenerateMesh(intOccgeo, tmpNgMesh, mparams, startWith, endWith);
#else
netgen::OCCGenerateMesh(intOccgeo, tmpNgMesh, startWith, endWith, optstr);
Expand All @@ -2600,7 +2602,7 @@ bool NETGENPlugin_Mesher::Compute()

// compute mesh on internal edges
startWith = endWith = netgen::MESHCONST_MESHEDGES;
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
err = netgen::OCCGenerateMesh(intOccgeo, tmpNgMesh, mparams, startWith, endWith);
#else
err = netgen::OCCGenerateMesh(intOccgeo, tmpNgMesh, startWith, endWith, optstr);
Expand All @@ -2619,7 +2621,11 @@ bool NETGENPlugin_Mesher::Compute()
FillSMesh( intOccgeo, *tmpNgMesh, initState, *_mesh, tmpNodeVec, comment );
err = ( err || !comment.empty() );

#if NETGEN_VERSION > 5
tmpNgMesh.reset();
#else
nglib::Ng_DeleteMesh((nglib::Ng_Mesh*)tmpNgMesh);
#endif
}

// Fill _ngMesh with nodes and segments of computed submeshes
Expand All @@ -2637,7 +2643,7 @@ bool NETGENPlugin_Mesher::Compute()
try
{
OCC_CATCH_SIGNALS;
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
err = netgen::OCCGenerateMesh(occgeo, _ngMesh, mparams, startWith, endWith);
#else
err = netgen::OCCGenerateMesh(occgeo, _ngMesh, startWith, endWith, optstr);
Expand Down Expand Up @@ -2747,7 +2753,7 @@ bool NETGENPlugin_Mesher::Compute()
try
{
OCC_CATCH_SIGNALS;
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
err = netgen::OCCGenerateMesh(occgeo, _ngMesh, mparams, startWith, endWith);
#else
err = netgen::OCCGenerateMesh(occgeo, _ngMesh, startWith, endWith, optstr);
Expand Down Expand Up @@ -2826,7 +2832,7 @@ bool NETGENPlugin_Mesher::Compute()
}
_ngMesh->SetGlobalH (mparams.maxh);
mparams.grading = 0.4;
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
_ngMesh->CalcLocalH(mparams.grading);
#else
_ngMesh->CalcLocalH();
Expand All @@ -2849,7 +2855,7 @@ bool NETGENPlugin_Mesher::Compute()
try
{
OCC_CATCH_SIGNALS;
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
err = netgen::OCCGenerateMesh(occgeo, _ngMesh, mparams, startWith, endWith);
#else
err = netgen::OCCGenerateMesh(occgeo, _ngMesh, startWith, endWith, optstr);
Expand Down Expand Up @@ -2881,7 +2887,7 @@ bool NETGENPlugin_Mesher::Compute()
try
{
OCC_CATCH_SIGNALS;
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
err = netgen::OCCGenerateMesh(occgeo, _ngMesh, mparams, startWith, endWith);
#else
err = netgen::OCCGenerateMesh(occgeo, _ngMesh, startWith, endWith, optstr);
Expand Down Expand Up @@ -3093,13 +3099,17 @@ bool NETGENPlugin_Mesher::Evaluate(MapShapeNbElems& aResMap)

// let netgen create _ngMesh and calculate element size on not meshed shapes
NETGENPlugin_NetgenLibWrapper ngLib;
#if NETGEN_VERSION > 5
shared_ptr<netgen::Mesh> ngMesh = NULL;
#else
netgen::Mesh *ngMesh = NULL;
#ifndef NETGEN_V5
#endif
#if NETGEN_VERSION < 5
char *optstr = 0;
#endif
int startWith = netgen::MESHCONST_ANALYSE;
int endWith = netgen::MESHCONST_MESHEDGES;
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
int err = netgen::OCCGenerateMesh(occgeo, ngMesh, mparams, startWith, endWith);
#else
int err = netgen::OCCGenerateMesh(occgeo, ngMesh, startWith, endWith, optstr);
Expand Down Expand Up @@ -3569,7 +3579,7 @@ void NETGENPlugin_ngMeshInfo::transferLocalH( netgen::Mesh* fromMesh,
{
if ( !fromMesh->LocalHFunctionGenerated() ) return;
if ( !toMesh->LocalHFunctionGenerated() )
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
toMesh->CalcLocalH(netgen::mparam.grading);
#else
toMesh->CalcLocalH();
Expand Down Expand Up @@ -3978,7 +3988,11 @@ NETGENPlugin_NetgenLibWrapper::NETGENPlugin_NetgenLibWrapper()

NETGENPlugin_NetgenLibWrapper::~NETGENPlugin_NetgenLibWrapper()
{
#if NETGEN_VERSION > 5
_ngMesh.reset();
#else
Ng_DeleteMesh( _ngMesh );
#endif
Ng_Exit();
NETGENPlugin_Mesher::RemoveTmpFiles();
if ( _coutBuffer )
Expand All @@ -3998,8 +4012,12 @@ NETGENPlugin_NetgenLibWrapper::~NETGENPlugin_NetgenLibWrapper()
void NETGENPlugin_NetgenLibWrapper::setMesh( Ng_Mesh* mesh )
{
if ( _ngMesh )
#if NETGEN_VERSION > 5
_ngMesh.reset(mesh);
#else
Ng_DeleteMesh( _ngMesh );
_ngMesh = mesh;
#endif
}

//================================================================================
Expand Down
Expand Up @@ -64,7 +64,9 @@ namespace nglib {
#include <meshing.hpp>
//#include <meshtype.hpp>
namespace netgen {
#ifdef NETGEN_V5
#if NETGEN_VERSION > 5
DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, shared_ptr<Mesh>&, MeshingParameters&, int, int);
#elif NETGEN_VERSION == 5
DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, MeshingParameters&, int, int);
#else
DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*);
Expand Down Expand Up @@ -472,7 +474,7 @@ bool NETGENPlugin_NETGEN_2D_ONLY::Compute(SMESH_Mesh& aMesh,
try {
OCC_CATCH_SIGNALS;

#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
err = netgen::OCCGenerateMesh(occgeom, ngMesh, netgen::mparam, startWith, endWith);
#else
char *optstr = 0;
Expand Down
Expand Up @@ -75,7 +75,7 @@ namespace nglib {
#include <nglib.h>
}
namespace netgen {
#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, MeshingParameters&, int, int);
#else
DLL_HEADER extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*);
Expand Down Expand Up @@ -428,7 +428,7 @@ bool NETGENPlugin_NETGEN_3D::compute(SMESH_Mesh& aMesh,
netgen::Mesh* ngMesh = (netgen::Mesh*)Netgen_mesh;
int Netgen_NbOfNodes = Ng_GetNP(Netgen_mesh);

#ifndef NETGEN_V5
#if NETGEN_VERSION < 5
char *optstr = 0;
#endif
int startWith = netgen::MESHCONST_MESHVOLUME;
Expand Down Expand Up @@ -470,7 +470,7 @@ bool NETGENPlugin_NETGEN_3D::compute(SMESH_Mesh& aMesh,
{
OCC_CATCH_SIGNALS;

#ifdef NETGEN_V5
#if NETGEN_VERSION > 4
ngMesh->CalcLocalH(netgen::mparam.grading);
err = netgen::OCCGenerateMesh(occgeo, ngMesh, netgen::mparam, startWith, endWith);
#else
Expand Down

0 comments on commit 5b738f9

Please sign in to comment.