diff --git a/Mesh/2D_Mesh.cpp b/Mesh/2D_Mesh.cpp index d704da617c6d27bd640f52fb75e8e31d5f2699ee..dbde0bbdc5c25ebb910e98f729cf0ad19fecfbde 100644 --- a/Mesh/2D_Mesh.cpp +++ b/Mesh/2D_Mesh.cpp @@ -1,4 +1,4 @@ -/* $Id: 2D_Mesh.cpp,v 1.12 2000-12-13 20:21:48 geuzaine Exp $ */ +/* $Id: 2D_Mesh.cpp,v 1.13 2000-12-18 08:31:58 geuzaine Exp $ */ /* Maillage Delaunay d'une surface (Point insertion Technique) @@ -168,7 +168,7 @@ void Plan_Moyen (void *data, void *dum){ /* by + cz = -x */ - else if (!sys3x3 (sys, b, res, &det)){ + else if (!sys3x3_with_tol (sys, b, res, &det)){ s->d = 0.0; s2s[0][0] = sys[1][1]; s2s[0][1] = sys[1][2]; diff --git a/Mesh/Numeric.cpp b/Mesh/Numeric.cpp index 682821d93cc21ab609a31c23810770084a9f021d..2e57513a0f84536822fa9fe515ed18fef9a50b9a 100644 --- a/Mesh/Numeric.cpp +++ b/Mesh/Numeric.cpp @@ -1,4 +1,4 @@ -/* $Id: Numeric.cpp,v 1.9 2000-12-13 20:27:12 geuzaine Exp $ */ +/* $Id: Numeric.cpp,v 1.10 2000-12-18 08:31:58 geuzaine Exp $ */ #include "Gmsh.h" #include "Const.h" @@ -121,6 +121,20 @@ int sys3x3 (double mat[3][3], double b[3], double res[3], double *det){ } +int sys3x3_with_tol (double mat[3][3], double b[3], double res[3], double *det){ + int out; + + out = sys3x3(mat,b,res,det); + + if (fabs(*det) < 1.e-12){ + Msg(INFOS, "Assuming 3x3 Matrix is Singular (Is this OK?)"); + res[0] = res[1] = res[2] = 0.0 ; + return (0); + } + + return out ; +} + int det3x3 (double mat[3][3], double *det){ *det = mat[0][0] * (mat[1][1] * mat[2][2] - mat[1][2] * mat[2][1]) - mat[0][1] * (mat[1][0] * mat[2][2] - mat[1][2] * mat[2][0]) + diff --git a/Mesh/Numeric.h b/Mesh/Numeric.h index e788964a5c84a319f5ec1a1136ef3576f8e90de7..905141c96c80f228f74e2a1a2d6bb3192774d8e4 100644 --- a/Mesh/Numeric.h +++ b/Mesh/Numeric.h @@ -1,4 +1,4 @@ -/* $Id: Numeric.h,v 1.3 2000-11-26 15:43:47 geuzaine Exp $ */ +/* $Id: Numeric.h,v 1.4 2000-12-18 08:31:58 geuzaine Exp $ */ #ifndef _NUMERIC_H_ #define _NUMERIC_H_ @@ -11,6 +11,7 @@ void direction (Vertex * v1, Vertex * v2, double d[3]); void Projette (Vertex * v, double mat[3][3]); int sys2x2 (double mat[2][2], double b[2], double res[2]); int sys3x3 (double mat[3][3], double b[3], double res[3], double *det); +int sys3x3_with_tol (double mat[3][3], double b[3], double res[3], double *det); int det3x3 (double mat[3][3], double *det); int inv3x3 (double mat[3][3], double inv[3][3], double *det); void find_bestuv (Surface * s, double X, double Y,