]> SALOME platform Git repositories - plugins/netgenplugin.git/commitdiff
Salome HOME
Netgen 4.9.11 compatibility
authoradam <adam>
Mon, 26 Oct 2009 17:13:37 +0000 (17:13 +0000)
committeradam <adam>
Mon, 26 Oct 2009 17:13:37 +0000 (17:13 +0000)
adm_local/unix/config_files/check_NETGEN.m4
src/Makefile.am
src/NETGEN/ReadMeForNgUsers
src/NETGEN/netgen_copy_include_for_salome [new file with mode: 0755]
src/NETGENPlugin/Makefile.am
src/NETGENPlugin/NETGENPlugin_Mesher.cxx
src/NETGENPlugin/NETGENPlugin_NETGEN_2D_ONLY.cxx

index db3291b957d9477c65e64f49ea2cf2d54249d24c..2e97e65e60cdbc90a4c2c70980e9893be2972745 100644 (file)
@@ -35,6 +35,8 @@ AC_ARG_WITH(netgen,
 
 NETGEN_INCLUDES=""
 NETGEN_LIBS_DIR=""
+NETGEN_LIBS=""
+NETGEN_NEW=no
 
 Netgen_ok=no
 
@@ -52,29 +54,29 @@ fi
 
 if test "x$NETGEN_HOME" != "x"; then
 
-  echo
-  echo
-  echo -------------------------------------------------
+  if test -f ${NETGEN_HOME}/lib/libnglib.so ; then
+    NETGEN_NEW=yes  
+  fi
+
+  echo ----------------------------------------------------------
+  echo ----------------------------------------------------------
   echo You are about to choose to use somehow the
   echo Netgen Library to generate Tetrahedric mesh.
-  echo
-  echo WARNING
   echo ----------------------------------------------------------
   echo ----------------------------------------------------------
   echo You are strongly advised to consult the file
-  echo NETGENPLUGIN_SRC/src/NETGEN/ReadMeForNgUsers, particularly about
-  echo assumptions made on the installation of the Netgen
+  echo NETGENPLUGIN_SRC/src/NETGEN/ReadMeForNgUsers, particularly
+  echo about assumptions made on the installation of the Netgen
   echo application and libraries.
-  echo Ask your system administrator for those details.
   echo ----------------------------------------------------------
   echo ----------------------------------------------------------
-  echo 
-  echo
-
-  
 
   NETGEN_INCLUDES="-I${NETGEN_HOME}/include"
-  
+
+  if test "$NETGEN_NEW" = "yes" ; then
+    NETGEN_INCLUDES="${NETGEN_INCLUDES} -DNETGEN_NEW -I${NETGEN_HOME}/share/salome/include"
+  fi
+
   # check ${NETGEN_HOME}/lib/LINUX directory for libraries
   if test -f ${NETGEN_HOME}/lib/LINUX/libcsg.a ; then
        NETGEN_LIBS_DIR="${NETGEN_HOME}/lib/LINUX"
@@ -99,6 +101,8 @@ if test "x$NETGEN_HOME" != "x"; then
   AC_CHECK_HEADER(nglib.h,Netgen_ok=yes,Netgen_ok=no)
   if test "x$Netgen_ok" == "xyes"; then
 
+    if test "$NETGEN_NEW" = "no" ; then
+
     AC_MSG_CHECKING(for Netgen libraries)
 
     LDFLAGS_old="$LDFLAGS"
@@ -146,6 +150,81 @@ namespace nglib {
     ])
     Netgen_ok="$salome_cv_netgen_lib"
 
+    else
+
+      LDFLAGS_old="$LDFLAGS"
+      LDFLAGS="-L${NETGEN_LIBS_DIR} -lnglib $CAS_LDPATH -lTKBRep -lTKShHealing -lTKSTEP -lTKXSBase -lTKIGES -lTKSTL -lTKTopAlgo $LDFLAGS"
+
+      AC_MSG_CHECKING(for official Netgen libraries)
+      AC_CACHE_VAL(salome_cv_netgen_lib,[
+      AC_TRY_LINK([
+      #include <iostream>
+      #include <fstream>
+      namespace nglib {
+      #include "nglib.h"
+      }
+      ],[
+      nglib::Ng_Init();
+      nglib::Ng_Exit();
+      ],
+      [eval "salome_cv_netgen_lib=yes"],
+      [eval "salome_cv_netgen_lib=no"])
+      ])
+      Netgen_ok="$salome_cv_netgen_lib"
+
+      if test "$Netgen_ok" = "yes" ; then
+      AC_MSG_RESULT(yes)
+      AC_MSG_CHECKING(for occ support in Netgen libraries)
+      AC_CACHE_VAL(salome_cv_netgen_occ_lib,[
+      AC_TRY_LINK([
+      #include <iostream>
+      #include <fstream>
+      #define OCCGEOMETRY
+      namespace nglib {
+      #include "nglib.h"
+      }
+      ],[
+      nglib::Ng_Init();
+      nglib::Ng_OCC_Geometry * ng_occ_geom = nglib::Ng_OCC_NewGeometry();
+      nglib::Ng_Exit();
+      ],
+      [eval "salome_cv_netgen_occ_lib=yes"],
+      [eval "salome_cv_netgen_occ_lib=no"])
+      ])
+      Netgen_ok="$salome_cv_netgen_occ_lib"
+      fi
+
+      if test "$Netgen_ok" = "yes" ; then
+      AC_MSG_RESULT(yes)
+      AC_MSG_CHECKING(for salome patch in Netgen installation)
+      AC_CACHE_VAL(salome_cv_netgen_salome_patch_lib,[
+      AC_TRY_LINK([
+      #include <iostream>
+      #include <fstream>
+      #define OCCGEOMETRY
+      namespace nglib {
+      #include "nglib.h"
+      }
+      #include <occgeom.hpp>
+      ],[
+      nglib::Ng_Init();
+      netgen::OCCGeometry occgeo;
+      nglib::Ng_Exit();
+      ],
+      [eval "salome_cv_netgen_salome_patch_lib=yes"],
+      [eval "salome_cv_netgen_salome_patch_lib=no"])
+      ])
+      Netgen_ok="$salome_cv_netgen_salome_patch_lib"
+      fi
+
+      if test "x$Netgen_ok" == xno ; then
+      AC_MSG_RESULT(no)
+      AC_MSG_ERROR(Netgen is not properly installed)
+      fi
+
+      NETGEN_LIBS="-L${NETGEN_LIBS_DIR} -lnglib"
+
+    fi
 
     LDFLAGS="$LDFLAGS_old"
   fi
@@ -163,6 +242,8 @@ fi
 
 AC_SUBST(NETGEN_INCLUDES)
 AC_SUBST(NETGEN_LIBS_DIR)
+AC_SUBST(NETGEN_LIBS)
+AM_CONDITIONAL(NETGEN_NEW, [test x"$NETGEN_NEW" = x"yes"])
 
 AC_LANG_RESTORE
 
index 7251f431021b000e58e24a05fb5ca4e73c2bbc33..cbd2d9ee89b2e598ee54031ef7f9f8476e9dd7e2 100644 (file)
 #
 include $(top_srcdir)/adm_local/unix/make_common_starter.am
 
-SUBDIRS = NETGEN NETGENPlugin
+SUBDIRS =
+if ! NETGEN_NEW
+  SUBDIRS += NETGEN
+endif
+SUBDIRS += NETGENPlugin
 
 if NETGENPLUGIN_ENABLE_GUI
   SUBDIRS += GUI
index 0b7cb2806a7d08302bcf36d3a534356315038477..ddea381229c72775c7d973209d30d8e6cd5e816d 100644 (file)
@@ -1,3 +1,41 @@
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+# Notes for Netgen >= 4.9
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+
+Netgen can be find at http://www.hpfem.jku.at/netgen/
+
+1. How to build Netgen for Netgen Plugin
+------------------------------
+
+1.1. Download Netgen archive (here netgen-4.9.11.tar.gz) and unpack it
+
+1.2. Configure the netgen compilation. The "good" options are
+     ../netgen-4.9.11/configure \
+        --prefix=THE_INSTALLATION_PATH \
+        --enable-occ --enable-nglib --with-occ=${CASROOT} \
+        CXXFLAGS="-DOCCGEOMETRY -I${CASROOT}/inc -DHAVE_IOSTREAM -DHAVE_LIMITS -DHAVE_LIMITS_H -DHAVE_IOMANIP -I${TOGL_HOME}/include" \
+        LDFLAGS="-L${TOGL_HOME}/lib/Togl1.7"
+
+1.3. Compile the netgen product
+     make then make install
+
+1.4. Patch the installation directory to copy include files
+     needed by NETGEN Plugin. Use the script
+     NETGENPLUGIN_SRC/src/NETGEN/netgen_copy_include_for_salome
+     to achieve that. The first argument is the directory containing
+     the Netgen sources. The second argument is THE_INSTALLATION_PATH
+
+Erwan ADAM
+erwan.adam@cea.fr
+
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+# Notes for Netgen 4.5
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+
 The Netgen 4.5 from the web location : http://www.hpfem.jku.at/netgen/
 (CVS access) is used in the SMESH Module of Salome3 distribution.
 
@@ -92,3 +130,8 @@ The suggested patch alters some Netgen sources to compile them.
 
 Michael SAZONOV
 m-sazonov@opencascade.com
+
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
+# ------------------------------------------------------------------
diff --git a/src/NETGEN/netgen_copy_include_for_salome b/src/NETGEN/netgen_copy_include_for_salome
new file mode 100755 (executable)
index 0000000..d902534
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+src_dir=$1
+install_dir=$2
+
+if ! test -d $src_dir/libsrc ; then
+    echo "No dir $src_dir/libsrc ... Bye"
+    exit 1
+fi
+if ! test -d $install_dir/share/netgen ; then
+    echo "No dir $install_dir/share/netgen ... Bye"
+    exit 1
+fi
+
+dest_dir=$install_dir/share/salome/include
+mkdir -p $dest_dir > /dev/null 2>&1
+cp -af $src_dir/libsrc/occ/*.hpp $dest_dir
+cp -af $src_dir/libsrc/meshing/*.hpp $dest_dir
+cp -af $src_dir/libsrc/general/*.hpp $dest_dir
+cp -af $src_dir/libsrc/gprim/*.hpp $dest_dir
+cp -af $src_dir/libsrc/linalg/*.hpp $dest_dir
+cp -af $src_dir/libsrc/include/mystdlib.h $dest_dir
+cp -af $src_dir/libsrc/include/mydefs.hpp $dest_dir
index 5261cabf031dbe5bf9720bbcce53ab8665a6fcd4..849330b2669d2dbedb81637f282560fe5ba3354e 100644 (file)
@@ -84,8 +84,13 @@ libNETGENEngine_la_CPPFLAGS = \
        $(BOOST_CPPFLAGS) \
        -I$(top_builddir)/idl
 
-libNETGENEngine_la_LDFLAGS  = \
-       ../NETGEN/libNETGEN.la \
+if ! NETGEN_NEW
+libNETGENEngine_la_LDFLAGS = ../NETGEN/libNETGEN.la
+else
+libNETGENEngine_la_LDFLAGS = $(NETGEN_LIBS)
+endif
+
+libNETGENEngine_la_LDFLAGS  += \
        ../../idl/libSalomeIDLNETGENPLUGIN.la \
        $(CAS_LDPATH) -lTKernel -lTKBRep -lTKShHealing -lTKSTEP -lTKXSBase -lTKIGES -lTKMesh -lTKSTL -lTKG3d -lTKTopAlgo -lTKG2d -lTKBool -lTKGeomAlgo -lTKOffset -lTKGeomBase -lTKBO \
        $(SMESH_LDFLAGS) -lSMESHimpl -lSMESHEngine -lStdMeshersEngine -lStdMeshers -lSMESHDS -lSMDS -lSMESHControls \
index 9268b866ddb4e686bfed8be12866247125077ee1..b7b835822d2bdbe3ab23426aaaf94f5a819372c8 100644 (file)
@@ -276,6 +276,10 @@ void NETGENPlugin_Mesher::PrepareOCCgeometry(netgen::OCCGeometry&     occgeo,
   }
   occgeo.facemeshstatus.SetSize (occgeo.fmap.Extent());
   occgeo.facemeshstatus = 0;
+#ifdef NETGEN_NEW
+  occgeo.face_maxh.SetSize(occgeo.fmap.Extent());
+  occgeo.face_maxh = netgen::mparam.maxh;
+#endif
 
 }
 
@@ -384,8 +388,13 @@ bool NETGENPlugin_Mesher::fillNgMesh(netgen::OCCGeometry&           occgeom,
 
           netgen::Segment seg;
           // ng node ids
+#ifdef NETGEN_NEW
+          seg.pnums[0] = prevNgId;
+          seg.pnums[1] = prevNgId = ngNodeId( p2.node, ngMesh, nodeNgIdMap );
+#else
           seg.p1 = prevNgId;
           seg.p2 = prevNgId = ngNodeId( p2.node, ngMesh, nodeNgIdMap );
+#endif
           // node param on curve
           seg.epgeominfo[ 0 ].dist = p1.param;
           seg.epgeominfo[ 1 ].dist = p2.param;
@@ -411,7 +420,11 @@ bool NETGENPlugin_Mesher::fillNgMesh(netgen::OCCGeometry&           occgeom,
               seg.epgeominfo[ 1 ].v = otherSeamParam;
               swap (seg.epgeominfo[0].u, seg.epgeominfo[1].u);
             }
+#ifdef NETGEN_NEW
+            swap (seg.pnums[0], seg.pnums[1]);
+#else
             swap (seg.p1, seg.p2);
+#endif
             swap (seg.epgeominfo[0].dist, seg.epgeominfo[1].dist);
             seg.edgenr = ngMesh.GetNSeg() + 1; // segment id
             ngMesh.AddSegment (seg);
@@ -748,7 +761,11 @@ bool NETGENPlugin_Mesher::Compute()
           newNodeOnVertex = true;
       }
       if (!node)
+#ifdef NETGEN_NEW
+        node = meshDS->AddNode(ngPoint(0), ngPoint(1), ngPoint(2));
+#else
         node = meshDS->AddNode(ngPoint.X(), ngPoint.Y(), ngPoint.Z());
+#endif
       if (!node)
       {
         MESSAGE("Cannot create a mesh node");
@@ -770,12 +787,20 @@ bool NETGENPlugin_Mesher::Compute()
     for (i = nbInitSeg+1; i <= nbSeg/* && isOK*/; ++i )
     {
       const netgen::Segment& seg = ngMesh->LineSegment(i);
+#ifdef NETGEN_NEW
+      Link link(seg.pnums[0], seg.pnums[1]);
+#else
       Link link(seg.p1, seg.p2);
+#endif
       if (linkMap.Contains(link))
         continue;
       linkMap.Add(link);
       TopoDS_Edge aEdge;
+#ifdef NETGEN_NEW
+      int pinds[3] = { seg.pnums[0], seg.pnums[1], seg.pnums[2] };
+#else
       int pinds[3] = { seg.p1, seg.p2, seg.pmid };
+#endif
       int nbp = 0;
       double param2 = 0;
       for (int j=0; j < 3; ++j)
@@ -966,6 +991,7 @@ void NETGENPlugin_Mesher::RemoveTmpFiles()
 {
   removeFile("test.out");
   removeFile("problemfaces");
+  removeFile("occmesh.rep");
 }
 
 
index 3b23620302fc4326684a351051581e10877fe665..51f01e08d8f877ab5c608af7d760e5672f13482a 100644 (file)
@@ -231,8 +231,13 @@ static TError AddSegmentsToMesh(netgen::Mesh&                    ngMesh,
       // Add the segment
       Segment seg;
 
+#ifdef NETGEN_NEW
+      seg.pnums[0] = ngMesh.GetNP();          // ng node id
+      seg.pnums[1] = seg.pnums[0] + 1;              // ng node id
+#else
       seg.p1 = ngMesh.GetNP();          // ng node id
       seg.p2 = seg.p1 + 1;              // ng node id
+#endif
       seg.edgenr = ngMesh.GetNSeg() + 1;// segment id
       seg.si = faceID;                  // = geom.fmap.FindIndex (face);
 
@@ -263,7 +268,11 @@ static TError AddSegmentsToMesh(netgen::Mesh&                    ngMesh,
       // 20526: [CEA] Disk meshing fails
       if (reverse)
       {
+#ifdef NETGEN_NEW
+        swap (seg.pnums[0], seg.pnums[1]);
+#else
         swap (seg.p1, seg.p2);
+#endif
         swap (seg.epgeominfo[0].dist, seg.epgeominfo[1].dist);
         swap (seg.epgeominfo[0].u, seg.epgeominfo[1].u);
         swap (seg.epgeominfo[0].v, seg.epgeominfo[1].v);
@@ -282,7 +291,11 @@ static TError AddSegmentsToMesh(netgen::Mesh&                    ngMesh,
 //            << "\tp1 edge: " << seg.epgeominfo[ 1 ].edgenr << endl;
     }
     Segment& seg = ngMesh.LineSegment( ngMesh.GetNSeg() );
+#ifdef NETGEN_NEW
+    seg.pnums[1] = firstPointID;
+#else
     seg.p2 = firstPointID;
+#endif
   }
 
   ngMesh.CalcSurfacesOfNode();  
@@ -417,7 +430,11 @@ bool NETGENPlugin_NETGEN_2D_ONLY::Compute(SMESH_Mesh&         aMesh,
   for ( int i = nbInputNodes + 1; i <= nbNodes; ++i )
   {
     const MeshPoint& ngPoint = ngMesh->Point(i);
+#ifdef NETGEN_NEW
+    SMDS_MeshNode * node = meshDS->AddNode(ngPoint(0), ngPoint(1), ngPoint(2));
+#else
     SMDS_MeshNode * node = meshDS->AddNode(ngPoint.X(), ngPoint.Y(), ngPoint.Z());
+#endif
     nodeVec[ i-1 ] = node;
   }