[Gmsh] gmsh1.65.0 Irix-patch, bug

Christophe Geuzaine christophe.geuzaine at case.edu
Wed Jun 21 08:41:39 CEST 2006


Hi Philip - Many thanks for the detailed feedback and the patches. See
my comments below.

Philip Kelleners wrote:
> Dear Christophe, Jean-Francois, David,
> 
>   again my compliments for gmsh, and thanks for the continuing steady updates
> and further development.
> 
>   Over the past year I have followed and compiled the steady stream of
> releases. For these last releases I had continuously had to apply the same
> fixes for the code to compile on IRIX 6.5, with the native MIPSpro compiler,
> time to send in a patch I think.
> 
> SGI
> MIPSpro Compilers: Version 7.3.1.3m
> Actually two source-files give rise to errors:
> 
> - Common/AdaptiveViews.cpp
>   Common/AdaptiveViews.h - compiler issues an error, for min,max being
> ambiguous.

OK


> 
> - contrib/Netgen/libsrc/include/mystdlib.h - the file contains <cr> - carriage
> returns, (Dos format lf+cr) not a real bug, but a preprocessor can choke on
> this.
> 

OK

> (changes included in the attached patch file.)
> 
> next to that, the configure.in, contains an assumption regarding the name of
> the C++ compiler under IRIX. When this is named differently in the environment
> variables, (e.g. setenv CXX /bin/CC  instead of setenv CXX CC) configure does
> not setup the right environment for the C++ pre-linker under IRIX. I don't
> really have a ready solution for this.
> 

I've tried to fix the configure script so that we detect the substring
instead. Let me know if this works out.

> 
> Next to that, I propose to introduce the 'Y' argument in the call to the
> Tetgen mesher, as with this argument the present version of Tetgen (1.4.0),
> does not remesh apparently doubly curved surfaces bounding 3D meshes. The
> result looks so much better then. (included in the patch)
> 

OK

> B.T.W. using the Tetgen mesher as a 3D algorithm together with option
> 'optimize quality of tetrahedral elements' selected inevitable leads to a
> program crash. (with and without the 'Y' option in the Tetgen-call)
> 

Yep, the tetgen stuff is really not ready for prime time yet. For
example, it will only work if you have a single volume; and the surface
mesh information is not correct after the volume grid is generated.

> 
> And finally I have part of larger .geo (bzrs.geo) attached. This surface is
> built entirely of bezier-curves and highlights a weakness in the 2D surface
> meshing algorithm I think. The triangles in the vicinity of point 6 are
> stretched unfavourable I feel. Please give your opinion on this one.

I'll have a look at this a bit later.

> 
> Some of the real work I could produce with it:
> http://www.ts.ctw.utwente.nl/philip/example3D-nf5a.html

Sweet ;-)


Thanks again for the feedback,

Christophe




> (sorry for this commmercial :)
> Thanks for your time, I think gmsh is solid work.
> 
> Cheers
> 
> Philip
> 
> 
> 
> |>gmsh65 -info
> Version        : 1.65.0
> GUI toolkit    : FLTK 1.1.6
> License        : GNU General Public License
> Build OS       : IRIX
> Build options  : GSL TRIANGLE NETGEN TETGEN JPEG PNG ZLIB MATHEVAL METIS ANN 
> Build date     : Wed May 17 13:56:14 MEST 2006
> Build host     : removed
> Packager       : philip
> Web site       : http://www.geuz.org/gmsh/
> Mailing list   : gmsh at geuz.org
> 
> 
> ------------------------------------------------------------------------
> 
> diff -r -u2 -b ./Common/AdaptiveViews.cpp ../gmsh-1.65.0dvl/Common/AdaptiveViews.cpp
> --- ./Common/AdaptiveViews.cpp	Fri Mar 10 22:47:52 2006
> +++ ../gmsh-1.65.0dvl/Common/AdaptiveViews.cpp	Wed May 17 13:21:38 2006
> @@ -753,6 +753,6 @@
>      p->Y = XYZ(kk, 1);
>      p->Z = XYZ(kk, 2);
> -    if (min > p->val) min = p->val;
> -    if (max < p->val) max = p->val;
> +    if (avpmin > p->val) avpmin = p->val;
> +    if (avpmax < p->val) avpmax = p->val;
>      kk++;
>    }
> @@ -767,5 +767,5 @@
>  
>    if(!plug || tol != 0.0) {
> -    ELEM::Error(max - min, tol);
> +    ELEM::Error(avpmax - avpmin, tol);
>    }
>  
> @@ -1043,6 +1043,6 @@
>    else return;
>  
> -  min = VAL_INF;
> -  max = -VAL_INF;
> +  avpmin = VAL_INF;
> +  avpmax = -VAL_INF;
>  
>    int nb = List_Nbr(myList) / (nbelm);
> diff -r -u2 -b ./Common/AdaptiveViews.h ../gmsh-1.65.0dvl/Common/AdaptiveViews.h
> --- ./Common/AdaptiveViews.h	Sun Feb 26 02:20:24 2006
> +++ ../gmsh-1.65.0dvl/Common/AdaptiveViews.h	Wed May 17 13:22:20 2006
> @@ -267,5 +267,5 @@
>  {
>    double tol;
> -  double min,max;
> +  double avpmin,avpmax;
>    int presentZoomLevel;
>    double presentTol;
> diff -r -u2 -b ./Mesh/3D_Mesh_Tetgen.cpp ../gmsh-1.65.0dvl/Mesh/3D_Mesh_Tetgen.cpp
> --- ./Mesh/3D_Mesh_Tetgen.cpp	Mon Jan 30 05:47:54 2006
> +++ ../gmsh-1.65.0dvl/Mesh/3D_Mesh_Tetgen.cpp	Wed May 17 13:23:53 2006
> @@ -130,5 +130,5 @@
>    }
>   
> -  sprintf(opts, "pqa%f%c", (float)CTX.mesh.quality, 
> +  sprintf(opts, "pq1.4Ya%f%c", (float)CTX.mesh.quality, 
>  	  (CTX.verbosity < 3)? 'Q': (CTX.verbosity > 6)? 'V': '\0');
>    Msg(STATUS3, "Meshing with volume constraint %f", (float)CTX.mesh.quality);
> diff -r -u2 -b ./contrib/Netgen/Makefile ../gmsh-1.65.0dvl/contrib/Netgen/Makefile
> --- ./contrib/Netgen/Makefile	Fri Mar 10 22:47:53 2006
> +++ ../gmsh-1.65.0dvl/contrib/Netgen/Makefile	Wed May 17 13:28:58 2006
> @@ -23,6 +23,6 @@
>  
>  LIB     = ../../lib/libGmshNetgen.a
> -INCLUDE = -I../../Common -Ilibsrc/include -Ilibsrc/interface
> -CFLAGS  = ${OPTIM} ${FLAGS} ${INCLUDE} -DNO_PARALLEL_THREADS -UWIN32
> +INCLUDE = -I../../Common -Ilibsrc/include -Ilibsrc/interface -I/usr/freeware/include
> +CFLAGS  = ${OPTIM} ${FLAGS} ${INCLUDE} -DNO_PARALLEL_THREADS -DOLDCINCLUDE -UWIN32 -woff 1681,1682,1174,1552
>  
>  SRC = libsrc/opti/linopt.cpp \
> diff -r -u2 -b ./contrib/Netgen/libsrc/include/mystdlib.h ../gmsh-1.65.0dvl/contrib/Netgen/libsrc/include/mystdlib.h
> --- ./contrib/Netgen/libsrc/include/mystdlib.h	Wed Sep 21 19:29:38 2005
> +++ ../gmsh-1.65.0dvl/contrib/Netgen/libsrc/include/mystdlib.h	Wed May 17 13:25:10 2006
> @@ -1,69 +1,69 @@
> -#ifndef FILE_MYSTDLIB
> -#define FILE_MYSTDLIB
> -
> -
> -#include <iostream>
> -#include <iomanip>
> -#include <fstream>
> -#include <sstream>
> -
> -#ifdef OLDCINCLUDE
> -
> -// e.g., CC compiler on SGI
> -#include <stdlib.h>
> -#include <stdio.h>
> -#include <math.h>
> -#include <malloc.h>
> -#include <ctype.h>
> -#include <time.h>
> -
> -#else
> - 
> -// new standard
> -#include <cstdlib>
> -#include <cstdio>
> -#include <cmath>
> -#include <cctype>
> -#include <ctime>
> -#endif
> -
> -
> -
> -#include <new>
> -#include <string>
> -#include <typeinfo>
> -
> -#ifndef M_PI
> -#define M_PI 3.14159265358979323846
> -#endif
> -
> -
> -/*** Windows headers ***/
> -#ifdef WIN32
> -#define WIN32_LEAN_AND_MEAN
> -#include <afxwin.h>
> -#include <afxmt.h>
> -#include <windows.h>
> -#undef WIN32_LEAN_AND_MEAN
> -#include <winnt.h>
> -#endif /* WIN32 */
> -
> -
> -/*
> -extern void* operator new(std::size_t) throw (std::bad_alloc);
> -extern void* operator new[](std::size_t) throw (std::bad_alloc);
> -extern void operator delete(void*) throw();
> -extern void operator delete[](void*) throw();
> -*/
> -
> -
> -extern int mem_alloc;
> -extern int mem_total_alloc;
> -extern int mem_max_alloc;
> -extern int mem_total_alloc_array;
> -extern int mem_total_alloc_table;
> -
> -
> -using namespace std;
> -
> -#endif
> +#ifndef FILE_MYSTDLIB
> +#define FILE_MYSTDLIB
> +
> +
> +#include <iostream>
> +#include <iomanip>
> +#include <fstream>
> +#include <sstream>
> +
> +#ifdef OLDCINCLUDE
> +
> +// e.g., CC compiler on SGI
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <math.h>
> +#include <malloc.h>
> +#include <ctype.h>
> +#include <time.h>
> +
> +#else
> + 
> +// new standard
> +#include <cstdlib>
> +#include <cstdio>
> +#include <cmath>
> +#include <cctype>
> +#include <ctime>
> +#endif
> +
> +
> +
> +#include <new>
> +#include <string>
> +#include <typeinfo>
> +
> +#ifndef M_PI
> +#define M_PI 3.14159265358979323846
> +#endif
> +
> +
> +/*** Windows headers ***/
> +#ifdef WIN32
> +#define WIN32_LEAN_AND_MEAN
> +#include <afxwin.h>
> +#include <afxmt.h>
> +#include <windows.h>
> +#undef WIN32_LEAN_AND_MEAN
> +#include <winnt.h>
> +#endif /* WIN32 */
> +
> +
> +/*
> +extern void* operator new(std::size_t) throw (std::bad_alloc);
> +extern void* operator new[](std::size_t) throw (std::bad_alloc);
> +extern void operator delete(void*) throw();
> +extern void operator delete[](void*) throw();
> +*/
> +
> +
> +extern int mem_alloc;
> +extern int mem_total_alloc;
> +extern int mem_max_alloc;
> +extern int mem_total_alloc_array;
> +extern int mem_total_alloc_table;
> +
> +
> +using namespace std;
> +
> +#endif
> Only in ../gmsh-1.65.0dvl/contrib/Tetgen: predicates.cxx
> Only in ../gmsh-1.65.0dvl/contrib/Tetgen: tetgen.cxx
> Only in ../gmsh-1.65.0dvl/contrib/Tetgen: tetgen.h
> Only in ../gmsh-1.65.0dvl/contrib/Triangle: triangle.c
> Only in ../gmsh-1.65.0dvl/contrib/Triangle: triangle.h
> 
> 
> ------------------------------------------------------------------------
> 
> Point(1) = {4.3611102104187, -0.7888889908790599, 0.69444400072098, 0.05};
> Point(2) = {4.3611102104187, -0.54188899087906, 0.69444400072098, 0.06};
> Point(3) = {4.3611102104187, -0.63611102104187, 0.4, 0.07};
> Point(4) = {4.3611102104187, -0.63611102104187, 0, 0.1};
> Point(6) = {5.9027800559998, -0.91666698455811, 0.75833302736282, 0.03};
> Point(7) = {5.9027800559998, -0.73816698455811, 0.8348330273628201, 0.04};
> Point(8) = {5.9027800559998, -0.63611099720001, 0.75000001192093, 0.04};
> Point(9) = {5.9027800559998, -0.53611099720001, 0.55000001192093, 0.05};
> Point(101) = {4.8611102104187, -0.7888889908790599, 0.74444400072098, 0.06};
> Point(102) = {5.4027800559998, -0.86666698455811, 0.7683330273628201, 0.06};
> Point(103) = {4.8611102104187, -0.62611102104187, 0.08, 0.1};
> Point(104) = {5.4027800559998, -0.56611099720001, 0.31000001192093, 0.1};
> Bezier (1) = {1, 2, 3, 4};
> Bezier (2) = {6, 7, 8, 9};
> Bezier (3) = {1, 101, 102, 6};
> Bezier (4) = {4, 103, 104, 9};
> Line Loop (1000002) = {-1, 3, 2, -4};
> Ruled Surface (2) = {1000002};
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> gmsh mailing list
> gmsh at geuz.org
> http://www.geuz.org/mailman/listinfo/gmsh


-- 
Christophe Geuzaine
Assistant Professor, Case Western Reserve University, Mathematics
http://www.case.edu/artsci/math/geuzaine