diff --git a/amgprec/amg_base_prec_type.F90 b/amgprec/amg_base_prec_type.F90 index dbe5fe5f..4ad8a4a0 100644 --- a/amgprec/amg_base_prec_type.F90 +++ b/amgprec/amg_base_prec_type.F90 @@ -1,15 +1,15 @@ -! -! +! +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2020 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2020 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,8 +33,8 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! ! File: amg_base_prec_type.F90 ! ! Module: amg_base_prec_type @@ -50,16 +50,16 @@ ! ! It contains routines for ! - converting character constants defining the preconditioner into integer -! constants; +! constants; ! - checking if the preconditioner is correctly defined; ! - printing a description of the preconditioner; -! - deallocating the preconditioner data structure. +! - deallocating the preconditioner data structure. ! module amg_base_prec_type ! - ! This reduces the size of .mod file. Without the ONLY clause compilation + ! This reduces the size of .mod file. Without the ONLY clause compilation ! blows up on some systems. ! use psb_const_mod @@ -78,7 +78,7 @@ module amg_base_prec_type & psb_err_from_subroutine_, psb_err_missing_override_method_, & & psb_error_handler, psb_out_unit, psb_err_unit - ! + ! ! Version numbers ! character(len=*), parameter :: amg_version_string_ = "1.0.0" @@ -120,7 +120,7 @@ module amg_base_prec_type procedure, pass(pm) :: printout => d_ml_parms_printout end type amg_dml_parms - + type amg_iaggr_data ! @@ -134,32 +134,32 @@ module amg_base_prec_type integer(psb_ipk_) :: min_coarse_size = -ione integer(psb_ipk_) :: min_coarse_size_per_process = -ione integer(psb_lpk_) :: target_coarse_size - ! 2. maximum number of levels. Defaults to 20 + ! 2. maximum number of levels. Defaults to 20 integer(psb_ipk_) :: max_levs = 20_psb_ipk_ end type amg_iaggr_data - + type, extends(amg_iaggr_data) :: amg_saggr_data - ! 3. min_cr_ratio = 1.5 + ! 3. min_cr_ratio = 1.5 real(psb_spk_) :: min_cr_ratio = 1.5_psb_spk_ real(psb_spk_) :: op_complexity = szero real(psb_spk_) :: avg_cr = szero end type amg_saggr_data type, extends(amg_iaggr_data) :: amg_daggr_data - ! 3. min_cr_ratio = 1.5 + ! 3. min_cr_ratio = 1.5 real(psb_dpk_) :: min_cr_ratio = 1.5_psb_dpk_ real(psb_dpk_) :: op_complexity = dzero real(psb_dpk_) :: avg_cr = dzero end type amg_daggr_data - + ! ! Entries in iprcparm ! ! These are in baseprec - ! - integer(psb_ipk_), parameter :: amg_smoother_type_ = 1 + ! + integer(psb_ipk_), parameter :: amg_smoother_type_ = 1 integer(psb_ipk_), parameter :: amg_sub_solve_ = 2 integer(psb_ipk_), parameter :: amg_sub_restr_ = 3 integer(psb_ipk_), parameter :: amg_sub_prol_ = 4 @@ -169,7 +169,7 @@ module amg_base_prec_type ! ! These are in onelev - ! + ! integer(psb_ipk_), parameter :: amg_ml_cycle_ = 20 integer(psb_ipk_), parameter :: amg_smoother_sweeps_pre_ = 21 integer(psb_ipk_), parameter :: amg_smoother_sweeps_post_ = 22 @@ -181,7 +181,7 @@ module amg_base_prec_type integer(psb_ipk_), parameter :: amg_aggr_eig_ = 28 integer(psb_ipk_), parameter :: amg_aggr_filter_ = 29 integer(psb_ipk_), parameter :: amg_coarse_mat_ = 30 - integer(psb_ipk_), parameter :: amg_coarse_solve_ = 31 + integer(psb_ipk_), parameter :: amg_coarse_solve_ = 31 integer(psb_ipk_), parameter :: amg_coarse_sweeps_ = 32 integer(psb_ipk_), parameter :: amg_coarse_fillin_ = 33 integer(psb_ipk_), parameter :: amg_coarse_subsolve_ = 34 @@ -196,7 +196,7 @@ module amg_base_prec_type ! ! Legal values for entry: amg_smoother_type_ - ! + ! integer(psb_ipk_), parameter :: amg_min_prec_ = 0 integer(psb_ipk_), parameter :: amg_noprec_ = 0 integer(psb_ipk_), parameter :: amg_base_smooth_ = 0 @@ -243,7 +243,7 @@ module amg_base_prec_type integer(psb_ipk_), parameter :: amg_ilu_scale_none_ = 0 integer(psb_ipk_), parameter :: amg_ilu_scale_maxval_ = 1 integer(psb_ipk_), parameter :: amg_ilu_scale_diag_ = 2 - integer(psb_ipk_), parameter :: amg_ilu_scale_arwsum_ = 3 + integer(psb_ipk_), parameter :: amg_ilu_scale_arwsum_ = 3 integer(psb_ipk_), parameter :: amg_ilu_scale_aclsum_ = 4 integer(psb_ipk_), parameter :: amg_ilu_scale_arcsum_ = 5 ! For the time being enable only maxval scale @@ -261,19 +261,21 @@ module amg_base_prec_type integer(psb_ipk_), parameter :: amg_new_ml_prec_ = 7 integer(psb_ipk_), parameter :: amg_mult_dev_ml_ = 7 integer(psb_ipk_), parameter :: amg_max_ml_cycle_ = 8 - ! + ! ! Legal values for entry: amg_par_aggr_alg_ ! integer(psb_ipk_), parameter :: amg_dec_aggr_ = 0 integer(psb_ipk_), parameter :: amg_sym_dec_aggr_ = 1 - integer(psb_ipk_), parameter :: amg_ext_aggr_ = 2 - integer(psb_ipk_), parameter :: amg_max_par_aggr_alg_ = amg_ext_aggr_ + integer(psb_ipk_), parameter :: amg_ext_aggr_ = 2 + integer(psb_ipk_), parameter :: amg_coupled_aggr_ = 3 + integer(psb_ipk_), parameter :: amg_max_par_aggr_alg_ = amg_coupled_aggr_ ! ! Legal values for entry: amg_aggr_type_ ! integer(psb_ipk_), parameter :: amg_noalg_ = 0 integer(psb_ipk_), parameter :: amg_soc1_ = 1 integer(psb_ipk_), parameter :: amg_soc2_ = 2 + integer(psb_ipk_), parameter :: amg_matchboxp_ = 3 ! ! Legal values for entry: amg_aggr_prol_ ! @@ -288,7 +290,7 @@ module amg_base_prec_type integer(psb_ipk_), parameter :: amg_no_filter_mat_ = 0 integer(psb_ipk_), parameter :: amg_filter_mat_ = 1 integer(psb_ipk_), parameter :: amg_max_filter_mat_ = amg_filter_mat_ - ! + ! ! Legal values for entry: amg_aggr_ord_ ! integer(psb_ipk_), parameter :: amg_aggr_ord_nat_ = 0 @@ -308,7 +310,7 @@ module amg_base_prec_type ! integer(psb_ipk_), parameter :: amg_distr_mat_ = 0 integer(psb_ipk_), parameter :: amg_repl_mat_ = 1 - integer(psb_ipk_), parameter :: amg_max_coarse_mat_ = amg_repl_mat_ + integer(psb_ipk_), parameter :: amg_max_coarse_mat_ = amg_repl_mat_ ! ! Legal values for entry: amg_prec_status_ ! @@ -338,7 +340,7 @@ module amg_base_prec_type ! ! Fields for sparse matrices ensembles stored in av() - ! + ! integer(psb_ipk_), parameter :: amg_l_pr_ = 1 integer(psb_ipk_), parameter :: amg_u_pr_ = 2 integer(psb_ipk_), parameter :: amg_bp_ilu_avsz_ = 2 @@ -347,7 +349,7 @@ module amg_base_prec_type integer(psb_ipk_), parameter :: amg_sm_pr_t_ = 5 integer(psb_ipk_), parameter :: amg_sm_pr_ = 6 integer(psb_ipk_), parameter :: amg_smth_avsz_ = 6 - integer(psb_ipk_), parameter :: amg_max_avsz_ = amg_smth_avsz_ + integer(psb_ipk_), parameter :: amg_max_avsz_ = amg_smth_avsz_ ! ! Character constants used by amg_file_prec_descr @@ -362,12 +364,13 @@ module amg_base_prec_type character(len=15), parameter, private :: & & matrix_names(0:1)=(/'distributed ','replicated '/) character(len=18), parameter, private :: & - & aggr_type_names(0:2)=(/'None ',& - & 'SOC measure 1 ', 'SOC Measure 2 '/) + & aggr_type_names(0:3)=(/'None ',& + & 'SOC measure 1 ', 'SOC Measure 2 ',& + & 'Parallel Matching '/) character(len=18), parameter, private :: & - & par_aggr_alg_names(0:2)=(/& + & par_aggr_alg_names(0:3)=(/& & 'decoupled aggr. ', 'sym. dec. aggr. ',& - & 'user defined aggr.'/) + & 'user defined aggr.', 'coupled aggr. '/) character(len=18), parameter, private :: & & ord_names(0:1)=(/'Natural ordering ','Desc. degree ord. '/) character(len=6), parameter, private :: & @@ -395,7 +398,7 @@ module amg_base_prec_type module procedure amg_icheck_def, amg_scheck_def, amg_dcheck_def end interface - interface psb_bcast + interface psb_bcast module procedure amg_ml_bcast, amg_sml_bcast, amg_dml_bcast end interface psb_bcast @@ -408,9 +411,9 @@ module amg_base_prec_type ! Will need a more sophisticated strategy. ! logical, private, save :: do_remap=.false. - + contains - + function amg_get_do_remap() result(res) implicit none logical :: res @@ -424,7 +427,7 @@ contains do_remap = val end subroutine amg_set_do_remap - + ! ! Function: amg_stringval ! @@ -439,10 +442,10 @@ contains ! function amg_stringval(string) result(val) use psb_prec_const_mod - implicit none + implicit none ! Arguments character(len=*), intent(in) :: string - integer(psb_ipk_) :: val + integer(psb_ipk_) :: val character(len=*), parameter :: name='amg_stringval' ! Local variable integer :: index_tab @@ -450,14 +453,14 @@ contains index_tab=index(string,char(9)) if (index_tab.NE.0) then string2=string(1:index_tab-1) - else + else string2=string endif select case(psb_toupper(trim(string2))) case('NONE') val = 0 case('HALO') - val = psb_halo_ + val = psb_halo_ case('SUM') val = psb_sum_ case('AVG') @@ -553,56 +556,56 @@ contains case('OUTER_SWEEPS') val = amg_outer_sweeps_ case('LOCAL_SOLVER') - val = amg_local_solver_ + val = amg_local_solver_ case('GLOBAL_SOLVER') - val = amg_global_solver_ + val = amg_global_solver_ case default val = -1 end select end function amg_stringval subroutine ml_parms_get_coarse(pm,pmin) - implicit none + implicit none class(amg_ml_parms), intent(inout) :: pm class(amg_ml_parms), intent(in) :: pmin pm%coarse_mat = pmin%coarse_mat pm%coarse_solve = pmin%coarse_solve end subroutine ml_parms_get_coarse - - - + + + subroutine ml_parms_printout(pm,iout) - implicit none + implicit none class(amg_ml_parms), intent(in) :: pm integer(psb_ipk_), intent(in) :: iout - + write(iout,*) 'ML : ',pm%ml_cycle write(iout,*) 'Sweeps: ',pm%sweeps_pre,pm%sweeps_post write(iout,*) 'AGGR : ',pm%par_aggr_alg,pm%aggr_prol, pm%aggr_ord write(iout,*) ' : ',pm%aggr_omega_alg,pm%aggr_eig,pm%aggr_filter write(iout,*) 'COARSE: ',pm%coarse_mat,pm%coarse_solve end subroutine ml_parms_printout - - + + subroutine s_ml_parms_printout(pm,iout) - implicit none + implicit none class(amg_sml_parms), intent(in) :: pm integer(psb_ipk_), intent(in) :: iout - + call pm%amg_ml_parms%printout(iout) write(iout,*) 'REAL : ',pm%aggr_omega_val,pm%aggr_thresh end subroutine s_ml_parms_printout - - + + subroutine d_ml_parms_printout(pm,iout) - implicit none + implicit none class(amg_dml_parms), intent(in) :: pm integer(psb_ipk_), intent(in) :: iout - + call pm%amg_ml_parms%printout(iout) write(iout,*) 'REAL : ',pm%aggr_omega_val,pm%aggr_thresh end subroutine d_ml_parms_printout - + ! ! Routines printing out a description of the preconditioner @@ -618,7 +621,7 @@ contains info = psb_success_ if ((pm%ml_cycle>=amg_no_ml_).and.(pm%ml_cycle<=amg_max_ml_cycle_)) then - + write(iout,*) ' Multilevel cycle: ',& & ml_names(pm%ml_cycle) select case (pm%ml_cycle) @@ -644,7 +647,7 @@ contains info = psb_success_ if ((pm%ml_cycle>=amg_no_ml_).and.(pm%ml_cycle<=amg_max_ml_cycle_)) then - + write(iout,*) ' Parallel aggregation algorithm: ',& & par_aggr_alg_names(pm%par_aggr_alg) if (pm%aggr_type>0) write(iout,*) ' Aggregation type: ',& @@ -656,23 +659,23 @@ contains write(iout,*) ' Aggregation prolongator: ', & & aggr_prols(pm%aggr_prol) if (pm%aggr_prol /= amg_no_smooth_) then - write(iout,*) ' with: ', aggr_filters(pm%aggr_filter) - if (pm%aggr_omega_alg == amg_eig_est_) then + write(iout,*) ' with: ', aggr_filters(pm%aggr_filter) + if (pm%aggr_omega_alg == amg_eig_est_) then write(iout,*) ' Damping omega computation: spectral radius estimate' write(iout,*) ' Spectral radius estimate: ', & & eigen_estimates(pm%aggr_eig) - else if (pm%aggr_omega_alg == amg_user_choice_) then + else if (pm%aggr_omega_alg == amg_user_choice_) then write(iout,*) ' Damping omega computation: user defined value.' - else + else write(iout,*) ' Damping omega computation: unknown value in iprcparm!!' end if end if !end if else write(iout,*) ' Multilevel type: Unkonwn value. Something is amiss....',& - & pm%ml_cycle + & pm%ml_cycle end if - + return end subroutine ml_parms_mldescr @@ -689,13 +692,13 @@ contains logical :: coarse_ info = psb_success_ - if (present(coarse)) then + if (present(coarse)) then coarse_ = coarse else coarse_ = .false. end if - if (coarse_) then + if (coarse_) then call pm%coarsedescr(iout,info) end if @@ -718,12 +721,12 @@ contains write(iout,*) ' Coarse matrix: ',& & matrix_names(pm%coarse_mat) select case(pm%coarse_solve) - case (amg_bjac_,amg_as_) + case (amg_bjac_,amg_as_) write(iout,*) ' Number of sweeps : ',& & pm%sweeps_pre write(iout,*) ' Coarse solver: ',& & 'Block Jacobi' - case (amg_l1_bjac_) + case (amg_l1_bjac_) write(iout,*) ' Number of sweeps : ',& & pm%sweeps_pre write(iout,*) ' Coarse solver: ',& @@ -790,7 +793,7 @@ contains ! function is_legal_base_prec(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_base_prec @@ -798,60 +801,68 @@ contains return end function is_legal_base_prec function is_int_non_negative(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_int_non_negative - is_int_non_negative = (ip >= 0) + is_int_non_negative = (ip >= 0) return end function is_int_non_negative function is_legal_ilu_scale(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_ilu_scale is_legal_ilu_scale = ((ip >= amg_ilu_scale_none_).and.(ip <= amg_max_ilu_scale_)) return end function is_legal_ilu_scale function is_int_positive(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_int_positive - is_int_positive = (ip >= 1) + is_int_positive = (ip >= 1) return end function is_int_positive function is_legal_prolong(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_prolong is_legal_prolong = ((ip>=psb_none_).and.(ip<=psb_square_root_)) return end function is_legal_prolong function is_legal_restrict(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_restrict is_legal_restrict = ((ip == psb_nohalo_).or.(ip==psb_halo_)) return end function is_legal_restrict function is_legal_ml_cycle(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_ml_cycle is_legal_ml_cycle = ((ip>=amg_no_ml_).and.(ip<=amg_max_ml_cycle_)) return end function is_legal_ml_cycle - function is_legal_ml_par_aggr_alg(ip) - implicit none + function is_legal_coupled_par_aggr_alg(ip) + implicit none integer(psb_ipk_), intent(in) :: ip - logical :: is_legal_ml_par_aggr_alg + logical :: is_legal_coupled_par_aggr_alg - is_legal_ml_par_aggr_alg = ((ip>=amg_dec_aggr_).and.(ip<=amg_max_par_aggr_alg_)) + is_legal_coupled_par_aggr_alg = (ip == amg_coupled_aggr_) return - end function is_legal_ml_par_aggr_alg + end function is_legal_coupled_par_aggr_alg + function is_legal_decoupled_par_aggr_alg(ip) + implicit none + integer(psb_ipk_), intent(in) :: ip + logical :: is_legal_decoupled_par_aggr_alg + + is_legal_decoupled_par_aggr_alg = ((ip>=amg_dec_aggr_).and.(ip<=amg_max_par_aggr_alg_)) + return + end function is_legal_decoupled_par_aggr_alg function is_legal_ml_aggr_type(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_ml_aggr_type @@ -859,7 +870,7 @@ contains return end function is_legal_ml_aggr_type function is_legal_ml_aggr_ord(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_ml_aggr_ord @@ -867,7 +878,7 @@ contains return end function is_legal_ml_aggr_ord function is_legal_ml_aggr_omega_alg(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_ml_aggr_omega_alg @@ -875,7 +886,7 @@ contains return end function is_legal_ml_aggr_omega_alg function is_legal_ml_aggr_eig(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_ml_aggr_eig @@ -883,7 +894,7 @@ contains return end function is_legal_ml_aggr_eig function is_legal_ml_aggr_prol(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_ml_aggr_prol @@ -891,7 +902,7 @@ contains return end function is_legal_ml_aggr_prol function is_legal_ml_coarse_mat(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_ml_coarse_mat @@ -899,7 +910,7 @@ contains return end function is_legal_ml_coarse_mat function is_legal_aggr_filter(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_aggr_filter @@ -907,7 +918,7 @@ contains return end function is_legal_aggr_filter function is_distr_ml_coarse_mat(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_distr_ml_coarse_mat @@ -915,7 +926,7 @@ contains return end function is_distr_ml_coarse_mat function is_legal_ml_fact(ip) - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_ml_fact ! Here the minimum is really 1, amg_fact_none_ is not acceptable. @@ -925,7 +936,7 @@ contains end function is_legal_ml_fact function is_legal_ilu_fact(ip) use psb_prec_const_mod - implicit none + implicit none integer(psb_ipk_), intent(in) :: ip logical :: is_legal_ilu_fact @@ -934,14 +945,14 @@ contains return end function is_legal_ilu_fact function is_legal_d_omega(ip) - implicit none + implicit none real(psb_dpk_), intent(in) :: ip logical :: is_legal_d_omega is_legal_d_omega = ((ip>=0.0d0).and.(ip<=2.0d0)) return end function is_legal_d_omega function is_legal_d_fact_thrs(ip) - implicit none + implicit none real(psb_dpk_), intent(in) :: ip logical :: is_legal_d_fact_thrs @@ -949,7 +960,7 @@ contains return end function is_legal_d_fact_thrs function is_legal_d_aggr_thrs(ip) - implicit none + implicit none real(psb_dpk_), intent(in) :: ip logical :: is_legal_d_aggr_thrs @@ -958,14 +969,14 @@ contains end function is_legal_d_aggr_thrs function is_legal_s_omega(ip) - implicit none + implicit none real(psb_spk_), intent(in) :: ip logical :: is_legal_s_omega is_legal_s_omega = ((ip>=0.0).and.(ip<=2.0)) return end function is_legal_s_omega function is_legal_s_fact_thrs(ip) - implicit none + implicit none real(psb_spk_), intent(in) :: ip logical :: is_legal_s_fact_thrs @@ -973,7 +984,7 @@ contains return end function is_legal_s_fact_thrs function is_legal_s_aggr_thrs(ip) - implicit none + implicit none real(psb_spk_), intent(in) :: ip logical :: is_legal_s_aggr_thrs @@ -983,11 +994,11 @@ contains subroutine amg_icheck_def(ip,name,id,is_legal) - implicit none + implicit none integer(psb_ipk_), intent(inout) :: ip integer(psb_ipk_), intent(in) :: id character(len=*), intent(in) :: name - interface + interface function is_legal(i) import :: psb_ipk_ integer(psb_ipk_), intent(in) :: i @@ -996,7 +1007,7 @@ contains end interface character(len=20), parameter :: rname='amg_check_def' - if (.not.is_legal(ip)) then + if (.not.is_legal(ip)) then write(0,*)trim(rname),': Error: Illegal value for ',& & name,' :',ip, '. defaulting to ',id ip = id @@ -1004,11 +1015,11 @@ contains end subroutine amg_icheck_def subroutine amg_scheck_def(ip,name,id,is_legal) - implicit none + implicit none real(psb_spk_), intent(inout) :: ip real(psb_spk_), intent(in) :: id character(len=*), intent(in) :: name - interface + interface function is_legal(i) use psb_base_mod, only : psb_spk_ real(psb_spk_), intent(in) :: i @@ -1017,7 +1028,7 @@ contains end interface character(len=20), parameter :: rname='amg_check_def' - if (.not.is_legal(ip)) then + if (.not.is_legal(ip)) then write(0,*)trim(rname),': Error: Illegal value for ',& & name,' :',ip, '. defaulting to ',id ip = id @@ -1025,11 +1036,11 @@ contains end subroutine amg_scheck_def subroutine amg_dcheck_def(ip,name,id,is_legal) - implicit none + implicit none real(psb_dpk_), intent(inout) :: ip real(psb_dpk_), intent(in) :: id character(len=*), intent(in) :: name - interface + interface function is_legal(i) use psb_base_mod, only : psb_dpk_ real(psb_dpk_), intent(in) :: i @@ -1038,7 +1049,7 @@ contains end interface character(len=20), parameter :: rname='amg_check_def' - if (.not.is_legal(ip)) then + if (.not.is_legal(ip)) then write(0,*)trim(rname),': Error: Illegal value for ',& & name,' :',ip, '. defaulting to ',id ip = id @@ -1047,7 +1058,7 @@ contains function pr_to_str(iprec) - implicit none + implicit none integer(psb_ipk_), intent(in) :: iprec character(len=10) :: pr_to_str @@ -1055,11 +1066,11 @@ contains select case(iprec) case(amg_noprec_) pr_to_str='NOPREC' - case(amg_jac_) + case(amg_jac_) pr_to_str='JAC' - case(amg_bjac_) + case(amg_bjac_) pr_to_str='BJAC' - case(amg_as_) + case(amg_as_) pr_to_str='AS' end select @@ -1067,7 +1078,7 @@ contains subroutine amg_ml_bcast(ctxt,dat,root) - implicit none + implicit none type(psb_ctxt_type), intent(in) :: ctxt type(amg_ml_parms), intent(inout) :: dat integer(psb_ipk_), intent(in), optional :: root @@ -1089,7 +1100,7 @@ contains subroutine amg_sml_bcast(ctxt,dat,root) - implicit none + implicit none type(psb_ctxt_type), intent(in) :: ctxt type(amg_sml_parms), intent(inout) :: dat integer(psb_ipk_), intent(in), optional :: root @@ -1100,7 +1111,7 @@ contains end subroutine amg_sml_bcast subroutine amg_dml_bcast(ctxt,dat,root) - implicit none + implicit none type(psb_ctxt_type), intent(in) :: ctxt type(amg_dml_parms), intent(inout) :: dat integer(psb_ipk_), intent(in), optional :: root @@ -1112,7 +1123,7 @@ contains subroutine ml_parms_clone(pm,pmout,info) - implicit none + implicit none class(amg_ml_parms), intent(inout) :: pm class(amg_ml_parms), intent(out) :: pmout integer(psb_ipk_), intent(out) :: info @@ -1132,19 +1143,19 @@ contains pmout%coarse_solve = pm%coarse_solve end subroutine ml_parms_clone - + subroutine s_ml_parms_clone(pm,pmout,info) - implicit none + implicit none class(amg_sml_parms), intent(inout) :: pm class(amg_ml_parms), intent(out) :: pmout integer(psb_ipk_), intent(out) :: info - + integer(psb_ipk_) :: err_act integer(psb_ipk_) :: ierr(5) character(len=20) :: name='clone' - + info = 0 select type(pout => pmout) class is (amg_sml_parms) @@ -1159,21 +1170,21 @@ contains call psb_get_erraction(err_act) call psb_error_handler(err_act) end select - + end subroutine s_ml_parms_clone subroutine d_ml_parms_clone(pm,pmout,info) - implicit none + implicit none class(amg_dml_parms), intent(inout) :: pm class(amg_ml_parms), intent(out) :: pmout integer(psb_ipk_), intent(out) :: info - + integer(psb_ipk_) :: err_act integer(psb_ipk_) :: ierr(5) character(len=20) :: name='clone' - + info = 0 select type(pout => pmout) class is (amg_dml_parms) @@ -1189,13 +1200,13 @@ contains call psb_error_handler(err_act) return end select - + end subroutine d_ml_parms_clone function amg_s_equal_aggregation(parms1, parms2) result(val) type(amg_sml_parms), intent(in) :: parms1, parms2 logical :: val - + val = (parms1%par_aggr_alg == parms2%par_aggr_alg ) .and. & & (parms1%aggr_type == parms2%aggr_type ) .and. & & (parms1%aggr_ord == parms2%aggr_ord ) .and. & @@ -1210,7 +1221,7 @@ contains function amg_d_equal_aggregation(parms1, parms2) result(val) type(amg_dml_parms), intent(in) :: parms1, parms2 logical :: val - + val = (parms1%par_aggr_alg == parms2%par_aggr_alg ) .and. & & (parms1%aggr_type == parms2%aggr_type ) .and. & & (parms1%aggr_ord == parms2%aggr_ord ) .and. & @@ -1221,5 +1232,5 @@ contains & (parms1%aggr_omega_val == parms2%aggr_omega_val ) .and. & & (parms1%aggr_thresh == parms2%aggr_thresh ) end function amg_d_equal_aggregation - + end module amg_base_prec_type diff --git a/amgprec/amg_d_matchboxp_mod.f90 b/amgprec/amg_d_matchboxp_mod.f90 index 2578be73..3be08ca7 100644 --- a/amgprec/amg_d_matchboxp_mod.f90 +++ b/amgprec/amg_d_matchboxp_mod.f90 @@ -80,7 +80,7 @@ module dmatchboxp_mod subroutine dMatchBoxPC(nlver,nledge,verlocptr,verlocind,edgelocweight,& & verdistance, mate, myrank, numprocs, icomm,& & msgindsent,msgactualsent,msgpercent,& - & ph0_time, ph1_time, ph2_time, ph1_card, ph2_card) bind(c,name='MatchBoxPC') + & ph0_time, ph1_time, ph2_time, ph1_card, ph2_card) bind(c,name='dMatchBoxPC') use iso_c_binding import :: psb_c_ipk_, psb_c_lpk_, psb_c_mpk_, psb_c_epk_ implicit none diff --git a/amgprec/amg_s_matchboxp_mod.f90 b/amgprec/amg_s_matchboxp_mod.f90 index 123061f1..4f8d8181 100644 --- a/amgprec/amg_s_matchboxp_mod.f90 +++ b/amgprec/amg_s_matchboxp_mod.f90 @@ -80,7 +80,7 @@ module smatchboxp_mod subroutine sMatchBoxPC(nlver,nledge,verlocptr,verlocind,edgelocweight,& & verdistance, mate, myrank, numprocs, icomm,& & msgindsent,msgactualsent,msgpercent,& - & ph0_time, ph1_time, ph2_time, ph1_card, ph2_card) bind(c,name='MatchBoxPC') + & ph0_time, ph1_time, ph2_time, ph1_card, ph2_card) bind(c,name='sMatchBoxPC') use iso_c_binding import :: psb_c_ipk_, psb_c_lpk_, psb_c_mpk_, psb_c_epk_ implicit none diff --git a/amgprec/impl/aggregator/MatchBoxPC.h b/amgprec/impl/aggregator/MatchBoxPC.h index a353a486..090e0265 100644 --- a/amgprec/impl/aggregator/MatchBoxPC.h +++ b/amgprec/impl/aggregator/MatchBoxPC.h @@ -172,6 +172,24 @@ MilanLongInt* msgIndSent, MilanLongInt* msgActualSent, MilanReal* msgPercent, MilanReal* ph0_time, MilanReal* ph1_time, MilanReal* ph2_time, MilanLongInt* ph1_card, MilanLongInt* ph2_card ); +void dMatchBoxPC(MilanLongInt NLVer, MilanLongInt NLEdge, + MilanLongInt* verLocPtr, MilanLongInt* verLocInd, MilanReal* edgeLocWeight, + MilanLongInt* verDistance, + MilanLongInt* Mate, + MilanInt myRank, MilanInt numProcs, MilanInt icomm, + MilanLongInt* msgIndSent, MilanLongInt* msgActualSent, MilanReal* msgPercent, + MilanReal* ph0_time, MilanReal* ph1_time, MilanReal* ph2_time, + MilanLongInt* ph1_card, MilanLongInt* ph2_card ); + +void sMatchBoxPC(MilanLongInt NLVer, MilanLongInt NLEdge, + MilanLongInt* verLocPtr, MilanLongInt* verLocInd, MilanFloat* edgeLocWeight, + MilanLongInt* verDistance, + MilanLongInt* Mate, + MilanInt myRank, MilanInt numProcs, MilanInt icomm, + MilanLongInt* msgIndSent, MilanLongInt* msgActualSent, MilanReal* msgPercent, + MilanReal* ph0_time, MilanReal* ph1_time, MilanReal* ph2_time, + MilanLongInt* ph1_card, MilanLongInt* ph2_card ); + #ifdef __cplusplus } #endif diff --git a/amgprec/impl/aggregator/amg_c_dec_aggregator_tprol.f90 b/amgprec/impl/aggregator/amg_c_dec_aggregator_tprol.f90 index 229a8e57..cb8fb6a7 100644 --- a/amgprec/impl/aggregator/amg_c_dec_aggregator_tprol.f90 +++ b/amgprec/impl/aggregator/amg_c_dec_aggregator_tprol.f90 @@ -1,15 +1,15 @@ -! -! +! +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,26 +33,26 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! ! File: amg_c_dec_aggregator_tprol.f90 ! ! Subroutine: amg_c_dec_aggregator_tprol ! Version: complex ! -! This routine is mainly an interface to soc_map_bld where the real work is performed. +! This routine is mainly an interface to soc_map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple ! integer mapping. ! -! +! ! Arguments: ! ag - type(amg_c_dec_aggregator_type), input/output. ! The aggregator object, carrying with itself the mapping algorithm. ! parms - The auxiliary parameters object ! ag_data - Auxiliary global aggregation parameters object -! -! +! +! ! a - type(psb_cspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. @@ -70,10 +70,10 @@ ! nlaggr(i) contains the aggregates held by process i. ! t_prol - type(psb_cspmat_type), output ! The tentative prolongator, based on ilaggr. -! +! ! info - integer, output. -! Error code. -! +! Error code. +! subroutine amg_c_dec_aggregator_build_tprol(ag,parms,ag_data,& & a,desc_a,ilaggr,nlaggr,t_prol,info) use psb_base_mod @@ -81,7 +81,7 @@ subroutine amg_c_dec_aggregator_build_tprol(ag,parms,ag_data,& use amg_c_inner_mod implicit none class(amg_c_dec_aggregator_type), target, intent(inout) :: ag - type(amg_sml_parms), intent(inout) :: parms + type(amg_sml_parms), intent(inout) :: parms type(amg_saggr_data), intent(in) :: ag_data type(psb_cspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -112,7 +112,7 @@ subroutine amg_c_dec_aggregator_build_tprol(ag,parms,ag_data,& call amg_check_def(parms%ml_cycle,'Multilevel cycle',& & amg_mult_ml_,is_legal_ml_cycle) call amg_check_def(parms%par_aggr_alg,'Aggregation',& - & amg_dec_aggr_,is_legal_ml_par_aggr_alg) + & amg_dec_aggr_,is_legal_decoupled_par_aggr_alg) call amg_check_def(parms%aggr_ord,'Ordering',& & amg_aggr_ord_nat_,is_legal_ml_aggr_ord) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs) @@ -130,11 +130,11 @@ subroutine amg_c_dec_aggregator_build_tprol(ag,parms,ag_data,& call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') goto 9999 endif - + call psb_erractionrestore(err_act) return 9999 call psb_error_handler(err_act) return - + end subroutine amg_c_dec_aggregator_build_tprol diff --git a/amgprec/impl/aggregator/amg_c_symdec_aggregator_tprol.f90 b/amgprec/impl/aggregator/amg_c_symdec_aggregator_tprol.f90 index 2b32cb57..9974a233 100644 --- a/amgprec/impl/aggregator/amg_c_symdec_aggregator_tprol.f90 +++ b/amgprec/impl/aggregator/amg_c_symdec_aggregator_tprol.f90 @@ -1,15 +1,15 @@ -! -! +! is_legal_decoupled_par_aggr_alg +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,28 +33,28 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! ! File: amg_c_symdec_aggregator_tprol.f90 ! ! Subroutine: amg_c_symdec_aggregator_tprol ! Version: complex ! ! -! This routine is mainly an interface to soc_map_bld where the real work is performed. +! This routine is mainly an interface to soc_map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple -! integer mapping. It also symmetrizes the pattern of the local matrix A. +! integer mapping. It also symmetrizes the pattern of the local matrix A. +! ! ! -! ! Arguments: ! Arguments: ! ag - type(amg_c_dec_aggregator_type), input/output. ! The aggregator object, carrying with itself the mapping algorithm. ! parms - The auxiliary parameters object ! ag_data - Auxiliary global aggregation parameters object -! +! ! a - type(psb_cspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. @@ -72,10 +72,10 @@ ! nlaggr(i) contains the aggregates held by process i. ! op_prol - type(psb_cspmat_type), output ! The tentative prolongator, based on ilaggr. -! +! ! info - integer, output. -! Error code. -! +! Error code. +! subroutine amg_c_symdec_aggregator_build_tprol(ag,parms,ag_data,& & a,desc_a,ilaggr,nlaggr,op_prol,info) use psb_base_mod @@ -84,7 +84,7 @@ subroutine amg_c_symdec_aggregator_build_tprol(ag,parms,ag_data,& use amg_c_inner_mod implicit none class(amg_c_symdec_aggregator_type), target, intent(inout) :: ag - type(amg_sml_parms), intent(inout) :: parms + type(amg_sml_parms), intent(inout) :: parms type(amg_saggr_data), intent(in) :: ag_data type(psb_cspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -117,7 +117,7 @@ subroutine amg_c_symdec_aggregator_build_tprol(ag,parms,ag_data,& call amg_check_def(parms%ml_cycle,'Multilevel cycle',& & amg_mult_ml_,is_legal_ml_cycle) call amg_check_def(parms%par_aggr_alg,'Aggregation',& - & amg_dec_aggr_,is_legal_ml_par_aggr_alg) + & amg_dec_aggr_,is_legal_decoupled_par_aggr_alg) call amg_check_def(parms%aggr_ord,'Ordering',& & amg_aggr_ord_nat_,is_legal_ml_aggr_ord) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs) @@ -129,7 +129,7 @@ subroutine amg_c_symdec_aggregator_build_tprol(ag,parms,ag_data,& call atmp%set_ncols(nr) if (info == psb_success_) call atmp%transp(atrans) if (info == psb_success_) call atrans%cscnv(info,type='COO') - if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.) + if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.) call atmp%set_nrows(nr) call atmp%set_ncols(nr) if (info == psb_success_) call atrans%free() @@ -145,7 +145,7 @@ subroutine amg_c_symdec_aggregator_build_tprol(ag,parms,ag_data,& & desc_a,nlaggr,ilaggr,info) if (info == psb_success_) call atmp%free() - if (info == psb_success_) call amg_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info) + if (info == psb_success_) call amg_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info) if (info /= psb_success_) then info=psb_err_from_subroutine_ call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') diff --git a/amgprec/impl/aggregator/amg_d_dec_aggregator_tprol.f90 b/amgprec/impl/aggregator/amg_d_dec_aggregator_tprol.f90 index 8ef77da8..e3d1e73c 100644 --- a/amgprec/impl/aggregator/amg_d_dec_aggregator_tprol.f90 +++ b/amgprec/impl/aggregator/amg_d_dec_aggregator_tprol.f90 @@ -1,15 +1,15 @@ -! -! +! +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,26 +33,26 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! ! File: amg_d_dec_aggregator_tprol.f90 ! ! Subroutine: amg_d_dec_aggregator_tprol ! Version: real ! -! This routine is mainly an interface to soc_map_bld where the real work is performed. +! This routine is mainly an interface to soc_map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple ! integer mapping. ! -! +! ! Arguments: ! ag - type(amg_d_dec_aggregator_type), input/output. ! The aggregator object, carrying with itself the mapping algorithm. ! parms - The auxiliary parameters object ! ag_data - Auxiliary global aggregation parameters object -! -! +! +! ! a - type(psb_dspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. @@ -70,10 +70,10 @@ ! nlaggr(i) contains the aggregates held by process i. ! t_prol - type(psb_dspmat_type), output ! The tentative prolongator, based on ilaggr. -! +! ! info - integer, output. -! Error code. -! +! Error code. +! subroutine amg_d_dec_aggregator_build_tprol(ag,parms,ag_data,& & a,desc_a,ilaggr,nlaggr,t_prol,info) use psb_base_mod @@ -81,7 +81,7 @@ subroutine amg_d_dec_aggregator_build_tprol(ag,parms,ag_data,& use amg_d_inner_mod implicit none class(amg_d_dec_aggregator_type), target, intent(inout) :: ag - type(amg_dml_parms), intent(inout) :: parms + type(amg_dml_parms), intent(inout) :: parms type(amg_daggr_data), intent(in) :: ag_data type(psb_dspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -112,7 +112,7 @@ subroutine amg_d_dec_aggregator_build_tprol(ag,parms,ag_data,& call amg_check_def(parms%ml_cycle,'Multilevel cycle',& & amg_mult_ml_,is_legal_ml_cycle) call amg_check_def(parms%par_aggr_alg,'Aggregation',& - & amg_dec_aggr_,is_legal_ml_par_aggr_alg) + & amg_dec_aggr_,is_legal_decoupled_par_aggr_alg) call amg_check_def(parms%aggr_ord,'Ordering',& & amg_aggr_ord_nat_,is_legal_ml_aggr_ord) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs) @@ -130,11 +130,11 @@ subroutine amg_d_dec_aggregator_build_tprol(ag,parms,ag_data,& call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') goto 9999 endif - + call psb_erractionrestore(err_act) return 9999 call psb_error_handler(err_act) return - + end subroutine amg_d_dec_aggregator_build_tprol diff --git a/amgprec/impl/aggregator/amg_d_parmatch_aggregator_tprol.f90 b/amgprec/impl/aggregator/amg_d_parmatch_aggregator_tprol.f90 index b004bb3a..0b9c3167 100644 --- a/amgprec/impl/aggregator/amg_d_parmatch_aggregator_tprol.f90 +++ b/amgprec/impl/aggregator/amg_d_parmatch_aggregator_tprol.f90 @@ -177,7 +177,7 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,& call amg_check_def(parms%ml_cycle,'Multilevel cycle',& & amg_mult_ml_,is_legal_ml_cycle) call amg_check_def(parms%par_aggr_alg,'Aggregation',& - & amg_dec_aggr_,is_legal_ml_par_aggr_alg) + & amg_coupled_aggr_,is_legal_coupled_par_aggr_alg) call amg_check_def(parms%aggr_ord,'Ordering',& & amg_aggr_ord_nat_,is_legal_ml_aggr_ord) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs) diff --git a/amgprec/impl/aggregator/amg_d_symdec_aggregator_tprol.f90 b/amgprec/impl/aggregator/amg_d_symdec_aggregator_tprol.f90 index b33c632d..35efe63d 100644 --- a/amgprec/impl/aggregator/amg_d_symdec_aggregator_tprol.f90 +++ b/amgprec/impl/aggregator/amg_d_symdec_aggregator_tprol.f90 @@ -1,15 +1,15 @@ -! -! +! is_legal_decoupled_par_aggr_alg +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,28 +33,28 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! ! File: amg_d_symdec_aggregator_tprol.f90 ! ! Subroutine: amg_d_symdec_aggregator_tprol ! Version: real ! ! -! This routine is mainly an interface to soc_map_bld where the real work is performed. +! This routine is mainly an interface to soc_map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple -! integer mapping. It also symmetrizes the pattern of the local matrix A. +! integer mapping. It also symmetrizes the pattern of the local matrix A. +! ! ! -! ! Arguments: ! Arguments: ! ag - type(amg_d_dec_aggregator_type), input/output. ! The aggregator object, carrying with itself the mapping algorithm. ! parms - The auxiliary parameters object ! ag_data - Auxiliary global aggregation parameters object -! +! ! a - type(psb_dspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. @@ -72,10 +72,10 @@ ! nlaggr(i) contains the aggregates held by process i. ! op_prol - type(psb_dspmat_type), output ! The tentative prolongator, based on ilaggr. -! +! ! info - integer, output. -! Error code. -! +! Error code. +! subroutine amg_d_symdec_aggregator_build_tprol(ag,parms,ag_data,& & a,desc_a,ilaggr,nlaggr,op_prol,info) use psb_base_mod @@ -84,7 +84,7 @@ subroutine amg_d_symdec_aggregator_build_tprol(ag,parms,ag_data,& use amg_d_inner_mod implicit none class(amg_d_symdec_aggregator_type), target, intent(inout) :: ag - type(amg_dml_parms), intent(inout) :: parms + type(amg_dml_parms), intent(inout) :: parms type(amg_daggr_data), intent(in) :: ag_data type(psb_dspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -117,7 +117,7 @@ subroutine amg_d_symdec_aggregator_build_tprol(ag,parms,ag_data,& call amg_check_def(parms%ml_cycle,'Multilevel cycle',& & amg_mult_ml_,is_legal_ml_cycle) call amg_check_def(parms%par_aggr_alg,'Aggregation',& - & amg_dec_aggr_,is_legal_ml_par_aggr_alg) + & amg_dec_aggr_,is_legal_decoupled_par_aggr_alg) call amg_check_def(parms%aggr_ord,'Ordering',& & amg_aggr_ord_nat_,is_legal_ml_aggr_ord) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs) @@ -129,7 +129,7 @@ subroutine amg_d_symdec_aggregator_build_tprol(ag,parms,ag_data,& call atmp%set_ncols(nr) if (info == psb_success_) call atmp%transp(atrans) if (info == psb_success_) call atrans%cscnv(info,type='COO') - if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.) + if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.) call atmp%set_nrows(nr) call atmp%set_ncols(nr) if (info == psb_success_) call atrans%free() @@ -145,7 +145,7 @@ subroutine amg_d_symdec_aggregator_build_tprol(ag,parms,ag_data,& & desc_a,nlaggr,ilaggr,info) if (info == psb_success_) call atmp%free() - if (info == psb_success_) call amg_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info) + if (info == psb_success_) call amg_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info) if (info /= psb_success_) then info=psb_err_from_subroutine_ call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') diff --git a/amgprec/impl/aggregator/amg_s_dec_aggregator_tprol.f90 b/amgprec/impl/aggregator/amg_s_dec_aggregator_tprol.f90 index 71fc4fa1..0ab5274e 100644 --- a/amgprec/impl/aggregator/amg_s_dec_aggregator_tprol.f90 +++ b/amgprec/impl/aggregator/amg_s_dec_aggregator_tprol.f90 @@ -1,15 +1,15 @@ -! -! +! +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,26 +33,26 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! ! File: amg_s_dec_aggregator_tprol.f90 ! ! Subroutine: amg_s_dec_aggregator_tprol ! Version: real ! -! This routine is mainly an interface to soc_map_bld where the real work is performed. +! This routine is mainly an interface to soc_map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple ! integer mapping. ! -! +! ! Arguments: ! ag - type(amg_s_dec_aggregator_type), input/output. ! The aggregator object, carrying with itself the mapping algorithm. ! parms - The auxiliary parameters object ! ag_data - Auxiliary global aggregation parameters object -! -! +! +! ! a - type(psb_sspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. @@ -70,10 +70,10 @@ ! nlaggr(i) contains the aggregates held by process i. ! t_prol - type(psb_sspmat_type), output ! The tentative prolongator, based on ilaggr. -! +! ! info - integer, output. -! Error code. -! +! Error code. +! subroutine amg_s_dec_aggregator_build_tprol(ag,parms,ag_data,& & a,desc_a,ilaggr,nlaggr,t_prol,info) use psb_base_mod @@ -81,7 +81,7 @@ subroutine amg_s_dec_aggregator_build_tprol(ag,parms,ag_data,& use amg_s_inner_mod implicit none class(amg_s_dec_aggregator_type), target, intent(inout) :: ag - type(amg_sml_parms), intent(inout) :: parms + type(amg_sml_parms), intent(inout) :: parms type(amg_saggr_data), intent(in) :: ag_data type(psb_sspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -112,7 +112,7 @@ subroutine amg_s_dec_aggregator_build_tprol(ag,parms,ag_data,& call amg_check_def(parms%ml_cycle,'Multilevel cycle',& & amg_mult_ml_,is_legal_ml_cycle) call amg_check_def(parms%par_aggr_alg,'Aggregation',& - & amg_dec_aggr_,is_legal_ml_par_aggr_alg) + & amg_dec_aggr_,is_legal_decoupled_par_aggr_alg) call amg_check_def(parms%aggr_ord,'Ordering',& & amg_aggr_ord_nat_,is_legal_ml_aggr_ord) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs) @@ -130,11 +130,11 @@ subroutine amg_s_dec_aggregator_build_tprol(ag,parms,ag_data,& call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') goto 9999 endif - + call psb_erractionrestore(err_act) return 9999 call psb_error_handler(err_act) return - + end subroutine amg_s_dec_aggregator_build_tprol diff --git a/amgprec/impl/aggregator/amg_s_parmatch_aggregator_tprol.f90 b/amgprec/impl/aggregator/amg_s_parmatch_aggregator_tprol.f90 index e8d8fecc..f239de95 100644 --- a/amgprec/impl/aggregator/amg_s_parmatch_aggregator_tprol.f90 +++ b/amgprec/impl/aggregator/amg_s_parmatch_aggregator_tprol.f90 @@ -177,7 +177,7 @@ subroutine amg_s_parmatch_aggregator_build_tprol(ag,parms,ag_data,& call amg_check_def(parms%ml_cycle,'Multilevel cycle',& & amg_mult_ml_,is_legal_ml_cycle) call amg_check_def(parms%par_aggr_alg,'Aggregation',& - & amg_dec_aggr_,is_legal_ml_par_aggr_alg) + & amg_coupled_aggr_,is_legal_coupled_par_aggr_alg) call amg_check_def(parms%aggr_ord,'Ordering',& & amg_aggr_ord_nat_,is_legal_ml_aggr_ord) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs) diff --git a/amgprec/impl/aggregator/amg_s_symdec_aggregator_tprol.f90 b/amgprec/impl/aggregator/amg_s_symdec_aggregator_tprol.f90 index 3b8462c1..5a9548eb 100644 --- a/amgprec/impl/aggregator/amg_s_symdec_aggregator_tprol.f90 +++ b/amgprec/impl/aggregator/amg_s_symdec_aggregator_tprol.f90 @@ -1,15 +1,15 @@ -! -! +! is_legal_decoupled_par_aggr_alg +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,28 +33,28 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! ! File: amg_s_symdec_aggregator_tprol.f90 ! ! Subroutine: amg_s_symdec_aggregator_tprol ! Version: real ! ! -! This routine is mainly an interface to soc_map_bld where the real work is performed. +! This routine is mainly an interface to soc_map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple -! integer mapping. It also symmetrizes the pattern of the local matrix A. +! integer mapping. It also symmetrizes the pattern of the local matrix A. +! ! ! -! ! Arguments: ! Arguments: ! ag - type(amg_s_dec_aggregator_type), input/output. ! The aggregator object, carrying with itself the mapping algorithm. ! parms - The auxiliary parameters object ! ag_data - Auxiliary global aggregation parameters object -! +! ! a - type(psb_sspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. @@ -72,10 +72,10 @@ ! nlaggr(i) contains the aggregates held by process i. ! op_prol - type(psb_sspmat_type), output ! The tentative prolongator, based on ilaggr. -! +! ! info - integer, output. -! Error code. -! +! Error code. +! subroutine amg_s_symdec_aggregator_build_tprol(ag,parms,ag_data,& & a,desc_a,ilaggr,nlaggr,op_prol,info) use psb_base_mod @@ -84,7 +84,7 @@ subroutine amg_s_symdec_aggregator_build_tprol(ag,parms,ag_data,& use amg_s_inner_mod implicit none class(amg_s_symdec_aggregator_type), target, intent(inout) :: ag - type(amg_sml_parms), intent(inout) :: parms + type(amg_sml_parms), intent(inout) :: parms type(amg_saggr_data), intent(in) :: ag_data type(psb_sspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -117,7 +117,7 @@ subroutine amg_s_symdec_aggregator_build_tprol(ag,parms,ag_data,& call amg_check_def(parms%ml_cycle,'Multilevel cycle',& & amg_mult_ml_,is_legal_ml_cycle) call amg_check_def(parms%par_aggr_alg,'Aggregation',& - & amg_dec_aggr_,is_legal_ml_par_aggr_alg) + & amg_dec_aggr_,is_legal_decoupled_par_aggr_alg) call amg_check_def(parms%aggr_ord,'Ordering',& & amg_aggr_ord_nat_,is_legal_ml_aggr_ord) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs) @@ -129,7 +129,7 @@ subroutine amg_s_symdec_aggregator_build_tprol(ag,parms,ag_data,& call atmp%set_ncols(nr) if (info == psb_success_) call atmp%transp(atrans) if (info == psb_success_) call atrans%cscnv(info,type='COO') - if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.) + if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.) call atmp%set_nrows(nr) call atmp%set_ncols(nr) if (info == psb_success_) call atrans%free() @@ -145,7 +145,7 @@ subroutine amg_s_symdec_aggregator_build_tprol(ag,parms,ag_data,& & desc_a,nlaggr,ilaggr,info) if (info == psb_success_) call atmp%free() - if (info == psb_success_) call amg_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info) + if (info == psb_success_) call amg_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info) if (info /= psb_success_) then info=psb_err_from_subroutine_ call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') diff --git a/amgprec/impl/aggregator/amg_z_dec_aggregator_tprol.f90 b/amgprec/impl/aggregator/amg_z_dec_aggregator_tprol.f90 index abe8bf05..5a90fcd5 100644 --- a/amgprec/impl/aggregator/amg_z_dec_aggregator_tprol.f90 +++ b/amgprec/impl/aggregator/amg_z_dec_aggregator_tprol.f90 @@ -1,15 +1,15 @@ -! -! +! +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,26 +33,26 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! ! File: amg_z_dec_aggregator_tprol.f90 ! ! Subroutine: amg_z_dec_aggregator_tprol ! Version: complex ! -! This routine is mainly an interface to soc_map_bld where the real work is performed. +! This routine is mainly an interface to soc_map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple ! integer mapping. ! -! +! ! Arguments: ! ag - type(amg_z_dec_aggregator_type), input/output. ! The aggregator object, carrying with itself the mapping algorithm. ! parms - The auxiliary parameters object ! ag_data - Auxiliary global aggregation parameters object -! -! +! +! ! a - type(psb_zspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. @@ -70,10 +70,10 @@ ! nlaggr(i) contains the aggregates held by process i. ! t_prol - type(psb_zspmat_type), output ! The tentative prolongator, based on ilaggr. -! +! ! info - integer, output. -! Error code. -! +! Error code. +! subroutine amg_z_dec_aggregator_build_tprol(ag,parms,ag_data,& & a,desc_a,ilaggr,nlaggr,t_prol,info) use psb_base_mod @@ -81,7 +81,7 @@ subroutine amg_z_dec_aggregator_build_tprol(ag,parms,ag_data,& use amg_z_inner_mod implicit none class(amg_z_dec_aggregator_type), target, intent(inout) :: ag - type(amg_dml_parms), intent(inout) :: parms + type(amg_dml_parms), intent(inout) :: parms type(amg_daggr_data), intent(in) :: ag_data type(psb_zspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -112,7 +112,7 @@ subroutine amg_z_dec_aggregator_build_tprol(ag,parms,ag_data,& call amg_check_def(parms%ml_cycle,'Multilevel cycle',& & amg_mult_ml_,is_legal_ml_cycle) call amg_check_def(parms%par_aggr_alg,'Aggregation',& - & amg_dec_aggr_,is_legal_ml_par_aggr_alg) + & amg_dec_aggr_,is_legal_decoupled_par_aggr_alg) call amg_check_def(parms%aggr_ord,'Ordering',& & amg_aggr_ord_nat_,is_legal_ml_aggr_ord) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs) @@ -130,11 +130,11 @@ subroutine amg_z_dec_aggregator_build_tprol(ag,parms,ag_data,& call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') goto 9999 endif - + call psb_erractionrestore(err_act) return 9999 call psb_error_handler(err_act) return - + end subroutine amg_z_dec_aggregator_build_tprol diff --git a/amgprec/impl/aggregator/amg_z_symdec_aggregator_tprol.f90 b/amgprec/impl/aggregator/amg_z_symdec_aggregator_tprol.f90 index e76add39..84de6849 100644 --- a/amgprec/impl/aggregator/amg_z_symdec_aggregator_tprol.f90 +++ b/amgprec/impl/aggregator/amg_z_symdec_aggregator_tprol.f90 @@ -1,15 +1,15 @@ -! -! +! is_legal_decoupled_par_aggr_alg +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,28 +33,28 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! ! File: amg_z_symdec_aggregator_tprol.f90 ! ! Subroutine: amg_z_symdec_aggregator_tprol ! Version: complex ! ! -! This routine is mainly an interface to soc_map_bld where the real work is performed. +! This routine is mainly an interface to soc_map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple -! integer mapping. It also symmetrizes the pattern of the local matrix A. +! integer mapping. It also symmetrizes the pattern of the local matrix A. +! ! ! -! ! Arguments: ! Arguments: ! ag - type(amg_z_dec_aggregator_type), input/output. ! The aggregator object, carrying with itself the mapping algorithm. ! parms - The auxiliary parameters object ! ag_data - Auxiliary global aggregation parameters object -! +! ! a - type(psb_zspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. @@ -72,10 +72,10 @@ ! nlaggr(i) contains the aggregates held by process i. ! op_prol - type(psb_zspmat_type), output ! The tentative prolongator, based on ilaggr. -! +! ! info - integer, output. -! Error code. -! +! Error code. +! subroutine amg_z_symdec_aggregator_build_tprol(ag,parms,ag_data,& & a,desc_a,ilaggr,nlaggr,op_prol,info) use psb_base_mod @@ -84,7 +84,7 @@ subroutine amg_z_symdec_aggregator_build_tprol(ag,parms,ag_data,& use amg_z_inner_mod implicit none class(amg_z_symdec_aggregator_type), target, intent(inout) :: ag - type(amg_dml_parms), intent(inout) :: parms + type(amg_dml_parms), intent(inout) :: parms type(amg_daggr_data), intent(in) :: ag_data type(psb_zspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -117,7 +117,7 @@ subroutine amg_z_symdec_aggregator_build_tprol(ag,parms,ag_data,& call amg_check_def(parms%ml_cycle,'Multilevel cycle',& & amg_mult_ml_,is_legal_ml_cycle) call amg_check_def(parms%par_aggr_alg,'Aggregation',& - & amg_dec_aggr_,is_legal_ml_par_aggr_alg) + & amg_dec_aggr_,is_legal_decoupled_par_aggr_alg) call amg_check_def(parms%aggr_ord,'Ordering',& & amg_aggr_ord_nat_,is_legal_ml_aggr_ord) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs) @@ -129,7 +129,7 @@ subroutine amg_z_symdec_aggregator_build_tprol(ag,parms,ag_data,& call atmp%set_ncols(nr) if (info == psb_success_) call atmp%transp(atrans) if (info == psb_success_) call atrans%cscnv(info,type='COO') - if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.) + if (info == psb_success_) call psb_rwextd(nr,atmp,info,b=atrans,rowscale=.false.) call atmp%set_nrows(nr) call atmp%set_ncols(nr) if (info == psb_success_) call atrans%free() @@ -145,7 +145,7 @@ subroutine amg_z_symdec_aggregator_build_tprol(ag,parms,ag_data,& & desc_a,nlaggr,ilaggr,info) if (info == psb_success_) call atmp%free() - if (info == psb_success_) call amg_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info) + if (info == psb_success_) call amg_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info) if (info /= psb_success_) then info=psb_err_from_subroutine_ call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') diff --git a/amgprec/impl/level/amg_c_base_onelev_csetc.F90 b/amgprec/impl/level/amg_c_base_onelev_csetc.F90 index 3b75263f..732f334c 100644 --- a/amgprec/impl/level/amg_c_base_onelev_csetc.F90 +++ b/amgprec/impl/level/amg_c_base_onelev_csetc.F90 @@ -242,10 +242,10 @@ subroutine amg_c_base_onelev_csetc(lv,what,val,info,pos,idx) end if end if - select case(ival) - case(amg_dec_aggr_) + select case(val) + case('DEC') allocate(amg_c_dec_aggregator_type :: lv%aggr, stat=info) - case(amg_sym_dec_aggr_) + case('SYMDEC') allocate(amg_c_symdec_aggregator_type :: lv%aggr, stat=info) case default info = psb_err_internal_error_ diff --git a/amgprec/impl/level/amg_c_base_onelev_cseti.F90 b/amgprec/impl/level/amg_c_base_onelev_cseti.F90 index b1135622..deba9001 100644 --- a/amgprec/impl/level/amg_c_base_onelev_cseti.F90 +++ b/amgprec/impl/level/amg_c_base_onelev_cseti.F90 @@ -1,15 +1,15 @@ -! -! +! +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,10 +33,10 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx) - + use psb_base_mod use amg_c_onelev_mod, amg_protect_name => amg_c_base_onelev_cseti use amg_c_base_aggregator_mod @@ -59,13 +59,13 @@ subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx) Implicit None ! Arguments - class(amg_c_onelev_type), intent(inout) :: lv - character(len=*), intent(in) :: what + class(amg_c_onelev_type), intent(inout) :: lv + character(len=*), intent(in) :: what integer(psb_ipk_), intent(in) :: val integer(psb_ipk_), intent(out) :: info character(len=*), optional, intent(in) :: pos integer(psb_ipk_), intent(in), optional :: idx - ! Local + ! Local integer(psb_ipk_) :: ipos_, err_act character(len=20) :: name='c_base_onelev_cseti' type(amg_c_base_smoother_type) :: amg_c_base_smoother_mold @@ -84,7 +84,7 @@ subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx) #if defined(HAVE_MUMPS_) type(amg_c_mumps_solver_type) :: amg_c_mumps_solver_mold #endif - + call psb_erractionsave(err_act) info = psb_success_ @@ -100,14 +100,14 @@ subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx) else ipos_ = amg_smooth_both_ end if - + select case (psb_toupper(what)) case ('SMOOTHER_TYPE') - select case (val) + select case (val) case (amg_noprec_) call lv%set(amg_c_base_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_c_id_solver_mold,info,pos=pos) - + case (amg_jac_) call lv%set(amg_c_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_c_diag_solver_mold,info,pos=pos) @@ -115,11 +115,11 @@ subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx) case (amg_l1_jac_) call lv%set(amg_c_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_c_l1_diag_solver_mold,info,pos=pos) - + case (amg_bjac_) call lv%set(amg_c_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_c_ilu_solver_mold,info,pos=pos) - + case (amg_l1_bjac_) call lv%set(amg_c_l1_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_c_ilu_solver_mold,info,pos=pos) @@ -133,61 +133,61 @@ subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx) if (info == 0) call lv%set(amg_c_gs_solver_mold,info,pos='pre') call lv%set(amg_c_jac_smoother_mold,info,pos='post') if (info == 0) call lv%set(amg_c_bwgs_solver_mold,info,pos='post') - + case default ! - ! Do nothing and hope for the best :) + ! Do nothing and hope for the best :) ! end select - if ((ipos_==amg_smooth_pre_).or.(ipos_==amg_smooth_both_)) then + if ((ipos_==amg_smooth_pre_).or.(ipos_==amg_smooth_both_)) then if (allocated(lv%sm)) call lv%sm%default() end if if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_)) then if (allocated(lv%sm2a)) call lv%sm2a%default() end if - + case('SUB_SOLVE') - select case (val) + select case (val) case (amg_f_none_) call lv%set(amg_c_id_solver_mold,info,pos=pos) - + case (amg_diag_scale_) call lv%set(amg_c_diag_solver_mold,info,pos=pos) - + case (amg_l1_diag_scale_) call lv%set(amg_c_l1_diag_solver_mold,info,pos=pos) - + case (amg_gs_) call lv%set(amg_c_gs_solver_mold,info,pos=pos) - + case (amg_bwgs_) call lv%set(amg_c_bwgs_solver_mold,info,pos=pos) - + case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_) call lv%set(amg_c_ilu_solver_mold,info,pos=pos) if (info == 0) then - if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then + if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then call lv%sm%sv%set('SUB_SOLVE',val,info) end if - if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then + if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then if (allocated(lv%sm2a)) call lv%sm2a%sv%set('SUB_SOLVE',val,info) end if end if #ifdef HAVE_SLU_ - case (amg_slu_) + case (amg_slu_) call lv%set(amg_c_slu_solver_mold,info,pos=pos) #endif #ifdef HAVE_MUMPS_ - case (amg_mumps_) + case (amg_mumps_) call lv%set(amg_c_mumps_solver_mold,info,pos=pos) #endif case default ! - ! Do nothing and hope for the best :) + ! Do nothing and hope for the best :) ! end select - + case ('SMOOTHER_SWEEPS') if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) & @@ -208,7 +208,7 @@ subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx) return end if end if - + select case(val) case(amg_dec_aggr_) allocate(amg_c_dec_aggregator_type :: lv%aggr, stat=info) @@ -218,7 +218,7 @@ subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx) info = psb_err_internal_error_ end select if (info == psb_success_) call lv%aggr%default() - + case ('AGGR_ORD') lv%parms%aggr_ord = val @@ -245,13 +245,13 @@ subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx) lv%parms%coarse_solve = val case default - if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then - if (allocated(lv%sm)) then + if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then + if (allocated(lv%sm)) then call lv%sm%set(what,val,info,idx=idx) end if end if - if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then - if (allocated(lv%sm2a)) then + if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then + if (allocated(lv%sm2a)) then call lv%sm2a%set(what,val,info,idx=idx) end if end if diff --git a/amgprec/impl/level/amg_d_base_onelev_csetc.F90 b/amgprec/impl/level/amg_d_base_onelev_csetc.F90 index 1cc62a3d..eaacabbc 100644 --- a/amgprec/impl/level/amg_d_base_onelev_csetc.F90 +++ b/amgprec/impl/level/amg_d_base_onelev_csetc.F90 @@ -42,6 +42,7 @@ subroutine amg_d_base_onelev_csetc(lv,what,val,info,pos,idx) use amg_d_base_aggregator_mod use amg_d_dec_aggregator_mod use amg_d_symdec_aggregator_mod + use amg_d_parmatch_aggregator_mod use amg_d_jac_smoother use amg_d_as_smoother use amg_d_diag_solver @@ -262,11 +263,13 @@ subroutine amg_d_base_onelev_csetc(lv,what,val,info,pos,idx) end if end if - select case(ival) - case(amg_dec_aggr_) + select case(val) + case('DEC') allocate(amg_d_dec_aggregator_type :: lv%aggr, stat=info) - case(amg_sym_dec_aggr_) + case('SYMDEC') allocate(amg_d_symdec_aggregator_type :: lv%aggr, stat=info) + case('COUP','COUPLED') + allocate(amg_d_parmatch_aggregator_type :: lv%aggr, stat=info) case default info = psb_err_internal_error_ end select diff --git a/amgprec/impl/level/amg_d_base_onelev_cseti.F90 b/amgprec/impl/level/amg_d_base_onelev_cseti.F90 index 39b5fd43..b5ca549b 100644 --- a/amgprec/impl/level/amg_d_base_onelev_cseti.F90 +++ b/amgprec/impl/level/amg_d_base_onelev_cseti.F90 @@ -1,15 +1,15 @@ -! -! +! +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,15 +33,16 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) - + use psb_base_mod use amg_d_onelev_mod, amg_protect_name => amg_d_base_onelev_cseti use amg_d_base_aggregator_mod use amg_d_dec_aggregator_mod use amg_d_symdec_aggregator_mod + use amg_d_parmatch_aggregator_mod use amg_d_jac_smoother use amg_d_as_smoother use amg_d_diag_solver @@ -65,13 +66,13 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) Implicit None ! Arguments - class(amg_d_onelev_type), intent(inout) :: lv - character(len=*), intent(in) :: what + class(amg_d_onelev_type), intent(inout) :: lv + character(len=*), intent(in) :: what integer(psb_ipk_), intent(in) :: val integer(psb_ipk_), intent(out) :: info character(len=*), optional, intent(in) :: pos integer(psb_ipk_), intent(in), optional :: idx - ! Local + ! Local integer(psb_ipk_) :: ipos_, err_act character(len=20) :: name='d_base_onelev_cseti' type(amg_d_base_smoother_type) :: amg_d_base_smoother_mold @@ -96,7 +97,7 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) #if defined(HAVE_MUMPS_) type(amg_d_mumps_solver_type) :: amg_d_mumps_solver_mold #endif - + call psb_erractionsave(err_act) info = psb_success_ @@ -112,14 +113,14 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) else ipos_ = amg_smooth_both_ end if - + select case (psb_toupper(what)) case ('SMOOTHER_TYPE') - select case (val) + select case (val) case (amg_noprec_) call lv%set(amg_d_base_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_d_id_solver_mold,info,pos=pos) - + case (amg_jac_) call lv%set(amg_d_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_d_diag_solver_mold,info,pos=pos) @@ -127,11 +128,11 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) case (amg_l1_jac_) call lv%set(amg_d_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_d_l1_diag_solver_mold,info,pos=pos) - + case (amg_bjac_) call lv%set(amg_d_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_d_ilu_solver_mold,info,pos=pos) - + case (amg_l1_bjac_) call lv%set(amg_d_l1_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_d_ilu_solver_mold,info,pos=pos) @@ -145,53 +146,53 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) if (info == 0) call lv%set(amg_d_gs_solver_mold,info,pos='pre') call lv%set(amg_d_jac_smoother_mold,info,pos='post') if (info == 0) call lv%set(amg_d_bwgs_solver_mold,info,pos='post') - + case default ! - ! Do nothing and hope for the best :) + ! Do nothing and hope for the best :) ! end select - if ((ipos_==amg_smooth_pre_).or.(ipos_==amg_smooth_both_)) then + if ((ipos_==amg_smooth_pre_).or.(ipos_==amg_smooth_both_)) then if (allocated(lv%sm)) call lv%sm%default() end if if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_)) then if (allocated(lv%sm2a)) call lv%sm2a%default() end if - + case('SUB_SOLVE') - select case (val) + select case (val) case (amg_f_none_) call lv%set(amg_d_id_solver_mold,info,pos=pos) - + case (amg_diag_scale_) call lv%set(amg_d_diag_solver_mold,info,pos=pos) - + case (amg_l1_diag_scale_) call lv%set(amg_d_l1_diag_solver_mold,info,pos=pos) - + case (amg_gs_) call lv%set(amg_d_gs_solver_mold,info,pos=pos) - + case (amg_bwgs_) call lv%set(amg_d_bwgs_solver_mold,info,pos=pos) - + case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_) call lv%set(amg_d_ilu_solver_mold,info,pos=pos) if (info == 0) then - if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then + if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then call lv%sm%sv%set('SUB_SOLVE',val,info) end if - if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then + if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then if (allocated(lv%sm2a)) call lv%sm2a%sv%set('SUB_SOLVE',val,info) end if end if #ifdef HAVE_SLU_ - case (amg_slu_) + case (amg_slu_) call lv%set(amg_d_slu_solver_mold,info,pos=pos) #endif #ifdef HAVE_MUMPS_ - case (amg_mumps_) + case (amg_mumps_) call lv%set(amg_d_mumps_solver_mold,info,pos=pos) #endif #ifdef HAVE_SLUDIST_ @@ -204,10 +205,10 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) #endif case default ! - ! Do nothing and hope for the best :) + ! Do nothing and hope for the best :) ! end select - + case ('SMOOTHER_SWEEPS') if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) & @@ -228,7 +229,7 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) return end if end if - + select case(val) case(amg_dec_aggr_) allocate(amg_d_dec_aggregator_type :: lv%aggr, stat=info) @@ -238,7 +239,7 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) info = psb_err_internal_error_ end select if (info == psb_success_) call lv%aggr%default() - + case ('AGGR_ORD') lv%parms%aggr_ord = val @@ -265,13 +266,13 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) lv%parms%coarse_solve = val case default - if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then - if (allocated(lv%sm)) then + if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then + if (allocated(lv%sm)) then call lv%sm%set(what,val,info,idx=idx) end if end if - if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then - if (allocated(lv%sm2a)) then + if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then + if (allocated(lv%sm2a)) then call lv%sm2a%set(what,val,info,idx=idx) end if end if diff --git a/amgprec/impl/level/amg_s_base_onelev_csetc.F90 b/amgprec/impl/level/amg_s_base_onelev_csetc.F90 index 7f8a82c8..f5f944bf 100644 --- a/amgprec/impl/level/amg_s_base_onelev_csetc.F90 +++ b/amgprec/impl/level/amg_s_base_onelev_csetc.F90 @@ -42,6 +42,7 @@ subroutine amg_s_base_onelev_csetc(lv,what,val,info,pos,idx) use amg_s_base_aggregator_mod use amg_s_dec_aggregator_mod use amg_s_symdec_aggregator_mod + use amg_s_parmatch_aggregator_mod use amg_s_jac_smoother use amg_s_as_smoother use amg_s_diag_solver @@ -242,11 +243,13 @@ subroutine amg_s_base_onelev_csetc(lv,what,val,info,pos,idx) end if end if - select case(ival) - case(amg_dec_aggr_) + select case(val) + case('DEC') allocate(amg_s_dec_aggregator_type :: lv%aggr, stat=info) - case(amg_sym_dec_aggr_) + case('SYMDEC') allocate(amg_s_symdec_aggregator_type :: lv%aggr, stat=info) + case('COUP','COUPLED') + allocate(amg_s_parmatch_aggregator_type :: lv%aggr, stat=info) case default info = psb_err_internal_error_ end select diff --git a/amgprec/impl/level/amg_s_base_onelev_cseti.F90 b/amgprec/impl/level/amg_s_base_onelev_cseti.F90 index 7101117e..1211a662 100644 --- a/amgprec/impl/level/amg_s_base_onelev_cseti.F90 +++ b/amgprec/impl/level/amg_s_base_onelev_cseti.F90 @@ -1,15 +1,15 @@ -! -! +! +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,15 +33,16 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx) - + use psb_base_mod use amg_s_onelev_mod, amg_protect_name => amg_s_base_onelev_cseti use amg_s_base_aggregator_mod use amg_s_dec_aggregator_mod use amg_s_symdec_aggregator_mod + use amg_s_parmatch_aggregator_mod use amg_s_jac_smoother use amg_s_as_smoother use amg_s_diag_solver @@ -59,13 +60,13 @@ subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx) Implicit None ! Arguments - class(amg_s_onelev_type), intent(inout) :: lv - character(len=*), intent(in) :: what + class(amg_s_onelev_type), intent(inout) :: lv + character(len=*), intent(in) :: what integer(psb_ipk_), intent(in) :: val integer(psb_ipk_), intent(out) :: info character(len=*), optional, intent(in) :: pos integer(psb_ipk_), intent(in), optional :: idx - ! Local + ! Local integer(psb_ipk_) :: ipos_, err_act character(len=20) :: name='s_base_onelev_cseti' type(amg_s_base_smoother_type) :: amg_s_base_smoother_mold @@ -84,7 +85,7 @@ subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx) #if defined(HAVE_MUMPS_) type(amg_s_mumps_solver_type) :: amg_s_mumps_solver_mold #endif - + call psb_erractionsave(err_act) info = psb_success_ @@ -100,14 +101,14 @@ subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx) else ipos_ = amg_smooth_both_ end if - + select case (psb_toupper(what)) case ('SMOOTHER_TYPE') - select case (val) + select case (val) case (amg_noprec_) call lv%set(amg_s_base_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_s_id_solver_mold,info,pos=pos) - + case (amg_jac_) call lv%set(amg_s_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_s_diag_solver_mold,info,pos=pos) @@ -115,11 +116,11 @@ subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx) case (amg_l1_jac_) call lv%set(amg_s_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_s_l1_diag_solver_mold,info,pos=pos) - + case (amg_bjac_) call lv%set(amg_s_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_s_ilu_solver_mold,info,pos=pos) - + case (amg_l1_bjac_) call lv%set(amg_s_l1_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_s_ilu_solver_mold,info,pos=pos) @@ -133,61 +134,61 @@ subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx) if (info == 0) call lv%set(amg_s_gs_solver_mold,info,pos='pre') call lv%set(amg_s_jac_smoother_mold,info,pos='post') if (info == 0) call lv%set(amg_s_bwgs_solver_mold,info,pos='post') - + case default ! - ! Do nothing and hope for the best :) + ! Do nothing and hope for the best :) ! end select - if ((ipos_==amg_smooth_pre_).or.(ipos_==amg_smooth_both_)) then + if ((ipos_==amg_smooth_pre_).or.(ipos_==amg_smooth_both_)) then if (allocated(lv%sm)) call lv%sm%default() end if if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_)) then if (allocated(lv%sm2a)) call lv%sm2a%default() end if - + case('SUB_SOLVE') - select case (val) + select case (val) case (amg_f_none_) call lv%set(amg_s_id_solver_mold,info,pos=pos) - + case (amg_diag_scale_) call lv%set(amg_s_diag_solver_mold,info,pos=pos) - + case (amg_l1_diag_scale_) call lv%set(amg_s_l1_diag_solver_mold,info,pos=pos) - + case (amg_gs_) call lv%set(amg_s_gs_solver_mold,info,pos=pos) - + case (amg_bwgs_) call lv%set(amg_s_bwgs_solver_mold,info,pos=pos) - + case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_) call lv%set(amg_s_ilu_solver_mold,info,pos=pos) if (info == 0) then - if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then + if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then call lv%sm%sv%set('SUB_SOLVE',val,info) end if - if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then + if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then if (allocated(lv%sm2a)) call lv%sm2a%sv%set('SUB_SOLVE',val,info) end if end if #ifdef HAVE_SLU_ - case (amg_slu_) + case (amg_slu_) call lv%set(amg_s_slu_solver_mold,info,pos=pos) #endif #ifdef HAVE_MUMPS_ - case (amg_mumps_) + case (amg_mumps_) call lv%set(amg_s_mumps_solver_mold,info,pos=pos) #endif case default ! - ! Do nothing and hope for the best :) + ! Do nothing and hope for the best :) ! end select - + case ('SMOOTHER_SWEEPS') if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) & @@ -208,7 +209,7 @@ subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx) return end if end if - + select case(val) case(amg_dec_aggr_) allocate(amg_s_dec_aggregator_type :: lv%aggr, stat=info) @@ -218,7 +219,7 @@ subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx) info = psb_err_internal_error_ end select if (info == psb_success_) call lv%aggr%default() - + case ('AGGR_ORD') lv%parms%aggr_ord = val @@ -245,13 +246,13 @@ subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx) lv%parms%coarse_solve = val case default - if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then - if (allocated(lv%sm)) then + if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then + if (allocated(lv%sm)) then call lv%sm%set(what,val,info,idx=idx) end if end if - if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then - if (allocated(lv%sm2a)) then + if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then + if (allocated(lv%sm2a)) then call lv%sm2a%set(what,val,info,idx=idx) end if end if diff --git a/amgprec/impl/level/amg_z_base_onelev_csetc.F90 b/amgprec/impl/level/amg_z_base_onelev_csetc.F90 index 3a49c635..47b76a24 100644 --- a/amgprec/impl/level/amg_z_base_onelev_csetc.F90 +++ b/amgprec/impl/level/amg_z_base_onelev_csetc.F90 @@ -262,10 +262,10 @@ subroutine amg_z_base_onelev_csetc(lv,what,val,info,pos,idx) end if end if - select case(ival) - case(amg_dec_aggr_) + select case(val) + case('DEC') allocate(amg_z_dec_aggregator_type :: lv%aggr, stat=info) - case(amg_sym_dec_aggr_) + case('SYMDEC') allocate(amg_z_symdec_aggregator_type :: lv%aggr, stat=info) case default info = psb_err_internal_error_ diff --git a/amgprec/impl/level/amg_z_base_onelev_cseti.F90 b/amgprec/impl/level/amg_z_base_onelev_cseti.F90 index a602dd66..b6a447a4 100644 --- a/amgprec/impl/level/amg_z_base_onelev_cseti.F90 +++ b/amgprec/impl/level/amg_z_base_onelev_cseti.F90 @@ -1,15 +1,15 @@ -! -! +! +! ! AMG4PSBLAS version 1.0 ! Algebraic Multigrid Package ! based on PSBLAS (Parallel Sparse BLAS version 3.7) -! -! (C) Copyright 2021 -! -! Salvatore Filippone -! Pasqua D'Ambra -! Fabio Durastante -! +! +! (C) Copyright 2021 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Fabio Durastante +! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: @@ -21,7 +21,7 @@ ! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! not be used to endorse or promote products derived from this ! software without specific written permission. -! +! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR @@ -33,10 +33,10 @@ ! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. -! -! +! +! subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) - + use psb_base_mod use amg_z_onelev_mod, amg_protect_name => amg_z_base_onelev_cseti use amg_z_base_aggregator_mod @@ -65,13 +65,13 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) Implicit None ! Arguments - class(amg_z_onelev_type), intent(inout) :: lv - character(len=*), intent(in) :: what + class(amg_z_onelev_type), intent(inout) :: lv + character(len=*), intent(in) :: what integer(psb_ipk_), intent(in) :: val integer(psb_ipk_), intent(out) :: info character(len=*), optional, intent(in) :: pos integer(psb_ipk_), intent(in), optional :: idx - ! Local + ! Local integer(psb_ipk_) :: ipos_, err_act character(len=20) :: name='z_base_onelev_cseti' type(amg_z_base_smoother_type) :: amg_z_base_smoother_mold @@ -96,7 +96,7 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) #if defined(HAVE_MUMPS_) type(amg_z_mumps_solver_type) :: amg_z_mumps_solver_mold #endif - + call psb_erractionsave(err_act) info = psb_success_ @@ -112,14 +112,14 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) else ipos_ = amg_smooth_both_ end if - + select case (psb_toupper(what)) case ('SMOOTHER_TYPE') - select case (val) + select case (val) case (amg_noprec_) call lv%set(amg_z_base_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_z_id_solver_mold,info,pos=pos) - + case (amg_jac_) call lv%set(amg_z_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_z_diag_solver_mold,info,pos=pos) @@ -127,11 +127,11 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) case (amg_l1_jac_) call lv%set(amg_z_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_z_l1_diag_solver_mold,info,pos=pos) - + case (amg_bjac_) call lv%set(amg_z_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_z_ilu_solver_mold,info,pos=pos) - + case (amg_l1_bjac_) call lv%set(amg_z_l1_jac_smoother_mold,info,pos=pos) if (info == 0) call lv%set(amg_z_ilu_solver_mold,info,pos=pos) @@ -145,53 +145,53 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) if (info == 0) call lv%set(amg_z_gs_solver_mold,info,pos='pre') call lv%set(amg_z_jac_smoother_mold,info,pos='post') if (info == 0) call lv%set(amg_z_bwgs_solver_mold,info,pos='post') - + case default ! - ! Do nothing and hope for the best :) + ! Do nothing and hope for the best :) ! end select - if ((ipos_==amg_smooth_pre_).or.(ipos_==amg_smooth_both_)) then + if ((ipos_==amg_smooth_pre_).or.(ipos_==amg_smooth_both_)) then if (allocated(lv%sm)) call lv%sm%default() end if if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_)) then if (allocated(lv%sm2a)) call lv%sm2a%default() end if - + case('SUB_SOLVE') - select case (val) + select case (val) case (amg_f_none_) call lv%set(amg_z_id_solver_mold,info,pos=pos) - + case (amg_diag_scale_) call lv%set(amg_z_diag_solver_mold,info,pos=pos) - + case (amg_l1_diag_scale_) call lv%set(amg_z_l1_diag_solver_mold,info,pos=pos) - + case (amg_gs_) call lv%set(amg_z_gs_solver_mold,info,pos=pos) - + case (amg_bwgs_) call lv%set(amg_z_bwgs_solver_mold,info,pos=pos) - + case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_) call lv%set(amg_z_ilu_solver_mold,info,pos=pos) if (info == 0) then - if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then + if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then call lv%sm%sv%set('SUB_SOLVE',val,info) end if - if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then + if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then if (allocated(lv%sm2a)) call lv%sm2a%sv%set('SUB_SOLVE',val,info) end if end if #ifdef HAVE_SLU_ - case (amg_slu_) + case (amg_slu_) call lv%set(amg_z_slu_solver_mold,info,pos=pos) #endif #ifdef HAVE_MUMPS_ - case (amg_mumps_) + case (amg_mumps_) call lv%set(amg_z_mumps_solver_mold,info,pos=pos) #endif #ifdef HAVE_SLUDIST_ @@ -204,10 +204,10 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) #endif case default ! - ! Do nothing and hope for the best :) + ! Do nothing and hope for the best :) ! end select - + case ('SMOOTHER_SWEEPS') if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) & @@ -228,7 +228,7 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) return end if end if - + select case(val) case(amg_dec_aggr_) allocate(amg_z_dec_aggregator_type :: lv%aggr, stat=info) @@ -238,7 +238,7 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) info = psb_err_internal_error_ end select if (info == psb_success_) call lv%aggr%default() - + case ('AGGR_ORD') lv%parms%aggr_ord = val @@ -265,13 +265,13 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) lv%parms%coarse_solve = val case default - if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then - if (allocated(lv%sm)) then + if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) then + if (allocated(lv%sm)) then call lv%sm%set(what,val,info,idx=idx) end if end if - if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then - if (allocated(lv%sm2a)) then + if ((ipos_==amg_smooth_post_).or.(ipos_==amg_smooth_both_))then + if (allocated(lv%sm2a)) then call lv%sm2a%set(what,val,info,idx=idx) end if end if diff --git a/docs/html/index.html b/docs/html/index.html index 2d1ac7b7..18ae1e4d 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -105,75 +105,80 @@ class="cmr-12"> 4.1 Examples +
 4.2 GPU example
5 User Interface
 5.1 Method init
 5.2 Method set
 5.3 Method hierarchy_build
 5.4 Method smoothers_build
 5.5 Method build
 5.6 Method apply
 5.7 Method free
 5.8 Method descr
 5.9 Auxiliary Methods
6 Adding new smoother and solver objects to AMG4PSBLAS
7 Error Handling
A License
B Contributor Covenant Code of Conduct
References diff --git a/docs/html/userhtml.html b/docs/html/userhtml.html index 2d1ac7b7..18ae1e4d 100644 --- a/docs/html/userhtml.html +++ b/docs/html/userhtml.html @@ -105,75 +105,80 @@ class="cmr-12"> 4.1 Examples +
 4.2 GPU example
5 User Interface
 5.1 Method init
 5.2 Method set
 5.3 Method hierarchy_build
 5.4 Method smoothers_build
 5.5 Method build
 5.6 Method apply
 5.7 Method free
 5.8 Method descr
 5.9 Auxiliary Methods
6 Adding new smoother and solver objects to AMG4PSBLAS
7 Error Handling
A License
B Contributor Covenant Code of Conduct
References diff --git a/docs/html/userhtmlli1.html b/docs/html/userhtmlli1.html index fc40c5d3..dcc83f43 100644 --- a/docs/html/userhtmlli1.html +++ b/docs/html/userhtmlli1.html @@ -77,11 +77,11 @@ class="cmr-12">PSCToolkit (Parallel Sparse Computation Toolkit) software framewo class="cmr-12">of a software development project started in 2007, named MLD2P4, which originally implemented a multilevel version of some domain decomposition preconditioners of -additive-Schwarz type, and was based on a parallel decoupled version of the well known +additive-Schwarz type, and was based on a parallel decoupled version of the well known smoothed aggregation method to generate the multilevel hierarchy of coarser  4.1 Examples +
 4.2 GPU example
5 User Interface
 5.1 Method init
 5.2 Method set
 5.3 Method hierarchy_build
 5.4 Method smoothers_build
 5.5 Method build
 5.6 Method apply
 5.7 Method free
 5.8 Method descr
 5.9 Auxiliary Methods
  5.9.1 Method: dump
  5.9.2 Method: clone
  5.9.3 Method: sizeof
  5.9.4 Method: allocate_wrk
  5.9.5 Method: free_wrk
6 Adding new smoother and solver objects to AMG4PSBLAS
7 Error Handling
A License
B Contributor Covenant Code of Conduct diff --git a/docs/html/userhtmlli5.html b/docs/html/userhtmlli5.html index b9362d17..d712d8cf 100644 --- a/docs/html/userhtmlli5.html +++ b/docs/html/userhtmlli5.html @@ -25,7 +25,7 @@ href="userhtml.html#userhtmlli5.html" >up]

References

diff --git a/docs/html/userhtmlse1.html b/docs/html/userhtmlse1.html index f7af8224..f0b32b47 100644 --- a/docs/html/userhtmlse1.html +++ b/docs/html/userhtmlse1.html @@ -299,7 +299,7 @@ class="cmr-12">smoothers and solvers for building new versions of the preconditi Section 6).

, where the Fortran codes of a few sample programs are also shown A reference guide for the user interface routines is provided in Section 5. Information on the extension of the package through the addition smoothers and solvers is reported in Section 6. The error handling mechanism used by the package is briefly described in Section 7. The copyright terms concerning the distribution and modification of AMG4PSBLAS are re Appendix A. diff --git a/docs/html/userhtmlse2.html b/docs/html/userhtmlse2.html index 8c0e20d1..03862797 100644 --- a/docs/html/userhtmlse2.html +++ b/docs/html/userhtmlse2.html @@ -42,7 +42,7 @@ class="cmr-12">where contact points for further information can be also found.

The software is available under a modified BSD license, as specified in Appendix A; list of all the preconditioner parameters and their allowed and d is provided in Section 5, Tables 2-8. @@ -208,7 +208,7 @@ class="cmr-12">All the previous routines are available as methods of the precond detailed description of them is given in Section 5. Examples showing the basic use of 2-8 for further details of +href="userhtmlsu9.html#x19-18009r2">2-8 for further details of the preconditioner.




 4.1 Examples +
 4.2 GPU example
+ diff --git a/docs/html/userhtmlse5.html b/docs/html/userhtmlse5.html index 8f6ba4e7..a7e1fb0e 100644 --- a/docs/html/userhtmlse5.html +++ b/docs/html/userhtmlse5.html @@ -29,7 +29,7 @@ class="cmr-12">up]

5 User Interface

The basic user interface of AMG4PBLAS consists of eight methods. The six methods @@ -151,7 +151,7 @@ class="cmr-12">the precision of the sparse matrix and preconditioner data struct Section 5.2).

A description of each method is given in the remainder of this se  5.1 Method init
 5.2 Method set
 5.3 Method hierarchy_build
 5.4 Method smoothers_build
 5.5 Method build
 5.6 Method apply
 5.7 Method free
 5.8 Method descr
 5.9 Auxiliary Methods
  5.9.1 Method: dump
  5.9.2 Method: clone
  5.9.3 Method: sizeof
  5.9.4 Method: allocate_wrk
  5.9.5 Method: free_wrk diff --git a/docs/html/userhtmlse6.html b/docs/html/userhtmlse6.html index 5cbf8ab8..6282c36f 100644 --- a/docs/html/userhtmlse6.html +++ b/docs/html/userhtmlse6.html @@ -29,7 +29,7 @@ class="cmr-12">up
]

6 Adding new smoother and solver objects to AMG4PSBLAS

Developers can add completely new smoother and/or solver classes derived from the @@ -37,7 +37,7 @@ class="cmr-12">Developers can add completely new smoother and/or solver classes class="cmr-12">base objects in the library (see Remark 2 in Section 5.2), without recompiling the The user-defined new solver to be employed in the preconditioner.

The other arguments are defined in the way described in Sec. 5.2. As an example, in the pass it as follows: +<<<<<<< HEAD

+=======
+   
+>>>>>>> development
   ! sparse matrix and preconditioner
   type(psb_dspmat_type) :: a
   type(amg_dprec_type)  :: prec
diff --git a/docs/html/userhtmlse7.html b/docs/html/userhtmlse7.html
index 20a74c45..df4dc649 100644
--- a/docs/html/userhtmlse7.html
+++ b/docs/html/userhtmlse7.html
@@ -29,7 +29,7 @@ class="cmr-12">up] 

7 Error Handling

The error handling in AMG4PSBLAS is based on the PSBLAS error handling. Error diff --git a/docs/html/userhtmlse8.html b/docs/html/userhtmlse8.html index c719a48e..e322b719 100644 --- a/docs/html/userhtmlse8.html +++ b/docs/html/userhtmlse8.html @@ -29,14 +29,18 @@ class="cmr-12">up]

A License

AMG4PSBLAS is freely distributable under the following copyright terms: +<<<<<<< HEAD

+=======
+   
+>>>>>>> development
                            AMG4PSBLAS  version 1.0
               Algebraic MultiGrid Preconditioners Package
              based on PSBLAS (Parallel Sparse BLAS version 3.7)
@@ -78,7 +82,11 @@ class="cmr-12">abide by its terms:
                                                                                
 
                                                                                
+<<<<<<< HEAD
    
+=======
+   
+>>>>>>> development
                            MLD2P4  version 2.2
   MultiLevel Domain Decomposition Parallel Preconditioners Package
              based on PSBLAS (Parallel Sparse BLAS version 3.5)
@@ -125,6 +133,7 @@ class="cmr-12">. The relevant license is reproduced here:
                                                                                
 
                                                                                
+<<<<<<< HEAD
    
 // ***********************************************************************
 //
@@ -134,6 +143,17 @@ class="cmr-12">. The relevant license is reproduced here:
 //
 // ***********************************************************************
 //
+=======
+   
+// ***********************************************************************
+//
+//        MatchboxP: A C++ library for approximate weighted matching
+//               Mahantesh Halappanavar (hala@pnnl.gov)
+//               Pacific Northwest National Laboratory
+//
+// ***********************************************************************
+//
+>>>>>>> development
 //       Copyright (2021) Battelle Memorial Institute
 //                      All rights reserved.
 //
diff --git a/docs/html/userhtmlse9.html b/docs/html/userhtmlse9.html
index 5a1864d1..3db740b8 100644
--- a/docs/html/userhtmlse9.html
+++ b/docs/html/userhtmlse9.html
@@ -29,12 +29,12 @@ class="cmr-12">up] 

B Contributor Covenant Code of Conduct

Our Pledge We as members, contributors, and leaders pledge to make participation in @@ -100,7 +100,7 @@ class="cmr-12">Other conduct which could reasonably be considered inappro professional setting

Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of @@ -138,7 +138,7 @@ class="cmr-12">leaders are obligated to respect the privacy and security of the incident.

Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in @@ -148,7 +148,7 @@ class="cmr-12">determining the consequences for any action they deem in violatio class="cmr-12">Conduct:

  1. Correction

    Community Impact: clarity around the nature of the violation and an explanation of class="cmr-12">behavior was inappropriate. A public apology may be requested.

  2. Warning

    Community Impact: channels like social media. Violating these terms may lead to a t class="cmr-12">or permanent ban.

  3. Temporary Ban

    Community Impact: interaction with those enforcing the Code of Conduct, is allowed class="cmr-12">period. Violating these terms may lead to a permanent ban.

  4. Permanent Ban

    Community Impact: A permanent ban from any sort of public interaction within the community.

Attribution This Code of Conduct is adapted from the Contributor Covenant, version 2.0, diff --git a/docs/html/userhtmlsu1.html b/docs/html/userhtmlsu1.html index d3d37856..6946e556 100644 --- a/docs/html/userhtmlsu1.html +++ b/docs/html/userhtmlsu1.html @@ -124,10 +124,39 @@ class="cmr-12">Please note that the four previous libraries must have Fortran in class="cmr-12">AMG4PSBLAS; usually this means that they should all be built with the same compiler being used for AMG4PSBLAS. +

If you want to use the PSBLAS support for NVIDIA GPUs, you will also +need: +

+PSBLAS-EXT
Parallel Sparse BLAS (PSBLAS) Extensions, available from + psctoolkit.github.io/products/psblasext/; version 1.3.0 (or later). +
+SPGPU
Sparse CUDA kernels for NVIDIA GPUs; available from GitHub, see + also psctoolkit.github.io/products/psblasext/.
+

See also Sec 4.2. -

+<<<<<<< HEAD

>>>>>> development class="cmr-12">Once the configure script has completed execution, it will have generated the file Make.inc which will then be used by all Makefiles in the directory tree; t class="cmr-12">copied in the install directory under the name Make.inc.AMG4PSBLAS. -

To use the MUMPS solver package, the user has to add the appropriate options to the configure script; by default we are looking for the libraries --with-extra-libs configure option. -

To build the library the user will now enter @@ -4288,7 +4296,11 @@ class="cmr-12">To build the library the user will now enter

 make
 
+<<<<<<< HEAD

>>>>>> development class="cmr-12">followed (optionally) by @@ -4296,11 +4308,15 @@ class="cmr-12">followed (optionally) by

 make install
 
+<<<<<<< HEAD

+======= +

+>>>>>>> development -