diff --git a/parcsr_ls/ads.c b/parcsr_ls/ads.c index aa0a72023..42e2ab1c1 100644 --- a/parcsr_ls/ads.c +++ b/parcsr_ls/ads.c @@ -973,12 +973,16 @@ HYPRE_Int hypre_ADSSetup(void *solver, /* Construct the coarse space matrix by RAP */ if (!ads_data -> A_C) { + HYPRE_Int C_owned_col_starts; + if (!hypre_ParCSRMatrixCommPkg(ads_data -> C)) hypre_MatvecCommPkgCreate(ads_data -> C); if (!hypre_ParCSRMatrixCommPkg(ads_data -> A)) hypre_MatvecCommPkgCreate(ads_data -> A); + C_owned_col_starts = hypre_ParCSRMatrixOwnsColStarts(ads_data -> C); + hypre_BoomerAMGBuildCoarseOperator(ads_data -> C, ads_data -> A, ads_data -> C, @@ -988,7 +992,7 @@ HYPRE_Int hypre_ADSSetup(void *solver, in part of the domain). */ hypre_ParCSRMatrixFixZeroRows(ads_data -> A_C); - hypre_ParCSRMatrixOwnsColStarts(ads_data -> C) = 1; + hypre_ParCSRMatrixOwnsColStarts(ads_data -> C) = C_owned_col_starts; hypre_ParCSRMatrixOwnsRowStarts(ads_data -> A_C) = 0; } diff --git a/parcsr_ls/ams.c b/parcsr_ls/ams.c index fb8748695..f9c6f3967 100644 --- a/parcsr_ls/ams.c +++ b/parcsr_ls/ams.c @@ -2198,12 +2198,16 @@ HYPRE_Int hypre_AMSSetup(void *solver, /* If not given, construct the coarse space matrix by RAP */ if (!ams_data -> A_G) { + HYPRE_Int G_owned_col_starts; + if (!hypre_ParCSRMatrixCommPkg(ams_data -> G)) hypre_MatvecCommPkgCreate(ams_data -> G); if (!hypre_ParCSRMatrixCommPkg(ams_data -> A)) hypre_MatvecCommPkgCreate(ams_data -> A); + G_owned_col_starts = hypre_ParCSRMatrixOwnsColStarts(ams_data -> G); + hypre_BoomerAMGBuildCoarseOperator(ams_data -> G, ams_data -> A, ams_data -> G, @@ -2213,7 +2217,7 @@ HYPRE_Int hypre_AMSSetup(void *solver, if beta is zero in part of the domain). */ hypre_ParCSRMatrixFixZeroRows(ams_data -> A_G); - hypre_ParCSRMatrixOwnsColStarts(ams_data -> G) = 1; + hypre_ParCSRMatrixOwnsColStarts(ams_data -> G) = G_owned_col_starts; hypre_ParCSRMatrixOwnsRowStarts(ams_data -> A_G) = 0; ams_data -> owns_A_G = 1;