add a func (#646)

This PR adds a function to perform local transposition of ParCSR.
This commit is contained in:
Ruipeng Li 2022-06-21 08:52:21 -07:00 committed by GitHub
parent ac9d7d0d7b
commit b58585e0f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 0 deletions

View File

@ -925,6 +925,7 @@ HYPRE_Int hypre_ParCSRMatrixExtractBExtDeviceInit( hypre_ParCSRMatrix *B, hypre_
hypre_CSRMatrix* hypre_ParCSRMatrixExtractBExtDeviceWait(void *request);
hypre_CSRMatrix* hypre_ParCSRMatrixExtractBExtDevice( hypre_ParCSRMatrix *B, hypre_ParCSRMatrix *A,
HYPRE_Int want_data );
HYPRE_Int hypre_ParCSRMatrixLocalTranspose( hypre_ParCSRMatrix *A );
HYPRE_Int hypre_ParCSRMatrixTranspose ( hypre_ParCSRMatrix *A, hypre_ParCSRMatrix **AT_ptr,
HYPRE_Int data );
HYPRE_Int hypre_ParCSRMatrixTransposeHost ( hypre_ParCSRMatrix *A, hypre_ParCSRMatrix **AT_ptr,

View File

@ -2178,6 +2178,37 @@ hypre_ParCSRMatrixTranspose( hypre_ParCSRMatrix *A,
return hypre_error_flag;
}
/*--------------------------------------------------------------------------
* hypre_ParCSRMatrixLocalTranspose
*--------------------------------------------------------------------------*/
HYPRE_Int
hypre_ParCSRMatrixLocalTranspose( hypre_ParCSRMatrix *A )
{
if (!hypre_ParCSRMatrixDiagT(A))
{
hypre_CSRMatrix *A_diag = hypre_ParCSRMatrixDiag(A);
if (A_diag)
{
hypre_CSRMatrix *AT_diag = NULL;
hypre_CSRMatrixTranspose(A_diag, &AT_diag, 1);
hypre_ParCSRMatrixDiagT(A) = AT_diag;
}
}
if (!hypre_ParCSRMatrixOffdT(A))
{
hypre_CSRMatrix *A_offd = hypre_ParCSRMatrixOffd(A);
if (A_offd)
{
hypre_CSRMatrix *AT_offd = NULL;
hypre_CSRMatrixTranspose(A_offd, &AT_offd, 1);
hypre_ParCSRMatrixOffdT(A) = AT_offd;
}
}
return hypre_error_flag;
}
/* -----------------------------------------------------------------------------
* generate a parallel spanning tree (for Maxwell Equation)
* G_csr is the node to edge connectivity matrix

View File

@ -292,6 +292,7 @@ HYPRE_Int hypre_ParCSRMatrixExtractBExtDeviceInit( hypre_ParCSRMatrix *B, hypre_
hypre_CSRMatrix* hypre_ParCSRMatrixExtractBExtDeviceWait(void *request);
hypre_CSRMatrix* hypre_ParCSRMatrixExtractBExtDevice( hypre_ParCSRMatrix *B, hypre_ParCSRMatrix *A,
HYPRE_Int want_data );
HYPRE_Int hypre_ParCSRMatrixLocalTranspose( hypre_ParCSRMatrix *A );
HYPRE_Int hypre_ParCSRMatrixTranspose ( hypre_ParCSRMatrix *A, hypre_ParCSRMatrix **AT_ptr,
HYPRE_Int data );
HYPRE_Int hypre_ParCSRMatrixTransposeHost ( hypre_ParCSRMatrix *A, hypre_ParCSRMatrix **AT_ptr,