Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
351a503
Add ParCSR overlap capabilities
victorapm Dec 29, 2025
57b655f
Autotools builds + fix warnings
victorapm Dec 29, 2025
b0b91ac
Merge branch 'master' into parcsr-overlap
victorapm Jan 5, 2026
23dc971
Code style
victorapm Jan 5, 2026
ae31b57
Add unit test for ParCSRMatrix overlap
victorapm Jan 5, 2026
f41ad75
Bug fix in hypre_ParCSRMatrixComputeOverlap
victorapm Jan 6, 2026
010ae72
Add Test 4: 2D grid, 1D part, overlap 2
victorapm Jan 6, 2026
073887b
Simplify hypre_ParCSRMatrixComputeOverlap
victorapm Jan 6, 2026
eac8dba
Add Test 5: 2D grid, 2D part, overlap 1
victorapm Jan 6, 2026
ea7b472
Add Test 6: 2D grid, 2D part, overlap 2
victorapm Jan 6, 2026
3aef506
Add Test 7: 2D grid, 2D part, overlap 3
victorapm Jan 6, 2026
6b3a0ba
Update variable/function names + cleanup
victorapm Jan 6, 2026
5e16285
Add Test 8: 3D grid, 3D part, overlap 1
victorapm Jan 7, 2026
3a19fb2
Add Test 9: 3D grid, 3D part, overlap 6 (full)
victorapm Jan 7, 2026
de42862
Add benchmark mode to test_csr_overlap
victorapm Jan 7, 2026
3c56880
Fix typo
victorapm Jan 7, 2026
93d3495
Add mixed precision code
victorapm Jan 7, 2026
32b56a2
Merge branch 'master' into parcsr-overlap
victorapm Jan 13, 2026
7509ec2
Merge branch 'master' into parcsr-overlap
victorapm Jan 23, 2026
24f1869
Code style
victorapm Jan 23, 2026
8b5cb0b
Fix data type issue
victorapm Jan 23, 2026
9a325f1
Run code checks in parallel
victorapm Jan 23, 2026
a712cbf
Fix MPI check
victorapm Jan 23, 2026
d8ed2db
Check headers fix
victorapm Jan 23, 2026
a349b8e
Install deps
victorapm Jan 23, 2026
79f97f7
Missed libopenmpi
victorapm Jan 23, 2026
326254d
Fix compilation warnings
victorapm Jan 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/parcsr_mv/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ set(REGULAR_SRCS
par_csr_communication.c
par_csr_filter.c
par_csr_matop.c
par_csr_overlap.c
par_csr_matrix.c
par_csr_matrix_stats.c
par_csr_matmat.c
Expand Down
2 changes: 2 additions & 0 deletions src/parcsr_mv/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ HEADERS =\
par_chord_matrix.h\
par_csr_communication.h\
par_csr_matrix.h\
par_csr_overlap.h\
par_vector.h

FILES =\
Expand All @@ -52,6 +53,7 @@ FILES =\
par_csr_matmat.c\
par_csr_matvec.c\
par_csr_matop_marked.c\
par_csr_overlap.c\
par_csr_triplemat.c\
par_make_system.c\
par_vector.c\
Expand Down
85 changes: 85 additions & 0 deletions src/parcsr_mv/_hypre_parcsr_mv.h
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,78 @@ typedef struct
#define hypre_ParCSRBooleanMatrix_Get_Getrowactive(matrix) ((matrix)->getrowactive)

#endif
/******************************************************************************
* Copyright (c) 1998 Lawrence Livermore National Security, LLC and other
* HYPRE Project Developers. See the top-level COPYRIGHT file for details.
*
* SPDX-License-Identifier: (Apache-2.0 OR MIT)
******************************************************************************/

/******************************************************************************
*
* Header info for overlapping domain decomposition
*
*****************************************************************************/

#ifndef hypre_PAR_CSR_OVERLAP_HEADER
#define hypre_PAR_CSR_OVERLAP_HEADER

/*--------------------------------------------------------------------------
* hypre_OverlapData
*
* Data structure for overlapping domain decomposition.
* Stores information about the extended subdomain for a processor.
*--------------------------------------------------------------------------*/

typedef struct hypre_OverlapData_struct
{
/* Overlap configuration */
HYPRE_Int overlap_order; /* Overlap order (delta >= 0) */

/* Original local partition info */
HYPRE_Int num_local_rows; /* Original local rows */
HYPRE_BigInt first_row_index; /* First row owned by this proc */
HYPRE_BigInt last_row_index; /* Last row owned by this proc */

/* Extended subdomain information */
HYPRE_Int num_extended_rows; /* Total rows in extended domain */
HYPRE_Int num_overlap_rows; /* External rows (from overlap) */
HYPRE_BigInt *extended_row_indices; /* Global indices of all extended rows */

/* Mapping arrays */
HYPRE_Int *global_to_extended; /* Map: global row -> extended local index */
HYPRE_Int *extended_to_global; /* Map: extended index -> global row offset */
HYPRE_Int *row_is_owned; /* 1 if row is owned, 0 if external */

/* Communication package for fetching overlap data */
hypre_ParCSRCommPkg *overlap_comm_pkg;

/* External rows CSR matrix (fetched from other procs) */
hypre_CSRMatrix *external_rows; /* CSR matrix of external rows */
HYPRE_BigInt *external_row_map; /* Global row indices for external rows */

} hypre_OverlapData;

/*--------------------------------------------------------------------------
* Accessor macros for hypre_OverlapData
*--------------------------------------------------------------------------*/

#define hypre_OverlapDataOverlapOrder(data) ((data)->overlap_order)
#define hypre_OverlapDataNumLocalRows(data) ((data)->num_local_rows)
#define hypre_OverlapDataFirstRowIndex(data) ((data)->first_row_index)
#define hypre_OverlapDataLastRowIndex(data) ((data)->last_row_index)
#define hypre_OverlapDataNumExtendedRows(data) ((data)->num_extended_rows)
#define hypre_OverlapDataNumOverlapRows(data) ((data)->num_overlap_rows)
#define hypre_OverlapDataExtendedRowIndices(data) ((data)->extended_row_indices)
#define hypre_OverlapDataGlobalToExtended(data) ((data)->global_to_extended)
#define hypre_OverlapDataExtendedToGlobal(data) ((data)->extended_to_global)
#define hypre_OverlapDataRowIsOwned(data) ((data)->row_is_owned)
#define hypre_OverlapDataOverlapCommPkg(data) ((data)->overlap_comm_pkg)
#define hypre_OverlapDataExternalRows(data) ((data)->external_rows)
#define hypre_OverlapDataExternalRowMap(data) ((data)->external_row_map)

#endif /* hypre_PAR_CSR_OVERLAP_HEADER */

/******************************************************************************
* Copyright (c) 1998 Lawrence Livermore National Security, LLC and other
* HYPRE Project Developers. See the top-level COPYRIGHT file for details.
Expand Down Expand Up @@ -1307,6 +1379,19 @@ HYPRE_Int hypre_ParVectorGetValuesDevice(hypre_ParVector *vector, HYPRE_Int num_
/* HYPRE_parcsr_vector.c */
HYPRE_Int hypre_ParVectorStridedCopy( hypre_ParVector *x, HYPRE_Int istride, HYPRE_Int ostride,
HYPRE_Int size, HYPRE_Complex *data );

/* par_csr_overlap.c */
hypre_OverlapData* hypre_OverlapDataCreate( void );
HYPRE_Int hypre_OverlapDataDestroy( hypre_OverlapData *overlap_data );
HYPRE_Int hypre_ParCSRMatrixComputeOverlap( hypre_ParCSRMatrix *A, HYPRE_Int overlap_order,
hypre_OverlapData **overlap_data_ptr );
HYPRE_Int hypre_ParCSRMatrixGetOverlapRows( hypre_ParCSRMatrix *A,
hypre_OverlapData *overlap_data );
HYPRE_Int hypre_ParCSRMatrixExtractLocalOverlap( hypre_ParCSRMatrix *A,
hypre_OverlapData *overlap_data,
hypre_CSRMatrix **A_local_ptr,
HYPRE_BigInt **col_map_ptr,
HYPRE_Int *num_cols_local_ptr );
/******************************************************************************
* Copyright (c) 1998 Lawrence Livermore National Security, LLC and other
* HYPRE Project Developers. See the top-level COPYRIGHT file for details.
Expand Down
1 change: 1 addition & 0 deletions src/parcsr_mv/headers
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ cat par_csr_assumed_part.h >> $INTERNAL_HEADER
cat new_commpkg.h >> $INTERNAL_HEADER
cat par_vector.h >> $INTERNAL_HEADER
cat par_csr_matrix.h >> $INTERNAL_HEADER
cat par_csr_overlap.h >> $INTERNAL_HEADER
cat numbers.h >> $INTERNAL_HEADER
cat par_chord_matrix.h >> $INTERNAL_HEADER
cat par_make_system.h >> $INTERNAL_HEADER
Expand Down
4 changes: 2 additions & 2 deletions src/parcsr_mv/par_csr_matrix.c
Original file line number Diff line number Diff line change
Expand Up @@ -977,7 +977,7 @@ hypre_ParCSRMatrixPrintIJ( const hypre_ParCSRMatrix *matrix,

if ((file = fopen(new_filename, "w")) == NULL)
{
hypre_error_w_msg(HYPRE_ERROR_GENERIC, "Error: can't open output file %s\n");
hypre_error_w_msg(HYPRE_ERROR_GENERIC, "Error: can't open output file\n");
return hypre_error_flag;
}

Expand Down Expand Up @@ -1435,7 +1435,7 @@ hypre_ParCSRMatrixReadIJ( MPI_Comm comm,

if ((file = fopen(new_filename, "r")) == NULL)
{
hypre_error_w_msg(HYPRE_ERROR_GENERIC, "Error: can't open output file %s\n");
hypre_error_w_msg(HYPRE_ERROR_GENERIC, "Error: can't open output file\n");
return hypre_error_flag;
}

Expand Down
Loading