diff --git a/src/mmg2d/inout_2d.c b/src/mmg2d/inout_2d.c index 685264ef6..8ad3f048d 100644 --- a/src/mmg2d/inout_2d.c +++ b/src/mmg2d/inout_2d.c @@ -978,6 +978,21 @@ int MMG2D_loadSol(MMG5_pMesh mesh,MMG5_pSol sol,const char *filename) { fclose(inm); + /* For anisotropic metric, check that eigenvalues are stricly positive*/ + if ( sol->size == 3 ) { + for (k=1; k<=sol->np; k++) { + double lambda[2],vp[2][2]; + MMG5_eigensym(sol->m+3*k,lambda,vp); + + if (!(lambda[0] > 0. && lambda[1] > 0.)) { + fprintf(stderr, " ## Error: At least one negative eigenvalue in" + " provided metric file : %lf %lf \n", lambda[0], + lambda[1]); + return -1; + } + } + } + /* stats */ MMG5_printMetStats(mesh,sol); @@ -1092,6 +1107,24 @@ int MMG2D_loadAllSols(MMG5_pMesh mesh,MMG5_pSol *sol, const char *filename) { } fclose(inm); + /* For anisotropic metric, check that eigenvalues are stricly positive*/ + for ( j=0; jsize == 3 ) { + for ( k=1; k<=psl->np; k++ ) { + double lambda[2],vp[2][2]; + MMG5_eigensym(psl->m+3*k,lambda,vp); + + if (!(lambda[0] > 0. && lambda[1] > 0.)) { + fprintf(stderr, " ## Error: At least one negative eigenvalue in" + " provided metric file : %lf %lf \n", lambda[0], + lambda[1]); + return -1; + } + } + } + } + /* stats */ MMG5_printSolStats(mesh,sol); diff --git a/src/mmg3d/inout_3d.c b/src/mmg3d/inout_3d.c index 84701a8b8..3c43de617 100644 --- a/src/mmg3d/inout_3d.c +++ b/src/mmg3d/inout_3d.c @@ -2207,6 +2207,21 @@ int MMG3D_loadSol(MMG5_pMesh mesh,MMG5_pSol met, const char *filename) { fclose(inm); + /* For anisotropic metric, check that eigenvalues are stricly positive*/ + if ( met->size == 6 ) { + for (k=1; k<=met->np; k++) { + double lambda[3],vp[3][3]; + MMG5_eigenv3d(1,met->m+6*k,lambda,vp); + + if (!(lambda[0] > 0. && lambda[1] > 0. && lambda[2] > 0.)) { + fprintf(stderr, " ## Error: At least one negative eigenvalue in" + " provided metric file : %lf %lf %lf \n", lambda[0], + lambda[1], lambda[2]); + return -1; + } + } + } + /* stats */ MMG5_printMetStats(mesh,met); @@ -2305,6 +2320,24 @@ int MMG3D_loadAllSols(MMG5_pMesh mesh,MMG5_pSol *sol, const char *filename) { } fclose(inm); + /* For anisotropic metric, check that eigenvalues are stricly positive*/ + for ( j=0; jsize == 6 ) { + for (k=1; k<=psl->np; k++) { + double lambda[3],vp[3][3]; + MMG5_eigenv3d(1,psl->m+6*k,lambda,vp); + + if (!(lambda[0] > 0. && lambda[1] > 0. && lambda[2] > 0.)) { + fprintf(stderr, " ## Error: At least one negative eigenvalue in" + " provided metric file : %lf %lf %lf \n", lambda[0], + lambda[1], lambda[2]); + return -1; + } + } + } + } + /* stats */ MMG5_printSolStats(mesh,sol); diff --git a/src/mmgs/inout_s.c b/src/mmgs/inout_s.c index 222717b6b..abfbeef4c 100644 --- a/src/mmgs/inout_s.c +++ b/src/mmgs/inout_s.c @@ -1378,6 +1378,21 @@ int MMGS_loadSol(MMG5_pMesh mesh,MMG5_pSol met,const char* filename) { fclose(inm); + /* For anisotropic metric, check that eigenvalues are stricly positive*/ + if ( met->size == 6 ) { + for (k=1; k<=met->np; k++) { + double lambda[3],vp[3][3]; + MMG5_eigenv3d(1,met->m+6*k,lambda,vp); + + if (!(lambda[0] > 0. && lambda[1] > 0. && lambda[2] > 0.)) { + fprintf(stderr, " ## Error: At least one negative eigenvalue in" + " provided metric file : %lf %lf %lf \n", lambda[0], + lambda[1], lambda[2]); + return -1; + } + } + } + /* stats */ MMG5_printMetStats(mesh,met); @@ -1474,6 +1489,24 @@ int MMGS_loadAllSols(MMG5_pMesh mesh,MMG5_pSol *sol, const char *filename) { } fclose(inm); + /* For anisotropic metric, check that eigenvalues are stricly positive*/ + for ( j=0; jsize == 6 ) { + for (k=1; k<=psl->np; k++) { + double lambda[3],vp[3][3]; + MMG5_eigenv3d(1,psl->m+6*k,lambda,vp); + + if (!(lambda[0] > 0. && lambda[1] > 0. && lambda[2] > 0.)) { + fprintf(stderr, " ## Error: At least one negative eigenvalue in" + " provided metric file : %lf %lf %lf \n", lambda[0], + lambda[1], lambda[2]); + return -1; + } + } + } + } + /* stats */ MMG5_printSolStats(mesh,sol);