From de3046fedda04089c21150aea69edc3b93e2f06b Mon Sep 17 00:00:00 2001 From: Algiane Froehly Date: Tue, 12 Sep 2023 09:26:10 +0200 Subject: [PATCH 1/3] Fix issue with initialization to INT_MAX when Mmg is built with int64_t integers. --- src/common/mmg2.c | 8 +++++++- src/mmg2d/API_functions_2d.c | 10 +++++++++- src/mmg2d/hash_2d.c | 17 +++++++++++++++-- src/mmg3d/API_functions_3d.c | 10 +++++++++- src/mmg3d/hash_3d.c | 18 ++++++++++++++++-- src/mmgs/API_functions_s.c | 10 +++++++++- 6 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/common/mmg2.c b/src/common/mmg2.c index 034381442..6bb8a2e12 100644 --- a/src/common/mmg2.c +++ b/src/common/mmg2.c @@ -344,7 +344,13 @@ int MMG5_MultiMat_init(MMG5_pMesh mesh) { /* Initialize the max and min reference */ refmax = 0; - refmin = INT_MAX; + + if ( sizeof(MMG5_int) == 8 ) { + refmin = LONG_MAX; + } + else { + refmin = INT_MAX; + } /* Look for the max/min reference provided in material table */ for( k = 0; k < mesh->info.nmat; k++ ) { diff --git a/src/mmg2d/API_functions_2d.c b/src/mmg2d/API_functions_2d.c index d15f0a4e1..0f35f518f 100644 --- a/src/mmg2d/API_functions_2d.c +++ b/src/mmg2d/API_functions_2d.c @@ -220,9 +220,17 @@ int MMG2D_Set_iparameter(MMG5_pMesh mesh, MMG5_pSol sol, int iparam, MMG5_int va return 0); MMG5_SAFE_CALLOC(mesh->info.par,mesh->info.npar,MMG5_Par,return 0); + MMG5_int inival; + if ( sizeof(MMG5_int) == 8 ) { + inival = LONG_MAX; + } + else { + inival = INT_MAX; + } + for (k=0; kinfo.npar; k++) { mesh->info.par[k].elt = MMG5_Noentity; - mesh->info.par[k].ref = INT_MAX; + mesh->info.par[k].ref = inival; mesh->info.par[k].hausd = mesh->info.hausd; mesh->info.par[k].hmin = mesh->info.hmin; mesh->info.par[k].hmax = mesh->info.hmax; diff --git a/src/mmg2d/hash_2d.c b/src/mmg2d/hash_2d.c index 63b06efc0..c3b375b59 100644 --- a/src/mmg2d/hash_2d.c +++ b/src/mmg2d/hash_2d.c @@ -55,7 +55,13 @@ int MMG2D_hashTria(MMG5_pMesh mesh) { hsize = mesh->nt; /* init */ - inival = INT_MAX; + if ( sizeof(MMG5_int) == 8 ) { + inival = LONG_MAX; + } + else { + inival = INT_MAX; + } + for (k=0; k<=mesh->nt; k++) hcode[k] = -inival; @@ -185,7 +191,14 @@ int MMG2D_hashQuad(MMG5_pMesh mesh) { /* init */ if ( mesh->info.ddebug ) fprintf(stdout," h- stage 1: init\n"); - inival = INT_MAX; + + if ( sizeof(MMG5_int) == 8 ) { + inival = LONG_MAX; + } + else { + inival = INT_MAX; + } + iadr = 0; for (k=0; k<=mesh->nquad; k++) hcode[k] = -inival; diff --git a/src/mmg3d/API_functions_3d.c b/src/mmg3d/API_functions_3d.c index 351ed86e1..fc8f15165 100644 --- a/src/mmg3d/API_functions_3d.c +++ b/src/mmg3d/API_functions_3d.c @@ -2230,9 +2230,17 @@ int MMG3D_Set_iparameter(MMG5_pMesh mesh, MMG5_pSol sol, int iparam,MMG5_int val return 0); MMG5_SAFE_CALLOC(mesh->info.par,mesh->info.npar,MMG5_Par,return 0); + MMG5_int inival; + if ( sizeof(MMG5_int) == 8 ) { + inival = LONG_MAX; + } + else { + inival = INT_MAX; + } + for (k=0; kinfo.npar; k++) { mesh->info.par[k].elt = MMG5_Noentity; - mesh->info.par[k].ref = INT_MAX; + mesh->info.par[k].ref = inival; mesh->info.par[k].hausd = mesh->info.hausd; mesh->info.par[k].hmin = mesh->info.hmin; mesh->info.par[k].hmax = mesh->info.hmax; diff --git a/src/mmg3d/hash_3d.c b/src/mmg3d/hash_3d.c index f947e2f2d..1eed64744 100644 --- a/src/mmg3d/hash_3d.c +++ b/src/mmg3d/hash_3d.c @@ -151,7 +151,14 @@ int MMG3D_hashTetra(MMG5_pMesh mesh, int pack) { /* init */ if ( mesh->info.ddebug ) fprintf(stdout," h- stage 1: init\n"); - inival = INT_MAX; + + if ( sizeof(MMG5_int) == 8 ) { + inival = LONG_MAX; + } + else { + inival = INT_MAX; + } + iadr = 0; for (k=0; k<=mesh->ne; k++) hcode[k] = -inival; @@ -270,7 +277,14 @@ int MMG3D_hashPrism(MMG5_pMesh mesh) { /* init */ if ( mesh->info.ddebug ) fprintf(stdout," h- stage 1: init\n"); - inival = INT_MAX; + + if ( sizeof(MMG5_int) == 8 ) { + inival = LONG_MAX; + } + else { + inival = INT_MAX; + } + iadr = 0; for (k=0; k<=mesh->nprism; k++) hcode[k] = -inival; diff --git a/src/mmgs/API_functions_s.c b/src/mmgs/API_functions_s.c index d434f4113..eef8bb36d 100644 --- a/src/mmgs/API_functions_s.c +++ b/src/mmgs/API_functions_s.c @@ -1389,9 +1389,17 @@ int MMGS_Set_iparameter(MMG5_pMesh mesh, MMG5_pSol sol, int iparam, MMG5_int val return 0); MMG5_SAFE_CALLOC(mesh->info.par,mesh->info.npar,MMG5_Par,return 0); + MMG5_int inival; + if ( sizeof(MMG5_int) == 8 ) { + inival = LONG_MAX; + } + else { + inival = INT_MAX; + } + for (k=0; kinfo.npar; k++) { mesh->info.par[k].elt = MMG5_Noentity; - mesh->info.par[k].ref = INT_MAX; + mesh->info.par[k].ref = inival; mesh->info.par[k].hausd = mesh->info.hausd; mesh->info.par[k].hmin = mesh->info.hmin; mesh->info.par[k].hmax = mesh->info.hmax; From fec3aeee237ed7aa1cfb80843f9ef19b433cdc89 Mon Sep 17 00:00:00 2001 From: Algiane Froehly Date: Mon, 26 Jun 2023 16:43:15 +0200 Subject: [PATCH 2/3] Fix wrong array initialization (int64 bit compilation). --- src/mmg3d/quality_3d.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mmg3d/quality_3d.c b/src/mmg3d/quality_3d.c index a790e64db..98724323d 100644 --- a/src/mmg3d/quality_3d.c +++ b/src/mmg3d/quality_3d.c @@ -233,7 +233,7 @@ int MMG3D_computePrilen( MMG5_pMesh mesh, MMG5_pSol met, double* avlen, static double bd[9]= {0.0, 0.3, 0.6, 0.7071, 0.9, 1.3, 1.4142, 2.0, 5.0}; *bd_in = bd; - memset(hl,0,9*sizeof(int)); + memset(hl,0,9*sizeof(MMG5_int)); *ned = 0; *avlen = 0.0; *lmax = 0.0; From a7755c75fd6250f88cf11c21ac8feb7dfd59f828 Mon Sep 17 00:00:00 2001 From: Algiane Froehly Date: Tue, 6 Jun 2023 11:53:00 +0200 Subject: [PATCH 3/3] Fix wrong integer size. --- src/mmg3d/colver_3d.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mmg3d/colver_3d.c b/src/mmg3d/colver_3d.c index 1b14746c1..16a684599 100644 --- a/src/mmg3d/colver_3d.c +++ b/src/mmg3d/colver_3d.c @@ -624,8 +624,8 @@ int MMG5_chkcol_bdy(MMG5_pMesh mesh,MMG5_pSol met,MMG5_int k,int8_t iface, * shell because some MG_BDY tags may be missings due to the creation * of an xtetra during a previous collapse */ if ( !(pxt->ftag[i] & MG_BDY) ) { - int16_t tag0,tag1,tag2; - int ref0,ref1,ref2; + int16_t tag0,tag1,tag2; + MMG5_int ref0,ref1,ref2; tag0 = tag1 = tag2 = 0; ref0 = ref1 = ref2 = 0;