Improve NETGEN detection and support V6.

This commit is contained in:
Johannes Obermayr 2016-06-15 20:55:39 +02:00 committed by wmayer
parent 8051d32adc
commit 5b738f9e22
5 changed files with 77 additions and 34 deletions

View File

@ -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)
@ -39,8 +37,8 @@ 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)
@ -48,17 +46,42 @@ ELSE(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX)
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)
LIST( APPEND NETGEN_INCLUDE_DIRS
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()
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()

View File

@ -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)

View File

@ -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*);
@ -2491,7 +2493,7 @@ 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;
@ -2499,7 +2501,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);
@ -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);
@ -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);
@ -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
@ -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);
@ -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);
@ -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();
@ -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);
@ -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);
@ -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);
@ -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();
@ -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 )
@ -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
}
//================================================================================

View File

@ -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*);
@ -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;

View File

@ -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*);
@ -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;
@ -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