diff -rupN --no-dereference gmsh-4.12.2-source/contrib/hxt/tetMesh/src/hxt_tetRefine.c gmsh-4.12.2-source-new/contrib/hxt/tetMesh/src/hxt_tetRefine.c
--- gmsh-4.12.2-source/contrib/hxt/tetMesh/src/hxt_tetRefine.c 2024-01-11 11:22:46.000000000 +0100
+++ gmsh-4.12.2-source-new/contrib/hxt/tetMesh/src/hxt_tetRefine.c 2024-01-27 23:09:41.938171865 +0100
@@ -297,11 +297,11 @@ static uint64_t* scanbsearch(uint64_t* a
* - startTet[maxThreads] = mesh->tetrahedra.num
* - `startPt[t+1] - startPt[t]` gives how many point will be created by thread t
*/
-static HXTStatus balanceRefineWork(HXTMesh* mesh, uint32_t* startPt, size_t* startTet, int maxThreads)
+static HXTStatus balanceRefineWork(HXTMesh* mesh, uint32_t* startPt, uint64_t* startTet, int maxThreads)
{
- size_t* scan;
+ uint64_t* scan;
uint32_t ptPerThreadGoal;
- HXT_CHECK( hxtAlignedMalloc(&scan, sizeof(size_t) * mesh->tetrahedra.num) );
+ HXT_CHECK( hxtAlignedMalloc(&scan, sizeof(uint64_t) * mesh->tetrahedra.num) );
#pragma omp parallel num_threads(maxThreads)
{
@@ -318,9 +318,9 @@ static HXTStatus balanceRefineWork(HXTMe
#pragma omp single
{
// we do a simple prefix sum
- size_t sum = 0;
+ uint32_t sum = 0;
for(int t=0; t<maxThreads; t++) {
- size_t tsum = sum + startPt[t];
+ uint32_t tsum = sum + startPt[t];
startPt[t] = sum;
sum = tsum;
}
@@ -334,16 +334,16 @@ static HXTStatus balanceRefineWork(HXTMe
// each thread finish the prefix sum in its own array
#pragma omp for
for(uint64_t i=0; i<mesh->tetrahedra.num; i++) {
- size_t inc = scan[i];
+ uint64_t inc = scan[i];
scan[i] = s;
s += inc;
}
- size_t scanToFind = threadID * ptPerThreadGoal;
+ uint64_t scanToFind = threadID * ptPerThreadGoal;
// we want to find i such that scan[i] = scanToFind.
// we do a simple binary search in the prefix scan array to find `i`
- size_t* pfnd = scanbsearch(scan, scanToFind, mesh->tetrahedra.num);
+ uint64_t* pfnd = scanbsearch(scan, scanToFind, mesh->tetrahedra.num);
startTet[threadID] = pfnd - scan;
if(startTet[threadID] < mesh->tetrahedra.num)
startPt[threadID] = *pfnd;