From f656ebc99031bf25097fa763f9bee30fa2ec0b80 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Sat, 28 Jan 2006 19:53:18 +0000
Subject: [PATCH] - better fallback when outside the octree - disable bgm when
 optimizing in netgen

---
 Mesh/3D_BGMesh.cpp      | 21 +++++++++++++++++----
 Mesh/3D_Mesh_Netgen.cpp |  8 ++++++--
 doc/VERSIONS            |  7 ++++---
 3 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/Mesh/3D_BGMesh.cpp b/Mesh/3D_BGMesh.cpp
index 49f98bc50e..5573470052 100644
--- a/Mesh/3D_BGMesh.cpp
+++ b/Mesh/3D_BGMesh.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_BGMesh.cpp,v 1.40 2006-01-28 18:44:19 geuzaine Exp $
+// $Id: 3D_BGMesh.cpp,v 1.41 2006-01-28 19:53:18 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -30,18 +30,20 @@ extern Mesh *THEM;
 extern Context_T CTX;
 
 static OctreePost *BGM_OCTREE = NULL;
+static double BGM_MAX = 0.;
 
 int BGMWithView(Post_View * ErrView)
 {
   if(BGM_OCTREE) delete BGM_OCTREE;
   BGM_OCTREE = new OctreePost(ErrView);
+  BGM_MAX = ErrView->Max;
   Create_BgMesh(ONFILE, .2, THEM);
   return 1 ;
 }
 
 double Lc_XYZ(double X, double Y, double Z, Mesh * m)
 {
-  double l;
+  double l, fact[6] = {0.001, 0.005, 0.01, 0.05, 0.1, 0.5};
 
   switch (m->BGM.Typ) {
   case FUNCTION:
@@ -52,7 +54,18 @@ double Lc_XYZ(double X, double Y, double Z, Mesh * m)
     l = m->BGM.lc;
     break;
   case ONFILE:
-    BGM_OCTREE->searchScalar(X, Y, Z, &l, 0);
+    if(!BGM_OCTREE->searchScalar(X, Y, Z, &l, 0)){
+      for(int i = 0; i < 6; i++){
+	double eps = CTX.lc * fact[i];
+	if(BGM_OCTREE->searchScalar(X + eps, Y, Z, &l, 0)) break;
+	if(BGM_OCTREE->searchScalar(X - eps, Y, Z, &l, 0)) break;
+	if(BGM_OCTREE->searchScalar(X, Y + eps, Z, &l, 0)) break;
+	if(BGM_OCTREE->searchScalar(X, Y - eps, Z, &l, 0)) break;
+	if(BGM_OCTREE->searchScalar(X, Y, Z + eps, &l, 0)) break;
+	if(BGM_OCTREE->searchScalar(X, Y, Z - eps, &l, 0)) break;
+      }
+    }
+    if(l <= 0) l = BGM_MAX;
     break;
   case WITHPOINTS:
     Msg(GERROR, "We should never call Lc_XYZ with BGM.Typ == WITHPOINTS!");
@@ -61,7 +74,7 @@ double Lc_XYZ(double X, double Y, double Z, Mesh * m)
   }
 
   if(l <= 0.){
-    Msg(WARNING, "Characteristic length <= 0: setting to LC/10");
+    Msg(WARNING, "Characteristic length <= 0 at point (%g,%g,%g)", X, Y, Z);
     l = CTX.lc / 10.;
   }
 
diff --git a/Mesh/3D_Mesh_Netgen.cpp b/Mesh/3D_Mesh_Netgen.cpp
index d200e8eaa8..ab25fb0116 100644
--- a/Mesh/3D_Mesh_Netgen.cpp
+++ b/Mesh/3D_Mesh_Netgen.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_Mesh_Netgen.cpp,v 1.18 2006-01-06 00:34:26 geuzaine Exp $
+// $Id: 3D_Mesh_Netgen.cpp,v 1.19 2006-01-28 19:53:18 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -312,7 +312,11 @@ void Optimize_Netgen(Mesh *m)
   Msg(STATUS2, "Optimize volume mesh...");
   double t1 = Cpu();
 
-  Degre1(); // cleanup 2nd order vertices, if any
+  // cleanup 2nd order vertices, if any
+  Degre1(); 
+
+  // make sure we don't use any fancy background mesh
+  Create_BgMesh(WITHPOINTS, .2, m); 
 
   List_T *list = Tree2List(m->Volumes);
   for(int i = 0; i < List_Nbr(list); i++){
diff --git a/doc/VERSIONS b/doc/VERSIONS
index 4a072113ea..8d74e8ff36 100644
--- a/doc/VERSIONS
+++ b/doc/VERSIONS
@@ -1,7 +1,8 @@
-$Id: VERSIONS,v 1.355 2006-01-28 05:26:43 geuzaine Exp $
+$Id: VERSIONS,v 1.356 2006-01-28 19:53:18 geuzaine Exp $
 
-New since 1.62: post-processing views can now also be exported as 
-meshes; small bug fixes and enhancements.
+New since 1.62: post-processing views can now also be exported as
+meshes; speedup generation of meshes w/ background characteristic
+length fields from post-pro views; small bug fixes and enhancements.
 
 New in 1.62: new option to draw color gradients in the background;
 enhanced perspective projection mode; new "lasso" selection mode (same
-- 
GitLab