From db1364a392f2f58b1a49e457d9d2f0fdeceda388 Mon Sep 17 00:00:00 2001 From: Rui Peng Li Date: Fri, 1 Dec 2023 09:46:57 -0800 Subject: [PATCH] BigJ realloc (#623) This PR fixes reallocation issues with CSR BigJ arrays. --- src/seq_mv/csr_matrix.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/seq_mv/csr_matrix.c b/src/seq_mv/csr_matrix.c index ada5791ee..4e2924f60 100644 --- a/src/seq_mv/csr_matrix.c +++ b/src/seq_mv/csr_matrix.c @@ -165,8 +165,10 @@ hypre_CSRMatrixInitialize( hypre_CSRMatrix *matrix ) *--------------------------------------------------------------------------*/ HYPRE_Int -hypre_CSRMatrixResize( hypre_CSRMatrix *matrix, HYPRE_Int new_num_rows, HYPRE_Int new_num_cols, - HYPRE_Int new_num_nonzeros ) +hypre_CSRMatrixResize( hypre_CSRMatrix *matrix, + HYPRE_Int new_num_rows, + HYPRE_Int new_num_cols, + HYPRE_Int new_num_nonzeros ) { HYPRE_MemoryLocation memory_location = hypre_CSRMatrixMemoryLocation(matrix); HYPRE_Int old_num_nonzeros = hypre_CSRMatrixNumNonzeros(matrix); @@ -191,18 +193,26 @@ hypre_CSRMatrixResize( hypre_CSRMatrix *matrix, HYPRE_Int new_num_rows, HYPRE_In } else { - hypre_CSRMatrixData(matrix) = hypre_TReAlloc_v2(hypre_CSRMatrixData(matrix), HYPRE_Complex, - old_num_nonzeros, HYPRE_Complex, new_num_nonzeros, memory_location); + hypre_CSRMatrixData(matrix) = hypre_TReAlloc_v2(hypre_CSRMatrixData(matrix), HYPRE_Complex, old_num_nonzeros, + HYPRE_Complex, new_num_nonzeros, memory_location); } - if (!hypre_CSRMatrixJ(matrix)) + if (hypre_CSRMatrixBigJ(matrix)) { - hypre_CSRMatrixJ(matrix) = hypre_CTAlloc(HYPRE_Int, new_num_nonzeros, memory_location); + hypre_CSRMatrixBigJ(matrix) = hypre_TReAlloc_v2(hypre_CSRMatrixBigJ(matrix), HYPRE_BigInt, old_num_nonzeros, + HYPRE_BigInt, new_num_nonzeros, memory_location); } else { - hypre_CSRMatrixJ(matrix) = hypre_TReAlloc_v2(hypre_CSRMatrixJ(matrix), HYPRE_Int, old_num_nonzeros, - HYPRE_Int, new_num_nonzeros, memory_location); + if (!hypre_CSRMatrixJ(matrix)) + { + hypre_CSRMatrixJ(matrix) = hypre_CTAlloc(HYPRE_Int, new_num_nonzeros, memory_location); + } + else + { + hypre_CSRMatrixJ(matrix) = hypre_TReAlloc_v2(hypre_CSRMatrixJ(matrix), HYPRE_Int, old_num_nonzeros, + HYPRE_Int, new_num_nonzeros, memory_location); + } } }