From 794080e386bc2d0fd42683736d912f4fd3eb208b Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Fri, 22 Oct 2021 08:14:26 -0400 Subject: [PATCH] Fix target coarse size handling. --- .../amg_d_parmatch_aggregator_tprol.F90 | 26 +++++++++---------- .../amg_s_parmatch_aggregator_tprol.F90 | 26 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/amgprec/impl/aggregator/amg_d_parmatch_aggregator_tprol.F90 b/amgprec/impl/aggregator/amg_d_parmatch_aggregator_tprol.F90 index 5ae47718..1356845b 100644 --- a/amgprec/impl/aggregator/amg_d_parmatch_aggregator_tprol.F90 +++ b/amgprec/impl/aggregator/amg_d_parmatch_aggregator_tprol.F90 @@ -68,7 +68,7 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,& real(psb_dpk_), allocatable :: tmpw(:), tmpwnxt(:) integer(psb_lpk_), allocatable :: ixaggr(:), nxaggr(:), tlaggr(:), ivr(:) type(psb_dspmat_type) :: a_tmp - integer(c_int) :: match_algorithm, n_sweeps, max_csize, max_nlevels + integer(c_int) :: match_algorithm, n_sweeps, target_csize, max_nlevels character(len=40) :: name, ch_err character(len=80) :: fname, prefix_ type(psb_ctxt_type) :: ictxt @@ -128,10 +128,10 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,& write(debug_unit, *) 'Warning: AGGR_SIZE reset to value ',2**n_sweeps end if end if - if (ag%max_csize > 0) then - max_csize = ag%max_csize + if (ag_data%target_coarse_size > 0) then + target_csize = ag_data%target_coarse_size else - max_csize = ag_data%min_coarse_size + target_csize = ag_data%min_coarse_size end if if (ag%max_nlevels > 0) then max_nlevels = ag%max_nlevels @@ -141,14 +141,14 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,& if (.true.) then block integer(psb_ipk_) :: ipv(2) - ipv(1) = max_csize + ipv(1) = target_csize ipv(2) = n_sweeps call psb_bcast(ictxt,ipv) - max_csize = ipv(1) + target_csize = ipv(1) n_sweeps = ipv(2) end block else - call psb_bcast(ictxt,max_csize) + call psb_bcast(ictxt,target_csize) call psb_bcast(ictxt,n_sweeps) end if if (n_sweeps /= ag%n_sweeps) then @@ -156,7 +156,7 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,& end if !!$ if (me==0) write(0,*) 'Matching sweeps: ',n_sweeps n_sweeps = max(1,n_sweeps) - if (debug) write(0,*) me,' Copies, with n_sweeps: ',n_sweeps,max_csize + if (debug) write(0,*) me,' Copies, with n_sweeps: ',n_sweeps,target_csize if (ag%unsmoothed_hierarchy.and.allocated(ag%base_a)) then call ag%base_a%cp_to(acsr) if (ag%do_clean_zeros) call acsr%clean_zeros(info) @@ -242,7 +242,7 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,& if (debug) then call psb_barrier(ictxt) - if (me == 0) write(0,*) 'N_sweeps ',n_sweeps,nr,desc_acv(0)%is_ok(),max_csize + if (me == 0) write(0,*) 'N_sweeps ',n_sweeps,nr,desc_acv(0)%is_ok(),target_csize end if ! @@ -300,11 +300,11 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,& if (debug) then call psb_barrier(ictxt) - if (me==0) write(0,*) me,trim(name),' Done mat_asb:',i,sum(nxaggr),max_csize,info + if (me==0) write(0,*) me,trim(name),' Done mat_asb:',i,sum(nxaggr),target_csize,info csz = sum(nxaggr) call psb_bcast(ictxt,csz) if (csz /= sum(nxaggr)) write(0,*) me,trim(name),' Mismatch matasb',& - & csz,sum(nxaggr),max_csize + & csz,sum(nxaggr),target_csize end if if (psb_errstatus_fatal()) write(0,*)me,trim(name),'Error fatal on entry to tmpwnxt 2' @@ -342,10 +342,10 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,& call move_alloc(tmpwnxt,tmpw) if (debug) then if (csz /= sum(nlaggr)) write(0,*) me,trim(name),' Mismatch 2 matasb',& - & csz,sum(nlaggr),max_csize, info + & csz,sum(nlaggr),target_csize, info end if call acv(i-1)%free() - if ((sum(nlaggr) <= max_csize).or.(any(nlaggr==0))) then + if ((sum(nlaggr) <= target_csize).or.(any(nlaggr==0))) then x_sweeps = i exit sweeps_loop end if diff --git a/amgprec/impl/aggregator/amg_s_parmatch_aggregator_tprol.F90 b/amgprec/impl/aggregator/amg_s_parmatch_aggregator_tprol.F90 index 28b63272..734f68da 100644 --- a/amgprec/impl/aggregator/amg_s_parmatch_aggregator_tprol.F90 +++ b/amgprec/impl/aggregator/amg_s_parmatch_aggregator_tprol.F90 @@ -68,7 +68,7 @@ subroutine amg_s_parmatch_aggregator_build_tprol(ag,parms,ag_data,& real(psb_spk_), allocatable :: tmpw(:), tmpwnxt(:) integer(psb_lpk_), allocatable :: ixaggr(:), nxaggr(:), tlaggr(:), ivr(:) type(psb_sspmat_type) :: a_tmp - integer(c_int) :: match_algorithm, n_sweeps, max_csize, max_nlevels + integer(c_int) :: match_algorithm, n_sweeps, target_csize, max_nlevels character(len=40) :: name, ch_err character(len=80) :: fname, prefix_ type(psb_ctxt_type) :: ictxt @@ -128,10 +128,10 @@ subroutine amg_s_parmatch_aggregator_build_tprol(ag,parms,ag_data,& write(debug_unit, *) 'Warning: AGGR_SIZE reset to value ',2**n_sweeps end if end if - if (ag%max_csize > 0) then - max_csize = ag%max_csize + if (ag_data%target_coarse_size > 0) then + target_csize = ag_data%target_coarse_size else - max_csize = ag_data%min_coarse_size + target_csize = ag_data%min_coarse_size end if if (ag%max_nlevels > 0) then max_nlevels = ag%max_nlevels @@ -141,14 +141,14 @@ subroutine amg_s_parmatch_aggregator_build_tprol(ag,parms,ag_data,& if (.true.) then block integer(psb_ipk_) :: ipv(2) - ipv(1) = max_csize + ipv(1) = target_csize ipv(2) = n_sweeps call psb_bcast(ictxt,ipv) - max_csize = ipv(1) + target_csize = ipv(1) n_sweeps = ipv(2) end block else - call psb_bcast(ictxt,max_csize) + call psb_bcast(ictxt,target_csize) call psb_bcast(ictxt,n_sweeps) end if if (n_sweeps /= ag%n_sweeps) then @@ -156,7 +156,7 @@ subroutine amg_s_parmatch_aggregator_build_tprol(ag,parms,ag_data,& end if !!$ if (me==0) write(0,*) 'Matching sweeps: ',n_sweeps n_sweeps = max(1,n_sweeps) - if (debug) write(0,*) me,' Copies, with n_sweeps: ',n_sweeps,max_csize + if (debug) write(0,*) me,' Copies, with n_sweeps: ',n_sweeps,target_csize if (ag%unsmoothed_hierarchy.and.allocated(ag%base_a)) then call ag%base_a%cp_to(acsr) if (ag%do_clean_zeros) call acsr%clean_zeros(info) @@ -242,7 +242,7 @@ subroutine amg_s_parmatch_aggregator_build_tprol(ag,parms,ag_data,& if (debug) then call psb_barrier(ictxt) - if (me == 0) write(0,*) 'N_sweeps ',n_sweeps,nr,desc_acv(0)%is_ok(),max_csize + if (me == 0) write(0,*) 'N_sweeps ',n_sweeps,nr,desc_acv(0)%is_ok(),target_csize end if ! @@ -300,11 +300,11 @@ subroutine amg_s_parmatch_aggregator_build_tprol(ag,parms,ag_data,& if (debug) then call psb_barrier(ictxt) - if (me==0) write(0,*) me,trim(name),' Done mat_asb:',i,sum(nxaggr),max_csize,info + if (me==0) write(0,*) me,trim(name),' Done mat_asb:',i,sum(nxaggr),target_csize,info csz = sum(nxaggr) call psb_bcast(ictxt,csz) if (csz /= sum(nxaggr)) write(0,*) me,trim(name),' Mismatch matasb',& - & csz,sum(nxaggr),max_csize + & csz,sum(nxaggr),target_csize end if if (psb_errstatus_fatal()) write(0,*)me,trim(name),'Error fatal on entry to tmpwnxt 2' @@ -342,10 +342,10 @@ subroutine amg_s_parmatch_aggregator_build_tprol(ag,parms,ag_data,& call move_alloc(tmpwnxt,tmpw) if (debug) then if (csz /= sum(nlaggr)) write(0,*) me,trim(name),' Mismatch 2 matasb',& - & csz,sum(nlaggr),max_csize, info + & csz,sum(nlaggr),target_csize, info end if call acv(i-1)%free() - if ((sum(nlaggr) <= max_csize).or.(any(nlaggr==0))) then + if ((sum(nlaggr) <= target_csize).or.(any(nlaggr==0))) then x_sweeps = i exit sweeps_loop end if