Merge branch 'mergeparmatch' of github.com:sfilippone/amg4psblas into mergeparmatch

mergeparmatch
Salvatore Filippone 4 years ago
commit eee6e596b1

@ -1,15 +1,15 @@
! !
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2020 ! (C) Copyright 2020
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,8 +33,8 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
! File: amg_base_prec_type.F90 ! File: amg_base_prec_type.F90
! !
! Module: amg_base_prec_type ! Module: amg_base_prec_type
@ -50,16 +50,16 @@
! !
! It contains routines for ! It contains routines for
! - converting character constants defining the preconditioner into integer ! - converting character constants defining the preconditioner into integer
! constants; ! constants;
! - checking if the preconditioner is correctly defined; ! - checking if the preconditioner is correctly defined;
! - printing a description of the preconditioner; ! - printing a description of the preconditioner;
! - deallocating the preconditioner data structure. ! - deallocating the preconditioner data structure.
! !
module amg_base_prec_type 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. ! blows up on some systems.
! !
use psb_const_mod use psb_const_mod
@ -78,7 +78,7 @@ module amg_base_prec_type
& psb_err_from_subroutine_, psb_err_missing_override_method_, & & psb_err_from_subroutine_, psb_err_missing_override_method_, &
& psb_error_handler, psb_out_unit, psb_err_unit & psb_error_handler, psb_out_unit, psb_err_unit
! !
! Version numbers ! Version numbers
! !
character(len=*), parameter :: amg_version_string_ = "1.0.0" 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 procedure, pass(pm) :: printout => d_ml_parms_printout
end type amg_dml_parms end type amg_dml_parms
type amg_iaggr_data 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 = -ione
integer(psb_ipk_) :: min_coarse_size_per_process = -ione integer(psb_ipk_) :: min_coarse_size_per_process = -ione
integer(psb_lpk_) :: target_coarse_size 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_ integer(psb_ipk_) :: max_levs = 20_psb_ipk_
end type amg_iaggr_data end type amg_iaggr_data
type, extends(amg_iaggr_data) :: amg_saggr_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_) :: min_cr_ratio = 1.5_psb_spk_
real(psb_spk_) :: op_complexity = szero real(psb_spk_) :: op_complexity = szero
real(psb_spk_) :: avg_cr = szero real(psb_spk_) :: avg_cr = szero
end type amg_saggr_data end type amg_saggr_data
type, extends(amg_iaggr_data) :: amg_daggr_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_) :: min_cr_ratio = 1.5_psb_dpk_
real(psb_dpk_) :: op_complexity = dzero real(psb_dpk_) :: op_complexity = dzero
real(psb_dpk_) :: avg_cr = dzero real(psb_dpk_) :: avg_cr = dzero
end type amg_daggr_data end type amg_daggr_data
! !
! Entries in iprcparm ! Entries in iprcparm
! !
! These are in baseprec ! 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_solve_ = 2
integer(psb_ipk_), parameter :: amg_sub_restr_ = 3 integer(psb_ipk_), parameter :: amg_sub_restr_ = 3
integer(psb_ipk_), parameter :: amg_sub_prol_ = 4 integer(psb_ipk_), parameter :: amg_sub_prol_ = 4
@ -169,7 +169,7 @@ module amg_base_prec_type
! !
! These are in onelev ! These are in onelev
! !
integer(psb_ipk_), parameter :: amg_ml_cycle_ = 20 integer(psb_ipk_), parameter :: amg_ml_cycle_ = 20
integer(psb_ipk_), parameter :: amg_smoother_sweeps_pre_ = 21 integer(psb_ipk_), parameter :: amg_smoother_sweeps_pre_ = 21
integer(psb_ipk_), parameter :: amg_smoother_sweeps_post_ = 22 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_eig_ = 28
integer(psb_ipk_), parameter :: amg_aggr_filter_ = 29 integer(psb_ipk_), parameter :: amg_aggr_filter_ = 29
integer(psb_ipk_), parameter :: amg_coarse_mat_ = 30 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_sweeps_ = 32
integer(psb_ipk_), parameter :: amg_coarse_fillin_ = 33 integer(psb_ipk_), parameter :: amg_coarse_fillin_ = 33
integer(psb_ipk_), parameter :: amg_coarse_subsolve_ = 34 integer(psb_ipk_), parameter :: amg_coarse_subsolve_ = 34
@ -196,7 +196,7 @@ module amg_base_prec_type
! !
! Legal values for entry: amg_smoother_type_ ! Legal values for entry: amg_smoother_type_
! !
integer(psb_ipk_), parameter :: amg_min_prec_ = 0 integer(psb_ipk_), parameter :: amg_min_prec_ = 0
integer(psb_ipk_), parameter :: amg_noprec_ = 0 integer(psb_ipk_), parameter :: amg_noprec_ = 0
integer(psb_ipk_), parameter :: amg_base_smooth_ = 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_none_ = 0
integer(psb_ipk_), parameter :: amg_ilu_scale_maxval_ = 1 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_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_aclsum_ = 4
integer(psb_ipk_), parameter :: amg_ilu_scale_arcsum_ = 5 integer(psb_ipk_), parameter :: amg_ilu_scale_arcsum_ = 5
! For the time being enable only maxval scale ! 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_new_ml_prec_ = 7
integer(psb_ipk_), parameter :: amg_mult_dev_ml_ = 7 integer(psb_ipk_), parameter :: amg_mult_dev_ml_ = 7
integer(psb_ipk_), parameter :: amg_max_ml_cycle_ = 8 integer(psb_ipk_), parameter :: amg_max_ml_cycle_ = 8
! !
! Legal values for entry: amg_par_aggr_alg_ ! Legal values for entry: amg_par_aggr_alg_
! !
integer(psb_ipk_), parameter :: amg_dec_aggr_ = 0 integer(psb_ipk_), parameter :: amg_dec_aggr_ = 0
integer(psb_ipk_), parameter :: amg_sym_dec_aggr_ = 1 integer(psb_ipk_), parameter :: amg_sym_dec_aggr_ = 1
integer(psb_ipk_), parameter :: amg_ext_aggr_ = 2 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_coupled_aggr_ = 3
integer(psb_ipk_), parameter :: amg_max_par_aggr_alg_ = amg_coupled_aggr_
! !
! Legal values for entry: amg_aggr_type_ ! Legal values for entry: amg_aggr_type_
! !
integer(psb_ipk_), parameter :: amg_noalg_ = 0 integer(psb_ipk_), parameter :: amg_noalg_ = 0
integer(psb_ipk_), parameter :: amg_soc1_ = 1 integer(psb_ipk_), parameter :: amg_soc1_ = 1
integer(psb_ipk_), parameter :: amg_soc2_ = 2 integer(psb_ipk_), parameter :: amg_soc2_ = 2
integer(psb_ipk_), parameter :: amg_matchboxp_ = 3
! !
! Legal values for entry: amg_aggr_prol_ ! 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_no_filter_mat_ = 0
integer(psb_ipk_), parameter :: amg_filter_mat_ = 1 integer(psb_ipk_), parameter :: amg_filter_mat_ = 1
integer(psb_ipk_), parameter :: amg_max_filter_mat_ = amg_filter_mat_ integer(psb_ipk_), parameter :: amg_max_filter_mat_ = amg_filter_mat_
! !
! Legal values for entry: amg_aggr_ord_ ! Legal values for entry: amg_aggr_ord_
! !
integer(psb_ipk_), parameter :: amg_aggr_ord_nat_ = 0 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_distr_mat_ = 0
integer(psb_ipk_), parameter :: amg_repl_mat_ = 1 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_ ! Legal values for entry: amg_prec_status_
! !
@ -338,7 +340,7 @@ module amg_base_prec_type
! !
! Fields for sparse matrices ensembles stored in av() ! Fields for sparse matrices ensembles stored in av()
! !
integer(psb_ipk_), parameter :: amg_l_pr_ = 1 integer(psb_ipk_), parameter :: amg_l_pr_ = 1
integer(psb_ipk_), parameter :: amg_u_pr_ = 2 integer(psb_ipk_), parameter :: amg_u_pr_ = 2
integer(psb_ipk_), parameter :: amg_bp_ilu_avsz_ = 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_t_ = 5
integer(psb_ipk_), parameter :: amg_sm_pr_ = 6 integer(psb_ipk_), parameter :: amg_sm_pr_ = 6
integer(psb_ipk_), parameter :: amg_smth_avsz_ = 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 ! Character constants used by amg_file_prec_descr
@ -362,12 +364,13 @@ module amg_base_prec_type
character(len=15), parameter, private :: & character(len=15), parameter, private :: &
& matrix_names(0:1)=(/'distributed ','replicated '/) & matrix_names(0:1)=(/'distributed ','replicated '/)
character(len=18), parameter, private :: & character(len=18), parameter, private :: &
& aggr_type_names(0:2)=(/'None ',& & aggr_type_names(0:3)=(/'None ',&
& 'SOC measure 1 ', 'SOC Measure 2 '/) & 'SOC measure 1 ', 'SOC Measure 2 ',&
& 'Parallel Matching '/)
character(len=18), parameter, private :: & character(len=18), parameter, private :: &
& par_aggr_alg_names(0:2)=(/& & par_aggr_alg_names(0:3)=(/&
& 'decoupled aggr. ', 'sym. dec. aggr. ',& & 'decoupled aggr. ', 'sym. dec. aggr. ',&
& 'user defined aggr.'/) & 'user defined aggr.', 'coupled aggr. '/)
character(len=18), parameter, private :: & character(len=18), parameter, private :: &
& ord_names(0:1)=(/'Natural ordering ','Desc. degree ord. '/) & ord_names(0:1)=(/'Natural ordering ','Desc. degree ord. '/)
character(len=6), parameter, private :: & 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 module procedure amg_icheck_def, amg_scheck_def, amg_dcheck_def
end interface end interface
interface psb_bcast interface psb_bcast
module procedure amg_ml_bcast, amg_sml_bcast, amg_dml_bcast module procedure amg_ml_bcast, amg_sml_bcast, amg_dml_bcast
end interface psb_bcast end interface psb_bcast
@ -408,9 +411,9 @@ module amg_base_prec_type
! Will need a more sophisticated strategy. ! Will need a more sophisticated strategy.
! !
logical, private, save :: do_remap=.false. logical, private, save :: do_remap=.false.
contains contains
function amg_get_do_remap() result(res) function amg_get_do_remap() result(res)
implicit none implicit none
logical :: res logical :: res
@ -424,7 +427,7 @@ contains
do_remap = val do_remap = val
end subroutine amg_set_do_remap end subroutine amg_set_do_remap
! !
! Function: amg_stringval ! Function: amg_stringval
! !
@ -439,10 +442,10 @@ contains
! !
function amg_stringval(string) result(val) function amg_stringval(string) result(val)
use psb_prec_const_mod use psb_prec_const_mod
implicit none implicit none
! Arguments ! Arguments
character(len=*), intent(in) :: string character(len=*), intent(in) :: string
integer(psb_ipk_) :: val integer(psb_ipk_) :: val
character(len=*), parameter :: name='amg_stringval' character(len=*), parameter :: name='amg_stringval'
! Local variable ! Local variable
integer :: index_tab integer :: index_tab
@ -450,14 +453,14 @@ contains
index_tab=index(string,char(9)) index_tab=index(string,char(9))
if (index_tab.NE.0) then if (index_tab.NE.0) then
string2=string(1:index_tab-1) string2=string(1:index_tab-1)
else else
string2=string string2=string
endif endif
select case(psb_toupper(trim(string2))) select case(psb_toupper(trim(string2)))
case('NONE') case('NONE')
val = 0 val = 0
case('HALO') case('HALO')
val = psb_halo_ val = psb_halo_
case('SUM') case('SUM')
val = psb_sum_ val = psb_sum_
case('AVG') case('AVG')
@ -553,56 +556,56 @@ contains
case('OUTER_SWEEPS') case('OUTER_SWEEPS')
val = amg_outer_sweeps_ val = amg_outer_sweeps_
case('LOCAL_SOLVER') case('LOCAL_SOLVER')
val = amg_local_solver_ val = amg_local_solver_
case('GLOBAL_SOLVER') case('GLOBAL_SOLVER')
val = amg_global_solver_ val = amg_global_solver_
case default case default
val = -1 val = -1
end select end select
end function amg_stringval end function amg_stringval
subroutine ml_parms_get_coarse(pm,pmin) subroutine ml_parms_get_coarse(pm,pmin)
implicit none implicit none
class(amg_ml_parms), intent(inout) :: pm class(amg_ml_parms), intent(inout) :: pm
class(amg_ml_parms), intent(in) :: pmin class(amg_ml_parms), intent(in) :: pmin
pm%coarse_mat = pmin%coarse_mat pm%coarse_mat = pmin%coarse_mat
pm%coarse_solve = pmin%coarse_solve pm%coarse_solve = pmin%coarse_solve
end subroutine ml_parms_get_coarse end subroutine ml_parms_get_coarse
subroutine ml_parms_printout(pm,iout) subroutine ml_parms_printout(pm,iout)
implicit none implicit none
class(amg_ml_parms), intent(in) :: pm class(amg_ml_parms), intent(in) :: pm
integer(psb_ipk_), intent(in) :: iout integer(psb_ipk_), intent(in) :: iout
write(iout,*) 'ML : ',pm%ml_cycle write(iout,*) 'ML : ',pm%ml_cycle
write(iout,*) 'Sweeps: ',pm%sweeps_pre,pm%sweeps_post write(iout,*) 'Sweeps: ',pm%sweeps_pre,pm%sweeps_post
write(iout,*) 'AGGR : ',pm%par_aggr_alg,pm%aggr_prol, pm%aggr_ord 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,*) ' : ',pm%aggr_omega_alg,pm%aggr_eig,pm%aggr_filter
write(iout,*) 'COARSE: ',pm%coarse_mat,pm%coarse_solve write(iout,*) 'COARSE: ',pm%coarse_mat,pm%coarse_solve
end subroutine ml_parms_printout end subroutine ml_parms_printout
subroutine s_ml_parms_printout(pm,iout) subroutine s_ml_parms_printout(pm,iout)
implicit none implicit none
class(amg_sml_parms), intent(in) :: pm class(amg_sml_parms), intent(in) :: pm
integer(psb_ipk_), intent(in) :: iout integer(psb_ipk_), intent(in) :: iout
call pm%amg_ml_parms%printout(iout) call pm%amg_ml_parms%printout(iout)
write(iout,*) 'REAL : ',pm%aggr_omega_val,pm%aggr_thresh write(iout,*) 'REAL : ',pm%aggr_omega_val,pm%aggr_thresh
end subroutine s_ml_parms_printout end subroutine s_ml_parms_printout
subroutine d_ml_parms_printout(pm,iout) subroutine d_ml_parms_printout(pm,iout)
implicit none implicit none
class(amg_dml_parms), intent(in) :: pm class(amg_dml_parms), intent(in) :: pm
integer(psb_ipk_), intent(in) :: iout integer(psb_ipk_), intent(in) :: iout
call pm%amg_ml_parms%printout(iout) call pm%amg_ml_parms%printout(iout)
write(iout,*) 'REAL : ',pm%aggr_omega_val,pm%aggr_thresh write(iout,*) 'REAL : ',pm%aggr_omega_val,pm%aggr_thresh
end subroutine d_ml_parms_printout end subroutine d_ml_parms_printout
! !
! Routines printing out a description of the preconditioner ! Routines printing out a description of the preconditioner
@ -618,7 +621,7 @@ contains
info = psb_success_ info = psb_success_
if ((pm%ml_cycle>=amg_no_ml_).and.(pm%ml_cycle<=amg_max_ml_cycle_)) then if ((pm%ml_cycle>=amg_no_ml_).and.(pm%ml_cycle<=amg_max_ml_cycle_)) then
write(iout,*) ' Multilevel cycle: ',& write(iout,*) ' Multilevel cycle: ',&
& ml_names(pm%ml_cycle) & ml_names(pm%ml_cycle)
select case (pm%ml_cycle) select case (pm%ml_cycle)
@ -644,7 +647,7 @@ contains
info = psb_success_ info = psb_success_
if ((pm%ml_cycle>=amg_no_ml_).and.(pm%ml_cycle<=amg_max_ml_cycle_)) then if ((pm%ml_cycle>=amg_no_ml_).and.(pm%ml_cycle<=amg_max_ml_cycle_)) then
write(iout,*) ' Parallel aggregation algorithm: ',& write(iout,*) ' Parallel aggregation algorithm: ',&
& par_aggr_alg_names(pm%par_aggr_alg) & par_aggr_alg_names(pm%par_aggr_alg)
if (pm%aggr_type>0) write(iout,*) ' Aggregation type: ',& if (pm%aggr_type>0) write(iout,*) ' Aggregation type: ',&
@ -656,23 +659,23 @@ contains
write(iout,*) ' Aggregation prolongator: ', & write(iout,*) ' Aggregation prolongator: ', &
& aggr_prols(pm%aggr_prol) & aggr_prols(pm%aggr_prol)
if (pm%aggr_prol /= amg_no_smooth_) then if (pm%aggr_prol /= amg_no_smooth_) then
write(iout,*) ' with: ', aggr_filters(pm%aggr_filter) write(iout,*) ' with: ', aggr_filters(pm%aggr_filter)
if (pm%aggr_omega_alg == amg_eig_est_) then if (pm%aggr_omega_alg == amg_eig_est_) then
write(iout,*) ' Damping omega computation: spectral radius estimate' write(iout,*) ' Damping omega computation: spectral radius estimate'
write(iout,*) ' Spectral radius estimate: ', & write(iout,*) ' Spectral radius estimate: ', &
& eigen_estimates(pm%aggr_eig) & 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.' write(iout,*) ' Damping omega computation: user defined value.'
else else
write(iout,*) ' Damping omega computation: unknown value in iprcparm!!' write(iout,*) ' Damping omega computation: unknown value in iprcparm!!'
end if end if
end if end if
!end if !end if
else else
write(iout,*) ' Multilevel type: Unkonwn value. Something is amiss....',& write(iout,*) ' Multilevel type: Unkonwn value. Something is amiss....',&
& pm%ml_cycle & pm%ml_cycle
end if end if
return return
end subroutine ml_parms_mldescr end subroutine ml_parms_mldescr
@ -689,13 +692,13 @@ contains
logical :: coarse_ logical :: coarse_
info = psb_success_ info = psb_success_
if (present(coarse)) then if (present(coarse)) then
coarse_ = coarse coarse_ = coarse
else else
coarse_ = .false. coarse_ = .false.
end if end if
if (coarse_) then if (coarse_) then
call pm%coarsedescr(iout,info) call pm%coarsedescr(iout,info)
end if end if
@ -718,12 +721,12 @@ contains
write(iout,*) ' Coarse matrix: ',& write(iout,*) ' Coarse matrix: ',&
& matrix_names(pm%coarse_mat) & matrix_names(pm%coarse_mat)
select case(pm%coarse_solve) select case(pm%coarse_solve)
case (amg_bjac_,amg_as_) case (amg_bjac_,amg_as_)
write(iout,*) ' Number of sweeps : ',& write(iout,*) ' Number of sweeps : ',&
& pm%sweeps_pre & pm%sweeps_pre
write(iout,*) ' Coarse solver: ',& write(iout,*) ' Coarse solver: ',&
& 'Block Jacobi' & 'Block Jacobi'
case (amg_l1_bjac_) case (amg_l1_bjac_)
write(iout,*) ' Number of sweeps : ',& write(iout,*) ' Number of sweeps : ',&
& pm%sweeps_pre & pm%sweeps_pre
write(iout,*) ' Coarse solver: ',& write(iout,*) ' Coarse solver: ',&
@ -790,7 +793,7 @@ contains
! !
function is_legal_base_prec(ip) function is_legal_base_prec(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_base_prec logical :: is_legal_base_prec
@ -798,60 +801,68 @@ contains
return return
end function is_legal_base_prec end function is_legal_base_prec
function is_int_non_negative(ip) function is_int_non_negative(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_int_non_negative logical :: is_int_non_negative
is_int_non_negative = (ip >= 0) is_int_non_negative = (ip >= 0)
return return
end function is_int_non_negative end function is_int_non_negative
function is_legal_ilu_scale(ip) function is_legal_ilu_scale(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ilu_scale logical :: is_legal_ilu_scale
is_legal_ilu_scale = ((ip >= amg_ilu_scale_none_).and.(ip <= amg_max_ilu_scale_)) is_legal_ilu_scale = ((ip >= amg_ilu_scale_none_).and.(ip <= amg_max_ilu_scale_))
return return
end function is_legal_ilu_scale end function is_legal_ilu_scale
function is_int_positive(ip) function is_int_positive(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_int_positive logical :: is_int_positive
is_int_positive = (ip >= 1) is_int_positive = (ip >= 1)
return return
end function is_int_positive end function is_int_positive
function is_legal_prolong(ip) function is_legal_prolong(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_prolong logical :: is_legal_prolong
is_legal_prolong = ((ip>=psb_none_).and.(ip<=psb_square_root_)) is_legal_prolong = ((ip>=psb_none_).and.(ip<=psb_square_root_))
return return
end function is_legal_prolong end function is_legal_prolong
function is_legal_restrict(ip) function is_legal_restrict(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_restrict logical :: is_legal_restrict
is_legal_restrict = ((ip == psb_nohalo_).or.(ip==psb_halo_)) is_legal_restrict = ((ip == psb_nohalo_).or.(ip==psb_halo_))
return return
end function is_legal_restrict end function is_legal_restrict
function is_legal_ml_cycle(ip) function is_legal_ml_cycle(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ml_cycle logical :: is_legal_ml_cycle
is_legal_ml_cycle = ((ip>=amg_no_ml_).and.(ip<=amg_max_ml_cycle_)) is_legal_ml_cycle = ((ip>=amg_no_ml_).and.(ip<=amg_max_ml_cycle_))
return return
end function is_legal_ml_cycle end function is_legal_ml_cycle
function is_legal_ml_par_aggr_alg(ip) function is_legal_coupled_par_aggr_alg(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip 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 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) function is_legal_ml_aggr_type(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ml_aggr_type logical :: is_legal_ml_aggr_type
@ -859,7 +870,7 @@ contains
return return
end function is_legal_ml_aggr_type end function is_legal_ml_aggr_type
function is_legal_ml_aggr_ord(ip) function is_legal_ml_aggr_ord(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ml_aggr_ord logical :: is_legal_ml_aggr_ord
@ -867,7 +878,7 @@ contains
return return
end function is_legal_ml_aggr_ord end function is_legal_ml_aggr_ord
function is_legal_ml_aggr_omega_alg(ip) function is_legal_ml_aggr_omega_alg(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ml_aggr_omega_alg logical :: is_legal_ml_aggr_omega_alg
@ -875,7 +886,7 @@ contains
return return
end function is_legal_ml_aggr_omega_alg end function is_legal_ml_aggr_omega_alg
function is_legal_ml_aggr_eig(ip) function is_legal_ml_aggr_eig(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ml_aggr_eig logical :: is_legal_ml_aggr_eig
@ -883,7 +894,7 @@ contains
return return
end function is_legal_ml_aggr_eig end function is_legal_ml_aggr_eig
function is_legal_ml_aggr_prol(ip) function is_legal_ml_aggr_prol(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ml_aggr_prol logical :: is_legal_ml_aggr_prol
@ -891,7 +902,7 @@ contains
return return
end function is_legal_ml_aggr_prol end function is_legal_ml_aggr_prol
function is_legal_ml_coarse_mat(ip) function is_legal_ml_coarse_mat(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ml_coarse_mat logical :: is_legal_ml_coarse_mat
@ -899,7 +910,7 @@ contains
return return
end function is_legal_ml_coarse_mat end function is_legal_ml_coarse_mat
function is_legal_aggr_filter(ip) function is_legal_aggr_filter(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_aggr_filter logical :: is_legal_aggr_filter
@ -907,7 +918,7 @@ contains
return return
end function is_legal_aggr_filter end function is_legal_aggr_filter
function is_distr_ml_coarse_mat(ip) function is_distr_ml_coarse_mat(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_distr_ml_coarse_mat logical :: is_distr_ml_coarse_mat
@ -915,7 +926,7 @@ contains
return return
end function is_distr_ml_coarse_mat end function is_distr_ml_coarse_mat
function is_legal_ml_fact(ip) function is_legal_ml_fact(ip)
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ml_fact logical :: is_legal_ml_fact
! Here the minimum is really 1, amg_fact_none_ is not acceptable. ! Here the minimum is really 1, amg_fact_none_ is not acceptable.
@ -925,7 +936,7 @@ contains
end function is_legal_ml_fact end function is_legal_ml_fact
function is_legal_ilu_fact(ip) function is_legal_ilu_fact(ip)
use psb_prec_const_mod use psb_prec_const_mod
implicit none implicit none
integer(psb_ipk_), intent(in) :: ip integer(psb_ipk_), intent(in) :: ip
logical :: is_legal_ilu_fact logical :: is_legal_ilu_fact
@ -934,14 +945,14 @@ contains
return return
end function is_legal_ilu_fact end function is_legal_ilu_fact
function is_legal_d_omega(ip) function is_legal_d_omega(ip)
implicit none implicit none
real(psb_dpk_), intent(in) :: ip real(psb_dpk_), intent(in) :: ip
logical :: is_legal_d_omega logical :: is_legal_d_omega
is_legal_d_omega = ((ip>=0.0d0).and.(ip<=2.0d0)) is_legal_d_omega = ((ip>=0.0d0).and.(ip<=2.0d0))
return return
end function is_legal_d_omega end function is_legal_d_omega
function is_legal_d_fact_thrs(ip) function is_legal_d_fact_thrs(ip)
implicit none implicit none
real(psb_dpk_), intent(in) :: ip real(psb_dpk_), intent(in) :: ip
logical :: is_legal_d_fact_thrs logical :: is_legal_d_fact_thrs
@ -949,7 +960,7 @@ contains
return return
end function is_legal_d_fact_thrs end function is_legal_d_fact_thrs
function is_legal_d_aggr_thrs(ip) function is_legal_d_aggr_thrs(ip)
implicit none implicit none
real(psb_dpk_), intent(in) :: ip real(psb_dpk_), intent(in) :: ip
logical :: is_legal_d_aggr_thrs logical :: is_legal_d_aggr_thrs
@ -958,14 +969,14 @@ contains
end function is_legal_d_aggr_thrs end function is_legal_d_aggr_thrs
function is_legal_s_omega(ip) function is_legal_s_omega(ip)
implicit none implicit none
real(psb_spk_), intent(in) :: ip real(psb_spk_), intent(in) :: ip
logical :: is_legal_s_omega logical :: is_legal_s_omega
is_legal_s_omega = ((ip>=0.0).and.(ip<=2.0)) is_legal_s_omega = ((ip>=0.0).and.(ip<=2.0))
return return
end function is_legal_s_omega end function is_legal_s_omega
function is_legal_s_fact_thrs(ip) function is_legal_s_fact_thrs(ip)
implicit none implicit none
real(psb_spk_), intent(in) :: ip real(psb_spk_), intent(in) :: ip
logical :: is_legal_s_fact_thrs logical :: is_legal_s_fact_thrs
@ -973,7 +984,7 @@ contains
return return
end function is_legal_s_fact_thrs end function is_legal_s_fact_thrs
function is_legal_s_aggr_thrs(ip) function is_legal_s_aggr_thrs(ip)
implicit none implicit none
real(psb_spk_), intent(in) :: ip real(psb_spk_), intent(in) :: ip
logical :: is_legal_s_aggr_thrs logical :: is_legal_s_aggr_thrs
@ -983,11 +994,11 @@ contains
subroutine amg_icheck_def(ip,name,id,is_legal) subroutine amg_icheck_def(ip,name,id,is_legal)
implicit none implicit none
integer(psb_ipk_), intent(inout) :: ip integer(psb_ipk_), intent(inout) :: ip
integer(psb_ipk_), intent(in) :: id integer(psb_ipk_), intent(in) :: id
character(len=*), intent(in) :: name character(len=*), intent(in) :: name
interface interface
function is_legal(i) function is_legal(i)
import :: psb_ipk_ import :: psb_ipk_
integer(psb_ipk_), intent(in) :: i integer(psb_ipk_), intent(in) :: i
@ -996,7 +1007,7 @@ contains
end interface end interface
character(len=20), parameter :: rname='amg_check_def' 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 ',& write(0,*)trim(rname),': Error: Illegal value for ',&
& name,' :',ip, '. defaulting to ',id & name,' :',ip, '. defaulting to ',id
ip = id ip = id
@ -1004,11 +1015,11 @@ contains
end subroutine amg_icheck_def end subroutine amg_icheck_def
subroutine amg_scheck_def(ip,name,id,is_legal) subroutine amg_scheck_def(ip,name,id,is_legal)
implicit none implicit none
real(psb_spk_), intent(inout) :: ip real(psb_spk_), intent(inout) :: ip
real(psb_spk_), intent(in) :: id real(psb_spk_), intent(in) :: id
character(len=*), intent(in) :: name character(len=*), intent(in) :: name
interface interface
function is_legal(i) function is_legal(i)
use psb_base_mod, only : psb_spk_ use psb_base_mod, only : psb_spk_
real(psb_spk_), intent(in) :: i real(psb_spk_), intent(in) :: i
@ -1017,7 +1028,7 @@ contains
end interface end interface
character(len=20), parameter :: rname='amg_check_def' 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 ',& write(0,*)trim(rname),': Error: Illegal value for ',&
& name,' :',ip, '. defaulting to ',id & name,' :',ip, '. defaulting to ',id
ip = id ip = id
@ -1025,11 +1036,11 @@ contains
end subroutine amg_scheck_def end subroutine amg_scheck_def
subroutine amg_dcheck_def(ip,name,id,is_legal) subroutine amg_dcheck_def(ip,name,id,is_legal)
implicit none implicit none
real(psb_dpk_), intent(inout) :: ip real(psb_dpk_), intent(inout) :: ip
real(psb_dpk_), intent(in) :: id real(psb_dpk_), intent(in) :: id
character(len=*), intent(in) :: name character(len=*), intent(in) :: name
interface interface
function is_legal(i) function is_legal(i)
use psb_base_mod, only : psb_dpk_ use psb_base_mod, only : psb_dpk_
real(psb_dpk_), intent(in) :: i real(psb_dpk_), intent(in) :: i
@ -1038,7 +1049,7 @@ contains
end interface end interface
character(len=20), parameter :: rname='amg_check_def' 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 ',& write(0,*)trim(rname),': Error: Illegal value for ',&
& name,' :',ip, '. defaulting to ',id & name,' :',ip, '. defaulting to ',id
ip = id ip = id
@ -1047,7 +1058,7 @@ contains
function pr_to_str(iprec) function pr_to_str(iprec)
implicit none implicit none
integer(psb_ipk_), intent(in) :: iprec integer(psb_ipk_), intent(in) :: iprec
character(len=10) :: pr_to_str character(len=10) :: pr_to_str
@ -1055,11 +1066,11 @@ contains
select case(iprec) select case(iprec)
case(amg_noprec_) case(amg_noprec_)
pr_to_str='NOPREC' pr_to_str='NOPREC'
case(amg_jac_) case(amg_jac_)
pr_to_str='JAC' pr_to_str='JAC'
case(amg_bjac_) case(amg_bjac_)
pr_to_str='BJAC' pr_to_str='BJAC'
case(amg_as_) case(amg_as_)
pr_to_str='AS' pr_to_str='AS'
end select end select
@ -1067,7 +1078,7 @@ contains
subroutine amg_ml_bcast(ctxt,dat,root) subroutine amg_ml_bcast(ctxt,dat,root)
implicit none implicit none
type(psb_ctxt_type), intent(in) :: ctxt type(psb_ctxt_type), intent(in) :: ctxt
type(amg_ml_parms), intent(inout) :: dat type(amg_ml_parms), intent(inout) :: dat
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
@ -1089,7 +1100,7 @@ contains
subroutine amg_sml_bcast(ctxt,dat,root) subroutine amg_sml_bcast(ctxt,dat,root)
implicit none implicit none
type(psb_ctxt_type), intent(in) :: ctxt type(psb_ctxt_type), intent(in) :: ctxt
type(amg_sml_parms), intent(inout) :: dat type(amg_sml_parms), intent(inout) :: dat
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
@ -1100,7 +1111,7 @@ contains
end subroutine amg_sml_bcast end subroutine amg_sml_bcast
subroutine amg_dml_bcast(ctxt,dat,root) subroutine amg_dml_bcast(ctxt,dat,root)
implicit none implicit none
type(psb_ctxt_type), intent(in) :: ctxt type(psb_ctxt_type), intent(in) :: ctxt
type(amg_dml_parms), intent(inout) :: dat type(amg_dml_parms), intent(inout) :: dat
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
@ -1112,7 +1123,7 @@ contains
subroutine ml_parms_clone(pm,pmout,info) subroutine ml_parms_clone(pm,pmout,info)
implicit none implicit none
class(amg_ml_parms), intent(inout) :: pm class(amg_ml_parms), intent(inout) :: pm
class(amg_ml_parms), intent(out) :: pmout class(amg_ml_parms), intent(out) :: pmout
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@ -1132,19 +1143,19 @@ contains
pmout%coarse_solve = pm%coarse_solve pmout%coarse_solve = pm%coarse_solve
end subroutine ml_parms_clone end subroutine ml_parms_clone
subroutine s_ml_parms_clone(pm,pmout,info) subroutine s_ml_parms_clone(pm,pmout,info)
implicit none implicit none
class(amg_sml_parms), intent(inout) :: pm class(amg_sml_parms), intent(inout) :: pm
class(amg_ml_parms), intent(out) :: pmout class(amg_ml_parms), intent(out) :: pmout
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name='clone' character(len=20) :: name='clone'
info = 0 info = 0
select type(pout => pmout) select type(pout => pmout)
class is (amg_sml_parms) class is (amg_sml_parms)
@ -1159,21 +1170,21 @@ contains
call psb_get_erraction(err_act) call psb_get_erraction(err_act)
call psb_error_handler(err_act) call psb_error_handler(err_act)
end select end select
end subroutine s_ml_parms_clone end subroutine s_ml_parms_clone
subroutine d_ml_parms_clone(pm,pmout,info) subroutine d_ml_parms_clone(pm,pmout,info)
implicit none implicit none
class(amg_dml_parms), intent(inout) :: pm class(amg_dml_parms), intent(inout) :: pm
class(amg_ml_parms), intent(out) :: pmout class(amg_ml_parms), intent(out) :: pmout
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
integer(psb_ipk_) :: ierr(5) integer(psb_ipk_) :: ierr(5)
character(len=20) :: name='clone' character(len=20) :: name='clone'
info = 0 info = 0
select type(pout => pmout) select type(pout => pmout)
class is (amg_dml_parms) class is (amg_dml_parms)
@ -1189,13 +1200,13 @@ contains
call psb_error_handler(err_act) call psb_error_handler(err_act)
return return
end select end select
end subroutine d_ml_parms_clone end subroutine d_ml_parms_clone
function amg_s_equal_aggregation(parms1, parms2) result(val) function amg_s_equal_aggregation(parms1, parms2) result(val)
type(amg_sml_parms), intent(in) :: parms1, parms2 type(amg_sml_parms), intent(in) :: parms1, parms2
logical :: val logical :: val
val = (parms1%par_aggr_alg == parms2%par_aggr_alg ) .and. & val = (parms1%par_aggr_alg == parms2%par_aggr_alg ) .and. &
& (parms1%aggr_type == parms2%aggr_type ) .and. & & (parms1%aggr_type == parms2%aggr_type ) .and. &
& (parms1%aggr_ord == parms2%aggr_ord ) .and. & & (parms1%aggr_ord == parms2%aggr_ord ) .and. &
@ -1210,7 +1221,7 @@ contains
function amg_d_equal_aggregation(parms1, parms2) result(val) function amg_d_equal_aggregation(parms1, parms2) result(val)
type(amg_dml_parms), intent(in) :: parms1, parms2 type(amg_dml_parms), intent(in) :: parms1, parms2
logical :: val logical :: val
val = (parms1%par_aggr_alg == parms2%par_aggr_alg ) .and. & val = (parms1%par_aggr_alg == parms2%par_aggr_alg ) .and. &
& (parms1%aggr_type == parms2%aggr_type ) .and. & & (parms1%aggr_type == parms2%aggr_type ) .and. &
& (parms1%aggr_ord == parms2%aggr_ord ) .and. & & (parms1%aggr_ord == parms2%aggr_ord ) .and. &
@ -1221,5 +1232,5 @@ contains
& (parms1%aggr_omega_val == parms2%aggr_omega_val ) .and. & & (parms1%aggr_omega_val == parms2%aggr_omega_val ) .and. &
& (parms1%aggr_thresh == parms2%aggr_thresh ) & (parms1%aggr_thresh == parms2%aggr_thresh )
end function amg_d_equal_aggregation end function amg_d_equal_aggregation
end module amg_base_prec_type end module amg_base_prec_type

@ -80,7 +80,7 @@ module dmatchboxp_mod
subroutine dMatchBoxPC(nlver,nledge,verlocptr,verlocind,edgelocweight,& subroutine dMatchBoxPC(nlver,nledge,verlocptr,verlocind,edgelocweight,&
& verdistance, mate, myrank, numprocs, icomm,& & verdistance, mate, myrank, numprocs, icomm,&
& msgindsent,msgactualsent,msgpercent,& & 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 use iso_c_binding
import :: psb_c_ipk_, psb_c_lpk_, psb_c_mpk_, psb_c_epk_ import :: psb_c_ipk_, psb_c_lpk_, psb_c_mpk_, psb_c_epk_
implicit none implicit none

@ -80,7 +80,7 @@ module smatchboxp_mod
subroutine sMatchBoxPC(nlver,nledge,verlocptr,verlocind,edgelocweight,& subroutine sMatchBoxPC(nlver,nledge,verlocptr,verlocind,edgelocweight,&
& verdistance, mate, myrank, numprocs, icomm,& & verdistance, mate, myrank, numprocs, icomm,&
& msgindsent,msgactualsent,msgpercent,& & 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 use iso_c_binding
import :: psb_c_ipk_, psb_c_lpk_, psb_c_mpk_, psb_c_epk_ import :: psb_c_ipk_, psb_c_lpk_, psb_c_mpk_, psb_c_epk_
implicit none implicit none

@ -172,6 +172,24 @@ MilanLongInt* msgIndSent, MilanLongInt* msgActualSent, MilanReal* msgPercent,
MilanReal* ph0_time, MilanReal* ph1_time, MilanReal* ph2_time, MilanReal* ph0_time, MilanReal* ph1_time, MilanReal* ph2_time,
MilanLongInt* ph1_card, MilanLongInt* ph2_card ); 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 #ifdef __cplusplus
} }
#endif #endif

@ -1,15 +1,15 @@
! !
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,26 +33,26 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
! File: amg_c_dec_aggregator_tprol.f90 ! File: amg_c_dec_aggregator_tprol.f90
! !
! Subroutine: amg_c_dec_aggregator_tprol ! Subroutine: amg_c_dec_aggregator_tprol
! Version: complex ! 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 ! 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 ! refactored and shared among all the aggregation methods that produce a simple
! integer mapping. ! integer mapping.
! !
! !
! Arguments: ! Arguments:
! ag - type(amg_c_dec_aggregator_type), input/output. ! ag - type(amg_c_dec_aggregator_type), input/output.
! The aggregator object, carrying with itself the mapping algorithm. ! The aggregator object, carrying with itself the mapping algorithm.
! parms - The auxiliary parameters object ! parms - The auxiliary parameters object
! ag_data - Auxiliary global aggregation parameters object ! ag_data - Auxiliary global aggregation parameters object
! !
! !
! a - type(psb_cspmat_type). ! a - type(psb_cspmat_type).
! The sparse matrix structure containing the local part of the ! The sparse matrix structure containing the local part of the
! fine-level matrix. ! fine-level matrix.
@ -70,10 +70,10 @@
! nlaggr(i) contains the aggregates held by process i. ! nlaggr(i) contains the aggregates held by process i.
! t_prol - type(psb_cspmat_type), output ! t_prol - type(psb_cspmat_type), output
! The tentative prolongator, based on ilaggr. ! The tentative prolongator, based on ilaggr.
! !
! info - integer, output. ! info - integer, output.
! Error code. ! Error code.
! !
subroutine amg_c_dec_aggregator_build_tprol(ag,parms,ag_data,& subroutine amg_c_dec_aggregator_build_tprol(ag,parms,ag_data,&
& a,desc_a,ilaggr,nlaggr,t_prol,info) & a,desc_a,ilaggr,nlaggr,t_prol,info)
use psb_base_mod use psb_base_mod
@ -81,7 +81,7 @@ subroutine amg_c_dec_aggregator_build_tprol(ag,parms,ag_data,&
use amg_c_inner_mod use amg_c_inner_mod
implicit none implicit none
class(amg_c_dec_aggregator_type), target, intent(inout) :: ag 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(amg_saggr_data), intent(in) :: ag_data
type(psb_cspmat_type), intent(in) :: a type(psb_cspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_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',& call amg_check_def(parms%ml_cycle,'Multilevel cycle',&
& amg_mult_ml_,is_legal_ml_cycle) & amg_mult_ml_,is_legal_ml_cycle)
call amg_check_def(parms%par_aggr_alg,'Aggregation',& 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',& call amg_check_def(parms%aggr_ord,'Ordering',&
& amg_aggr_ord_nat_,is_legal_ml_aggr_ord) & amg_aggr_ord_nat_,is_legal_ml_aggr_ord)
call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs) 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') call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol')
goto 9999 goto 9999
endif endif
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
9999 call psb_error_handler(err_act) 9999 call psb_error_handler(err_act)
return return
end subroutine amg_c_dec_aggregator_build_tprol end subroutine amg_c_dec_aggregator_build_tprol

@ -1,15 +1,15 @@
! ! is_legal_decoupled_par_aggr_alg
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,28 +33,28 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
! File: amg_c_symdec_aggregator_tprol.f90 ! File: amg_c_symdec_aggregator_tprol.f90
! !
! Subroutine: amg_c_symdec_aggregator_tprol ! Subroutine: amg_c_symdec_aggregator_tprol
! Version: complex ! 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 ! 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 ! 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:
! Arguments: ! Arguments:
! ag - type(amg_c_dec_aggregator_type), input/output. ! ag - type(amg_c_dec_aggregator_type), input/output.
! The aggregator object, carrying with itself the mapping algorithm. ! The aggregator object, carrying with itself the mapping algorithm.
! parms - The auxiliary parameters object ! parms - The auxiliary parameters object
! ag_data - Auxiliary global aggregation parameters object ! ag_data - Auxiliary global aggregation parameters object
! !
! a - type(psb_cspmat_type). ! a - type(psb_cspmat_type).
! The sparse matrix structure containing the local part of the ! The sparse matrix structure containing the local part of the
! fine-level matrix. ! fine-level matrix.
@ -72,10 +72,10 @@
! nlaggr(i) contains the aggregates held by process i. ! nlaggr(i) contains the aggregates held by process i.
! op_prol - type(psb_cspmat_type), output ! op_prol - type(psb_cspmat_type), output
! The tentative prolongator, based on ilaggr. ! The tentative prolongator, based on ilaggr.
! !
! info - integer, output. ! info - integer, output.
! Error code. ! Error code.
! !
subroutine amg_c_symdec_aggregator_build_tprol(ag,parms,ag_data,& subroutine amg_c_symdec_aggregator_build_tprol(ag,parms,ag_data,&
& a,desc_a,ilaggr,nlaggr,op_prol,info) & a,desc_a,ilaggr,nlaggr,op_prol,info)
use psb_base_mod use psb_base_mod
@ -84,7 +84,7 @@ subroutine amg_c_symdec_aggregator_build_tprol(ag,parms,ag_data,&
use amg_c_inner_mod use amg_c_inner_mod
implicit none implicit none
class(amg_c_symdec_aggregator_type), target, intent(inout) :: ag 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(amg_saggr_data), intent(in) :: ag_data
type(psb_cspmat_type), intent(in) :: a type(psb_cspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_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',& call amg_check_def(parms%ml_cycle,'Multilevel cycle',&
& amg_mult_ml_,is_legal_ml_cycle) & amg_mult_ml_,is_legal_ml_cycle)
call amg_check_def(parms%par_aggr_alg,'Aggregation',& 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',& call amg_check_def(parms%aggr_ord,'Ordering',&
& amg_aggr_ord_nat_,is_legal_ml_aggr_ord) & amg_aggr_ord_nat_,is_legal_ml_aggr_ord)
call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs) 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) call atmp%set_ncols(nr)
if (info == psb_success_) call atmp%transp(atrans) if (info == psb_success_) call atmp%transp(atrans)
if (info == psb_success_) call atrans%cscnv(info,type='COO') 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_nrows(nr)
call atmp%set_ncols(nr) call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%free() 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) & desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call atmp%free() 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 if (info /= psb_success_) then
info=psb_err_from_subroutine_ info=psb_err_from_subroutine_
call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol')

@ -1,15 +1,15 @@
! !
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,26 +33,26 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
! File: amg_d_dec_aggregator_tprol.f90 ! File: amg_d_dec_aggregator_tprol.f90
! !
! Subroutine: amg_d_dec_aggregator_tprol ! Subroutine: amg_d_dec_aggregator_tprol
! Version: real ! 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 ! 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 ! refactored and shared among all the aggregation methods that produce a simple
! integer mapping. ! integer mapping.
! !
! !
! Arguments: ! Arguments:
! ag - type(amg_d_dec_aggregator_type), input/output. ! ag - type(amg_d_dec_aggregator_type), input/output.
! The aggregator object, carrying with itself the mapping algorithm. ! The aggregator object, carrying with itself the mapping algorithm.
! parms - The auxiliary parameters object ! parms - The auxiliary parameters object
! ag_data - Auxiliary global aggregation parameters object ! ag_data - Auxiliary global aggregation parameters object
! !
! !
! a - type(psb_dspmat_type). ! a - type(psb_dspmat_type).
! The sparse matrix structure containing the local part of the ! The sparse matrix structure containing the local part of the
! fine-level matrix. ! fine-level matrix.
@ -70,10 +70,10 @@
! nlaggr(i) contains the aggregates held by process i. ! nlaggr(i) contains the aggregates held by process i.
! t_prol - type(psb_dspmat_type), output ! t_prol - type(psb_dspmat_type), output
! The tentative prolongator, based on ilaggr. ! The tentative prolongator, based on ilaggr.
! !
! info - integer, output. ! info - integer, output.
! Error code. ! Error code.
! !
subroutine amg_d_dec_aggregator_build_tprol(ag,parms,ag_data,& subroutine amg_d_dec_aggregator_build_tprol(ag,parms,ag_data,&
& a,desc_a,ilaggr,nlaggr,t_prol,info) & a,desc_a,ilaggr,nlaggr,t_prol,info)
use psb_base_mod use psb_base_mod
@ -81,7 +81,7 @@ subroutine amg_d_dec_aggregator_build_tprol(ag,parms,ag_data,&
use amg_d_inner_mod use amg_d_inner_mod
implicit none implicit none
class(amg_d_dec_aggregator_type), target, intent(inout) :: ag 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(amg_daggr_data), intent(in) :: ag_data
type(psb_dspmat_type), intent(in) :: a type(psb_dspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_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',& call amg_check_def(parms%ml_cycle,'Multilevel cycle',&
& amg_mult_ml_,is_legal_ml_cycle) & amg_mult_ml_,is_legal_ml_cycle)
call amg_check_def(parms%par_aggr_alg,'Aggregation',& 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',& call amg_check_def(parms%aggr_ord,'Ordering',&
& amg_aggr_ord_nat_,is_legal_ml_aggr_ord) & amg_aggr_ord_nat_,is_legal_ml_aggr_ord)
call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs) 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') call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol')
goto 9999 goto 9999
endif endif
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
9999 call psb_error_handler(err_act) 9999 call psb_error_handler(err_act)
return return
end subroutine amg_d_dec_aggregator_build_tprol end subroutine amg_d_dec_aggregator_build_tprol

@ -177,7 +177,7 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,&
call amg_check_def(parms%ml_cycle,'Multilevel cycle',& call amg_check_def(parms%ml_cycle,'Multilevel cycle',&
& amg_mult_ml_,is_legal_ml_cycle) & amg_mult_ml_,is_legal_ml_cycle)
call amg_check_def(parms%par_aggr_alg,'Aggregation',& 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',& call amg_check_def(parms%aggr_ord,'Ordering',&
& amg_aggr_ord_nat_,is_legal_ml_aggr_ord) & amg_aggr_ord_nat_,is_legal_ml_aggr_ord)
call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs)

@ -1,15 +1,15 @@
! ! is_legal_decoupled_par_aggr_alg
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,28 +33,28 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
! File: amg_d_symdec_aggregator_tprol.f90 ! File: amg_d_symdec_aggregator_tprol.f90
! !
! Subroutine: amg_d_symdec_aggregator_tprol ! Subroutine: amg_d_symdec_aggregator_tprol
! Version: real ! 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 ! 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 ! 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:
! Arguments: ! Arguments:
! ag - type(amg_d_dec_aggregator_type), input/output. ! ag - type(amg_d_dec_aggregator_type), input/output.
! The aggregator object, carrying with itself the mapping algorithm. ! The aggregator object, carrying with itself the mapping algorithm.
! parms - The auxiliary parameters object ! parms - The auxiliary parameters object
! ag_data - Auxiliary global aggregation parameters object ! ag_data - Auxiliary global aggregation parameters object
! !
! a - type(psb_dspmat_type). ! a - type(psb_dspmat_type).
! The sparse matrix structure containing the local part of the ! The sparse matrix structure containing the local part of the
! fine-level matrix. ! fine-level matrix.
@ -72,10 +72,10 @@
! nlaggr(i) contains the aggregates held by process i. ! nlaggr(i) contains the aggregates held by process i.
! op_prol - type(psb_dspmat_type), output ! op_prol - type(psb_dspmat_type), output
! The tentative prolongator, based on ilaggr. ! The tentative prolongator, based on ilaggr.
! !
! info - integer, output. ! info - integer, output.
! Error code. ! Error code.
! !
subroutine amg_d_symdec_aggregator_build_tprol(ag,parms,ag_data,& subroutine amg_d_symdec_aggregator_build_tprol(ag,parms,ag_data,&
& a,desc_a,ilaggr,nlaggr,op_prol,info) & a,desc_a,ilaggr,nlaggr,op_prol,info)
use psb_base_mod use psb_base_mod
@ -84,7 +84,7 @@ subroutine amg_d_symdec_aggregator_build_tprol(ag,parms,ag_data,&
use amg_d_inner_mod use amg_d_inner_mod
implicit none implicit none
class(amg_d_symdec_aggregator_type), target, intent(inout) :: ag 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(amg_daggr_data), intent(in) :: ag_data
type(psb_dspmat_type), intent(in) :: a type(psb_dspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_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',& call amg_check_def(parms%ml_cycle,'Multilevel cycle',&
& amg_mult_ml_,is_legal_ml_cycle) & amg_mult_ml_,is_legal_ml_cycle)
call amg_check_def(parms%par_aggr_alg,'Aggregation',& 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',& call amg_check_def(parms%aggr_ord,'Ordering',&
& amg_aggr_ord_nat_,is_legal_ml_aggr_ord) & amg_aggr_ord_nat_,is_legal_ml_aggr_ord)
call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs) 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) call atmp%set_ncols(nr)
if (info == psb_success_) call atmp%transp(atrans) if (info == psb_success_) call atmp%transp(atrans)
if (info == psb_success_) call atrans%cscnv(info,type='COO') 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_nrows(nr)
call atmp%set_ncols(nr) call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%free() 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) & desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call atmp%free() 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 if (info /= psb_success_) then
info=psb_err_from_subroutine_ info=psb_err_from_subroutine_
call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol')

@ -1,15 +1,15 @@
! !
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,26 +33,26 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
! File: amg_s_dec_aggregator_tprol.f90 ! File: amg_s_dec_aggregator_tprol.f90
! !
! Subroutine: amg_s_dec_aggregator_tprol ! Subroutine: amg_s_dec_aggregator_tprol
! Version: real ! 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 ! 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 ! refactored and shared among all the aggregation methods that produce a simple
! integer mapping. ! integer mapping.
! !
! !
! Arguments: ! Arguments:
! ag - type(amg_s_dec_aggregator_type), input/output. ! ag - type(amg_s_dec_aggregator_type), input/output.
! The aggregator object, carrying with itself the mapping algorithm. ! The aggregator object, carrying with itself the mapping algorithm.
! parms - The auxiliary parameters object ! parms - The auxiliary parameters object
! ag_data - Auxiliary global aggregation parameters object ! ag_data - Auxiliary global aggregation parameters object
! !
! !
! a - type(psb_sspmat_type). ! a - type(psb_sspmat_type).
! The sparse matrix structure containing the local part of the ! The sparse matrix structure containing the local part of the
! fine-level matrix. ! fine-level matrix.
@ -70,10 +70,10 @@
! nlaggr(i) contains the aggregates held by process i. ! nlaggr(i) contains the aggregates held by process i.
! t_prol - type(psb_sspmat_type), output ! t_prol - type(psb_sspmat_type), output
! The tentative prolongator, based on ilaggr. ! The tentative prolongator, based on ilaggr.
! !
! info - integer, output. ! info - integer, output.
! Error code. ! Error code.
! !
subroutine amg_s_dec_aggregator_build_tprol(ag,parms,ag_data,& subroutine amg_s_dec_aggregator_build_tprol(ag,parms,ag_data,&
& a,desc_a,ilaggr,nlaggr,t_prol,info) & a,desc_a,ilaggr,nlaggr,t_prol,info)
use psb_base_mod use psb_base_mod
@ -81,7 +81,7 @@ subroutine amg_s_dec_aggregator_build_tprol(ag,parms,ag_data,&
use amg_s_inner_mod use amg_s_inner_mod
implicit none implicit none
class(amg_s_dec_aggregator_type), target, intent(inout) :: ag 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(amg_saggr_data), intent(in) :: ag_data
type(psb_sspmat_type), intent(in) :: a type(psb_sspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_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',& call amg_check_def(parms%ml_cycle,'Multilevel cycle',&
& amg_mult_ml_,is_legal_ml_cycle) & amg_mult_ml_,is_legal_ml_cycle)
call amg_check_def(parms%par_aggr_alg,'Aggregation',& 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',& call amg_check_def(parms%aggr_ord,'Ordering',&
& amg_aggr_ord_nat_,is_legal_ml_aggr_ord) & amg_aggr_ord_nat_,is_legal_ml_aggr_ord)
call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs) 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') call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol')
goto 9999 goto 9999
endif endif
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
9999 call psb_error_handler(err_act) 9999 call psb_error_handler(err_act)
return return
end subroutine amg_s_dec_aggregator_build_tprol end subroutine amg_s_dec_aggregator_build_tprol

@ -177,7 +177,7 @@ subroutine amg_s_parmatch_aggregator_build_tprol(ag,parms,ag_data,&
call amg_check_def(parms%ml_cycle,'Multilevel cycle',& call amg_check_def(parms%ml_cycle,'Multilevel cycle',&
& amg_mult_ml_,is_legal_ml_cycle) & amg_mult_ml_,is_legal_ml_cycle)
call amg_check_def(parms%par_aggr_alg,'Aggregation',& 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',& call amg_check_def(parms%aggr_ord,'Ordering',&
& amg_aggr_ord_nat_,is_legal_ml_aggr_ord) & amg_aggr_ord_nat_,is_legal_ml_aggr_ord)
call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs) call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs)

@ -1,15 +1,15 @@
! ! is_legal_decoupled_par_aggr_alg
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,28 +33,28 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
! File: amg_s_symdec_aggregator_tprol.f90 ! File: amg_s_symdec_aggregator_tprol.f90
! !
! Subroutine: amg_s_symdec_aggregator_tprol ! Subroutine: amg_s_symdec_aggregator_tprol
! Version: real ! 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 ! 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 ! 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:
! Arguments: ! Arguments:
! ag - type(amg_s_dec_aggregator_type), input/output. ! ag - type(amg_s_dec_aggregator_type), input/output.
! The aggregator object, carrying with itself the mapping algorithm. ! The aggregator object, carrying with itself the mapping algorithm.
! parms - The auxiliary parameters object ! parms - The auxiliary parameters object
! ag_data - Auxiliary global aggregation parameters object ! ag_data - Auxiliary global aggregation parameters object
! !
! a - type(psb_sspmat_type). ! a - type(psb_sspmat_type).
! The sparse matrix structure containing the local part of the ! The sparse matrix structure containing the local part of the
! fine-level matrix. ! fine-level matrix.
@ -72,10 +72,10 @@
! nlaggr(i) contains the aggregates held by process i. ! nlaggr(i) contains the aggregates held by process i.
! op_prol - type(psb_sspmat_type), output ! op_prol - type(psb_sspmat_type), output
! The tentative prolongator, based on ilaggr. ! The tentative prolongator, based on ilaggr.
! !
! info - integer, output. ! info - integer, output.
! Error code. ! Error code.
! !
subroutine amg_s_symdec_aggregator_build_tprol(ag,parms,ag_data,& subroutine amg_s_symdec_aggregator_build_tprol(ag,parms,ag_data,&
& a,desc_a,ilaggr,nlaggr,op_prol,info) & a,desc_a,ilaggr,nlaggr,op_prol,info)
use psb_base_mod use psb_base_mod
@ -84,7 +84,7 @@ subroutine amg_s_symdec_aggregator_build_tprol(ag,parms,ag_data,&
use amg_s_inner_mod use amg_s_inner_mod
implicit none implicit none
class(amg_s_symdec_aggregator_type), target, intent(inout) :: ag 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(amg_saggr_data), intent(in) :: ag_data
type(psb_sspmat_type), intent(in) :: a type(psb_sspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_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',& call amg_check_def(parms%ml_cycle,'Multilevel cycle',&
& amg_mult_ml_,is_legal_ml_cycle) & amg_mult_ml_,is_legal_ml_cycle)
call amg_check_def(parms%par_aggr_alg,'Aggregation',& 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',& call amg_check_def(parms%aggr_ord,'Ordering',&
& amg_aggr_ord_nat_,is_legal_ml_aggr_ord) & amg_aggr_ord_nat_,is_legal_ml_aggr_ord)
call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs) 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) call atmp%set_ncols(nr)
if (info == psb_success_) call atmp%transp(atrans) if (info == psb_success_) call atmp%transp(atrans)
if (info == psb_success_) call atrans%cscnv(info,type='COO') 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_nrows(nr)
call atmp%set_ncols(nr) call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%free() 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) & desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call atmp%free() 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 if (info /= psb_success_) then
info=psb_err_from_subroutine_ info=psb_err_from_subroutine_
call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol')

@ -1,15 +1,15 @@
! !
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,26 +33,26 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
! File: amg_z_dec_aggregator_tprol.f90 ! File: amg_z_dec_aggregator_tprol.f90
! !
! Subroutine: amg_z_dec_aggregator_tprol ! Subroutine: amg_z_dec_aggregator_tprol
! Version: complex ! 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 ! 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 ! refactored and shared among all the aggregation methods that produce a simple
! integer mapping. ! integer mapping.
! !
! !
! Arguments: ! Arguments:
! ag - type(amg_z_dec_aggregator_type), input/output. ! ag - type(amg_z_dec_aggregator_type), input/output.
! The aggregator object, carrying with itself the mapping algorithm. ! The aggregator object, carrying with itself the mapping algorithm.
! parms - The auxiliary parameters object ! parms - The auxiliary parameters object
! ag_data - Auxiliary global aggregation parameters object ! ag_data - Auxiliary global aggregation parameters object
! !
! !
! a - type(psb_zspmat_type). ! a - type(psb_zspmat_type).
! The sparse matrix structure containing the local part of the ! The sparse matrix structure containing the local part of the
! fine-level matrix. ! fine-level matrix.
@ -70,10 +70,10 @@
! nlaggr(i) contains the aggregates held by process i. ! nlaggr(i) contains the aggregates held by process i.
! t_prol - type(psb_zspmat_type), output ! t_prol - type(psb_zspmat_type), output
! The tentative prolongator, based on ilaggr. ! The tentative prolongator, based on ilaggr.
! !
! info - integer, output. ! info - integer, output.
! Error code. ! Error code.
! !
subroutine amg_z_dec_aggregator_build_tprol(ag,parms,ag_data,& subroutine amg_z_dec_aggregator_build_tprol(ag,parms,ag_data,&
& a,desc_a,ilaggr,nlaggr,t_prol,info) & a,desc_a,ilaggr,nlaggr,t_prol,info)
use psb_base_mod use psb_base_mod
@ -81,7 +81,7 @@ subroutine amg_z_dec_aggregator_build_tprol(ag,parms,ag_data,&
use amg_z_inner_mod use amg_z_inner_mod
implicit none implicit none
class(amg_z_dec_aggregator_type), target, intent(inout) :: ag 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(amg_daggr_data), intent(in) :: ag_data
type(psb_zspmat_type), intent(in) :: a type(psb_zspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_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',& call amg_check_def(parms%ml_cycle,'Multilevel cycle',&
& amg_mult_ml_,is_legal_ml_cycle) & amg_mult_ml_,is_legal_ml_cycle)
call amg_check_def(parms%par_aggr_alg,'Aggregation',& 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',& call amg_check_def(parms%aggr_ord,'Ordering',&
& amg_aggr_ord_nat_,is_legal_ml_aggr_ord) & amg_aggr_ord_nat_,is_legal_ml_aggr_ord)
call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs) 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') call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol')
goto 9999 goto 9999
endif endif
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
9999 call psb_error_handler(err_act) 9999 call psb_error_handler(err_act)
return return
end subroutine amg_z_dec_aggregator_build_tprol end subroutine amg_z_dec_aggregator_build_tprol

@ -1,15 +1,15 @@
! ! is_legal_decoupled_par_aggr_alg
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,28 +33,28 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
! File: amg_z_symdec_aggregator_tprol.f90 ! File: amg_z_symdec_aggregator_tprol.f90
! !
! Subroutine: amg_z_symdec_aggregator_tprol ! Subroutine: amg_z_symdec_aggregator_tprol
! Version: complex ! 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 ! 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 ! 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:
! Arguments: ! Arguments:
! ag - type(amg_z_dec_aggregator_type), input/output. ! ag - type(amg_z_dec_aggregator_type), input/output.
! The aggregator object, carrying with itself the mapping algorithm. ! The aggregator object, carrying with itself the mapping algorithm.
! parms - The auxiliary parameters object ! parms - The auxiliary parameters object
! ag_data - Auxiliary global aggregation parameters object ! ag_data - Auxiliary global aggregation parameters object
! !
! a - type(psb_zspmat_type). ! a - type(psb_zspmat_type).
! The sparse matrix structure containing the local part of the ! The sparse matrix structure containing the local part of the
! fine-level matrix. ! fine-level matrix.
@ -72,10 +72,10 @@
! nlaggr(i) contains the aggregates held by process i. ! nlaggr(i) contains the aggregates held by process i.
! op_prol - type(psb_zspmat_type), output ! op_prol - type(psb_zspmat_type), output
! The tentative prolongator, based on ilaggr. ! The tentative prolongator, based on ilaggr.
! !
! info - integer, output. ! info - integer, output.
! Error code. ! Error code.
! !
subroutine amg_z_symdec_aggregator_build_tprol(ag,parms,ag_data,& subroutine amg_z_symdec_aggregator_build_tprol(ag,parms,ag_data,&
& a,desc_a,ilaggr,nlaggr,op_prol,info) & a,desc_a,ilaggr,nlaggr,op_prol,info)
use psb_base_mod use psb_base_mod
@ -84,7 +84,7 @@ subroutine amg_z_symdec_aggregator_build_tprol(ag,parms,ag_data,&
use amg_z_inner_mod use amg_z_inner_mod
implicit none implicit none
class(amg_z_symdec_aggregator_type), target, intent(inout) :: ag 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(amg_daggr_data), intent(in) :: ag_data
type(psb_zspmat_type), intent(in) :: a type(psb_zspmat_type), intent(in) :: a
type(psb_desc_type), intent(in) :: desc_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',& call amg_check_def(parms%ml_cycle,'Multilevel cycle',&
& amg_mult_ml_,is_legal_ml_cycle) & amg_mult_ml_,is_legal_ml_cycle)
call amg_check_def(parms%par_aggr_alg,'Aggregation',& 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',& call amg_check_def(parms%aggr_ord,'Ordering',&
& amg_aggr_ord_nat_,is_legal_ml_aggr_ord) & amg_aggr_ord_nat_,is_legal_ml_aggr_ord)
call amg_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs) 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) call atmp%set_ncols(nr)
if (info == psb_success_) call atmp%transp(atrans) if (info == psb_success_) call atmp%transp(atrans)
if (info == psb_success_) call atrans%cscnv(info,type='COO') 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_nrows(nr)
call atmp%set_ncols(nr) call atmp%set_ncols(nr)
if (info == psb_success_) call atrans%free() 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) & desc_a,nlaggr,ilaggr,info)
if (info == psb_success_) call atmp%free() 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 if (info /= psb_success_) then
info=psb_err_from_subroutine_ info=psb_err_from_subroutine_
call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol') call psb_errpush(info,name,a_err='soc_map_bld/map_to_tprol')

@ -242,10 +242,10 @@ subroutine amg_c_base_onelev_csetc(lv,what,val,info,pos,idx)
end if end if
end if end if
select case(ival) select case(val)
case(amg_dec_aggr_) case('DEC')
allocate(amg_c_dec_aggregator_type :: lv%aggr, stat=info) 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) allocate(amg_c_symdec_aggregator_type :: lv%aggr, stat=info)
case default case default
info = psb_err_internal_error_ info = psb_err_internal_error_

@ -1,15 +1,15 @@
! !
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,10 +33,10 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx) subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx)
use psb_base_mod use psb_base_mod
use amg_c_onelev_mod, amg_protect_name => amg_c_base_onelev_cseti use amg_c_onelev_mod, amg_protect_name => amg_c_base_onelev_cseti
use amg_c_base_aggregator_mod use amg_c_base_aggregator_mod
@ -59,13 +59,13 @@ subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx)
Implicit None Implicit None
! Arguments ! Arguments
class(amg_c_onelev_type), intent(inout) :: lv class(amg_c_onelev_type), intent(inout) :: lv
character(len=*), intent(in) :: what character(len=*), intent(in) :: what
integer(psb_ipk_), intent(in) :: val integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos character(len=*), optional, intent(in) :: pos
integer(psb_ipk_), intent(in), optional :: idx integer(psb_ipk_), intent(in), optional :: idx
! Local ! Local
integer(psb_ipk_) :: ipos_, err_act integer(psb_ipk_) :: ipos_, err_act
character(len=20) :: name='c_base_onelev_cseti' character(len=20) :: name='c_base_onelev_cseti'
type(amg_c_base_smoother_type) :: amg_c_base_smoother_mold 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_) #if defined(HAVE_MUMPS_)
type(amg_c_mumps_solver_type) :: amg_c_mumps_solver_mold type(amg_c_mumps_solver_type) :: amg_c_mumps_solver_mold
#endif #endif
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_
@ -100,14 +100,14 @@ subroutine amg_c_base_onelev_cseti(lv,what,val,info,pos,idx)
else else
ipos_ = amg_smooth_both_ ipos_ = amg_smooth_both_
end if end if
select case (psb_toupper(what)) select case (psb_toupper(what))
case ('SMOOTHER_TYPE') case ('SMOOTHER_TYPE')
select case (val) select case (val)
case (amg_noprec_) case (amg_noprec_)
call lv%set(amg_c_base_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_c_id_solver_mold,info,pos=pos)
case (amg_jac_) case (amg_jac_)
call lv%set(amg_c_jac_smoother_mold,info,pos=pos) 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) 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_) case (amg_l1_jac_)
call lv%set(amg_c_jac_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_c_l1_diag_solver_mold,info,pos=pos)
case (amg_bjac_) case (amg_bjac_)
call lv%set(amg_c_jac_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_c_ilu_solver_mold,info,pos=pos)
case (amg_l1_bjac_) case (amg_l1_bjac_)
call lv%set(amg_c_l1_jac_smoother_mold,info,pos=pos) 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) 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') 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') 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') if (info == 0) call lv%set(amg_c_bwgs_solver_mold,info,pos='post')
case default case default
! !
! Do nothing and hope for the best :) ! Do nothing and hope for the best :)
! !
end select 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() if (allocated(lv%sm)) call lv%sm%default()
end if 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%default() if (allocated(lv%sm2a)) call lv%sm2a%default()
end if end if
case('SUB_SOLVE') case('SUB_SOLVE')
select case (val) select case (val)
case (amg_f_none_) case (amg_f_none_)
call lv%set(amg_c_id_solver_mold,info,pos=pos) call lv%set(amg_c_id_solver_mold,info,pos=pos)
case (amg_diag_scale_) case (amg_diag_scale_)
call lv%set(amg_c_diag_solver_mold,info,pos=pos) call lv%set(amg_c_diag_solver_mold,info,pos=pos)
case (amg_l1_diag_scale_) case (amg_l1_diag_scale_)
call lv%set(amg_c_l1_diag_solver_mold,info,pos=pos) call lv%set(amg_c_l1_diag_solver_mold,info,pos=pos)
case (amg_gs_) case (amg_gs_)
call lv%set(amg_c_gs_solver_mold,info,pos=pos) call lv%set(amg_c_gs_solver_mold,info,pos=pos)
case (amg_bwgs_) case (amg_bwgs_)
call lv%set(amg_c_bwgs_solver_mold,info,pos=pos) call lv%set(amg_c_bwgs_solver_mold,info,pos=pos)
case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_) case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_)
call lv%set(amg_c_ilu_solver_mold,info,pos=pos) call lv%set(amg_c_ilu_solver_mold,info,pos=pos)
if (info == 0) then 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) call lv%sm%sv%set('SUB_SOLVE',val,info)
end if 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) if (allocated(lv%sm2a)) call lv%sm2a%sv%set('SUB_SOLVE',val,info)
end if end if
end if end if
#ifdef HAVE_SLU_ #ifdef HAVE_SLU_
case (amg_slu_) case (amg_slu_)
call lv%set(amg_c_slu_solver_mold,info,pos=pos) call lv%set(amg_c_slu_solver_mold,info,pos=pos)
#endif #endif
#ifdef HAVE_MUMPS_ #ifdef HAVE_MUMPS_
case (amg_mumps_) case (amg_mumps_)
call lv%set(amg_c_mumps_solver_mold,info,pos=pos) call lv%set(amg_c_mumps_solver_mold,info,pos=pos)
#endif #endif
case default case default
! !
! Do nothing and hope for the best :) ! Do nothing and hope for the best :)
! !
end select end select
case ('SMOOTHER_SWEEPS') case ('SMOOTHER_SWEEPS')
if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) & 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 return
end if end if
end if end if
select case(val) select case(val)
case(amg_dec_aggr_) case(amg_dec_aggr_)
allocate(amg_c_dec_aggregator_type :: lv%aggr, stat=info) 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_ info = psb_err_internal_error_
end select end select
if (info == psb_success_) call lv%aggr%default() if (info == psb_success_) call lv%aggr%default()
case ('AGGR_ORD') case ('AGGR_ORD')
lv%parms%aggr_ord = val 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 lv%parms%coarse_solve = val
case default case default
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)) then if (allocated(lv%sm)) then
call lv%sm%set(what,val,info,idx=idx) call lv%sm%set(what,val,info,idx=idx)
end if end if
end if 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)) then if (allocated(lv%sm2a)) then
call lv%sm2a%set(what,val,info,idx=idx) call lv%sm2a%set(what,val,info,idx=idx)
end if end if
end if end if

@ -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_base_aggregator_mod
use amg_d_dec_aggregator_mod use amg_d_dec_aggregator_mod
use amg_d_symdec_aggregator_mod use amg_d_symdec_aggregator_mod
use amg_d_parmatch_aggregator_mod
use amg_d_jac_smoother use amg_d_jac_smoother
use amg_d_as_smoother use amg_d_as_smoother
use amg_d_diag_solver 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
end if end if
select case(ival) select case(val)
case(amg_dec_aggr_) case('DEC')
allocate(amg_d_dec_aggregator_type :: lv%aggr, stat=info) 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) 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 case default
info = psb_err_internal_error_ info = psb_err_internal_error_
end select end select

@ -1,15 +1,15 @@
! !
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,15 +33,16 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx) subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx)
use psb_base_mod use psb_base_mod
use amg_d_onelev_mod, amg_protect_name => amg_d_base_onelev_cseti use amg_d_onelev_mod, amg_protect_name => amg_d_base_onelev_cseti
use amg_d_base_aggregator_mod use amg_d_base_aggregator_mod
use amg_d_dec_aggregator_mod use amg_d_dec_aggregator_mod
use amg_d_symdec_aggregator_mod use amg_d_symdec_aggregator_mod
use amg_d_parmatch_aggregator_mod
use amg_d_jac_smoother use amg_d_jac_smoother
use amg_d_as_smoother use amg_d_as_smoother
use amg_d_diag_solver use amg_d_diag_solver
@ -65,13 +66,13 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx)
Implicit None Implicit None
! Arguments ! Arguments
class(amg_d_onelev_type), intent(inout) :: lv class(amg_d_onelev_type), intent(inout) :: lv
character(len=*), intent(in) :: what character(len=*), intent(in) :: what
integer(psb_ipk_), intent(in) :: val integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos character(len=*), optional, intent(in) :: pos
integer(psb_ipk_), intent(in), optional :: idx integer(psb_ipk_), intent(in), optional :: idx
! Local ! Local
integer(psb_ipk_) :: ipos_, err_act integer(psb_ipk_) :: ipos_, err_act
character(len=20) :: name='d_base_onelev_cseti' character(len=20) :: name='d_base_onelev_cseti'
type(amg_d_base_smoother_type) :: amg_d_base_smoother_mold 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_) #if defined(HAVE_MUMPS_)
type(amg_d_mumps_solver_type) :: amg_d_mumps_solver_mold type(amg_d_mumps_solver_type) :: amg_d_mumps_solver_mold
#endif #endif
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_
@ -112,14 +113,14 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx)
else else
ipos_ = amg_smooth_both_ ipos_ = amg_smooth_both_
end if end if
select case (psb_toupper(what)) select case (psb_toupper(what))
case ('SMOOTHER_TYPE') case ('SMOOTHER_TYPE')
select case (val) select case (val)
case (amg_noprec_) case (amg_noprec_)
call lv%set(amg_d_base_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_d_id_solver_mold,info,pos=pos)
case (amg_jac_) case (amg_jac_)
call lv%set(amg_d_jac_smoother_mold,info,pos=pos) 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) 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_) case (amg_l1_jac_)
call lv%set(amg_d_jac_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_d_l1_diag_solver_mold,info,pos=pos)
case (amg_bjac_) case (amg_bjac_)
call lv%set(amg_d_jac_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_d_ilu_solver_mold,info,pos=pos)
case (amg_l1_bjac_) case (amg_l1_bjac_)
call lv%set(amg_d_l1_jac_smoother_mold,info,pos=pos) 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) 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') 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') 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') if (info == 0) call lv%set(amg_d_bwgs_solver_mold,info,pos='post')
case default case default
! !
! Do nothing and hope for the best :) ! Do nothing and hope for the best :)
! !
end select 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() if (allocated(lv%sm)) call lv%sm%default()
end if 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%default() if (allocated(lv%sm2a)) call lv%sm2a%default()
end if end if
case('SUB_SOLVE') case('SUB_SOLVE')
select case (val) select case (val)
case (amg_f_none_) case (amg_f_none_)
call lv%set(amg_d_id_solver_mold,info,pos=pos) call lv%set(amg_d_id_solver_mold,info,pos=pos)
case (amg_diag_scale_) case (amg_diag_scale_)
call lv%set(amg_d_diag_solver_mold,info,pos=pos) call lv%set(amg_d_diag_solver_mold,info,pos=pos)
case (amg_l1_diag_scale_) case (amg_l1_diag_scale_)
call lv%set(amg_d_l1_diag_solver_mold,info,pos=pos) call lv%set(amg_d_l1_diag_solver_mold,info,pos=pos)
case (amg_gs_) case (amg_gs_)
call lv%set(amg_d_gs_solver_mold,info,pos=pos) call lv%set(amg_d_gs_solver_mold,info,pos=pos)
case (amg_bwgs_) case (amg_bwgs_)
call lv%set(amg_d_bwgs_solver_mold,info,pos=pos) call lv%set(amg_d_bwgs_solver_mold,info,pos=pos)
case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_) case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_)
call lv%set(amg_d_ilu_solver_mold,info,pos=pos) call lv%set(amg_d_ilu_solver_mold,info,pos=pos)
if (info == 0) then 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) call lv%sm%sv%set('SUB_SOLVE',val,info)
end if 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) if (allocated(lv%sm2a)) call lv%sm2a%sv%set('SUB_SOLVE',val,info)
end if end if
end if end if
#ifdef HAVE_SLU_ #ifdef HAVE_SLU_
case (amg_slu_) case (amg_slu_)
call lv%set(amg_d_slu_solver_mold,info,pos=pos) call lv%set(amg_d_slu_solver_mold,info,pos=pos)
#endif #endif
#ifdef HAVE_MUMPS_ #ifdef HAVE_MUMPS_
case (amg_mumps_) case (amg_mumps_)
call lv%set(amg_d_mumps_solver_mold,info,pos=pos) call lv%set(amg_d_mumps_solver_mold,info,pos=pos)
#endif #endif
#ifdef HAVE_SLUDIST_ #ifdef HAVE_SLUDIST_
@ -204,10 +205,10 @@ subroutine amg_d_base_onelev_cseti(lv,what,val,info,pos,idx)
#endif #endif
case default case default
! !
! Do nothing and hope for the best :) ! Do nothing and hope for the best :)
! !
end select end select
case ('SMOOTHER_SWEEPS') case ('SMOOTHER_SWEEPS')
if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) & 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 return
end if end if
end if end if
select case(val) select case(val)
case(amg_dec_aggr_) case(amg_dec_aggr_)
allocate(amg_d_dec_aggregator_type :: lv%aggr, stat=info) 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_ info = psb_err_internal_error_
end select end select
if (info == psb_success_) call lv%aggr%default() if (info == psb_success_) call lv%aggr%default()
case ('AGGR_ORD') case ('AGGR_ORD')
lv%parms%aggr_ord = val 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 lv%parms%coarse_solve = val
case default case default
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)) then if (allocated(lv%sm)) then
call lv%sm%set(what,val,info,idx=idx) call lv%sm%set(what,val,info,idx=idx)
end if end if
end if 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)) then if (allocated(lv%sm2a)) then
call lv%sm2a%set(what,val,info,idx=idx) call lv%sm2a%set(what,val,info,idx=idx)
end if end if
end if end if

@ -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_base_aggregator_mod
use amg_s_dec_aggregator_mod use amg_s_dec_aggregator_mod
use amg_s_symdec_aggregator_mod use amg_s_symdec_aggregator_mod
use amg_s_parmatch_aggregator_mod
use amg_s_jac_smoother use amg_s_jac_smoother
use amg_s_as_smoother use amg_s_as_smoother
use amg_s_diag_solver 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
end if end if
select case(ival) select case(val)
case(amg_dec_aggr_) case('DEC')
allocate(amg_s_dec_aggregator_type :: lv%aggr, stat=info) 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) 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 case default
info = psb_err_internal_error_ info = psb_err_internal_error_
end select end select

@ -1,15 +1,15 @@
! !
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,15 +33,16 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx) subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx)
use psb_base_mod use psb_base_mod
use amg_s_onelev_mod, amg_protect_name => amg_s_base_onelev_cseti use amg_s_onelev_mod, amg_protect_name => amg_s_base_onelev_cseti
use amg_s_base_aggregator_mod use amg_s_base_aggregator_mod
use amg_s_dec_aggregator_mod use amg_s_dec_aggregator_mod
use amg_s_symdec_aggregator_mod use amg_s_symdec_aggregator_mod
use amg_s_parmatch_aggregator_mod
use amg_s_jac_smoother use amg_s_jac_smoother
use amg_s_as_smoother use amg_s_as_smoother
use amg_s_diag_solver use amg_s_diag_solver
@ -59,13 +60,13 @@ subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx)
Implicit None Implicit None
! Arguments ! Arguments
class(amg_s_onelev_type), intent(inout) :: lv class(amg_s_onelev_type), intent(inout) :: lv
character(len=*), intent(in) :: what character(len=*), intent(in) :: what
integer(psb_ipk_), intent(in) :: val integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos character(len=*), optional, intent(in) :: pos
integer(psb_ipk_), intent(in), optional :: idx integer(psb_ipk_), intent(in), optional :: idx
! Local ! Local
integer(psb_ipk_) :: ipos_, err_act integer(psb_ipk_) :: ipos_, err_act
character(len=20) :: name='s_base_onelev_cseti' character(len=20) :: name='s_base_onelev_cseti'
type(amg_s_base_smoother_type) :: amg_s_base_smoother_mold 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_) #if defined(HAVE_MUMPS_)
type(amg_s_mumps_solver_type) :: amg_s_mumps_solver_mold type(amg_s_mumps_solver_type) :: amg_s_mumps_solver_mold
#endif #endif
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_
@ -100,14 +101,14 @@ subroutine amg_s_base_onelev_cseti(lv,what,val,info,pos,idx)
else else
ipos_ = amg_smooth_both_ ipos_ = amg_smooth_both_
end if end if
select case (psb_toupper(what)) select case (psb_toupper(what))
case ('SMOOTHER_TYPE') case ('SMOOTHER_TYPE')
select case (val) select case (val)
case (amg_noprec_) case (amg_noprec_)
call lv%set(amg_s_base_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_s_id_solver_mold,info,pos=pos)
case (amg_jac_) case (amg_jac_)
call lv%set(amg_s_jac_smoother_mold,info,pos=pos) 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) 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_) case (amg_l1_jac_)
call lv%set(amg_s_jac_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_s_l1_diag_solver_mold,info,pos=pos)
case (amg_bjac_) case (amg_bjac_)
call lv%set(amg_s_jac_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_s_ilu_solver_mold,info,pos=pos)
case (amg_l1_bjac_) case (amg_l1_bjac_)
call lv%set(amg_s_l1_jac_smoother_mold,info,pos=pos) 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) 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') 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') 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') if (info == 0) call lv%set(amg_s_bwgs_solver_mold,info,pos='post')
case default case default
! !
! Do nothing and hope for the best :) ! Do nothing and hope for the best :)
! !
end select 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() if (allocated(lv%sm)) call lv%sm%default()
end if 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%default() if (allocated(lv%sm2a)) call lv%sm2a%default()
end if end if
case('SUB_SOLVE') case('SUB_SOLVE')
select case (val) select case (val)
case (amg_f_none_) case (amg_f_none_)
call lv%set(amg_s_id_solver_mold,info,pos=pos) call lv%set(amg_s_id_solver_mold,info,pos=pos)
case (amg_diag_scale_) case (amg_diag_scale_)
call lv%set(amg_s_diag_solver_mold,info,pos=pos) call lv%set(amg_s_diag_solver_mold,info,pos=pos)
case (amg_l1_diag_scale_) case (amg_l1_diag_scale_)
call lv%set(amg_s_l1_diag_solver_mold,info,pos=pos) call lv%set(amg_s_l1_diag_solver_mold,info,pos=pos)
case (amg_gs_) case (amg_gs_)
call lv%set(amg_s_gs_solver_mold,info,pos=pos) call lv%set(amg_s_gs_solver_mold,info,pos=pos)
case (amg_bwgs_) case (amg_bwgs_)
call lv%set(amg_s_bwgs_solver_mold,info,pos=pos) call lv%set(amg_s_bwgs_solver_mold,info,pos=pos)
case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_) case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_)
call lv%set(amg_s_ilu_solver_mold,info,pos=pos) call lv%set(amg_s_ilu_solver_mold,info,pos=pos)
if (info == 0) then 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) call lv%sm%sv%set('SUB_SOLVE',val,info)
end if 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) if (allocated(lv%sm2a)) call lv%sm2a%sv%set('SUB_SOLVE',val,info)
end if end if
end if end if
#ifdef HAVE_SLU_ #ifdef HAVE_SLU_
case (amg_slu_) case (amg_slu_)
call lv%set(amg_s_slu_solver_mold,info,pos=pos) call lv%set(amg_s_slu_solver_mold,info,pos=pos)
#endif #endif
#ifdef HAVE_MUMPS_ #ifdef HAVE_MUMPS_
case (amg_mumps_) case (amg_mumps_)
call lv%set(amg_s_mumps_solver_mold,info,pos=pos) call lv%set(amg_s_mumps_solver_mold,info,pos=pos)
#endif #endif
case default case default
! !
! Do nothing and hope for the best :) ! Do nothing and hope for the best :)
! !
end select end select
case ('SMOOTHER_SWEEPS') case ('SMOOTHER_SWEEPS')
if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) & 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 return
end if end if
end if end if
select case(val) select case(val)
case(amg_dec_aggr_) case(amg_dec_aggr_)
allocate(amg_s_dec_aggregator_type :: lv%aggr, stat=info) 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_ info = psb_err_internal_error_
end select end select
if (info == psb_success_) call lv%aggr%default() if (info == psb_success_) call lv%aggr%default()
case ('AGGR_ORD') case ('AGGR_ORD')
lv%parms%aggr_ord = val 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 lv%parms%coarse_solve = val
case default case default
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)) then if (allocated(lv%sm)) then
call lv%sm%set(what,val,info,idx=idx) call lv%sm%set(what,val,info,idx=idx)
end if end if
end if 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)) then if (allocated(lv%sm2a)) then
call lv%sm2a%set(what,val,info,idx=idx) call lv%sm2a%set(what,val,info,idx=idx)
end if end if
end if end if

@ -262,10 +262,10 @@ subroutine amg_z_base_onelev_csetc(lv,what,val,info,pos,idx)
end if end if
end if end if
select case(ival) select case(val)
case(amg_dec_aggr_) case('DEC')
allocate(amg_z_dec_aggregator_type :: lv%aggr, stat=info) 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) allocate(amg_z_symdec_aggregator_type :: lv%aggr, stat=info)
case default case default
info = psb_err_internal_error_ info = psb_err_internal_error_

@ -1,15 +1,15 @@
! !
! !
! AMG4PSBLAS version 1.0 ! AMG4PSBLAS version 1.0
! Algebraic Multigrid Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.7) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2021 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Fabio Durastante ! Fabio Durastante
! !
! Redistribution and use in source and binary forms, with or without ! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions ! modification, are permitted provided that the following conditions
! are met: ! are met:
@ -21,7 +21,7 @@
! 3. The name of the AMG4PSBLAS group or the names of its contributors may ! 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 ! not be used to endorse or promote products derived from this
! software without specific written permission. ! software without specific written permission.
! !
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
@ -33,10 +33,10 @@
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ! 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 ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx) subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx)
use psb_base_mod use psb_base_mod
use amg_z_onelev_mod, amg_protect_name => amg_z_base_onelev_cseti use amg_z_onelev_mod, amg_protect_name => amg_z_base_onelev_cseti
use amg_z_base_aggregator_mod use amg_z_base_aggregator_mod
@ -65,13 +65,13 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx)
Implicit None Implicit None
! Arguments ! Arguments
class(amg_z_onelev_type), intent(inout) :: lv class(amg_z_onelev_type), intent(inout) :: lv
character(len=*), intent(in) :: what character(len=*), intent(in) :: what
integer(psb_ipk_), intent(in) :: val integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos character(len=*), optional, intent(in) :: pos
integer(psb_ipk_), intent(in), optional :: idx integer(psb_ipk_), intent(in), optional :: idx
! Local ! Local
integer(psb_ipk_) :: ipos_, err_act integer(psb_ipk_) :: ipos_, err_act
character(len=20) :: name='z_base_onelev_cseti' character(len=20) :: name='z_base_onelev_cseti'
type(amg_z_base_smoother_type) :: amg_z_base_smoother_mold 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_) #if defined(HAVE_MUMPS_)
type(amg_z_mumps_solver_type) :: amg_z_mumps_solver_mold type(amg_z_mumps_solver_type) :: amg_z_mumps_solver_mold
#endif #endif
call psb_erractionsave(err_act) call psb_erractionsave(err_act)
info = psb_success_ info = psb_success_
@ -112,14 +112,14 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx)
else else
ipos_ = amg_smooth_both_ ipos_ = amg_smooth_both_
end if end if
select case (psb_toupper(what)) select case (psb_toupper(what))
case ('SMOOTHER_TYPE') case ('SMOOTHER_TYPE')
select case (val) select case (val)
case (amg_noprec_) case (amg_noprec_)
call lv%set(amg_z_base_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_z_id_solver_mold,info,pos=pos)
case (amg_jac_) case (amg_jac_)
call lv%set(amg_z_jac_smoother_mold,info,pos=pos) 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) 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_) case (amg_l1_jac_)
call lv%set(amg_z_jac_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_z_l1_diag_solver_mold,info,pos=pos)
case (amg_bjac_) case (amg_bjac_)
call lv%set(amg_z_jac_smoother_mold,info,pos=pos) 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) if (info == 0) call lv%set(amg_z_ilu_solver_mold,info,pos=pos)
case (amg_l1_bjac_) case (amg_l1_bjac_)
call lv%set(amg_z_l1_jac_smoother_mold,info,pos=pos) 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) 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') 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') 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') if (info == 0) call lv%set(amg_z_bwgs_solver_mold,info,pos='post')
case default case default
! !
! Do nothing and hope for the best :) ! Do nothing and hope for the best :)
! !
end select 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() if (allocated(lv%sm)) call lv%sm%default()
end if 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%default() if (allocated(lv%sm2a)) call lv%sm2a%default()
end if end if
case('SUB_SOLVE') case('SUB_SOLVE')
select case (val) select case (val)
case (amg_f_none_) case (amg_f_none_)
call lv%set(amg_z_id_solver_mold,info,pos=pos) call lv%set(amg_z_id_solver_mold,info,pos=pos)
case (amg_diag_scale_) case (amg_diag_scale_)
call lv%set(amg_z_diag_solver_mold,info,pos=pos) call lv%set(amg_z_diag_solver_mold,info,pos=pos)
case (amg_l1_diag_scale_) case (amg_l1_diag_scale_)
call lv%set(amg_z_l1_diag_solver_mold,info,pos=pos) call lv%set(amg_z_l1_diag_solver_mold,info,pos=pos)
case (amg_gs_) case (amg_gs_)
call lv%set(amg_z_gs_solver_mold,info,pos=pos) call lv%set(amg_z_gs_solver_mold,info,pos=pos)
case (amg_bwgs_) case (amg_bwgs_)
call lv%set(amg_z_bwgs_solver_mold,info,pos=pos) call lv%set(amg_z_bwgs_solver_mold,info,pos=pos)
case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_) case (psb_ilu_n_,psb_milu_n_,psb_ilu_t_)
call lv%set(amg_z_ilu_solver_mold,info,pos=pos) call lv%set(amg_z_ilu_solver_mold,info,pos=pos)
if (info == 0) then 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) call lv%sm%sv%set('SUB_SOLVE',val,info)
end if 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) if (allocated(lv%sm2a)) call lv%sm2a%sv%set('SUB_SOLVE',val,info)
end if end if
end if end if
#ifdef HAVE_SLU_ #ifdef HAVE_SLU_
case (amg_slu_) case (amg_slu_)
call lv%set(amg_z_slu_solver_mold,info,pos=pos) call lv%set(amg_z_slu_solver_mold,info,pos=pos)
#endif #endif
#ifdef HAVE_MUMPS_ #ifdef HAVE_MUMPS_
case (amg_mumps_) case (amg_mumps_)
call lv%set(amg_z_mumps_solver_mold,info,pos=pos) call lv%set(amg_z_mumps_solver_mold,info,pos=pos)
#endif #endif
#ifdef HAVE_SLUDIST_ #ifdef HAVE_SLUDIST_
@ -204,10 +204,10 @@ subroutine amg_z_base_onelev_cseti(lv,what,val,info,pos,idx)
#endif #endif
case default case default
! !
! Do nothing and hope for the best :) ! Do nothing and hope for the best :)
! !
end select end select
case ('SMOOTHER_SWEEPS') case ('SMOOTHER_SWEEPS')
if ((ipos_==amg_smooth_pre_) .or.(ipos_==amg_smooth_both_)) & 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 return
end if end if
end if end if
select case(val) select case(val)
case(amg_dec_aggr_) case(amg_dec_aggr_)
allocate(amg_z_dec_aggregator_type :: lv%aggr, stat=info) 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_ info = psb_err_internal_error_
end select end select
if (info == psb_success_) call lv%aggr%default() if (info == psb_success_) call lv%aggr%default()
case ('AGGR_ORD') case ('AGGR_ORD')
lv%parms%aggr_ord = val 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 lv%parms%coarse_solve = val
case default case default
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)) then if (allocated(lv%sm)) then
call lv%sm%set(what,val,info,idx=idx) call lv%sm%set(what,val,info,idx=idx)
end if end if
end if 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)) then if (allocated(lv%sm2a)) then
call lv%sm2a%set(what,val,info,idx=idx) call lv%sm2a%set(what,val,info,idx=idx)
end if end if
end if end if

@ -105,75 +105,80 @@ class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.1 </span><a class="cmr-12">4.1 </span><a
href="userhtmlsu6.html#x15-140004.1" id="QQ2-15-16"><span href="userhtmlsu6.html#x15-140004.1" id="QQ2-15-16"><span
class="cmr-12">Examples</span></a></span> class="cmr-12">Examples</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.2 </span><a
href="userhtmlsu7.html#x16-150004.2" id="QQ2-16-21"><span
class="cmr-12">GPU example</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">5 </span><a class="cmr-12">5 </span><a
href="userhtmlse5.html#x16-150005" id="QQ2-16-21"><span href="userhtmlse5.html#x17-160005" id="QQ2-17-23"><span
class="cmr-12">User Interface</span></a></span> class="cmr-12">User Interface</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.1 </span><a class="cmr-12">5.1 </span><a
href="userhtmlsu7.html#x17-160005.1" id="QQ2-17-22"><span href="userhtmlsu8.html#x18-170005.1" id="QQ2-18-24"><span
class="cmr-12">Method init</span></a></span> class="cmr-12">Method init</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.2 </span><a class="cmr-12">5.2 </span><a
href="userhtmlsu8.html#x18-170005.2" id="QQ2-18-23"><span href="userhtmlsu9.html#x19-180005.2" id="QQ2-19-25"><span
class="cmr-12">Method set</span></a></span> class="cmr-12">Method set</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.3 </span><a class="cmr-12">5.3 </span><a
href="userhtmlsu9.html#x19-180005.3" id="QQ2-19-31"><span href="userhtmlsu10.html#x20-190005.3" id="QQ2-20-33"><span
class="cmr-12">Method hierarchy</span><span class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.4 </span><a class="cmr-12">5.4 </span><a
href="userhtmlsu10.html#x20-190005.4" id="QQ2-20-32"><span href="userhtmlsu11.html#x21-200005.4" id="QQ2-21-34"><span
class="cmr-12">Method smoothers</span><span class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.5 </span><a class="cmr-12">5.5 </span><a
href="userhtmlsu11.html#x21-200005.5" id="QQ2-21-33"><span href="userhtmlsu12.html#x22-210005.5" id="QQ2-22-35"><span
class="cmr-12">Method build</span></a></span> class="cmr-12">Method build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.6 </span><a class="cmr-12">5.6 </span><a
href="userhtmlsu12.html#x22-210005.6" id="QQ2-22-34"><span href="userhtmlsu13.html#x23-220005.6" id="QQ2-23-36"><span
class="cmr-12">Method apply</span></a></span> class="cmr-12">Method apply</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.7 </span><a class="cmr-12">5.7 </span><a
href="userhtmlsu13.html#x23-220005.7" id="QQ2-23-35"><span href="userhtmlsu14.html#x24-230005.7" id="QQ2-24-37"><span
class="cmr-12">Method free</span></a></span> class="cmr-12">Method free</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.8 </span><a class="cmr-12">5.8 </span><a
href="userhtmlsu14.html#x24-230005.8" id="QQ2-24-36"><span href="userhtmlsu15.html#x25-240005.8" id="QQ2-25-38"><span
class="cmr-12">Method descr</span></a></span> class="cmr-12">Method descr</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.9 </span><a class="cmr-12">5.9 </span><a
href="userhtmlsu15.html#x25-240005.9" id="QQ2-25-37"><span href="userhtmlsu16.html#x26-250005.9" id="QQ2-26-39"><span
class="cmr-12">Auxiliary Methods</span></a></span> class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">6 </span><a class="cmr-12">6 </span><a
href="userhtmlse6.html#x26-300006" id="QQ2-26-43"><span href="userhtmlse6.html#x27-310006" id="QQ2-27-45"><span
class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span> class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">7 </span><a class="cmr-12">7 </span><a
href="userhtmlse7.html#x27-310007" id="QQ2-27-44"><span href="userhtmlse7.html#x28-320007" id="QQ2-28-46"><span
class="cmr-12">Error Handling</span></a></span> class="cmr-12">Error Handling</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">A </span><a class="cmr-12">A </span><a
href="userhtmlse8.html#x28-32000A" id="QQ2-28-45"><span href="userhtmlse8.html#x29-33000A" id="QQ2-29-47"><span
class="cmr-12">License</span></a></span> class="cmr-12">License</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">B </span><a class="cmr-12">B </span><a
href="userhtmlse9.html#x29-33000B" id="QQ2-29-46"><span href="userhtmlse9.html#x30-34000B" id="QQ2-30-48"><span
class="cmr-12">Contributor Covenant Code of Conduct</span></a></span> class="cmr-12">Contributor Covenant Code of Conduct</span></a></span>
<br /> <span class="likesectionToc" ><a <br /> <span class="likesectionToc" ><a
href="userhtmlli5.html#x30-38000B" id="QQ2-30-51"><span href="userhtmlli5.html#x31-39000B" id="QQ2-31-53"><span
class="cmr-12">References</span></a></span> class="cmr-12">References</span></a></span>
</div> </div>

@ -105,75 +105,80 @@ class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.1 </span><a class="cmr-12">4.1 </span><a
href="userhtmlsu6.html#x15-140004.1" id="QQ2-15-16"><span href="userhtmlsu6.html#x15-140004.1" id="QQ2-15-16"><span
class="cmr-12">Examples</span></a></span> class="cmr-12">Examples</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.2 </span><a
href="userhtmlsu7.html#x16-150004.2" id="QQ2-16-21"><span
class="cmr-12">GPU example</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">5 </span><a class="cmr-12">5 </span><a
href="userhtmlse5.html#x16-150005" id="QQ2-16-21"><span href="userhtmlse5.html#x17-160005" id="QQ2-17-23"><span
class="cmr-12">User Interface</span></a></span> class="cmr-12">User Interface</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.1 </span><a class="cmr-12">5.1 </span><a
href="userhtmlsu7.html#x17-160005.1" id="QQ2-17-22"><span href="userhtmlsu8.html#x18-170005.1" id="QQ2-18-24"><span
class="cmr-12">Method init</span></a></span> class="cmr-12">Method init</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.2 </span><a class="cmr-12">5.2 </span><a
href="userhtmlsu8.html#x18-170005.2" id="QQ2-18-23"><span href="userhtmlsu9.html#x19-180005.2" id="QQ2-19-25"><span
class="cmr-12">Method set</span></a></span> class="cmr-12">Method set</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.3 </span><a class="cmr-12">5.3 </span><a
href="userhtmlsu9.html#x19-180005.3" id="QQ2-19-31"><span href="userhtmlsu10.html#x20-190005.3" id="QQ2-20-33"><span
class="cmr-12">Method hierarchy</span><span class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.4 </span><a class="cmr-12">5.4 </span><a
href="userhtmlsu10.html#x20-190005.4" id="QQ2-20-32"><span href="userhtmlsu11.html#x21-200005.4" id="QQ2-21-34"><span
class="cmr-12">Method smoothers</span><span class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.5 </span><a class="cmr-12">5.5 </span><a
href="userhtmlsu11.html#x21-200005.5" id="QQ2-21-33"><span href="userhtmlsu12.html#x22-210005.5" id="QQ2-22-35"><span
class="cmr-12">Method build</span></a></span> class="cmr-12">Method build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.6 </span><a class="cmr-12">5.6 </span><a
href="userhtmlsu12.html#x22-210005.6" id="QQ2-22-34"><span href="userhtmlsu13.html#x23-220005.6" id="QQ2-23-36"><span
class="cmr-12">Method apply</span></a></span> class="cmr-12">Method apply</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.7 </span><a class="cmr-12">5.7 </span><a
href="userhtmlsu13.html#x23-220005.7" id="QQ2-23-35"><span href="userhtmlsu14.html#x24-230005.7" id="QQ2-24-37"><span
class="cmr-12">Method free</span></a></span> class="cmr-12">Method free</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.8 </span><a class="cmr-12">5.8 </span><a
href="userhtmlsu14.html#x24-230005.8" id="QQ2-24-36"><span href="userhtmlsu15.html#x25-240005.8" id="QQ2-25-38"><span
class="cmr-12">Method descr</span></a></span> class="cmr-12">Method descr</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.9 </span><a class="cmr-12">5.9 </span><a
href="userhtmlsu15.html#x25-240005.9" id="QQ2-25-37"><span href="userhtmlsu16.html#x26-250005.9" id="QQ2-26-39"><span
class="cmr-12">Auxiliary Methods</span></a></span> class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">6 </span><a class="cmr-12">6 </span><a
href="userhtmlse6.html#x26-300006" id="QQ2-26-43"><span href="userhtmlse6.html#x27-310006" id="QQ2-27-45"><span
class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span> class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">7 </span><a class="cmr-12">7 </span><a
href="userhtmlse7.html#x27-310007" id="QQ2-27-44"><span href="userhtmlse7.html#x28-320007" id="QQ2-28-46"><span
class="cmr-12">Error Handling</span></a></span> class="cmr-12">Error Handling</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">A </span><a class="cmr-12">A </span><a
href="userhtmlse8.html#x28-32000A" id="QQ2-28-45"><span href="userhtmlse8.html#x29-33000A" id="QQ2-29-47"><span
class="cmr-12">License</span></a></span> class="cmr-12">License</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">B </span><a class="cmr-12">B </span><a
href="userhtmlse9.html#x29-33000B" id="QQ2-29-46"><span href="userhtmlse9.html#x30-34000B" id="QQ2-30-48"><span
class="cmr-12">Contributor Covenant Code of Conduct</span></a></span> class="cmr-12">Contributor Covenant Code of Conduct</span></a></span>
<br /> <span class="likesectionToc" ><a <br /> <span class="likesectionToc" ><a
href="userhtmlli5.html#x30-38000B" id="QQ2-30-51"><span href="userhtmlli5.html#x31-39000B" id="QQ2-31-53"><span
class="cmr-12">References</span></a></span> class="cmr-12">References</span></a></span>
</div> </div>

@ -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</span> class="cmr-12">of a software development project started in 2007, named MLD2P4, which originally</span>
<span <span
class="cmr-12">implemented a multilevel version of some domain decomposition preconditioners of</span> class="cmr-12">implemented a multilevel version of some domain decomposition preconditioners of</span>
<span
class="cmr-12">additive-Schwarz type, and was based on a parallel decoupled version of the well known</span>
<span
class="cmr-12">additive-Schwarz type, and was based on a parallel decoupled version of the well known</span>
<span <span
class="cmr-12">smoothed aggregation method to generate the multilevel hierarchy of coarser</span> class="cmr-12">smoothed aggregation method to generate the multilevel hierarchy of coarser</span>
<span <span

@ -77,104 +77,109 @@ class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.1 </span><a class="cmr-12">4.1 </span><a
href="userhtmlsu6.html#x15-140004.1"><span href="userhtmlsu6.html#x15-140004.1"><span
class="cmr-12">Examples</span></a></span> class="cmr-12">Examples</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.2 </span><a
href="userhtmlsu7.html#x16-150004.2"><span
class="cmr-12">GPU example</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">5 </span><a class="cmr-12">5 </span><a
href="userhtmlse5.html#x16-150005"><span href="userhtmlse5.html#x17-160005"><span
class="cmr-12">User Interface</span></a></span> class="cmr-12">User Interface</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.1 </span><a class="cmr-12">5.1 </span><a
href="userhtmlsu7.html#x17-160005.1"><span href="userhtmlsu8.html#x18-170005.1"><span
class="cmr-12">Method init</span></a></span> class="cmr-12">Method init</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.2 </span><a class="cmr-12">5.2 </span><a
href="userhtmlsu8.html#x18-170005.2"><span href="userhtmlsu9.html#x19-180005.2"><span
class="cmr-12">Method set</span></a></span> class="cmr-12">Method set</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.3 </span><a class="cmr-12">5.3 </span><a
href="userhtmlsu9.html#x19-180005.3"><span href="userhtmlsu10.html#x20-190005.3"><span
class="cmr-12">Method hierarchy</span><span class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.4 </span><a class="cmr-12">5.4 </span><a
href="userhtmlsu10.html#x20-190005.4"><span href="userhtmlsu11.html#x21-200005.4"><span
class="cmr-12">Method smoothers</span><span class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.5 </span><a class="cmr-12">5.5 </span><a
href="userhtmlsu11.html#x21-200005.5"><span href="userhtmlsu12.html#x22-210005.5"><span
class="cmr-12">Method build</span></a></span> class="cmr-12">Method build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.6 </span><a class="cmr-12">5.6 </span><a
href="userhtmlsu12.html#x22-210005.6"><span href="userhtmlsu13.html#x23-220005.6"><span
class="cmr-12">Method apply</span></a></span> class="cmr-12">Method apply</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.7 </span><a class="cmr-12">5.7 </span><a
href="userhtmlsu13.html#x23-220005.7"><span href="userhtmlsu14.html#x24-230005.7"><span
class="cmr-12">Method free</span></a></span> class="cmr-12">Method free</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.8 </span><a class="cmr-12">5.8 </span><a
href="userhtmlsu14.html#x24-230005.8"><span href="userhtmlsu15.html#x25-240005.8"><span
class="cmr-12">Method descr</span></a></span> class="cmr-12">Method descr</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.9 </span><a class="cmr-12">5.9 </span><a
href="userhtmlsu15.html#x25-240005.9"><span href="userhtmlsu16.html#x26-250005.9"><span
class="cmr-12">Auxiliary Methods</span></a></span> class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.1 </span><a class="cmr-12">5.9.1 </span><a
href="userhtmlsu15.html#x25-250005.9.1" id="QQ2-25-38"><span href="userhtmlsu16.html#x26-260005.9.1" id="QQ2-26-40"><span
class="cmr-12">Method: dump</span></a></span> class="cmr-12">Method: dump</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.2 </span><a class="cmr-12">5.9.2 </span><a
href="userhtmlsu15.html#x25-260005.9.2" id="QQ2-25-39"><span href="userhtmlsu16.html#x26-270005.9.2" id="QQ2-26-41"><span
class="cmr-12">Method: clone</span></a></span> class="cmr-12">Method: clone</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.3 </span><a class="cmr-12">5.9.3 </span><a
href="userhtmlsu15.html#x25-270005.9.3" id="QQ2-25-40"><span href="userhtmlsu16.html#x26-280005.9.3" id="QQ2-26-42"><span
class="cmr-12">Method: sizeof</span></a></span> class="cmr-12">Method: sizeof</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.4 </span><a class="cmr-12">5.9.4 </span><a
href="userhtmlsu15.html#x25-280005.9.4" id="QQ2-25-41"><span href="userhtmlsu16.html#x26-290005.9.4" id="QQ2-26-43"><span
class="cmr-12">Method: allocate</span><span class="cmr-12">Method: allocate</span><span
class="cmr-12">_wrk</span></a></span> class="cmr-12">_wrk</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.5 </span><a class="cmr-12">5.9.5 </span><a
href="userhtmlsu15.html#x25-290005.9.5" id="QQ2-25-42"><span href="userhtmlsu16.html#x26-300005.9.5" id="QQ2-26-44"><span
class="cmr-12">Method: free</span><span class="cmr-12">Method: free</span><span
class="cmr-12">_wrk</span></a></span> class="cmr-12">_wrk</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">6 </span><a class="cmr-12">6 </span><a
href="userhtmlse6.html#x26-300006"><span href="userhtmlse6.html#x27-310006"><span
class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span> class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">7 </span><a class="cmr-12">7 </span><a
href="userhtmlse7.html#x27-310007"><span href="userhtmlse7.html#x28-320007"><span
class="cmr-12">Error Handling</span></a></span> class="cmr-12">Error Handling</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">A </span><a class="cmr-12">A </span><a
href="userhtmlse8.html#x28-32000A"><span href="userhtmlse8.html#x29-33000A"><span
class="cmr-12">License</span></a></span> class="cmr-12">License</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">B </span><a class="cmr-12">B </span><a
href="userhtmlse9.html#x29-33000B"><span href="userhtmlse9.html#x30-34000B"><span
class="cmr-12">Contributor Covenant Code of Conduct</span></a></span> class="cmr-12">Contributor Covenant Code of Conduct</span></a></span>
</div> </div>

@ -25,7 +25,7 @@ href="userhtml.html#userhtmlli5.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="likesectionHead"><a <h3 class="likesectionHead"><a
id="x30-38000B"></a><span id="x31-39000B"></a><span
class="cmr-12">References</span></h3> class="cmr-12">References</span></h3>
<!--l. 2--><p class="noindent" > <!--l. 2--><p class="noindent" >
<div class="thebibliography"> <div class="thebibliography">

@ -299,7 +299,7 @@ class="cmr-12">smoothers and solvers for building new versions of the preconditi
<span <span
class="cmr-12">Section</span><span class="cmr-12">Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse6.html#x26-300006"><span href="userhtmlse6.html#x27-310006"><span
class="cmr-12">6</span><!--tex4ht:ref: sec:adding --></a><span class="cmr-12">6</span><!--tex4ht:ref: sec:adding --></a><span
class="cmr-12">).</span> class="cmr-12">).</span>
<!--l. 96--><p class="indent" > <span <!--l. 96--><p class="indent" > <span
@ -328,7 +328,7 @@ class="cmr-12">, where the Fortran codes of a few sample programs are also shown
<span <span
class="cmr-12">A reference guide for the user interface routines is provided in Section</span><span class="cmr-12">A reference guide for the user interface routines is provided in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse5.html#x16-150005"><span href="userhtmlse5.html#x17-160005"><span
class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a><span class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">.</span> class="cmr-12">.</span>
<span <span
@ -336,13 +336,13 @@ class="cmr-12">Information on the extension of the package through the addition
<span <span
class="cmr-12">smoothers and solvers is reported in Section</span><span class="cmr-12">smoothers and solvers is reported in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse6.html#x26-300006"><span href="userhtmlse6.html#x27-310006"><span
class="cmr-12">6</span><!--tex4ht:ref: sec:adding --></a><span class="cmr-12">6</span><!--tex4ht:ref: sec:adding --></a><span
class="cmr-12">. The error handling mechanism</span> class="cmr-12">. The error handling mechanism</span>
<span <span
class="cmr-12">used by the package is briefly described in Section</span><span class="cmr-12">used by the package is briefly described in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x27-310007"><span href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a><span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a><span
class="cmr-12">. The copyright terms</span> class="cmr-12">. The copyright terms</span>
<span <span
@ -350,7 +350,7 @@ class="cmr-12">concerning the distribution and modification of AMG4PSBLAS are re
<span <span
class="cmr-12">Appendix</span><span class="cmr-12">Appendix</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x28-32000A"><span href="userhtmlse8.html#x29-33000A"><span
class="cmr-12">A</span><!--tex4ht:ref: sec:license --></a><span class="cmr-12">A</span><!--tex4ht:ref: sec:license --></a><span
class="cmr-12">.</span> class="cmr-12">.</span>

@ -42,7 +42,7 @@ class="cmr-12">where contact points for further information can be also found.</
<!--l. 12--><p class="indent" > <span <!--l. 12--><p class="indent" > <span
class="cmr-12">The software is available under a modified BSD license, as specified in Appendix</span><span class="cmr-12">The software is available under a modified BSD license, as specified in Appendix</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x28-32000A"><span href="userhtmlse8.html#x29-33000A"><span
class="cmr-12">A</span><!--tex4ht:ref: sec:license --></a><span class="cmr-12">A</span><!--tex4ht:ref: sec:license --></a><span
class="cmr-12">;</span> class="cmr-12">;</span>
<span <span

@ -131,14 +131,14 @@ class="cmr-12">list of all the preconditioner parameters and their allowed and d
<span <span
class="cmr-12">is provided in Section</span><span class="cmr-12">is provided in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse5.html#x16-150005"><span href="userhtmlse5.html#x17-160005"><span
class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a><span class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">, Tables</span><span class="cmr-12">, Tables</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlsu8.html#x18-17009r2"><span href="userhtmlsu9.html#x19-18009r2"><span
class="cmr-12">2</span><!--tex4ht:ref: tab:p_cycle --></a><span class="cmr-12">2</span><!--tex4ht:ref: tab:p_cycle --></a><span
class="cmr-12">-</span><a class="cmr-12">-</span><a
href="userhtmlsu8.html#x18-17015r8"><span href="userhtmlsu9.html#x19-18015r8"><span
class="cmr-12">8</span><!--tex4ht:ref: tab:p_smoother_1 --></a><span class="cmr-12">8</span><!--tex4ht:ref: tab:p_smoother_1 --></a><span
class="cmr-12">.</span> class="cmr-12">.</span>
</li> </li>
@ -208,7 +208,7 @@ class="cmr-12">All the previous routines are available as methods of the precond
<span <span
class="cmr-12">detailed description of them is given in Section</span><span class="cmr-12">detailed description of them is given in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse5.html#x16-150005"><span href="userhtmlse5.html#x17-160005"><span
class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a><span class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">. Examples showing the basic use of</span> class="cmr-12">. Examples showing the basic use of</span>
<span <span
@ -382,8 +382,8 @@ smoothed aggregation as coarsening
algorithm, and LU (plus triangular solve) algorithm, and LU (plus triangular solve)
as coarsest-level solver. See the default as coarsest-level solver. See the default
values in Tables&#x00A0;<a values in Tables&#x00A0;<a
href="userhtmlsu8.html#x18-17009r2">2<!--tex4ht:ref: tab:p_cycle --></a>-<a href="userhtmlsu9.html#x19-18009r2">2<!--tex4ht:ref: tab:p_cycle --></a>-<a
href="userhtmlsu8.html#x18-17015r8">8<!--tex4ht:ref: tab:p_smoother_1 --></a> for further details of href="userhtmlsu9.html#x19-18015r8">8<!--tex4ht:ref: tab:p_smoother_1 --></a> for further details of
the preconditioner. </td> the preconditioner. </td>
</tr><tr </tr><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
@ -441,7 +441,13 @@ class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.1 </span><a class="cmr-12">4.1 </span><a
href="userhtmlsu6.html#x15-140004.1"><span href="userhtmlsu6.html#x15-140004.1"><span
class="cmr-12">Examples</span></a></span> class="cmr-12">Examples</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.2 </span><a
href="userhtmlsu7.html#x16-150004.2"><span
class="cmr-12">GPU example</span></a></span>
</div> </div>

@ -29,7 +29,7 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">5 </span></span> <a class="cmr-12">5 </span></span> <a
id="x16-150005"></a><span id="x17-160005"></a><span
class="cmr-12">User Interface</span></h3> class="cmr-12">User Interface</span></h3>
<!--l. 5--><p class="noindent" ><span <!--l. 5--><p class="noindent" ><span
class="cmr-12">The basic user interface of AMG4PBLAS consists of eight methods. The six methods</span> class="cmr-12">The basic user interface of AMG4PBLAS consists of eight methods. The six methods</span>
@ -151,7 +151,7 @@ class="cmr-12">the precision of the sparse matrix and preconditioner data struct
<span <span
class="cmr-12">Section</span><span class="cmr-12">Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlsu8.html#x18-170005.2"><span href="userhtmlsu9.html#x19-180005.2"><span
class="cmr-12">5.2</span><!--tex4ht:ref: sec:precset --></a><span class="cmr-12">5.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">).</span></li></ul> class="cmr-12">).</span></li></ul>
<!--l. 38--><p class="noindent" ><span <!--l. 38--><p class="noindent" ><span
@ -163,80 +163,80 @@ class="cmr-12">A description of each method is given in the remainder of this se
<span <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.1 </span><a class="cmr-12">5.1 </span><a
href="userhtmlsu7.html#x17-160005.1"><span href="userhtmlsu8.html#x18-170005.1"><span
class="cmr-12">Method init</span></a></span> class="cmr-12">Method init</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.2 </span><a class="cmr-12">5.2 </span><a
href="userhtmlsu8.html#x18-170005.2"><span href="userhtmlsu9.html#x19-180005.2"><span
class="cmr-12">Method set</span></a></span> class="cmr-12">Method set</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.3 </span><a class="cmr-12">5.3 </span><a
href="userhtmlsu9.html#x19-180005.3"><span href="userhtmlsu10.html#x20-190005.3"><span
class="cmr-12">Method hierarchy</span><span class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.4 </span><a class="cmr-12">5.4 </span><a
href="userhtmlsu10.html#x20-190005.4"><span href="userhtmlsu11.html#x21-200005.4"><span
class="cmr-12">Method smoothers</span><span class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.5 </span><a class="cmr-12">5.5 </span><a
href="userhtmlsu11.html#x21-200005.5"><span href="userhtmlsu12.html#x22-210005.5"><span
class="cmr-12">Method build</span></a></span> class="cmr-12">Method build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.6 </span><a class="cmr-12">5.6 </span><a
href="userhtmlsu12.html#x22-210005.6"><span href="userhtmlsu13.html#x23-220005.6"><span
class="cmr-12">Method apply</span></a></span> class="cmr-12">Method apply</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.7 </span><a class="cmr-12">5.7 </span><a
href="userhtmlsu13.html#x23-220005.7"><span href="userhtmlsu14.html#x24-230005.7"><span
class="cmr-12">Method free</span></a></span> class="cmr-12">Method free</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.8 </span><a class="cmr-12">5.8 </span><a
href="userhtmlsu14.html#x24-230005.8"><span href="userhtmlsu15.html#x25-240005.8"><span
class="cmr-12">Method descr</span></a></span> class="cmr-12">Method descr</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.9 </span><a class="cmr-12">5.9 </span><a
href="userhtmlsu15.html#x25-240005.9"><span href="userhtmlsu16.html#x26-250005.9"><span
class="cmr-12">Auxiliary Methods</span></a></span> class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.1 </span><a class="cmr-12">5.9.1 </span><a
href="userhtmlsu15.html#x25-250005.9.1"><span href="userhtmlsu16.html#x26-260005.9.1"><span
class="cmr-12">Method: dump</span></a></span> class="cmr-12">Method: dump</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.2 </span><a class="cmr-12">5.9.2 </span><a
href="userhtmlsu15.html#x25-260005.9.2"><span href="userhtmlsu16.html#x26-270005.9.2"><span
class="cmr-12">Method: clone</span></a></span> class="cmr-12">Method: clone</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.3 </span><a class="cmr-12">5.9.3 </span><a
href="userhtmlsu15.html#x25-270005.9.3"><span href="userhtmlsu16.html#x26-280005.9.3"><span
class="cmr-12">Method: sizeof</span></a></span> class="cmr-12">Method: sizeof</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.4 </span><a class="cmr-12">5.9.4 </span><a
href="userhtmlsu15.html#x25-280005.9.4"><span href="userhtmlsu16.html#x26-290005.9.4"><span
class="cmr-12">Method: allocate</span><span class="cmr-12">Method: allocate</span><span
class="cmr-12">_wrk</span></a></span> class="cmr-12">_wrk</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.5 </span><a class="cmr-12">5.9.5 </span><a
href="userhtmlsu15.html#x25-290005.9.5"><span href="userhtmlsu16.html#x26-300005.9.5"><span
class="cmr-12">Method: free</span><span class="cmr-12">Method: free</span><span
class="cmr-12">_wrk</span></a></span> class="cmr-12">_wrk</span></a></span>
</div> </div>

@ -29,7 +29,7 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">6 </span></span> <a class="cmr-12">6 </span></span> <a
id="x26-300006"></a><span id="x27-310006"></a><span
class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></h3> class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></h3>
<!--l. 6--><p class="noindent" ><span <!--l. 6--><p class="noindent" ><span
class="cmr-12">Developers can add completely new smoother and/or solver classes derived from the</span> class="cmr-12">Developers can add completely new smoother and/or solver classes derived from the</span>
@ -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</span><span class="cmr-12">base objects in the library (see Remark</span><span
class="cmr-12">&#x00A0;2 in Section</span><span class="cmr-12">&#x00A0;2 in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlsu8.html#x18-170005.2"><span href="userhtmlsu9.html#x19-180005.2"><span
class="cmr-12">5.2</span><!--tex4ht:ref: sec:precset --></a><span class="cmr-12">5.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">), without recompiling the</span> class="cmr-12">), without recompiling the</span>
<span <span
@ -202,7 +202,7 @@ class="cmr-12">The user-defined new solver to be employed in the preconditioner.
<!--l. 66--><p class="noindent" ><span <!--l. 66--><p class="noindent" ><span
class="cmr-12">The other arguments are defined in the way described in Sec.</span><span class="cmr-12">The other arguments are defined in the way described in Sec.</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlsu8.html#x18-170005.2"><span href="userhtmlsu9.html#x19-180005.2"><span
class="cmr-12">5.2</span><!--tex4ht:ref: sec:precset --></a><span class="cmr-12">5.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">. As an example, in the</span> class="cmr-12">. As an example, in the</span>
<span class="obeylines-h"><span class="verb"><span <span class="obeylines-h"><span class="verb"><span
@ -215,7 +215,11 @@ class="cmr-12">pass it as follows:</span>
<<<<<<< HEAD
<pre class="verbatim" id="verbatim-10"> <pre class="verbatim" id="verbatim-10">
=======
<pre class="verbatim" id="verbatim-11">
>>>>>>> development
&#x00A0;&#x00A0;!&#x00A0;sparse&#x00A0;matrix&#x00A0;and&#x00A0;preconditioner &#x00A0;&#x00A0;!&#x00A0;sparse&#x00A0;matrix&#x00A0;and&#x00A0;preconditioner
&#x00A0;&#x00A0;type(psb_dspmat_type)&#x00A0;::&#x00A0;a &#x00A0;&#x00A0;type(psb_dspmat_type)&#x00A0;::&#x00A0;a
&#x00A0;&#x00A0;type(amg_dprec_type)&#x00A0;&#x00A0;::&#x00A0;prec &#x00A0;&#x00A0;type(amg_dprec_type)&#x00A0;&#x00A0;::&#x00A0;prec

@ -29,7 +29,7 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">7 </span></span> <a class="cmr-12">7 </span></span> <a
id="x27-310007"></a><span id="x28-320007"></a><span
class="cmr-12">Error Handling</span></h3> class="cmr-12">Error Handling</span></h3>
<!--l. 5--><p class="noindent" ><span <!--l. 5--><p class="noindent" ><span
class="cmr-12">The error handling in AMG4PSBLAS is based on the PSBLAS error handling. Error</span> class="cmr-12">The error handling in AMG4PSBLAS is based on the PSBLAS error handling. Error</span>

@ -29,14 +29,18 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">A </span></span> <a class="cmr-12">A </span></span> <a
id="x28-32000A"></a><span id="x29-33000A"></a><span
class="cmr-12">License</span></h3> class="cmr-12">License</span></h3>
<!--l. 6--><p class="noindent" ><span <!--l. 6--><p class="noindent" ><span
class="cmr-12">AMG4PSBLAS is freely distributable under the following copyright terms:</span> class="cmr-12">AMG4PSBLAS is freely distributable under the following copyright terms:</span>
<<<<<<< HEAD
<pre class="verbatim" id="verbatim-11"> <pre class="verbatim" id="verbatim-11">
=======
<pre class="verbatim" id="verbatim-12">
>>>>>>> development
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;AMG4PSBLAS&#x00A0;&#x00A0;version&#x00A0;1.0 &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;AMG4PSBLAS&#x00A0;&#x00A0;version&#x00A0;1.0
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Algebraic&#x00A0;MultiGrid&#x00A0;Preconditioners&#x00A0;Package &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Algebraic&#x00A0;MultiGrid&#x00A0;Preconditioners&#x00A0;Package
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;based&#x00A0;on&#x00A0;PSBLAS&#x00A0;(Parallel&#x00A0;Sparse&#x00A0;BLAS&#x00A0;version&#x00A0;3.7) &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;based&#x00A0;on&#x00A0;PSBLAS&#x00A0;(Parallel&#x00A0;Sparse&#x00A0;BLAS&#x00A0;version&#x00A0;3.7)
@ -78,7 +82,11 @@ class="cmr-12">abide by its terms:</span>
<<<<<<< HEAD
<pre class="verbatim" id="verbatim-12"> <pre class="verbatim" id="verbatim-12">
=======
<pre class="verbatim" id="verbatim-13">
>>>>>>> development
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MLD2P4&#x00A0;&#x00A0;version&#x00A0;2.2 &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MLD2P4&#x00A0;&#x00A0;version&#x00A0;2.2
&#x00A0;&#x00A0;MultiLevel&#x00A0;Domain&#x00A0;Decomposition&#x00A0;Parallel&#x00A0;Preconditioners&#x00A0;Package &#x00A0;&#x00A0;MultiLevel&#x00A0;Domain&#x00A0;Decomposition&#x00A0;Parallel&#x00A0;Preconditioners&#x00A0;Package
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;based&#x00A0;on&#x00A0;PSBLAS&#x00A0;(Parallel&#x00A0;Sparse&#x00A0;BLAS&#x00A0;version&#x00A0;3.5) &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;based&#x00A0;on&#x00A0;PSBLAS&#x00A0;(Parallel&#x00A0;Sparse&#x00A0;BLAS&#x00A0;version&#x00A0;3.5)
@ -125,6 +133,7 @@ class="cmr-12">. The relevant license is reproduced here:</span>
<<<<<<< HEAD
<pre class="verbatim" id="verbatim-13"> <pre class="verbatim" id="verbatim-13">
//&#x00A0;*********************************************************************** //&#x00A0;***********************************************************************
// //
@ -134,6 +143,17 @@ class="cmr-12">. The relevant license is reproduced here:</span>
// //
//&#x00A0;*********************************************************************** //&#x00A0;***********************************************************************
// //
=======
<pre class="verbatim" id="verbatim-14">
//&#x00A0;***********************************************************************
//
//&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MatchboxP:&#x00A0;A&#x00A0;C++&#x00A0;library&#x00A0;for&#x00A0;approximate&#x00A0;weighted&#x00A0;matching
//&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Mahantesh&#x00A0;Halappanavar&#x00A0;(hala@pnnl.gov)
//&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Pacific&#x00A0;Northwest&#x00A0;National&#x00A0;Laboratory
//
//&#x00A0;***********************************************************************
//
>>>>>>> development
//&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Copyright&#x00A0;(2021)&#x00A0;Battelle&#x00A0;Memorial&#x00A0;Institute //&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Copyright&#x00A0;(2021)&#x00A0;Battelle&#x00A0;Memorial&#x00A0;Institute
//&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;All&#x00A0;rights&#x00A0;reserved. //&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;All&#x00A0;rights&#x00A0;reserved.
// //

@ -29,12 +29,12 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">B </span></span> <a class="cmr-12">B </span></span> <a
id="x29-33000B"></a><span id="x30-34000B"></a><span
class="cmr-12">Contributor Covenant Code of Conduct</span></h3> class="cmr-12">Contributor Covenant Code of Conduct</span></h3>
<div class="paragraphTOCS"> <div class="paragraphTOCS">
</div> </div>
<!--l. 5--><p class="noindent" ><span class="paragraphHead"><a <!--l. 5--><p class="noindent" ><span class="paragraphHead"><a
id="x29-34000B"></a><span id="x30-35000B"></a><span
class="cmbx-12">Our Pledge</span></span> class="cmbx-12">Our Pledge</span></span>
<span <span
class="cmr-12">We as members, contributors, and leaders pledge to make participation in</span> class="cmr-12">We as members, contributors, and leaders pledge to make participation in</span>
@ -100,7 +100,7 @@ class="cmr-12">Other conduct which could reasonably be considered inappro
<span <span
class="cmr-12">professional setting</span></li></ul> class="cmr-12">professional setting</span></li></ul>
<!--l. 38--><p class="noindent" ><span class="paragraphHead"><a <!--l. 38--><p class="noindent" ><span class="paragraphHead"><a
id="x29-35000B"></a><span id="x30-36000B"></a><span
class="cmbx-12">Enforcement Responsibilities</span></span> class="cmbx-12">Enforcement Responsibilities</span></span>
<span <span
class="cmr-12">Community leaders are responsible for clarifying and enforcing our standards of</span> class="cmr-12">Community leaders are responsible for clarifying and enforcing our standards of</span>
@ -138,7 +138,7 @@ class="cmr-12">leaders are obligated to respect the privacy and security of the
<span <span
class="cmr-12">incident.</span> class="cmr-12">incident.</span>
<!--l. 61--><p class="noindent" ><span class="paragraphHead"><a <!--l. 61--><p class="noindent" ><span class="paragraphHead"><a
id="x29-36000B"></a><span id="x30-37000B"></a><span
class="cmbx-12">Enforcement Guidelines</span></span> class="cmbx-12">Enforcement Guidelines</span></span>
<span <span
class="cmr-12">Community leaders will follow these Community Impact Guidelines in</span> class="cmr-12">Community leaders will follow these Community Impact Guidelines in</span>
@ -148,7 +148,7 @@ class="cmr-12">determining the consequences for any action they deem in violatio
class="cmr-12">Conduct:</span> class="cmr-12">Conduct:</span>
<ol class="enumerate1" > <ol class="enumerate1" >
<li <li
class="enumerate" id="x29-36002x1"><span class="enumerate" id="x30-37002x1"><span
class="cmr-12">Correction</span> class="cmr-12">Correction</span>
<!--l. 67--><p class="noindent" ><span <!--l. 67--><p class="noindent" ><span
class="cmti-12">Community Impact: </span><span class="cmti-12">Community Impact: </span><span
@ -167,7 +167,7 @@ class="cmr-12">clarity around the nature of the violation and an explanation of
class="cmr-12">behavior was inappropriate. A public apology may be requested.</span> class="cmr-12">behavior was inappropriate. A public apology may be requested.</span>
</li> </li>
<li <li
class="enumerate" id="x29-36004x2"><span class="enumerate" id="x30-37004x2"><span
class="cmr-12">Warning</span> class="cmr-12">Warning</span>
<!--l. 75--><p class="noindent" ><span <!--l. 75--><p class="noindent" ><span
class="cmti-12">Community Impact: </span><span class="cmti-12">Community Impact: </span><span
@ -187,7 +187,7 @@ class="cmr-12">channels like social media. Violating these terms may lead to a t
class="cmr-12">or permanent ban.</span> class="cmr-12">or permanent ban.</span>
</li> </li>
<li <li
class="enumerate" id="x29-36006x3"><span class="enumerate" id="x30-37006x3"><span
class="cmr-12">Temporary Ban</span> class="cmr-12">Temporary Ban</span>
<!--l. 86--><p class="noindent" ><span <!--l. 86--><p class="noindent" ><span
class="cmti-12">Community Impact: </span><span class="cmti-12">Community Impact: </span><span
@ -207,7 +207,7 @@ class="cmr-12">interaction with those enforcing the Code of Conduct, is allowed
class="cmr-12">period. Violating these terms may lead to a permanent ban.</span> class="cmr-12">period. Violating these terms may lead to a permanent ban.</span>
</li> </li>
<li <li
class="enumerate" id="x29-36008x4"><span class="enumerate" id="x30-37008x4"><span
class="cmr-12">Permanent Ban</span> class="cmr-12">Permanent Ban</span>
<!--l. 96--><p class="noindent" ><span <!--l. 96--><p class="noindent" ><span
class="cmti-12">Community Impact: </span><span class="cmti-12">Community Impact: </span><span
@ -222,7 +222,7 @@ class="cmr-12">A permanent ban from any sort of public interaction within</span>
<span <span
class="cmr-12">the community.</span></li></ol> class="cmr-12">the community.</span></li></ol>
<!--l. 104--><p class="noindent" ><span class="paragraphHead"><a <!--l. 104--><p class="noindent" ><span class="paragraphHead"><a
id="x29-37000B"></a><span id="x30-38000B"></a><span
class="cmbx-12">Attribution</span></span> class="cmbx-12">Attribution</span></span>
<span <span
class="cmr-12">This Code of Conduct is adapted from the Contributor Covenant, version 2.0,</span> class="cmr-12">This Code of Conduct is adapted from the Contributor Covenant, version 2.0,</span>

@ -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</span> class="cmr-12">AMG4PSBLAS; usually this means that they should all be built with the same</span>
<span <span
class="cmr-12">compiler being used for AMG4PSBLAS.</span> class="cmr-12">compiler being used for AMG4PSBLAS.</span>
<!--l. 64--><p class="indent" > <span
class="cmr-12">If you want to use the PSBLAS support for NVIDIA GPUs, you will also</span>
<span
class="cmr-12">need:</span>
<dl class="description"><dt class="description">
<span
class="cmbx-12">PSBLAS-EXT</span> </dt><dd
class="description"><span
class="cmr-12">Parallel Sparse BLAS (PSBLAS) Extensions, available from</span>
<a
href="https://psctoolkit.github.io/products/psblasext/" ><span
class="cmr-12">psctoolkit.github.io/products/psblasext/</span></a><span
class="cmr-12">; version 1.3.0 (or later).</span>
</dd><dt class="description">
<span
class="cmbx-12">SPGPU</span> </dt><dd
class="description"><span
class="cmr-12">Sparse CUDA kernels for NVIDIA GPUs; available from GitHub, see</span>
<span
class="cmr-12">also </span><a
href="https://psctoolkit.github.io/products/psblasext/" ><span
class="cmr-12">psctoolkit.github.io/products/psblasext/</span></a><span
class="cmr-12">.</span></dd></dl>
<!--l. 74--><p class="noindent" ><span
class="cmr-12">See also Sec</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu7.html#x16-150004.2"><span
class="cmr-12">4.2</span><!--tex4ht:ref: sec:gpu-example --></a><span
class="cmr-12">.</span>
<!--l. 64--><div class="crosslinks"><p class="noindent"><span <!--l. 76--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu2.html" ><span href="userhtmlsu2.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -138,6 +167,6 @@ class="cmr-12">] [</span><a
href="userhtmlse3.html#userhtmlsu1.html" ><span href="userhtmlse3.html#userhtmlsu1.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 64--><p class="indent" > <a <!--l. 76--><p class="indent" > <a
id="tailuserhtmlsu1.html"></a> id="tailuserhtmlsu1.html"></a>
</body></html> </body></html>

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method smoothers_build</title> <head><title>Method hierarchy_build</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 704--><div class="crosslinks"><p class="noindent"><span <!--l. 674--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu11.html" ><span href="userhtmlsu11.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -28,57 +28,44 @@ href="userhtmlse5.html#userhtmlsu10.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">5.4 </span></span> <a class="cmr-12">5.3 </span></span> <a
id="x20-190005.4"></a><span id="x20-190005.3"></a><span
class="cmr-12">Method smoothers</span><span class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></h4> class="cmr-12">_build</span></h4>
<div class="center" <div class="center"
> >
<!--l. 707--><p class="noindent" > <!--l. 676--><p class="noindent" >
<!--l. 708--><p class="noindent" ><span class="lstinline"></span><span <!--l. 677--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span class="cmtt-12">p</span><span
class="cmtt-12">%</span><span class="cmtt-12">%</span><span
class="cmtt-12">smoothers_build</span><span class="cmtt-12">hierarchy_build</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">a</span><span class="cmtt-12">a</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">desc_a</span><span class="cmtt-12">desc_a</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">p</span><span
class="cmtt-12">,</span><span
class="cmtt-12">info</span><span class="cmtt-12">info</span><span
class="cmtt-12">[,</span><span class="cmtt-12">)</span><br />
class="cmtt-12">amold</span><span
class="cmtt-12">,</span><span
class="cmtt-12">vmold</span><span
class="cmtt-12">,</span><span
class="cmtt-12">imold</span><span
class="cmtt-12">])</span><br />
</div> </div>
<!--l. 711--><p class="noindent" ><span <!--l. 680--><p class="noindent" ><span
class="cmr-12">This method builds the smoothers and the coarsest-level solvers for the multilevel</span> class="cmr-12">This method builds the hierarchy of matrices and restriction/prolongation operators for</span>
<span <span
class="cmr-12">preconditioner </span><span class="lstinline"></span><span class="cmr-12">the multilevel preconditioner </span><span class="lstinline"></span><span
class="cmtt-12">p</span><span class="cmtt-12">p</span><span
class="cmr-12">, according to the requirements made by the user through the methods</span> class="cmr-12">, according to the requirements made by the user</span>
<span class="lstinline"></span><span <span
class="cmr-12">through the methods </span><span class="lstinline"></span><span
class="cmtt-12">init</span> <span class="cmtt-12">init</span> <span
class="cmr-12">and </span><span class="lstinline"></span><span class="cmr-12">and </span><span class="lstinline"></span><span
class="cmtt-12">set</span><span class="cmtt-12">set</span><span
class="cmr-12">, and based on the aggregation hierarchy produced by a previous call to</span> class="cmr-12">.</span>
<span class="lstinline"></span><span <!--l. 685--><p class="noindent" ><span
class="cmtt-12">hierarchy_build</span> <span
class="cmr-12">(see Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu9.html#x19-180005.3"><span
class="cmr-12">5.3</span><!--tex4ht:ref: sec:hier_bld --></a><span
class="cmr-12">).</span>
<!--l. 718--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-12" class="tabular" <div class="tabular"> <table id="TBL-11" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
<<<<<<< HEAD
><colgroup id="TBL-12-1g"><col ><colgroup id="TBL-12-1g"><col
id="TBL-12-1"><col id="TBL-12-1"><col
id="TBL-12-2"></colgroup><tr id="TBL-12-2"></colgroup><tr
@ -86,6 +73,15 @@ id="TBL-12-2"></colgroup><tr
class="td11"><!--l. 721--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 721--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">a</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-1-2" class="cmtt-12">a</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-1-2"
class="td11"><!--l. 721--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 721--><p class="noindent" ><span class="lstinline"></span><span
=======
><colgroup id="TBL-11-1g"><col
id="TBL-11-1"><col
id="TBL-11-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-11-1-"><td style="white-space:normal; text-align:left;" id="TBL-11-1-1"
class="td11"><!--l. 688--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">a</span> </td><td style="white-space:normal; text-align:left;" id="TBL-11-1-2"
class="td11"><!--l. 688--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span class="cmtt-12">psb_</span><span
@ -99,9 +95,15 @@ class="cmtt-12">in</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-12-2-"><td style="white-space:normal; text-align:left;" id="TBL-12-2-1" style="vertical-align:baseline;" id="TBL-12-2-"><td style="white-space:normal; text-align:left;" id="TBL-12-2-1"
class="td11"><!--l. 722--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-2-2" class="td11"><!--l. 722--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-2-2"
class="td11"><!--l. 722--><p class="noindent" ><span class="td11"><!--l. 722--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-11-2-"><td style="white-space:normal; text-align:left;" id="TBL-11-2-1"
class="td11"><!--l. 689--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-2-2"
class="td11"><!--l. 689--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">The sparse matrix structure containing the local part of the matrix</span> class="cmr-12">The sparse matrix structure containing the local part of the matrix</span>
<span <span
class="cmr-12">to be preconditioned. Note that </span><span class="cmr-12">to be preconditioned. Note that </span><span
@ -120,10 +122,17 @@ class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-12-3-"><td style="white-space:normal; text-align:left;" id="TBL-12-3-1" style="vertical-align:baseline;" id="TBL-12-3-"><td style="white-space:normal; text-align:left;" id="TBL-12-3-1"
class="td11"><!--l. 726--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 726--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-12-3-2" class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-12-3-2"
class="td11"><!--l. 726--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 726--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-11-3-"><td style="white-space:normal; text-align:left;" id="TBL-11-3-1"
class="td11"><!--l. 694--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-11-3-2"
class="td11"><!--l. 694--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">psb_desc_type</span><span class="cmtt-12">psb_desc_type</span><span
@ -135,9 +144,15 @@ class="cmtt-12">in</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-12-4-"><td style="white-space:normal; text-align:left;" id="TBL-12-4-1" style="vertical-align:baseline;" id="TBL-12-4-"><td style="white-space:normal; text-align:left;" id="TBL-12-4-1"
class="td11"><!--l. 727--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-4-2" class="td11"><!--l. 727--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-4-2"
class="td11"><!--l. 727--><p class="noindent" ><span class="td11"><!--l. 727--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-11-4-"><td style="white-space:normal; text-align:left;" id="TBL-11-4-1"
class="td11"><!--l. 695--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-4-2"
class="td11"><!--l. 695--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">The communication descriptor of </span><span class="lstinline"></span><span class="cmr-12">The communication descriptor of </span><span class="lstinline"></span><span
class="cmtt-12">a</span><span class="cmtt-12">a</span><span
class="cmr-12">. See the PSBLAS User&#8217;s Guide</span> class="cmr-12">. See the PSBLAS User&#8217;s Guide</span>
@ -149,10 +164,17 @@ class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-12-5-"><td style="white-space:normal; text-align:left;" id="TBL-12-5-1" style="vertical-align:baseline;" id="TBL-12-5-"><td style="white-space:normal; text-align:left;" id="TBL-12-5-1"
class="td11"><!--l. 729--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 729--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-5-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-5-2"
class="td11"><!--l. 729--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 729--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-11-5-"><td style="white-space:normal; text-align:left;" id="TBL-11-5-1"
class="td11"><!--l. 697--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-11-5-2"
class="td11"><!--l. 697--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
@ -162,15 +184,22 @@ class="cmtt-12">out</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-12-6-"><td style="white-space:normal; text-align:left;" id="TBL-12-6-1" style="vertical-align:baseline;" id="TBL-12-6-"><td style="white-space:normal; text-align:left;" id="TBL-12-6-1"
class="td11"><!--l. 730--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-6-2" class="td11"><!--l. 730--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-6-2"
class="td11"><!--l. 730--><p class="noindent" ><span class="td11"><!--l. 730--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-11-6-"><td style="white-space:normal; text-align:left;" id="TBL-11-6-1"
class="td11"><!--l. 698--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-6-2"
class="td11"><!--l. 698--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x27-310007"><span href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td> class="cmr-12">for details.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-12-7-"><td style="white-space:normal; text-align:left;" id="TBL-12-7-1" style="vertical-align:baseline;" id="TBL-12-7-"><td style="white-space:normal; text-align:left;" id="TBL-12-7-1"
class="td11"><!--l. 731--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 731--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-7-2" class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-7-2"
@ -255,6 +284,9 @@ class="cmr-12">The desired dynamic type for internal integer vector components;<
class="cmr-12">this allows e.g. running on GPUs.</span> </td> class="cmr-12">this allows e.g. running on GPUs.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-12-13-"><td style="white-space:normal; text-align:left;" id="TBL-12-13-1" style="vertical-align:baseline;" id="TBL-12-13-"><td style="white-space:normal; text-align:left;" id="TBL-12-13-1"
=======
style="vertical-align:baseline;" id="TBL-11-7-"><td style="white-space:normal; text-align:left;" id="TBL-11-7-1"
>>>>>>> development
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
@ -262,7 +294,7 @@ class="td11"> </td> </tr></table></div>
<!--l. 746--><div class="crosslinks"><p class="noindent"><span <!--l. 704--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu11.html" ><span href="userhtmlsu11.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -279,6 +311,6 @@ class="cmr-12">] [</span><a
href="userhtmlse5.html#userhtmlsu10.html" ><span href="userhtmlse5.html#userhtmlsu10.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 746--><p class="indent" > <a <!--l. 704--><p class="indent" > <a
id="tailuserhtmlsu10.html"></a> id="tailuserhtmlsu10.html"></a>
</body></html> </body></html>

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method build</title> <head><title>Method smoothers_build</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 746--><div class="crosslinks"><p class="noindent"><span <!--l. 704--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu12.html" ><span href="userhtmlsu12.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -28,23 +28,26 @@ href="userhtmlse5.html#userhtmlsu11.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">5.5 </span></span> <a class="cmr-12">5.4 </span></span> <a
id="x21-200005.5"></a><span id="x21-200005.4"></a><span
class="cmr-12">Method build</span></h4> class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></h4>
<div class="center" <div class="center"
> >
<!--l. 748--><p class="noindent" > <!--l. 707--><p class="noindent" >
<!--l. 749--><p class="noindent" ><span class="lstinline"></span><span <!--l. 708--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span class="cmtt-12">p</span><span
class="cmtt-12">%</span><span class="cmtt-12">%</span><span
class="cmtt-12">build</span><span class="cmtt-12">smoothers_build</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">a</span><span class="cmtt-12">a</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">desc_a</span><span class="cmtt-12">desc_a</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">p</span><span
class="cmtt-12">,</span><span
class="cmtt-12">info</span><span class="cmtt-12">info</span><span
class="cmtt-12">[,</span><span class="cmtt-12">[,</span><span
class="cmtt-12">amold</span><span class="cmtt-12">amold</span><span
@ -54,39 +57,29 @@ class="cmtt-12">,</span><span
class="cmtt-12">imold</span><span class="cmtt-12">imold</span><span
class="cmtt-12">])</span><br /> class="cmtt-12">])</span><br />
</div> </div>
<!--l. 752--><p class="noindent" ><span <!--l. 711--><p class="noindent" ><span
class="cmr-12">This method builds the preconditioner </span><span class="lstinline"></span><span class="cmr-12">This method builds the smoothers and the coarsest-level solvers for the multilevel</span>
class="cmtt-12">p</span> <span
class="cmr-12">according to the requirements made by the</span>
<span <span
class="cmr-12">user through the methods </span><span class="lstinline"></span><span class="cmr-12">preconditioner </span><span class="lstinline"></span><span
class="cmtt-12">p</span><span
class="cmr-12">, according to the requirements made by the user through the methods</span>
<span class="lstinline"></span><span
class="cmtt-12">init</span> <span class="cmtt-12">init</span> <span
class="cmr-12">and </span><span class="lstinline"></span><span class="cmr-12">and </span><span class="lstinline"></span><span
class="cmtt-12">set</span> <span class="cmtt-12">set</span><span
class="cmr-12">(see Sections</span><span class="cmr-12">, and based on the aggregation hierarchy produced by a previous call to</span>
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu9.html#x19-180005.3"><span
class="cmr-12">5.3</span><!--tex4ht:ref: sec:hier_bld --></a> <span
class="cmr-12">and</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu10.html#x20-190005.4"><span
class="cmr-12">5.4</span><!--tex4ht:ref: sec:smooth_bld --></a> <span
class="cmr-12">for multilevel</span>
<span
class="cmr-12">preconditioners). It is mostly provided for backward compatibility; indeed, it is</span>
<span
class="cmr-12">internally implemented by invoking the two previous methods </span><span class="lstinline"></span><span
class="cmtt-12">hierarchy_build</span> <span
class="cmr-12">and</span>
<span class="lstinline"></span><span <span class="lstinline"></span><span
class="cmtt-12">smoothers_build</span><span class="cmtt-12">hierarchy_build</span> <span
class="cmr-12">, whose nomenclature would however be somewhat unnatural when</span> class="cmr-12">(see Section</span><span
<span class="cmr-12">&#x00A0;</span><a
class="cmr-12">dealing with simple one-level preconditioners.</span> href="userhtmlsu10.html#x20-190005.3"><span
<!--l. 762--><p class="noindent" ><span class="cmr-12">5.3</span><!--tex4ht:ref: sec:hier_bld --></a><span
class="cmr-12">).</span>
<!--l. 718--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-13" class="tabular" <div class="tabular"> <table id="TBL-12" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
<<<<<<< HEAD
><colgroup id="TBL-13-1g"><col ><colgroup id="TBL-13-1g"><col
id="TBL-13-1"><col id="TBL-13-1"><col
id="TBL-13-2"></colgroup><tr id="TBL-13-2"></colgroup><tr
@ -94,6 +87,15 @@ id="TBL-13-2"></colgroup><tr
class="td11"><!--l. 765--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 765--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">a</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-1-2" class="cmtt-12">a</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-1-2"
class="td11"><!--l. 765--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 765--><p class="noindent" ><span class="lstinline"></span><span
=======
><colgroup id="TBL-12-1g"><col
id="TBL-12-1"><col
id="TBL-12-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-12-1-"><td style="white-space:normal; text-align:left;" id="TBL-12-1-1"
class="td11"><!--l. 721--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">a</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-1-2"
class="td11"><!--l. 721--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span class="cmtt-12">psb_</span><span
@ -107,9 +109,15 @@ class="cmtt-12">in</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-2-"><td style="white-space:normal; text-align:left;" id="TBL-13-2-1" style="vertical-align:baseline;" id="TBL-13-2-"><td style="white-space:normal; text-align:left;" id="TBL-13-2-1"
class="td11"><!--l. 766--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-2-2" class="td11"><!--l. 766--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-2-2"
class="td11"><!--l. 766--><p class="noindent" ><span class="td11"><!--l. 766--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-12-2-"><td style="white-space:normal; text-align:left;" id="TBL-12-2-1"
class="td11"><!--l. 722--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-2-2"
class="td11"><!--l. 722--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">The sparse matrix structure containing the local part of the matrix</span> class="cmr-12">The sparse matrix structure containing the local part of the matrix</span>
<span <span
class="cmr-12">to be preconditioned. Note that </span><span class="cmr-12">to be preconditioned. Note that </span><span
@ -128,10 +136,17 @@ class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-3-"><td style="white-space:normal; text-align:left;" id="TBL-13-3-1" style="vertical-align:baseline;" id="TBL-13-3-"><td style="white-space:normal; text-align:left;" id="TBL-13-3-1"
class="td11"><!--l. 770--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 770--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-13-3-2" class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-13-3-2"
class="td11"><!--l. 770--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 770--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-12-3-"><td style="white-space:normal; text-align:left;" id="TBL-12-3-1"
class="td11"><!--l. 726--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-12-3-2"
class="td11"><!--l. 726--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">psb_desc_type</span><span class="cmtt-12">psb_desc_type</span><span
@ -143,9 +158,15 @@ class="cmtt-12">in</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-4-"><td style="white-space:normal; text-align:left;" id="TBL-13-4-1" style="vertical-align:baseline;" id="TBL-13-4-"><td style="white-space:normal; text-align:left;" id="TBL-13-4-1"
class="td11"><!--l. 771--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-4-2" class="td11"><!--l. 771--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-4-2"
class="td11"><!--l. 771--><p class="noindent" ><span class="td11"><!--l. 771--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-12-4-"><td style="white-space:normal; text-align:left;" id="TBL-12-4-1"
class="td11"><!--l. 727--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-4-2"
class="td11"><!--l. 727--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">The communication descriptor of </span><span class="lstinline"></span><span class="cmr-12">The communication descriptor of </span><span class="lstinline"></span><span
class="cmtt-12">a</span><span class="cmtt-12">a</span><span
class="cmr-12">. See the PSBLAS User&#8217;s Guide</span> class="cmr-12">. See the PSBLAS User&#8217;s Guide</span>
@ -157,10 +178,17 @@ class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-5-"><td style="white-space:normal; text-align:left;" id="TBL-13-5-1" style="vertical-align:baseline;" id="TBL-13-5-"><td style="white-space:normal; text-align:left;" id="TBL-13-5-1"
class="td11"><!--l. 773--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 773--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-5-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-5-2"
class="td11"><!--l. 773--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 773--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-12-5-"><td style="white-space:normal; text-align:left;" id="TBL-12-5-1"
class="td11"><!--l. 729--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-5-2"
class="td11"><!--l. 729--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
@ -170,19 +198,32 @@ class="cmtt-12">out</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-6-"><td style="white-space:normal; text-align:left;" id="TBL-13-6-1" style="vertical-align:baseline;" id="TBL-13-6-"><td style="white-space:normal; text-align:left;" id="TBL-13-6-1"
class="td11"><!--l. 774--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-6-2" class="td11"><!--l. 774--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-6-2"
class="td11"><!--l. 774--><p class="noindent" ><span class="td11"><!--l. 774--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-12-6-"><td style="white-space:normal; text-align:left;" id="TBL-12-6-1"
class="td11"><!--l. 730--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-6-2"
class="td11"><!--l. 730--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x27-310007"><span href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td> class="cmr-12">for details.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-7-"><td style="white-space:normal; text-align:left;" id="TBL-13-7-1" style="vertical-align:baseline;" id="TBL-13-7-"><td style="white-space:normal; text-align:left;" id="TBL-13-7-1"
class="td11"><!--l. 775--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 775--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-7-2" class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-7-2"
class="td11"><!--l. 775--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 775--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-12-7-"><td style="white-space:normal; text-align:left;" id="TBL-12-7-1"
class="td11"><!--l. 731--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-7-2"
class="td11"><!--l. 731--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span class="cmtt-12">psb_</span><span
@ -198,9 +239,15 @@ class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-8-"><td style="white-space:normal; text-align:left;" id="TBL-13-8-1" style="vertical-align:baseline;" id="TBL-13-8-"><td style="white-space:normal; text-align:left;" id="TBL-13-8-1"
class="td11"><!--l. 776--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-8-2" class="td11"><!--l. 776--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-8-2"
class="td11"><!--l. 776--><p class="noindent" ><span class="td11"><!--l. 776--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-12-8-"><td style="white-space:normal; text-align:left;" id="TBL-12-8-1"
class="td11"><!--l. 732--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-8-2"
class="td11"><!--l. 732--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">The desired dynamic type for internal matrix components; this</span> class="cmr-12">The desired dynamic type for internal matrix components; this</span>
<span <span
class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span> class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span>
@ -212,10 +259,17 @@ class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-9-"><td style="white-space:normal; text-align:left;" id="TBL-13-9-1" style="vertical-align:baseline;" id="TBL-13-9-"><td style="white-space:normal; text-align:left;" id="TBL-13-9-1"
class="td11"><!--l. 780--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 780--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">vmold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-9-2" class="cmtt-12">vmold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-9-2"
class="td11"><!--l. 780--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 780--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-12-9-"><td style="white-space:normal; text-align:left;" id="TBL-12-9-1"
class="td11"><!--l. 736--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">vmold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-9-2"
class="td11"><!--l. 736--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span class="cmtt-12">psb_</span><span
@ -231,17 +285,30 @@ class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-10-"><td style="white-space:normal; text-align:left;" id="TBL-13-10-1" style="vertical-align:baseline;" id="TBL-13-10-"><td style="white-space:normal; text-align:left;" id="TBL-13-10-1"
class="td11"><!--l. 781--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-10-2" class="td11"><!--l. 781--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-10-2"
class="td11"><!--l. 781--><p class="noindent" ><span class="td11"><!--l. 781--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-12-10-"><td style="white-space:normal; text-align:left;" id="TBL-12-10-1"
class="td11"><!--l. 737--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-10-2"
class="td11"><!--l. 737--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">The desired dynamic type for internal vector components; this</span> class="cmr-12">The desired dynamic type for internal vector components; this</span>
<span <span
class="cmr-12">allows e.g. running on GPUs.</span> </td> class="cmr-12">allows e.g. running on GPUs.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-11-"><td style="white-space:normal; text-align:left;" id="TBL-13-11-1" style="vertical-align:baseline;" id="TBL-13-11-"><td style="white-space:normal; text-align:left;" id="TBL-13-11-1"
class="td11"><!--l. 783--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 783--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">imold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-11-2" class="cmtt-12">imold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-11-2"
class="td11"><!--l. 783--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 783--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-12-11-"><td style="white-space:normal; text-align:left;" id="TBL-12-11-1"
class="td11"><!--l. 739--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">imold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-12-11-2"
class="td11"><!--l. 739--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">psb_i_base_vect_type</span><span class="cmtt-12">psb_i_base_vect_type</span><span
@ -255,24 +322,32 @@ class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-12-"><td style="white-space:normal; text-align:left;" id="TBL-13-12-1" style="vertical-align:baseline;" id="TBL-13-12-"><td style="white-space:normal; text-align:left;" id="TBL-13-12-1"
class="td11"><!--l. 784--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-12-2" class="td11"><!--l. 784--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-12-2"
class="td11"><!--l. 784--><p class="noindent" ><span class="td11"><!--l. 784--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-12-12-"><td style="white-space:normal; text-align:left;" id="TBL-12-12-1"
class="td11"><!--l. 740--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-12-2"
class="td11"><!--l. 740--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">The desired dynamic type for internal integer vector components;</span> class="cmr-12">The desired dynamic type for internal integer vector components;</span>
<span <span
class="cmr-12">this allows e.g. running on GPUs.</span> </td> class="cmr-12">this allows e.g. running on GPUs.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-13-13-"><td style="white-space:normal; text-align:left;" id="TBL-13-13-1" style="vertical-align:baseline;" id="TBL-13-13-"><td style="white-space:normal; text-align:left;" id="TBL-13-13-1"
=======
style="vertical-align:baseline;" id="TBL-12-13-"><td style="white-space:normal; text-align:left;" id="TBL-12-13-1"
>>>>>>> development
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 789--><p class="noindent" ><span
class="cmr-12">The method can be used to build multilevel preconditioners too.</span>
<!--l. 794--><div class="crosslinks"><p class="noindent"><span <!--l. 746--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu12.html" ><span href="userhtmlsu12.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -289,6 +364,6 @@ class="cmr-12">] [</span><a
href="userhtmlse5.html#userhtmlsu11.html" ><span href="userhtmlse5.html#userhtmlsu11.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 794--><p class="indent" > <a <!--l. 746--><p class="indent" > <a
id="tailuserhtmlsu11.html"></a> id="tailuserhtmlsu11.html"></a>
</body></html> </body></html>

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method apply</title> <head><title>Method build</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 794--><div class="crosslinks"><p class="noindent"><span <!--l. 746--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu13.html" ><span href="userhtmlsu13.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -28,71 +28,66 @@ href="userhtmlse5.html#userhtmlsu12.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">5.6 </span></span> <a class="cmr-12">5.5 </span></span> <a
id="x22-210005.6"></a><span id="x22-210005.5"></a><span
class="cmr-12">Method apply</span></h4> class="cmr-12">Method build</span></h4>
<div class="center" <div class="center"
> >
<!--l. 796--><p class="noindent" > <!--l. 748--><p class="noindent" >
<!--l. 797--><p class="noindent" ><span class="lstinline"></span><span <!--l. 749--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span class="cmtt-12">p</span><span
class="cmtt-12">%</span><span class="cmtt-12">%</span><span
class="cmtt-12">apply</span><span class="cmtt-12">build</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">x</span><span class="cmtt-12">a</span><span
class="cmtt-12">,</span><span
class="cmtt-12">y</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">desc_a</span><span class="cmtt-12">desc_a</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">info</span><span class="cmtt-12">info</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">[,</span><span class="cmtt-12">[,</span><span
class="cmtt-12">trans</span><span class="cmtt-12">amold</span><span
class="cmtt-12">,</span><span
class="cmtt-12">vmold</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">work</span><span class="cmtt-12">imold</span><span
class="cmtt-12">])</span><br /> class="cmtt-12">])</span><br />
</div> </div>
<!--l. 800--><p class="noindent" ><span <!--l. 752--><p class="noindent" ><span
class="cmr-12">This method computes </span><span class="cmr-12">This method builds the preconditioner </span><span class="lstinline"></span><span
class="cmmi-12">y </span><span class="cmtt-12">p</span> <span
class="cmr-12">= </span><span class="cmr-12">according to the requirements made by the</span>
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) </span><span
class="cmmi-12">x</span><span
class="cmr-12">, where </span><span
class="cmmi-12">B </span><span
class="cmr-12">is a previously built preconditioner,</span>
<span <span
class="cmr-12">stored into </span><span class="lstinline"></span><span class="cmr-12">user through the methods </span><span class="lstinline"></span><span
class="cmtt-12">p</span><span class="cmtt-12">init</span> <span
class="cmr-12">, and </span><span class="cmr-12">and </span><span class="lstinline"></span><span
class="cmmi-12">op </span><span class="cmtt-12">set</span> <span
class="cmr-12">denotes the preconditioner itself or its transpose, according to the</span> class="cmr-12">(see Sections</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu10.html#x20-190005.3"><span
class="cmr-12">5.3</span><!--tex4ht:ref: sec:hier_bld --></a> <span
class="cmr-12">and</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu11.html#x21-200005.4"><span
class="cmr-12">5.4</span><!--tex4ht:ref: sec:smooth_bld --></a> <span
class="cmr-12">for multilevel</span>
<span <span
class="cmr-12">value of </span><span class="lstinline"></span><span class="cmr-12">preconditioners). It is mostly provided for backward compatibility; indeed, it is</span>
class="cmtt-12">trans</span><span
class="cmr-12">. Note that, when AMG4PSBLAS is used with a Krylov solver from</span>
<span <span
class="cmr-12">PSBLAS, </span><span class="lstinline"></span><span class="cmr-12">internally implemented by invoking the two previous methods </span><span class="lstinline"></span><span
class="cmtt-12">p</span><span class="cmtt-12">hierarchy_build</span> <span
class="cmtt-12">%</span><span class="cmr-12">and</span>
class="cmtt-12">apply</span> <span <span class="lstinline"></span><span
class="cmr-12">is called within the PSBLAS method </span><span class="lstinline"></span><span class="cmtt-12">smoothers_build</span><span
class="cmtt-12">psb_krylov</span> <span class="cmr-12">, whose nomenclature would however be somewhat unnatural when</span>
class="cmr-12">and hence it is</span>
<span <span
class="cmr-12">completely transparent to the user.</span> class="cmr-12">dealing with simple one-level preconditioners.</span>
<!--l. 809--><p class="noindent" ><span <!--l. 762--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-14" class="tabular" <div class="tabular"> <table id="TBL-13" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
<<<<<<< HEAD
><colgroup id="TBL-14-1g"><col ><colgroup id="TBL-14-1g"><col
id="TBL-14-1"><col id="TBL-14-1"><col
id="TBL-14-2"></colgroup><tr id="TBL-14-2"></colgroup><tr
@ -130,11 +125,29 @@ class="td11"><!--l. 816--><p class="noindent" ><span class="lstinline"></span><s
class="cmtt-12">y</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-3-2" class="cmtt-12">y</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-3-2"
class="td11"><!--l. 816--><p class="noindent" ><span class="td11"><!--l. 816--><p class="noindent" ><span
class="cmti-12">type</span><span class="lstinline"></span><span class="cmti-12">type</span><span class="lstinline"></span><span
=======
><colgroup id="TBL-13-1g"><col
id="TBL-13-1"><col
id="TBL-13-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-13-1-"><td style="white-space:normal; text-align:left;" id="TBL-13-1-1"
class="td11"><!--l. 765--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">a</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-1-2"
class="td11"><!--l. 765--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">kind_parameter</span><span class="cmtt-12">psb_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">spmat_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
>>>>>>> development
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">, dimension(:), intent(out)&#8212;.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-14-4-"><td style="white-space:normal; text-align:left;" id="TBL-14-4-1" style="vertical-align:baseline;" id="TBL-14-4-"><td style="white-space:normal; text-align:left;" id="TBL-14-4-1"
class="td11"><!--l. 817--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-4-2" class="td11"><!--l. 817--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-4-2"
class="td11"><!--l. 817--><p class="noindent" ><span class="td11"><!--l. 817--><p class="noindent" ><span
@ -145,19 +158,40 @@ class="cmti-12">type </span><span
class="cmr-12">and </span><span class="cmr-12">and </span><span
class="cmti-12">kind</span><span class="cmti-12">kind</span><span
class="cmti-12">_parameter</span> class="cmti-12">_parameter</span>
=======
style="vertical-align:baseline;" id="TBL-13-2-"><td style="white-space:normal; text-align:left;" id="TBL-13-2-1"
class="td11"><!--l. 766--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-2-2"
class="td11"><!--l. 766--><p class="noindent" ><span
class="cmr-12">The sparse matrix structure containing the local part of the matrix</span>
>>>>>>> development
<span <span
class="cmr-12">must be chosen according to the </span><span class="lstinline"></span><span class="cmr-12">to be preconditioned. Note that </span><span
class="cmti-12">x </span><span
class="cmr-12">must be chosen according to the</span>
<span class="lstinline"></span><span
class="cmtt-12">real</span><span class="cmtt-12">real</span><span
class="cmr-12">/</span><span class="lstinline"></span><span class="cmr-12">/</span><span class="lstinline"></span><span
class="cmtt-12">complex</span><span class="cmtt-12">complex</span><span
class="cmr-12">, single/double</span> class="cmr-12">, single/double precision version of AMG4PSBLAS</span>
<span <span
class="cmr-12">precision version of AMG4PSBLAS under use.</span> </td> class="cmr-12">under use. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-14-5-"><td style="white-space:normal; text-align:left;" id="TBL-14-5-1" style="vertical-align:baseline;" id="TBL-14-5-"><td style="white-space:normal; text-align:left;" id="TBL-14-5-1"
class="td11"><!--l. 820--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 820--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-14-5-2" class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-14-5-2"
class="td11"><!--l. 820--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 820--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-13-3-"><td style="white-space:normal; text-align:left;" id="TBL-13-3-1"
class="td11"><!--l. 770--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-13-3-2"
class="td11"><!--l. 770--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">psb_desc_type</span><span class="cmtt-12">psb_desc_type</span><span
@ -169,17 +203,38 @@ class="cmtt-12">in</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-14-6-"><td style="white-space:normal; text-align:left;" id="TBL-14-6-1" style="vertical-align:baseline;" id="TBL-14-6-"><td style="white-space:normal; text-align:left;" id="TBL-14-6-1"
class="td11"><!--l. 821--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-6-2" class="td11"><!--l. 821--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-6-2"
class="td11"><!--l. 821--><p class="noindent" ><span class="td11"><!--l. 821--><p class="noindent" ><span
class="cmr-12">The communication descriptor associated to the matrix to be</span> class="cmr-12">The communication descriptor associated to the matrix to be</span>
=======
style="vertical-align:baseline;" id="TBL-13-4-"><td style="white-space:normal; text-align:left;" id="TBL-13-4-1"
class="td11"><!--l. 771--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-4-2"
class="td11"><!--l. 771--><p class="noindent" ><span
class="cmr-12">The communication descriptor of </span><span class="lstinline"></span><span
class="cmtt-12">a</span><span
class="cmr-12">. See the PSBLAS User&#8217;s Guide</span>
>>>>>>> development
<span <span
class="cmr-12">preconditioned.</span> </td> class="cmr-12">for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-14-7-"><td style="white-space:normal; text-align:left;" id="TBL-14-7-1" style="vertical-align:baseline;" id="TBL-14-7-"><td style="white-space:normal; text-align:left;" id="TBL-14-7-1"
class="td11"><!--l. 823--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 823--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-7-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-7-2"
class="td11"><!--l. 823--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 823--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-13-5-"><td style="white-space:normal; text-align:left;" id="TBL-13-5-1"
class="td11"><!--l. 773--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-5-2"
class="td11"><!--l. 773--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
@ -189,32 +244,49 @@ class="cmtt-12">out</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-14-8-"><td style="white-space:normal; text-align:left;" id="TBL-14-8-1" style="vertical-align:baseline;" id="TBL-14-8-"><td style="white-space:normal; text-align:left;" id="TBL-14-8-1"
class="td11"><!--l. 824--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-8-2" class="td11"><!--l. 824--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-8-2"
class="td11"><!--l. 824--><p class="noindent" ><span class="td11"><!--l. 824--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-13-6-"><td style="white-space:normal; text-align:left;" id="TBL-13-6-1"
class="td11"><!--l. 774--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-6-2"
class="td11"><!--l. 774--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x27-310007"><span href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td> class="cmr-12">for details.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-14-9-"><td style="white-space:normal; text-align:left;" id="TBL-14-9-1" style="vertical-align:baseline;" id="TBL-14-9-"><td style="white-space:normal; text-align:left;" id="TBL-14-9-1"
class="td11"><!--l. 825--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 825--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">trans</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-9-2" class="cmtt-12">trans</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-9-2"
class="td11"><!--l. 825--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 825--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">character</span><span class="cmtt-12">character</span><span
=======
style="vertical-align:baseline;" id="TBL-13-7-"><td style="white-space:normal; text-align:left;" id="TBL-13-7-1"
class="td11"><!--l. 775--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-7-2"
class="td11"><!--l. 775--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span
>>>>>>> development
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">len</span><span class="cmtt-12">psb_</span><span
class="cmtt-12">=1),</span><span class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">_base_sparse_mat</span><span
class="cmtt-12">optional</span><span class="cmtt-12">),</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">in</span><span class="cmtt-12">in</span><span
class="cmtt-12">).</span> </td> class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-14-10-"><td style="white-space:normal; text-align:left;" id="TBL-14-10-1" style="vertical-align:baseline;" id="TBL-14-10-"><td style="white-space:normal; text-align:left;" id="TBL-14-10-1"
class="td11"><!--l. 826--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-10-2" class="td11"><!--l. 826--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-10-2"
class="td11"><!--l. 826--><p class="noindent" ><span class="td11"><!--l. 826--><p class="noindent" ><span
@ -248,48 +320,23 @@ class="cmtt-12">,</span><span
class="cmtt-12">&#8217;</span><span class="cmtt-12">&#8217;</span><span
class="cmtt-12">t</span><span class="cmtt-12">t</span><span
class="cmtt-12">&#8217;</span> class="cmtt-12">&#8217;</span>
=======
style="vertical-align:baseline;" id="TBL-13-8-"><td style="white-space:normal; text-align:left;" id="TBL-13-8-1"
class="td11"><!--l. 776--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-8-2"
class="td11"><!--l. 776--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal matrix components; this</span>
>>>>>>> development
<span <span
class="cmr-12">then </span><span class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span>
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmmi-8">T</span> </sup> <span
class="cmr-12">(transpose of </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">); if </span><span class="lstinline"></span><span
class="cmtt-12">trans</span> <span
class="cmr-12">= </span><span class="lstinline"></span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">C</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">c</span><span
class="cmtt-12">&#8217;</span> <span
class="cmr-12">then</span>
<span <span
class="cmmi-12">op</span><span class="cmr-12">processes. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">(</span><span class="cmr-12">[</span><a
class="cmmi-12">B</span><sup><span href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmsy-8">-</span><span class="cmr-12">20</span></a><span
class="cmr-8">1</span></sup><span class="cmr-12">]</span></span><span
class="cmr-12">) = </span><span class="cmr-12">.</span> </td>
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmmi-8">C</span></sup> <span
class="cmr-12">(conjugate transpose of </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">).</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-14-11-"><td style="white-space:normal; text-align:left;" id="TBL-14-11-1" style="vertical-align:baseline;" id="TBL-14-11-"><td style="white-space:normal; text-align:left;" id="TBL-14-11-1"
class="td11"><!--l. 830--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 830--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">work</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-11-2" class="cmtt-12">work</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-11-2"
@ -307,39 +354,73 @@ class="cmr-12">Workspace. Its size should be at least </span><span class=
class="cmtt-12">4</span><span class="cmtt-12">4</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">*</span><span class="cmtt-12">*</span><span
=======
style="vertical-align:baseline;" id="TBL-13-9-"><td style="white-space:normal; text-align:left;" id="TBL-13-9-1"
class="td11"><!--l. 780--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">vmold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-9-2"
class="td11"><!--l. 780--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">_base_vect_type</span><span
class="cmtt-12">),</span><span
>>>>>>> development
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">psb_cd_get_local_</span> class="cmtt-12">intent</span><span
<span class="lstinline"></span><span
class="cmtt-12">cols</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">desc_a</span><span class="cmtt-12">in</span><span
class="cmtt-12">)</span> <span class="cmtt-12">),</span><span
class="cmr-12">(see the PSBLAS User&#8217;s Guide). Note that </span><span class="cmtt-12">&#x00A0;</span><span
class="cmti-12">type </span><span class="cmtt-12">optional</span><span
class="cmr-12">and</span> class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-10-"><td style="white-space:normal; text-align:left;" id="TBL-13-10-1"
class="td11"><!--l. 781--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-10-2"
class="td11"><!--l. 781--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal vector components; this</span>
<span <span
class="cmti-12">kind</span><span class="cmr-12">allows e.g. running on GPUs.</span> </td>
class="cmti-12">_parameter </span><span </tr><tr
class="cmr-12">must be chosen according to the </span><span class="lstinline"></span><span style="vertical-align:baseline;" id="TBL-13-11-"><td style="white-space:normal; text-align:left;" id="TBL-13-11-1"
class="cmtt-12">real</span><span class="td11"><!--l. 783--><p class="noindent" ><span class="lstinline"></span><span
class="cmr-12">/</span><span class="lstinline"></span><span class="cmtt-12">imold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-11-2"
class="cmtt-12">complex</span><span class="td11"><!--l. 783--><p class="noindent" ><span class="lstinline"></span><span
class="cmr-12">,</span> class="cmtt-12">class</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_i_base_vect_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-12-"><td style="white-space:normal; text-align:left;" id="TBL-13-12-1"
class="td11"><!--l. 784--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-12-2"
class="td11"><!--l. 784--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal integer vector components;</span>
<span <span
class="cmr-12">single/double precision version of AMG4PSBLAS under use.</span> </td> class="cmr-12">this allows e.g. running on GPUs.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-14-13-"><td style="white-space:normal; text-align:left;" id="TBL-14-13-1" style="vertical-align:baseline;" id="TBL-14-13-"><td style="white-space:normal; text-align:left;" id="TBL-14-13-1"
=======
style="vertical-align:baseline;" id="TBL-13-13-"><td style="white-space:normal; text-align:left;" id="TBL-13-13-1"
>>>>>>> development
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 789--><p class="noindent" ><span
class="cmr-12">The method can be used to build multilevel preconditioners too.</span>
<!--l. 794--><div class="crosslinks"><p class="noindent"><span
<!--l. 840--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu13.html" ><span href="userhtmlsu13.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -356,6 +437,6 @@ class="cmr-12">] [</span><a
href="userhtmlse5.html#userhtmlsu12.html" ><span href="userhtmlse5.html#userhtmlsu12.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 840--><p class="indent" > <a <!--l. 794--><p class="indent" > <a
id="tailuserhtmlsu12.html"></a> id="tailuserhtmlsu12.html"></a>
</body></html> </body></html>

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method free</title> <head><title>Method apply</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 840--><div class="crosslinks"><p class="noindent"><span <!--l. 794--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu14.html" ><span href="userhtmlsu14.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -28,32 +28,72 @@ href="userhtmlse5.html#userhtmlsu13.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">5.7 </span></span> <a class="cmr-12">5.6 </span></span> <a
id="x23-220005.7"></a><span id="x23-220005.6"></a><span
class="cmr-12">Method free</span></h4> class="cmr-12">Method apply</span></h4>
<div class="center" <div class="center"
> >
<!--l. 842--><p class="noindent" > <!--l. 796--><p class="noindent" >
<!--l. 843--><p class="noindent" ><span class="lstinline"></span><span <!--l. 797--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span class="cmtt-12">p</span><span
class="cmtt-12">%</span><span class="cmtt-12">%</span><span
class="cmtt-12">free</span><span class="cmtt-12">apply</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">p</span><span class="cmtt-12">x</span><span
class="cmtt-12">,</span><span
class="cmtt-12">y</span><span
class="cmtt-12">,</span><span
class="cmtt-12">desc_a</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">info</span><span class="cmtt-12">info</span><span
class="cmtt-12">)</span><br /> class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">[,</span><span
class="cmtt-12">trans</span><span
class="cmtt-12">,</span><span
class="cmtt-12">work</span><span
class="cmtt-12">])</span><br />
</div> </div>
<!--l. 846--><p class="noindent" ><span <!--l. 800--><p class="noindent" ><span
class="cmr-12">This method deallocates the preconditioner data structure </span><span class="lstinline"></span><span class="cmr-12">This method computes </span><span
class="cmmi-12">y </span><span
class="cmr-12">= </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) </span><span
class="cmmi-12">x</span><span
class="cmr-12">, where </span><span
class="cmmi-12">B </span><span
class="cmr-12">is a previously built preconditioner,</span>
<span
class="cmr-12">stored into </span><span class="lstinline"></span><span
class="cmtt-12">p</span><span class="cmtt-12">p</span><span
class="cmr-12">.</span> class="cmr-12">, and </span><span
<!--l. 849--><p class="noindent" ><span class="cmmi-12">op </span><span
class="cmr-12">denotes the preconditioner itself or its transpose, according to the</span>
<span
class="cmr-12">value of </span><span class="lstinline"></span><span
class="cmtt-12">trans</span><span
class="cmr-12">. Note that, when AMG4PSBLAS is used with a Krylov solver from</span>
<span
class="cmr-12">PSBLAS, </span><span class="lstinline"></span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">apply</span> <span
class="cmr-12">is called within the PSBLAS method </span><span class="lstinline"></span><span
class="cmtt-12">psb_krylov</span> <span
class="cmr-12">and hence it is</span>
<span
class="cmr-12">completely transparent to the user.</span>
<!--l. 809--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-15" class="tabular" <div class="tabular"> <table id="TBL-14" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
<<<<<<< HEAD
><colgroup id="TBL-15-1g"><col ><colgroup id="TBL-15-1g"><col
id="TBL-15-1"><col id="TBL-15-1"><col
id="TBL-15-2"></colgroup><tr id="TBL-15-2"></colgroup><tr
@ -61,6 +101,95 @@ id="TBL-15-2"></colgroup><tr
class="td11"><!--l. 852--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 852--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-15-1-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-15-1-2"
class="td11"><!--l. 852--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 852--><p class="noindent" ><span class="lstinline"></span><span
=======
><colgroup id="TBL-14-1g"><col
id="TBL-14-1"><col
id="TBL-14-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-14-1-"><td style="white-space:normal; text-align:left;" id="TBL-14-1-1"
class="td11"><!--l. 812--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">x</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-1-2"
class="td11"><!--l. 812--><p class="noindent" ><span
class="cmti-12">type</span><span class="lstinline"></span><span
class="cmtt-12">(</span><span
class="cmtt-12">kind_parameter</span><span
class="cmtt-12">)</span><span
class="cmr-12">, dimension(:), intent(in)&#8212;.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-2-"><td style="white-space:normal; text-align:left;" id="TBL-14-2-1"
class="td11"><!--l. 813--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-2-2"
class="td11"><!--l. 813--><p class="noindent" ><span
class="cmr-12">The local part of the vector </span><span
class="cmmi-12">x</span><span
class="cmr-12">. Note that </span><span
class="cmti-12">type </span><span
class="cmr-12">and </span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span>
<span
class="cmr-12">must be chosen according to the </span><span class="lstinline"></span><span
class="cmtt-12">real</span><span
class="cmr-12">/</span><span class="lstinline"></span><span
class="cmtt-12">complex</span><span
class="cmr-12">, single/double</span>
<span
class="cmr-12">precision version of AMG4PSBLAS under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-3-"><td style="white-space:normal; text-align:left;" id="TBL-14-3-1"
class="td11"><!--l. 816--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">y</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-3-2"
class="td11"><!--l. 816--><p class="noindent" ><span
class="cmti-12">type</span><span class="lstinline"></span><span
class="cmtt-12">(</span><span
class="cmtt-12">kind_parameter</span><span
class="cmtt-12">)</span><span
class="cmr-12">, dimension(:), intent(out)&#8212;.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-4-"><td style="white-space:normal; text-align:left;" id="TBL-14-4-1"
class="td11"><!--l. 817--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-4-2"
class="td11"><!--l. 817--><p class="noindent" ><span
class="cmr-12">The local part of the vector </span><span
class="cmmi-12">y</span><span
class="cmr-12">. Note that </span><span
class="cmti-12">type </span><span
class="cmr-12">and </span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span>
<span
class="cmr-12">must be chosen according to the </span><span class="lstinline"></span><span
class="cmtt-12">real</span><span
class="cmr-12">/</span><span class="lstinline"></span><span
class="cmtt-12">complex</span><span
class="cmr-12">, single/double</span>
<span
class="cmr-12">precision version of AMG4PSBLAS under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-5-"><td style="white-space:normal; text-align:left;" id="TBL-14-5-1"
class="td11"><!--l. 820--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-14-5-2"
class="td11"><!--l. 820--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_desc_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-6-"><td style="white-space:normal; text-align:left;" id="TBL-14-6-1"
class="td11"><!--l. 821--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-6-2"
class="td11"><!--l. 821--><p class="noindent" ><span
class="cmr-12">The communication descriptor associated to the matrix to be</span>
<span
class="cmr-12">preconditioned.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-7-"><td style="white-space:normal; text-align:left;" id="TBL-14-7-1"
class="td11"><!--l. 823--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-7-2"
class="td11"><!--l. 823--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
@ -68,20 +197,158 @@ class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">out</span><span class="cmtt-12">out</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-15-2-"><td style="white-space:normal; text-align:left;" id="TBL-15-2-1" style="vertical-align:baseline;" id="TBL-15-2-"><td style="white-space:normal; text-align:left;" id="TBL-15-2-1"
class="td11"><!--l. 853--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-15-2-2" class="td11"><!--l. 853--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-15-2-2"
class="td11"><!--l. 853--><p class="noindent" ><span class="td11"><!--l. 853--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-14-8-"><td style="white-space:normal; text-align:left;" id="TBL-14-8-1"
class="td11"><!--l. 824--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-8-2"
class="td11"><!--l. 824--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x27-310007"><span href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for</span> class="cmr-12">for details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-9-"><td style="white-space:normal; text-align:left;" id="TBL-14-9-1"
class="td11"><!--l. 825--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">trans</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-9-2"
class="td11"><!--l. 825--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">character</span><span
class="cmtt-12">(</span><span
class="cmtt-12">len</span><span
class="cmtt-12">=1),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">).</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-10-"><td style="white-space:normal; text-align:left;" id="TBL-14-10-1"
class="td11"><!--l. 826--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-10-2"
class="td11"><!--l. 826--><p class="noindent" ><span
class="cmr-12">If </span><span class="lstinline"></span><span
class="cmtt-12">trans</span> <span
class="cmr-12">= </span><span class="lstinline"></span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">N</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">n</span><span
class="cmtt-12">&#8217;</span> <span
class="cmr-12">then </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">; if </span><span class="lstinline"></span><span
class="cmtt-12">trans</span> <span
class="cmr-12">= </span><span class="lstinline"></span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">T</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">t</span><span
class="cmtt-12">&#8217;</span>
<span
class="cmr-12">then </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmmi-8">T</span> </sup> <span
class="cmr-12">(transpose of </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">); if </span><span class="lstinline"></span><span
class="cmtt-12">trans</span> <span
class="cmr-12">= </span><span class="lstinline"></span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">C</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">c</span><span
class="cmtt-12">&#8217;</span> <span
class="cmr-12">then</span>
<span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmmi-8">C</span></sup> <span
class="cmr-12">(conjugate transpose of </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">).</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-11-"><td style="white-space:normal; text-align:left;" id="TBL-14-11-1"
class="td11"><!--l. 830--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">work</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-11-2"
class="td11"><!--l. 830--><p class="noindent" ><span
class="cmti-12">type</span><span class="lstinline"></span><span
class="cmtt-12">(</span><span
class="cmtt-12">kind_parameter</span><span
class="cmtt-12">)</span><span
class="cmr-12">, dimension(:), optional, target&#8212;.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-12-"><td style="white-space:normal; text-align:left;" id="TBL-14-12-1"
class="td11"><!--l. 831--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-12-2"
class="td11"><!--l. 831--><p class="noindent" ><span
class="cmr-12">Workspace. Its size should be at least </span><span class="lstinline"></span><span
class="cmtt-12">4</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">*</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">psb_cd_get_local_</span>
<span class="lstinline"></span><span
class="cmtt-12">cols</span><span
class="cmtt-12">(</span><span
class="cmtt-12">desc_a</span><span
class="cmtt-12">)</span> <span
class="cmr-12">(see the PSBLAS User&#8217;s Guide). Note that </span><span
class="cmti-12">type </span><span
class="cmr-12">and</span>
<span <span
class="cmr-12">details.</span> </td> class="cmti-12">kind</span><span
class="cmti-12">_parameter </span><span
class="cmr-12">must be chosen according to the </span><span class="lstinline"></span><span
class="cmtt-12">real</span><span
class="cmr-12">/</span><span class="lstinline"></span><span
class="cmtt-12">complex</span><span
class="cmr-12">,</span>
<span
class="cmr-12">single/double precision version of AMG4PSBLAS under use.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-15-3-"><td style="white-space:normal; text-align:left;" id="TBL-15-3-1" style="vertical-align:baseline;" id="TBL-15-3-"><td style="white-space:normal; text-align:left;" id="TBL-15-3-1"
=======
style="vertical-align:baseline;" id="TBL-14-13-"><td style="white-space:normal; text-align:left;" id="TBL-14-13-1"
>>>>>>> development
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
@ -89,7 +356,10 @@ class="td11"> </td> </tr></table></div>
<!--l. 859--><div class="crosslinks"><p class="noindent"><span
<!--l. 840--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu14.html" ><span href="userhtmlsu14.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -106,6 +376,6 @@ class="cmr-12">] [</span><a
href="userhtmlse5.html#userhtmlsu13.html" ><span href="userhtmlse5.html#userhtmlsu13.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 859--><p class="indent" > <a <!--l. 840--><p class="indent" > <a
id="tailuserhtmlsu13.html"></a> id="tailuserhtmlsu13.html"></a>
</body></html> </body></html>

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method descr</title> <head><title>Method free</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 859--><div class="crosslinks"><p class="noindent"><span <!--l. 840--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu15.html" ><span href="userhtmlsu15.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -28,50 +28,33 @@ href="userhtmlse5.html#userhtmlsu14.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">5.8 </span></span> <a class="cmr-12">5.7 </span></span> <a
id="x24-230005.8"></a><span id="x24-230005.7"></a><span
class="cmr-12">Method descr</span></h4> class="cmr-12">Method free</span></h4>
<div class="center" <div class="center"
> >
<!--l. 861--><p class="noindent" > <!--l. 842--><p class="noindent" >
<!--l. 862--><p class="noindent" ><span class="lstinline"></span><span <!--l. 843--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span class="cmtt-12">p</span><span
class="cmtt-12">%</span><span class="cmtt-12">%</span><span
class="cmtt-12">descr</span><span class="cmtt-12">free</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">info</span><span class="cmtt-12">p</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">[</span><span
class="cmtt-12">iout</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">root</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">info</span><span
class="cmtt-12">verbosity</span><span class="cmtt-12">)</span><br />
class="cmtt-12">])</span><br />
</div> </div>
<!--l. 865--><p class="noindent" ><span <!--l. 846--><p class="noindent" ><span
class="cmr-12">This method prints a description of the preconditioner </span><span class="lstinline"></span><span class="cmr-12">This method deallocates the preconditioner data structure </span><span class="lstinline"></span><span
class="cmtt-12">p</span> <span class="cmtt-12">p</span><span
class="cmr-12">to the standard output or to a</span> class="cmr-12">.</span>
<span <!--l. 849--><p class="noindent" ><span
class="cmr-12">file. It must be called after </span><span class="lstinline"></span><span
class="cmtt-12">hierachy_build</span> <span
class="cmr-12">and </span><span class="lstinline"></span><span
class="cmtt-12">smoothers_build</span><span
class="cmr-12">, or </span><span class="lstinline"></span><span
class="cmtt-12">build</span><span
class="cmr-12">, have</span>
<span
class="cmr-12">been called.</span>
<!--l. 870--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-16" class="tabular" <div class="tabular"> <table id="TBL-15" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
<<<<<<< HEAD
><colgroup id="TBL-16-1g"><col ><colgroup id="TBL-16-1g"><col
id="TBL-16-1"><col id="TBL-16-1"><col
id="TBL-16-2"></colgroup><tr id="TBL-16-2"></colgroup><tr
@ -79,6 +62,15 @@ id="TBL-16-2"></colgroup><tr
class="td11"><!--l. 873--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 873--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-16-1-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-16-1-2"
class="td11"><!--l. 873--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 873--><p class="noindent" ><span class="lstinline"></span><span
=======
><colgroup id="TBL-15-1g"><col
id="TBL-15-1"><col
id="TBL-15-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-15-1-"><td style="white-space:normal; text-align:left;" id="TBL-15-1-1"
class="td11"><!--l. 852--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-15-1-2"
class="td11"><!--l. 852--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
@ -86,15 +78,22 @@ class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">out</span><span class="cmtt-12">out</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-16-2-"><td style="white-space:normal; text-align:left;" id="TBL-16-2-1" style="vertical-align:baseline;" id="TBL-16-2-"><td style="white-space:normal; text-align:left;" id="TBL-16-2-1"
class="td11"><!--l. 874--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-2-2" class="td11"><!--l. 874--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-2-2"
class="td11"><!--l. 874--><p class="noindent" ><span class="td11"><!--l. 874--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-15-2-"><td style="white-space:normal; text-align:left;" id="TBL-15-2-1"
class="td11"><!--l. 853--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-15-2-2"
class="td11"><!--l. 853--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x27-310007"><span href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
<<<<<<< HEAD
class="cmr-12">for details.</span></td> class="cmr-12">for details.</span></td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-16-3-"><td style="white-space:normal; text-align:left;" id="TBL-16-3-1" style="vertical-align:baseline;" id="TBL-16-3-"><td style="white-space:normal; text-align:left;" id="TBL-16-3-1"
@ -164,17 +163,26 @@ class="td11"><!--l. 882--><p class="noindent" ><span
class="cmr-12">The verbosity level of the description. Default value is 0. For</span> class="cmr-12">The verbosity level of the description. Default value is 0. For</span>
<span <span
class="cmr-12">values higher than 0, it prints out further information, e.g., for</span> class="cmr-12">values higher than 0, it prints out further information, e.g., for</span>
=======
class="cmr-12">for</span>
>>>>>>> development
<span <span
class="cmr-12">a distributed multilevel preconditioner the size of the coarse</span> class="cmr-12">details.</span> </td>
<span
class="cmr-12">matrices on every process.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-16-9-"><td style="white-space:normal; text-align:left;" id="TBL-16-9-1" style="vertical-align:baseline;" id="TBL-16-9-"><td style="white-space:normal; text-align:left;" id="TBL-16-9-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
=======
style="vertical-align:baseline;" id="TBL-15-3-"><td style="white-space:normal; text-align:left;" id="TBL-15-3-1"
class="td11"> </td> </tr></table></div>
>>>>>>> development
<!--l. 889--><div class="crosslinks"><p class="noindent"><span
<!--l. 859--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu15.html" ><span href="userhtmlsu15.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -191,6 +199,6 @@ class="cmr-12">] [</span><a
href="userhtmlse5.html#userhtmlsu14.html" ><span href="userhtmlse5.html#userhtmlsu14.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 889--><p class="indent" > <a <!--l. 859--><p class="indent" > <a
id="tailuserhtmlsu14.html"></a> id="tailuserhtmlsu14.html"></a>
</body></html> </body></html>

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Auxiliary Methods</title> <head><title>Method descr</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
@ -10,8 +10,11 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 889--><div class="crosslinks"><p class="noindent"><span <!--l. 859--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu16.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu14.html" ><span href="userhtmlsu14.html" ><span
class="cmr-12">prev</span></a><span class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
@ -25,55 +28,51 @@ href="userhtmlse5.html#userhtmlsu15.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">5.9 </span></span> <a class="cmr-12">5.8 </span></span> <a
id="x25-240005.9"></a><span id="x25-240005.8"></a><span
class="cmr-12">Auxiliary Methods</span></h4> class="cmr-12">Method descr</span></h4>
<!--l. 890--><p class="noindent" ><span
class="cmr-12">Various functionalities are implemented as additional methods of the preconditioner</span>
<span
class="cmr-12">object.</span>
<!--l. 893--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.1 </span></span> <a
id="x25-250005.9.1"></a><span
class="cmr-12">Method: dump</span></h5>
<div class="center" <div class="center"
> >
<!--l. 895--><p class="noindent" > <!--l. 861--><p class="noindent" >
<!--l. 896--><p class="noindent" ><span class="lstinline"></span><span <!--l. 862--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span class="cmtt-12">p</span><span
class="cmtt-12">%</span><span class="cmtt-12">%</span><span
class="cmtt-12">dump</span><span class="cmtt-12">descr</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">info</span><span class="cmtt-12">info</span><span
class="cmtt-12">[,</span><span
class="cmtt-12">istart</span><span
class="cmtt-12">,</span><span
class="cmtt-12">iend</span><span
class="cmtt-12">,</span><span
class="cmtt-12">prefix</span><span
class="cmtt-12">,</span><span
class="cmtt-12">head</span><span
class="cmtt-12">,</span><span
class="cmtt-12">ac</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">rp</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">,</span><span class="cmtt-12">[</span><span
class="cmtt-12">smoother</span><span class="cmtt-12">iout</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">solver</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">root</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">global_num</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">verbosity</span><span
class="cmtt-12">])</span><br /> class="cmtt-12">])</span><br />
</div> </div>
<!--l. 899--><p class="noindent" ><span <!--l. 865--><p class="noindent" ><span
class="cmr-12">Dump on file.</span> class="cmr-12">This method prints a description of the preconditioner </span><span class="lstinline"></span><span
<!--l. 902--><p class="noindent" ><span class="cmtt-12">p</span> <span
class="cmr-12">to the standard output or to a</span>
<span
class="cmr-12">file. It must be called after </span><span class="lstinline"></span><span
class="cmtt-12">hierachy_build</span> <span
class="cmr-12">and </span><span class="lstinline"></span><span
class="cmtt-12">smoothers_build</span><span
class="cmr-12">, or </span><span class="lstinline"></span><span
class="cmtt-12">build</span><span
class="cmr-12">, have</span>
<span
class="cmr-12">been called.</span>
<!--l. 870--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-17" class="tabular" <div class="tabular"> <table id="TBL-16" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
<<<<<<< HEAD
><colgroup id="TBL-17-1g"><col ><colgroup id="TBL-17-1g"><col
id="TBL-17-1"><col id="TBL-17-1"><col
id="TBL-17-2"></colgroup><tr id="TBL-17-2"></colgroup><tr
@ -81,6 +80,15 @@ id="TBL-17-2"></colgroup><tr
class="td11"><!--l. 905--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 905--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-17-1-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-17-1-2"
class="td11"><!--l. 905--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 905--><p class="noindent" ><span class="lstinline"></span><span
=======
><colgroup id="TBL-16-1g"><col
id="TBL-16-1"><col
id="TBL-16-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-16-1-"><td style="white-space:normal; text-align:left;" id="TBL-16-1-1"
class="td11"><!--l. 873--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-16-1-2"
class="td11"><!--l. 873--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
@ -88,17 +96,24 @@ class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">out</span><span class="cmtt-12">out</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-17-2-"><td style="white-space:normal; text-align:left;" id="TBL-17-2-1" style="vertical-align:baseline;" id="TBL-17-2-"><td style="white-space:normal; text-align:left;" id="TBL-17-2-1"
class="td11"><!--l. 906--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-17-2-2" class="td11"><!--l. 906--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-17-2-2"
class="td11"><!--l. 906--><p class="noindent" ><span class="td11"><!--l. 906--><p class="noindent" ><span
=======
style="vertical-align:baseline;" id="TBL-16-2-"><td style="white-space:normal; text-align:left;" id="TBL-16-2-1"
class="td11"><!--l. 874--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-2-2"
class="td11"><!--l. 874--><p class="noindent" ><span
>>>>>>> development
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x27-310007"><span href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td> class="cmr-12">for details.</span></td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-17-3-"><td style="white-space:normal; text-align:left;" id="TBL-17-3-1" style="vertical-align:baseline;" id="TBL-17-3-"><td style="white-space:normal; text-align:left;" id="TBL-17-3-1"
class="td11"><!--l. 907--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 907--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-17-3-2" class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-17-3-2"
@ -109,6 +124,14 @@ class="cmtt-12">psb_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">_base_sparse_mat</span><span class="cmtt-12">_base_sparse_mat</span><span
class="cmtt-12">),</span><span class="cmtt-12">),</span><span
=======
style="vertical-align:baseline;" id="TBL-16-3-"><td style="white-space:normal; text-align:left;" id="TBL-16-3-1"
class="td11"><!--l. 875--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">iout</span> </td><td style="white-space:normal; text-align:left;" id="TBL-16-3-2"
class="td11"><!--l. 875--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span
>>>>>>> development
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@ -116,22 +139,23 @@ class="cmtt-12">in</span><span
class="cmtt-12">),</span><span class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-17-4-"><td style="white-space:normal; text-align:left;" id="TBL-17-4-1" style="vertical-align:baseline;" id="TBL-17-4-"><td style="white-space:normal; text-align:left;" id="TBL-17-4-1"
class="td11"><!--l. 908--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-17-4-2" class="td11"><!--l. 908--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-17-4-2"
class="td11"><!--l. 908--><p class="noindent" ><span class="td11"><!--l. 908--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal matrix components; this</span> class="cmr-12">The desired dynamic type for internal matrix components; this</span>
=======
style="vertical-align:baseline;" id="TBL-16-4-"><td style="white-space:normal; text-align:left;" id="TBL-16-4-1"
class="td11"><!--l. 876--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-4-2"
class="td11"><!--l. 876--><p class="noindent" ><span
class="cmr-12">The id of the file where the preconditioner description will be</span>
>>>>>>> development
<span <span
class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span> class="cmr-12">printed; the default is the standard output.</span> </td>
<span
class="cmr-12">processes. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-17-5-"><td style="white-space:normal; text-align:left;" id="TBL-17-5-1" style="vertical-align:baseline;" id="TBL-17-5-"><td style="white-space:normal; text-align:left;" id="TBL-17-5-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 915--><p class="noindent" > <!--l. 915--><p class="noindent" >
@ -202,11 +226,18 @@ class="cmr-12">version of AMG4PSBLAS under use.</span>
class="td11"><!--l. 931--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 931--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-18-3-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-18-3-2"
class="td11"><!--l. 931--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 931--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-16-5-"><td style="white-space:normal; text-align:left;" id="TBL-16-5-1"
class="td11"><!--l. 878--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">root</span> </td><td style="white-space:normal; text-align:left;" id="TBL-16-5-2"
class="td11"><!--l. 878--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
<<<<<<< HEAD
class="cmtt-12">out</span><span class="cmtt-12">out</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
@ -253,21 +284,31 @@ class="cmtt-12">global</span> </td> <td style="white-space:normal; text-align:l
class="td11"><!--l. 944--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 944--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">logical</span><span class="cmtt-12">logical</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
=======
class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
>>>>>>> development
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-19-2-"><td style="white-space:normal; text-align:left;" id="TBL-19-2-1" style="vertical-align:baseline;" id="TBL-19-2-"><td style="white-space:normal; text-align:left;" id="TBL-19-2-1"
class="td11"><!--l. 945--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-19-2-2" class="td11"><!--l. 945--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-19-2-2"
class="td11"><!--l. 945--><p class="noindent" ><span class="td11"><!--l. 945--><p class="noindent" ><span
class="cmr-12">Whether the global or local preconditioner memory occupation is</span> class="cmr-12">Whether the global or local preconditioner memory occupation is</span>
=======
style="vertical-align:baseline;" id="TBL-16-6-"><td style="white-space:normal; text-align:left;" id="TBL-16-6-1"
class="td11"><!--l. 879--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-6-2"
class="td11"><!--l. 879--><p class="noindent" ><span
class="cmr-12">The id of the process where the preconditioner description</span>
>>>>>>> development
<span <span
class="cmr-12">desired. Default: </span><span class="lstinline"></span><span class="cmr-12">will be printed; the default is </span><span class="lstinline"></span><span
class="cmtt-12">.</span><span class="cmtt-12">psb_root_</span><span
class="cmtt-12">false</span><span class="cmr-12">.</span> </td>
class="cmtt-12">.</span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-19-3-"><td style="white-space:normal; text-align:left;" id="TBL-19-3-1" style="vertical-align:baseline;" id="TBL-19-3-"><td style="white-space:normal; text-align:left;" id="TBL-19-3-1"
class="td11"> </td> </tr></table> class="td11"> </td> </tr></table>
</div> <span </div> <span
@ -337,11 +378,18 @@ id="TBL-20-2"></colgroup><tr
class="td11"><!--l. 977--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 977--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-20-1-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-20-1-2"
class="td11"><!--l. 977--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 977--><p class="noindent" ><span class="lstinline"></span><span
=======
style="vertical-align:baseline;" id="TBL-16-7-"><td style="white-space:normal; text-align:left;" id="TBL-16-7-1"
class="td11"><!--l. 881--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">verbosity</span> </td><td style="white-space:normal; text-align:left;" id="TBL-16-7-2"
class="td11"><!--l. 881--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
<<<<<<< HEAD
class="cmtt-12">out</span><span class="cmtt-12">out</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
@ -368,12 +416,15 @@ class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
=======
>>>>>>> development
class="cmtt-12">in</span><span class="cmtt-12">in</span><span
class="cmtt-12">),</span><span class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-20-4-"><td style="white-space:normal; text-align:left;" id="TBL-20-4-1" style="vertical-align:baseline;" id="TBL-20-4-"><td style="white-space:normal; text-align:left;" id="TBL-20-4-1"
class="td11"><!--l. 980--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-20-4-2" class="td11"><!--l. 980--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-20-4-2"
class="td11"><!--l. 980--><p class="noindent" ><span class="td11"><!--l. 980--><p class="noindent" ><span
@ -435,17 +486,29 @@ class="cmr-12">for details.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-21-3-"><td style="white-space:normal; text-align:left;" id="TBL-21-3-1" style="vertical-align:baseline;" id="TBL-21-3-"><td style="white-space:normal; text-align:left;" id="TBL-21-3-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
=======
style="vertical-align:baseline;" id="TBL-16-8-"><td style="white-space:normal; text-align:left;" id="TBL-16-8-1"
class="td11"><!--l. 882--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-8-2"
class="td11"><!--l. 882--><p class="noindent" ><span
class="cmr-12">The verbosity level of the description. Default value is 0. For</span>
<span
class="cmr-12">values higher than 0, it prints out further information, e.g., for</span>
<span
class="cmr-12">a distributed multilevel preconditioner the size of the coarse</span>
<span
class="cmr-12">matrices on every process.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-16-9-"><td style="white-space:normal; text-align:left;" id="TBL-16-9-1"
class="td11"> </td> </tr></table></div>
>>>>>>> development
<!--l. 889--><div class="crosslinks"><p class="noindent"><span
<!--l. 4--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu16.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu14.html" ><span href="userhtmlsu14.html" ><span
class="cmr-12">prev</span></a><span class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
@ -458,6 +521,6 @@ class="cmr-12">] [</span><a
href="userhtmlse5.html#userhtmlsu15.html" ><span href="userhtmlse5.html#userhtmlsu15.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 4--><p class="indent" > <a <!--l. 889--><p class="indent" > <a
id="tailuserhtmlsu15.html"></a> id="tailuserhtmlsu15.html"></a>
</body></html> </body></html>

@ -1,20 +1,17 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method free</title> <head><title>Auxiliary Methods</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 739--><div class="crosslinks"><p class="noindent"><span <!--l. 889--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu17.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu15.html" ><span href="userhtmlsu15.html" ><span
class="cmr-12">prev</span></a><span class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
@ -24,63 +21,431 @@ class="cmr-12">] [</span><a
href="#tailuserhtmlsu16.html"><span href="#tailuserhtmlsu16.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu16.html" ><span href="userhtmlse5.html#userhtmlsu16.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.7 </span></span> <a class="cmr-12">5.9 </span></span> <a
id="x26-250006.7"></a><span id="x26-250005.9"></a><span
class="cmr-12">Method free</span></h4> class="cmr-12">Auxiliary Methods</span></h4>
<!--l. 890--><p class="noindent" ><span
class="cmr-12">Various functionalities are implemented as additional methods of the preconditioner</span>
<span
class="cmr-12">object.</span>
<!--l. 893--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.1 </span></span> <a
id="x26-260005.9.1"></a><span
class="cmr-12">Method: dump</span></h5>
<div class="center" <div class="center"
> >
<!--l. 741--><p class="noindent" > <!--l. 895--><p class="noindent" >
<!--l. 742--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span <!--l. 896--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%free(p,info)</span></span></span><br /> class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">dump</span><span
class="cmtt-12">(</span><span
class="cmtt-12">info</span><span
class="cmtt-12">[,</span><span
class="cmtt-12">istart</span><span
class="cmtt-12">,</span><span
class="cmtt-12">iend</span><span
class="cmtt-12">,</span><span
class="cmtt-12">prefix</span><span
class="cmtt-12">,</span><span
class="cmtt-12">head</span><span
class="cmtt-12">,</span><span
class="cmtt-12">ac</span><span
class="cmtt-12">,</span><span
class="cmtt-12">rp</span><span
class="cmtt-12">,</span><span
class="cmtt-12">smoother</span><span
class="cmtt-12">,</span><span
class="cmtt-12">solver</span><span
class="cmtt-12">,</span><span
class="cmtt-12">global_num</span><span
class="cmtt-12">])</span><br />
</div> </div>
<!--l. 745--><p class="noindent" ><span <!--l. 899--><p class="noindent" ><span
class="cmr-12">This method deallocates the preconditioner data structure </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">Dump on file.</span>
class="cmtt-12">p</span></span></span><span <!--l. 902--><p class="noindent" ><span
class="cmr-12">.</span>
<!--l. 748--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-15" class="tabular" <div class="tabular"> <table id="TBL-17" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
><colgroup id="TBL-15-1g"><col ><colgroup id="TBL-17-1g"><col
id="TBL-15-1"><col id="TBL-17-1"><col
id="TBL-15-2"></colgroup><tr id="TBL-17-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-15-1-"><td style="white-space:wrap; text-align:left;" id="TBL-15-1-1" style="vertical-align:baseline;" id="TBL-17-1-"><td style="white-space:normal; text-align:left;" id="TBL-17-1-1"
class="td11"><!--l. 751--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 905--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-15-1-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-17-1-2"
class="td11"><!--l. 751--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 905--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer,</span><span class="cmtt-12">integer</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span class="cmtt-12">,</span><span
class="cmr-12">.</span> </td> class="cmtt-12">&#x00A0;</span><span
</tr><tr class="cmtt-12">intent</span><span
style="vertical-align:baseline;" id="TBL-15-2-"><td style="white-space:wrap; text-align:left;" id="TBL-15-2-1" class="cmtt-12">(</span><span
class="td11"><!--l. 752--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-15-2-2" class="cmtt-12">out</span><span
class="td11"><!--l. 752--><p class="noindent" ><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-2-"><td style="white-space:normal; text-align:left;" id="TBL-17-2-1"
class="td11"><!--l. 906--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-17-2-2"
class="td11"><!--l. 906--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span href="userhtmlse7.html#x28-320007"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for</span> class="cmr-12">for details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-3-"><td style="white-space:normal; text-align:left;" id="TBL-17-3-1"
class="td11"><!--l. 907--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-17-3-2"
class="td11"><!--l. 907--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">_base_sparse_mat</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-4-"><td style="white-space:normal; text-align:left;" id="TBL-17-4-1"
class="td11"><!--l. 908--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-17-4-2"
class="td11"><!--l. 908--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal matrix components; this</span>
<span <span
class="cmr-12">details.</span> </td> class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span>
<span
class="cmr-12">processes. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-15-3-"><td style="white-space:wrap; text-align:left;" id="TBL-15-3-1" style="vertical-align:baseline;" id="TBL-17-5-"><td style="white-space:normal; text-align:left;" id="TBL-17-5-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 915--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.2 </span></span> <a
id="x26-270005.9.2"></a><span
class="cmr-12">Method: clone</span></h5>
<div class="center"
>
<!--l. 917--><p class="noindent" >
<!--l. 918--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">clone</span><span
class="cmtt-12">(</span><span
class="cmtt-12">pout</span><span
class="cmtt-12">,</span><span
class="cmtt-12">info</span><span
class="cmtt-12">)</span><br />
</div>
<!--l. 921--><p class="noindent" ><span
class="cmr-12">Create a (deep) copy of the preconditioner object.</span>
<!--l. 924--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-18" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-18-1g"><col
id="TBL-18-1"><col
id="TBL-18-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-18-1-"><td style="white-space:normal; text-align:left;" id="TBL-18-1-1"
class="td11"><!--l. 927--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">pout</span> </td><td style="white-space:normal; text-align:left;" id="TBL-18-1-2"
class="td11"><!--l. 927--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span
class="cmtt-12">(</span><span
class="cmtt-12">amg_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">prec_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-18-2-"><td style="white-space:normal; text-align:left;" id="TBL-18-2-1"
class="td11"><!--l. 928--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-18-2-2"
class="td11"><!--l. 928--><p class="noindent" ><span
class="cmr-12">The copy of the preconditioner data structure. Note that </span><span
class="cmti-12">x </span><span
class="cmr-12">must</span>
<span
class="cmr-12">be chosen according to the </span><span class="lstinline"></span><span
class="cmtt-12">real</span><span
class="cmr-12">/</span><span class="lstinline"></span><span
class="cmtt-12">complex</span><span
class="cmr-12">, single/double precision</span>
<span
class="cmr-12">version of AMG4PSBLAS under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-18-3-"><td style="white-space:normal; text-align:left;" id="TBL-18-3-1"
class="td11"><!--l. 931--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-18-3-2"
class="td11"><!--l. 931--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-18-4-"><td style="white-space:normal; text-align:left;" id="TBL-18-4-1"
class="td11"><!--l. 932--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-18-4-2"
class="td11"><!--l. 932--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-18-5-"><td style="white-space:normal; text-align:left;" id="TBL-18-5-1"
class="td11"> </td> </tr></table></div>
<!--l. 937--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.3 </span></span> <a
id="x26-280005.9.3"></a><span
class="cmr-12">Method: sizeof</span></h5>
<div class="center"
>
<!--l. 939--><p class="noindent" >
<!--l. 940--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">sz</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">=</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">sizeof</span><span
class="cmtt-12">([</span><span
class="cmtt-12">global</span><span
class="cmtt-12">])</span><br />
</div>
<div class="tabular"> <table id="TBL-19" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-19-1g"><col
id="TBL-19-1"><col
id="TBL-19-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-19-1-"><td style="white-space:normal; text-align:left;" id="TBL-19-1-1"
class="td11"><!--l. 944--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">global</span> </td> <td style="white-space:normal; text-align:left;" id="TBL-19-1-2"
class="td11"><!--l. 944--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">logical</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-19-2-"><td style="white-space:normal; text-align:left;" id="TBL-19-2-1"
class="td11"><!--l. 945--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-19-2-2"
class="td11"><!--l. 945--><p class="noindent" ><span
class="cmr-12">Whether the global or local preconditioner memory occupation is</span>
<span
class="cmr-12">desired. Default: </span><span class="lstinline"></span><span
class="cmtt-12">.</span><span
class="cmtt-12">false</span><span
class="cmtt-12">.</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-19-3-"><td style="white-space:normal; text-align:left;" id="TBL-19-3-1"
class="td11"> </td> </tr></table>
</div> <span
class="cmr-12">Return memory footprint in bytes.</span>
<!--l. 952--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.4 </span></span> <a
id="x26-290005.9.4"></a><span
class="cmr-12">Method: allocate</span><span
class="cmr-12">_wrk</span></h5>
<div class="center"
>
<!--l. 954--><p class="noindent" >
<!--l. 955--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">allocate_wrk</span><span
class="cmtt-12">(</span><span
class="cmtt-12">info</span><span
class="cmtt-12">[,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">vmold</span><span
class="cmtt-12">])</span><br />
</div>
<!--l. 958--><p class="noindent" ><span
class="cmr-12">Allocate internal work vectors. Each application of the preconditioner uses a number of</span>
<span
class="cmr-12">work vectors which are allocated internally as necessary; therefore allocation and</span>
<span
class="cmr-12">deallocation of memory occurs multiple times during the execution of a Krylov method.</span>
<span
class="cmr-12">In most cases this strategy is perfectly acceptable, but on some platforms, most</span>
<span
class="cmr-12">notably GPUs, memory allocation is a slow operation, and the default behaviour would</span>
<span
class="cmr-12">lead to a slowdown. This method allows to trade space for time by preallocating</span>
<span
class="cmr-12">the internal workspace outside of the invocation of a Krylov method. When</span>
<!--l. 758--><div class="crosslinks"><p class="noindent"><span <span
class="cmr-12">using GPUs or other specialized devices, the </span><span class="lstinline"></span><span
class="cmtt-12">vmold</span> <span
class="cmr-12">argument is also necessary</span>
<span
class="cmr-12">to ensure the internal work vectors are of the appropriate dynamic type to</span>
<span
class="cmr-12">exploit the accelerator hardware; when allocation occurs internally this is</span>
<span
class="cmr-12">taken care of based on the dynamic type of the </span><span class="lstinline"></span><span
class="cmtt-12">x</span> <span
class="cmr-12">argument to the </span><span class="lstinline"></span><span
class="cmtt-12">apply</span>
<span
class="cmr-12">method.</span>
<!--l. 974--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-20" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-20-1g"><col
id="TBL-20-1"><col
id="TBL-20-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-20-1-"><td style="white-space:normal; text-align:left;" id="TBL-20-1-1"
class="td11"><!--l. 977--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-20-1-2"
class="td11"><!--l. 977--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-20-2-"><td style="white-space:normal; text-align:left;" id="TBL-20-2-1"
class="td11"><!--l. 978--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-20-2-2"
class="td11"><!--l. 978--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-20-3-"><td style="white-space:normal; text-align:left;" id="TBL-20-3-1"
class="td11"><!--l. 979--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">vmold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-20-3-2"
class="td11"><!--l. 979--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">_base_vect_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-20-4-"><td style="white-space:normal; text-align:left;" id="TBL-20-4-1"
class="td11"><!--l. 980--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-20-4-2"
class="td11"><!--l. 980--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal vector components; this</span>
<span
class="cmr-12">allows e.g. running on GPUs.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-20-5-"><td style="white-space:normal; text-align:left;" id="TBL-20-5-1"
class="td11"> </td> </tr></table></div>
<!--l. 986--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.5 </span></span> <a
id="x26-300005.9.5"></a><span
class="cmr-12">Method: free</span><span
class="cmr-12">_wrk</span></h5>
<div class="center"
>
<!--l. 988--><p class="noindent" >
<!--l. 989--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">free_wrk</span><span
class="cmtt-12">(</span><span
class="cmtt-12">info</span><span
class="cmtt-12">)</span><br />
</div>
<!--l. 992--><p class="noindent" ><span
class="cmr-12">Deallocate internal work vectors.</span>
<!--l. 995--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-21" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-21-1g"><col
id="TBL-21-1"><col
id="TBL-21-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-21-1-"><td style="white-space:normal; text-align:left;" id="TBL-21-1-1"
class="td11"><!--l. 998--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-21-1-2"
class="td11"><!--l. 998--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-2-"><td style="white-space:normal; text-align:left;" id="TBL-21-2-1"
class="td11"><!--l. 999--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-21-2-2"
class="td11"><!--l. 999--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-3-"><td style="white-space:normal; text-align:left;" id="TBL-21-3-1"
class="td11"> </td> </tr></table></div>
<!--l. 4--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu17.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu15.html" ><span href="userhtmlsu15.html" ><span
class="cmr-12">prev</span></a><span class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
@ -90,9 +455,9 @@ class="cmr-12">] [</span><a
href="userhtmlsu16.html" ><span href="userhtmlsu16.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu16.html" ><span href="userhtmlse5.html#userhtmlsu16.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 758--><p class="indent" > <a <!--l. 4--><p class="indent" > <a
id="tailuserhtmlsu16.html"></a> id="tailuserhtmlsu16.html"></a>
</body></html> </body></html>

@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 64--><div class="crosslinks"><p class="noindent"><span <!--l. 76--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu3.html" ><span href="userhtmlsu3.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -31,13 +31,13 @@ class="cmr-12">] </span></p></div>
class="cmr-12">3.2 </span></span> <a class="cmr-12">3.2 </span></span> <a
id="x10-90003.2"></a><span id="x10-90003.2"></a><span
class="cmr-12">Optional third party libraries</span></h4> class="cmr-12">Optional third party libraries</span></h4>
<!--l. 66--><p class="noindent" ><span <!--l. 78--><p class="noindent" ><span
class="cmr-12">We provide interfaces to the following third-party software libraries; note that these are</span> class="cmr-12">We provide interfaces to the following third-party software libraries; note that these are</span>
<span <span
class="cmr-12">optional, but if you enable them some defaults for multilevel preconditioners may</span> class="cmr-12">optional, but if you enable them some defaults for multilevel preconditioners may</span>
<span <span
class="cmr-12">change to reflect their presence.</span> class="cmr-12">change to reflect their presence.</span>
<!--l. 70--><p class="indent" > <!--l. 82--><p class="indent" >
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmbx-12">UMFPACK</span> </dt><dd class="cmbx-12">UMFPACK</span> </dt><dd
@ -133,7 +133,7 @@ class="cmr-12">.</span></dd></dl>
<!--l. 101--><div class="crosslinks"><p class="noindent"><span <!--l. 113--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu3.html" ><span href="userhtmlsu3.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -150,6 +150,6 @@ class="cmr-12">] [</span><a
href="userhtmlse3.html#userhtmlsu2.html" ><span href="userhtmlse3.html#userhtmlsu2.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 101--><p class="indent" > <a <!--l. 113--><p class="indent" > <a
id="tailuserhtmlsu2.html"></a> id="tailuserhtmlsu2.html"></a>
</body></html> </body></html>

@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 101--><div class="crosslinks"><p class="noindent"><span <!--l. 113--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu4.html" ><span href="userhtmlsu4.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -31,13 +31,13 @@ class="cmr-12">] </span></p></div>
class="cmr-12">3.3 </span></span> <a class="cmr-12">3.3 </span></span> <a
id="x11-100003.3"></a><span id="x11-100003.3"></a><span
class="cmr-12">Configuration options</span></h4> class="cmr-12">Configuration options</span></h4>
<!--l. 103--><p class="noindent" ><span <!--l. 115--><p class="noindent" ><span
class="cmr-12">In order to build AMG4PSBLAS, the first step is to use the </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">In order to build AMG4PSBLAS, the first step is to use the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">configure</span></span></span> <span class="cmtt-12">configure</span></span></span> <span
class="cmr-12">script in the</span> class="cmr-12">script in the</span>
<span <span
class="cmr-12">main directory to generate the necessary makefile.</span> class="cmr-12">main directory to generate the necessary makefile.</span>
<!--l. 107--><p class="indent" > <span <!--l. 119--><p class="indent" > <span
class="cmr-12">As a minimal example consider the following:</span> class="cmr-12">As a minimal example consider the following:</span>
@ -45,7 +45,11 @@ class="cmr-12">As a minimal example consider the following:</span>
<pre class="verbatim" id="verbatim-2"> <pre class="verbatim" id="verbatim-2">
./configure&#x00A0;--with-psblas=PSB-INSTALL-DIR ./configure&#x00A0;--with-psblas=PSB-INSTALL-DIR
</pre> </pre>
<<<<<<< HEAD
<!--l. 115--><p class="nopar" > <span <!--l. 115--><p class="nopar" > <span
=======
<!--l. 127--><p class="nopar" > <span
>>>>>>> development
class="cmr-12">which assumes that the various MPI compilers and support libraries are available in</span> class="cmr-12">which assumes that the various MPI compilers and support libraries are available in</span>
<span <span
class="cmr-12">the standard directories on the system, and specifies only the PSBLAS install directory</span> class="cmr-12">the standard directories on the system, and specifies only the PSBLAS install directory</span>
@ -59,7 +63,7 @@ class="cmtt-12">./configure</span><span
class="cmtt-12">&#x00A0;--help</span></span></span><span class="cmtt-12">&#x00A0;--help</span></span></span><span
class="cmr-12">, which</span> class="cmr-12">, which</span>
<span <span
class="cmr-12">produces: </span><!--l. 126--><div class="lstinputlisting"> class="cmr-12">produces: </span><!--l. 138--><div class="lstinputlisting">
<a <a
id="x11-10001"></a> id="x11-10001"></a>
<span <span
@ -4236,7 +4240,7 @@ class="cmtt-12">issues</span><span
class="cmtt-12">&#x003E;.</span> class="cmtt-12">&#x003E;.</span>
</div> </div>
<!--l. 128--><p class="noindent" ><span <!--l. 140--><p class="noindent" ><span
class="cmr-12">For instance, if a user has built and installed PSBLAS 3.7 under the </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">For instance, if a user has built and installed PSBLAS 3.7 under the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">/opt</span></span></span> <span class="cmtt-12">/opt</span></span></span> <span
class="cmr-12">directory and is</span> class="cmr-12">directory and is</span>
@ -4251,7 +4255,11 @@ class="cmr-12">might be configured with:</span>
./configure&#x00A0;--with-psblas=/opt/psblas-3.7/&#x00A0;\ ./configure&#x00A0;--with-psblas=/opt/psblas-3.7/&#x00A0;\
--with-umfpackincdir=/usr/include/suitesparse/ --with-umfpackincdir=/usr/include/suitesparse/
</pre> </pre>
<<<<<<< HEAD
<!--l. 140--><p class="nopar" > <span <!--l. 140--><p class="nopar" > <span
=======
<!--l. 152--><p class="nopar" > <span
>>>>>>> development
class="cmr-12">Once the configure script has completed execution, it will have generated the file</span> class="cmr-12">Once the configure script has completed execution, it will have generated the file</span>
<span class="obeylines-h"><span class="verb"><span <span class="obeylines-h"><span class="verb"><span
class="cmtt-12">Make.inc</span></span></span> <span class="cmtt-12">Make.inc</span></span></span> <span
@ -4260,7 +4268,7 @@ class="cmr-12">which will then be used by all Makefiles in the directory tree; t
class="cmr-12">copied in the install directory under the name </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">copied in the install directory under the name </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">Make.inc.AMG4PSBLAS</span></span></span><span class="cmtt-12">Make.inc.AMG4PSBLAS</span></span></span><span
class="cmr-12">.</span> class="cmr-12">.</span>
<!--l. 147--><p class="indent" > <span <!--l. 159--><p class="indent" > <span
class="cmr-12">To use the MUMPS solver package, the user has to add the appropriate options to</span> class="cmr-12">To use the MUMPS solver package, the user has to add the appropriate options to</span>
<span <span
class="cmr-12">the configure script; by default we are looking for the libraries </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">the configure script; by default we are looking for the libraries </span><span class="obeylines-h"><span class="verb"><span
@ -4280,7 +4288,7 @@ class="cmtt-12">--with-extra-libs</span></span></span> <span
class="cmr-12">configure</span> class="cmr-12">configure</span>
<span <span
class="cmr-12">option.</span> class="cmr-12">option.</span>
<!--l. 155--><p class="indent" > <span <!--l. 167--><p class="indent" > <span
class="cmr-12">To build the library the user will now enter</span> class="cmr-12">To build the library the user will now enter</span>
@ -4288,7 +4296,11 @@ class="cmr-12">To build the library the user will now enter</span>
<pre class="verbatim" id="verbatim-4"> <pre class="verbatim" id="verbatim-4">
make make
</pre> </pre>
<<<<<<< HEAD
<!--l. 163--><p class="nopar" > <span <!--l. 163--><p class="nopar" > <span
=======
<!--l. 175--><p class="nopar" > <span
>>>>>>> development
class="cmr-12">followed (optionally) by</span> class="cmr-12">followed (optionally) by</span>
@ -4296,11 +4308,15 @@ class="cmr-12">followed (optionally) by</span>
<pre class="verbatim" id="verbatim-5"> <pre class="verbatim" id="verbatim-5">
make&#x00A0;install make&#x00A0;install
</pre> </pre>
<<<<<<< HEAD
<!--l. 173--><p class="nopar" > <!--l. 173--><p class="nopar" >
=======
<!--l. 185--><p class="nopar" >
>>>>>>> development
<!--l. 175--><div class="crosslinks"><p class="noindent"><span <!--l. 187--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu4.html" ><span href="userhtmlsu4.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -4317,6 +4333,6 @@ class="cmr-12">] [</span><a
href="userhtmlse3.html#userhtmlsu3.html" ><span href="userhtmlse3.html#userhtmlsu3.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 175--><p class="indent" > <a <!--l. 187--><p class="indent" > <a
id="tailuserhtmlsu3.html"></a> id="tailuserhtmlsu3.html"></a>
</body></html> </body></html>

@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 175--><div class="crosslinks"><p class="noindent"><span <!--l. 187--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu5.html" ><span href="userhtmlsu5.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -31,7 +31,7 @@ class="cmr-12">] </span></p></div>
class="cmr-12">3.4 </span></span> <a class="cmr-12">3.4 </span></span> <a
id="x12-110003.4"></a><span id="x12-110003.4"></a><span
class="cmr-12">Bug reporting</span></h4> class="cmr-12">Bug reporting</span></h4>
<!--l. 176--><p class="noindent" ><span <!--l. 188--><p class="noindent" ><span
class="cmr-12">If you find any bugs in our codes, please report them through our issues page</span> class="cmr-12">If you find any bugs in our codes, please report them through our issues page</span>
<span <span
class="cmr-12">on</span><br class="cmr-12">on</span><br
@ -39,7 +39,7 @@ class="newline" /> <a
href="https://github.com/psctoolkit/amg4psblas/issues" class="url" ><span href="https://github.com/psctoolkit/amg4psblas/issues" class="url" ><span
class="cmtt-12">https://github.com/psctoolkit/amg4psblas/issues</span></a><br class="cmtt-12">https://github.com/psctoolkit/amg4psblas/issues</span></a><br
class="newline" /> class="newline" />
<!--l. 180--><p class="indent" > <span <!--l. 192--><p class="indent" > <span
class="cmr-12">To enable us to track the bug, please provide a log from the failing application, the</span> class="cmr-12">To enable us to track the bug, please provide a log from the failing application, the</span>
<span <span
class="cmr-12">test conditions, and ideally a self-contained test program reproducing the</span> class="cmr-12">test conditions, and ideally a self-contained test program reproducing the</span>
@ -48,7 +48,7 @@ class="cmr-12">issue.</span>
<!--l. 184--><div class="crosslinks"><p class="noindent"><span <!--l. 196--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu5.html" ><span href="userhtmlsu5.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@ -65,6 +65,6 @@ class="cmr-12">] [</span><a
href="userhtmlse3.html#userhtmlsu4.html" ><span href="userhtmlse3.html#userhtmlsu4.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 184--><p class="indent" > <a <!--l. 196--><p class="indent" > <a
id="tailuserhtmlsu4.html"></a> id="tailuserhtmlsu4.html"></a>
</body></html> </body></html>

@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 184--><div class="crosslinks"><p class="noindent"><span <!--l. 196--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu4.html" ><span href="userhtmlsu4.html" ><span
class="cmr-12">prev</span></a><span class="cmr-12">prev</span></a><span
@ -28,7 +28,7 @@ class="cmr-12">] </span></p></div>
class="cmr-12">3.5 </span></span> <a class="cmr-12">3.5 </span></span> <a
id="x13-120003.5"></a><span id="x13-120003.5"></a><span
class="cmr-12">Example and test programs</span></h4> class="cmr-12">Example and test programs</span></h4>
<!--l. 185--><p class="noindent" ><span <!--l. 197--><p class="noindent" ><span
class="cmr-12">The package contains the </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">The package contains the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">examples</span></span></span> <span class="cmtt-12">examples</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
@ -62,7 +62,7 @@ class="cmtt-12">runs</span></span></span> <span
class="cmr-12">subdirectories, to experiment with the full range</span> class="cmr-12">subdirectories, to experiment with the full range</span>
<span <span
class="cmr-12">of preconditioners implemented in the package.</span></dd></dl> class="cmr-12">of preconditioners implemented in the package.</span></dd></dl>
<!--l. 198--><p class="noindent" ><span <!--l. 210--><p class="noindent" ><span
class="cmr-12">The </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">The </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">fileread</span></span></span> <span class="cmtt-12">fileread</span></span></span> <span
class="cmr-12">directories contain sample programs that read sparse matrices from files,</span> class="cmr-12">directories contain sample programs that read sparse matrices from files,</span>

@ -12,6 +12,9 @@
> >
<!--l. 114--><div class="crosslinks"><p class="noindent"><span <!--l. 114--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu7.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
href="#tailuserhtmlsu6.html"><span href="#tailuserhtmlsu6.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
@ -97,15 +100,15 @@ class="cmr-12">]</span></span><span
class="cmr-12">.</span> class="cmr-12">.</span>
<!--l. 138--><p class="indent" > <span <!--l. 138--><p class="indent" > <span
class="cmr-12">The setup and application of the default multilevel preconditioner for the real single</span> class="cmr-12">The setup and application of the default multilevel preconditioner for the real single</span>
<span
class="cmr-12">precision and the complex, single and double precision, versions are obtained</span>
<span
class="cmr-12">precision and the complex, single and double precision, versions are obtained</span>
<span <span
class="cmr-12">with straightforward modifications of the previous example (see Section</span><span class="cmr-12">with straightforward modifications of the previous example (see Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse5.html#x16-150005"><span href="userhtmlse5.html#x17-160005"><span
class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a> <span class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a> <span
class="cmr-12">for</span> class="cmr-12">for</span>
<span <span
@ -380,17 +383,17 @@ class="content">setup of a one-level Schwarz preconditioner.</span></div><!--tex
<!--l. 420--><div class="crosslinks"><p class="noindent"><span
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu7.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu6.html" ><span href="userhtmlsu6.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse4.html#userhtmlsu6.html" ><span href="userhtmlse4.html#userhtmlsu6.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a <!--l. 420--><p class="indent" > <a
id="tailuserhtmlsu6.html"></a> id="tailuserhtmlsu6.html"></a>
</body></html> </body></html>

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method init</title> <head><title>GPU example</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
@ -10,23 +10,44 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 42--><div class="crosslinks"><p class="noindent"><span <!--l. 420--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu8.html" ><span href="userhtmlsu6.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu6.html#tailuserhtmlsu6.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="#tailuserhtmlsu7.html"><span href="#tailuserhtmlsu7.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse5.html#userhtmlsu7.html" ><span href="userhtmlse4.html#userhtmlsu7.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">5.1 </span></span> <a class="cmr-12">4.2 </span></span> <a
id="x17-160005.1"></a><span id="x16-150004.2"></a><span
class="cmr-12">Method init</span></h4> class="cmr-12">GPU example</span></h4>
<!--l. 422--><p class="noindent" ><span
class="cmr-12">The code reported in Figure</span><span
class="cmr-12">&#x00A0;</span><a
href="#x16-15001r5"><span
class="cmr-12">5</span><!--tex4ht:ref: fig:gpu-ex1 --></a> <span
class="cmr-12">shows how to set up a program exploiting the combined</span>
<span
class="cmr-12">GPU capabilities of PSBLAS and AMG4PSBLAS.</span>
<!--l. 425--><p class="indent" > <a
id="x16-15001r5"></a><hr class="float"><div class="float"
>
<div class="center" <div class="center"
> >
<<<<<<< HEAD
<!--l. 44--><p class="noindent" > <!--l. 44--><p class="noindent" >
<!--l. 45--><p class="noindent" ><span class="lstinline"></span><span <!--l. 45--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
@ -126,23 +147,46 @@ class="cmr-12">for details.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-2-8-"><td style="white-space:normal; text-align:left;" id="TBL-2-8-1" style="vertical-align:baseline;" id="TBL-2-8-"><td style="white-space:normal; text-align:left;" id="TBL-2-8-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
=======
<!--l. 437--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-10">
!&#x00A0;build&#x00A0;a&#x00A0;one-level&#x00A0;RAS&#x00A0;with&#x00A0;overlap&#x00A0;2&#x00A0;and&#x00A0;ILU(0)&#x00A0;on&#x00A0;the&#x00A0;local&#x00A0;blocks.
call&#x00A0;P%init(&#8217;AS&#8217;,info)
call&#x00A0;P%set(&#8217;SUB_OVR&#8217;,2,info)
call&#x00A0;P%build(A,desc_A,info)
...&#x00A0;...
!&#x00A0;solve&#x00A0;Ax=b&#x00A0;with&#x00A0;preconditioned&#x00A0;BiCGSTAB
&#x00A0;&#x00A0;call&#x00A0;psb_krylov(&#8217;BICGSTAB&#8217;,A,P,b,x,tol,desc_A,info)
</pre>
<!--l. 448--><p class="nopar" ></div></div>
<br /> <div class="caption"
><span class="id">Listing 5: </span><span
class="content">setup of a one-level Schwarz preconditioner.</span></div><!--tex4ht:label?: x16-15001r5 -->
>>>>>>> development
</div><hr class="endfloat" />
<!--l. 72--><div class="crosslinks"><p class="noindent"><span
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu8.html" ><span href="userhtmlsu6.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu6.html#tailuserhtmlsu6.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlsu7.html" ><span href="userhtmlsu7.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse5.html#userhtmlsu7.html" ><span href="userhtmlse4.html#userhtmlsu7.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 72--><p class="indent" > <a <!--l. 1--><p class="indent" > <a
id="tailuserhtmlsu7.html"></a> id="tailuserhtmlsu7.html"></a>
</body></html> </body></html>

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method set</title> <head><title>Method init</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
@ -10,17 +10,11 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 72--><div class="crosslinks"><p class="noindent"><span <!--l. 42--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu9.html" ><span href="userhtmlsu9.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlsu7.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu7.html#tailuserhtmlsu7.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
href="#tailuserhtmlsu8.html"><span href="#tailuserhtmlsu8.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
@ -28,54 +22,36 @@ href="userhtmlse5.html#userhtmlsu8.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">5.2 </span></span> <a class="cmr-12">5.1 </span></span> <a
id="x18-170005.2"></a><span id="x18-170005.1"></a><span
class="cmr-12">Method set</span></h4> class="cmr-12">Method init</span></h4>
<div class="center" <div class="center"
> >
<!--l. 74--><p class="noindent" > <!--l. 44--><p class="noindent" >
<!--l. 75--><p class="noindent" ><span class="lstinline"></span><span <!--l. 45--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span class="cmtt-12">p</span><span
class="cmtt-12">%</span><span class="cmtt-12">%</span><span
class="cmtt-12">set</span><span class="cmtt-12">init</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">what</span><span class="cmtt-12">contxt</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">val</span><span class="cmtt-12">ptype</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">info</span><span class="cmtt-12">info</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">)</span></div>
class="cmtt-12">[,</span><span <!--l. 48--><p class="noindent" ><span
class="cmtt-12">ilev</span><span class="cmr-12">This method allocates and initializes the preconditioner </span><span class="lstinline"></span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">ilmax</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">pos</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">idx</span><span
class="cmtt-12">])</span></div>
<!--l. 78--><p class="noindent" ><span
class="cmr-12">This method sets the parameters defining the preconditioner </span><span class="lstinline"></span><span
class="cmtt-12">p</span><span class="cmtt-12">p</span><span
class="cmr-12">. More precisely, the</span> class="cmr-12">, according to the</span>
<span <span
class="cmr-12">parameter identified by </span><span class="lstinline"></span><span class="cmr-12">preconditioner type chosen by the user.</span>
class="cmtt-12">what</span> <span <!--l. 52--><p class="noindent" ><span
class="cmr-12">is assigned the value contained in </span><span class="lstinline"></span><span
class="cmtt-12">val</span><span
class="cmr-12">.</span>
<!--l. 83--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-2" class="tabular"
<div class="tabular"> <table id="TBL-3" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
<<<<<<< HEAD
><colgroup id="TBL-3-1g"><col ><colgroup id="TBL-3-1g"><col
id="TBL-3-1"><col id="TBL-3-1"><col
id="TBL-3-2"></colgroup><tr id="TBL-3-2"></colgroup><tr
@ -223,11 +199,25 @@ class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span class="cmtt-12">optional</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
=======
><colgroup id="TBL-2-1g"><col
id="TBL-2-1"><col
id="TBL-2-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-2-1-"><td style="white-space:normal; text-align:left;" id="TBL-2-1-1"
class="td11"><!--l. 56--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">contxt</span> </td> <td style="white-space:normal; text-align:left;" id="TBL-2-1-2"
class="td11"><!--l. 56--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_ctxt_type</span><span
class="cmtt-12">),</span><span
>>>>>>> development
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">in</span><span class="cmtt-12">in</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
<<<<<<< HEAD
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-3-10-"><td style="white-space:normal; text-align:left;" id="TBL-3-10-1" style="vertical-align:baseline;" id="TBL-3-10-"><td style="white-space:normal; text-align:left;" id="TBL-3-10-1"
@ -262,17 +252,27 @@ class="cmr-12">one, i.e., level 1 is the finest level.</span>
class="td11"><!--l. 117--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 117--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">pos</span> </td><td style="white-space:normal; text-align:left;" id="TBL-3-11-2" class="cmtt-12">pos</span> </td><td style="white-space:normal; text-align:left;" id="TBL-3-11-2"
class="td11"><!--l. 117--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 117--><p class="noindent" ><span class="lstinline"></span><span
=======
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-2-"><td style="white-space:normal; text-align:left;" id="TBL-2-2-1"
class="td11"><!--l. 57--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-2-2-2"
class="td11"><!--l. 57--><p class="noindent" ><span
class="cmr-12">The communication context.</span> </td></tr><tr
style="vertical-align:baseline;" id="TBL-2-3-"><td style="white-space:normal; text-align:left;" id="TBL-2-3-1"
class="td11"><!--l. 58--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">ptype</span> </td> <td style="white-space:normal; text-align:left;" id="TBL-2-3-2"
class="td11"><!--l. 58--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">character</span><span class="cmtt-12">character</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">len</span><span class="cmtt-12">len</span><span
class="cmtt-12">=*),</span><span class="cmtt-12">=*),</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">in</span><span class="cmtt-12">in</span><span
<<<<<<< HEAD
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
@ -307,18 +307,39 @@ class="cmr-12">is ignored.</span> </td>
class="td11"><!--l. 123--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 123--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">idx</span> </td><td style="white-space:normal; text-align:left;" id="TBL-3-13-2" class="cmtt-12">idx</span> </td><td style="white-space:normal; text-align:left;" id="TBL-3-13-2"
class="td11"><!--l. 123--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 123--><p class="noindent" ><span class="lstinline"></span><span
=======
class="cmtt-12">)</span> <span
class="cmr-12">.</span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-4-"><td style="white-space:normal; text-align:left;" id="TBL-2-4-1"
class="td11"><!--l. 59--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-2-4-2"
class="td11"><!--l. 59--><p class="noindent" ><span
class="cmr-12">The type of preconditioner. Its values are specified in Table</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse4.html#x14-13015r1"><span
class="cmr-12">1</span><!--tex4ht:ref: tab:precinit --></a><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-5-"><td style="white-space:normal; text-align:left;" id="TBL-2-5-1"
class="td11"><!--l. 61--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-2-5-2"
class="td11"><!--l. 61--><p class="noindent" ><span
class="cmr-12">Note that strings are case insensitive.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-6-"><td style="white-space:normal; text-align:left;" id="TBL-2-6-1"
class="td11"><!--l. 62--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-2-6-2"
class="td11"><!--l. 62--><p class="noindent" ><span class="lstinline"></span><span
>>>>>>> development
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
class="cmtt-12">in</span><span class="cmtt-12">out</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
<<<<<<< HEAD
style="vertical-align:baseline;" id="TBL-3-14-"><td style="white-space:normal; text-align:left;" id="TBL-3-14-1" style="vertical-align:baseline;" id="TBL-3-14-"><td style="white-space:normal; text-align:left;" id="TBL-3-14-1"
class="td11"><!--l. 124--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-3-14-2" class="td11"><!--l. 124--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-3-14-2"
class="td11"><!--l. 124--><p class="noindent" ><span class="td11"><!--l. 124--><p class="noindent" ><span
@ -1463,15 +1484,26 @@ class="td11"> </td></tr></table>
<br /> <div class="caption" <br /> <div class="caption"
><span class="id">Table&#x00A0;5: </span><span ><span class="id">Table&#x00A0;5: </span><span
class="content">Parameters defining the solver at the coarsest level (continued).</span></div><!--tex4ht:label?: x18-17012r5 --> class="content">Parameters defining the solver at the coarsest level (continued).</span></div><!--tex4ht:label?: x18-17012r5 -->
=======
style="vertical-align:baseline;" id="TBL-2-7-"><td style="white-space:normal; text-align:left;" id="TBL-2-7-1"
class="td11"><!--l. 63--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-2-7-2"
class="td11"><!--l. 63--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x28-320007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-8-"><td style="white-space:normal; text-align:left;" id="TBL-2-8-1"
class="td11"> </td> </tr></table></div>
>>>>>>> development
</div><hr class="endfloat" />
</div>
<div class="table">
<<<<<<< HEAD
<!--l. 496--><p class="indent" > <a <!--l. 496--><p class="indent" > <a
id="x18-17013r6"></a><hr class="float"><div class="float" id="x18-17013r6"></a><hr class="float"><div class="float"
> >
@ -2565,22 +2597,19 @@ class="content">Parameters defining the smoother or the details of the one-level
<!--l. 674--><div class="crosslinks"><p class="noindent"><span <!--l. 674--><div class="crosslinks"><p class="noindent"><span
=======
<!--l. 72--><div class="crosslinks"><p class="noindent"><span
>>>>>>> development
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu9.html" ><span href="userhtmlsu9.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlsu7.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu7.html#tailuserhtmlsu7.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu8.html" ><span href="userhtmlsu8.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse5.html#userhtmlsu8.html" ><span href="userhtmlse5.html#userhtmlsu8.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 674--><p class="indent" > <a <!--l. 72--><p class="indent" > <a
id="tailuserhtmlsu8.html"></a> id="tailuserhtmlsu8.html"></a>
</body></html> </body></html>

File diff suppressed because it is too large Load Diff

@ -48,7 +48,7 @@ work in the expected way. Our advice is first to download the LAPACK tarfile fro
\href{http://www.netlib.org/lapack}{www.netlib.org/lapack} and install it independently of ATLAS. In this case, \href{http://www.netlib.org/lapack}{www.netlib.org/lapack} and install it independently of ATLAS. In this case,
you need to modify the OPTS and NOOPT definitions for including -fPIC compilation option you need to modify the OPTS and NOOPT definitions for including -fPIC compilation option
in the make.inc file of the LAPACK library. in the make.inc file of the LAPACK library.
\item[MPI] \cite{MPI2,MPI1} A version of MPI is available on most \item[MPI] \cite{MPI2,MPI1} A version of MPI is available on most
high-performance computing systems. high-performance computing systems.
\item[PSBLAS] \cite{PSBLASGUIDE,psblas_00} Parallel Sparse BLAS (PSBLAS) is \item[PSBLAS] \cite{PSBLASGUIDE,psblas_00} Parallel Sparse BLAS (PSBLAS) is
available from available from
@ -61,6 +61,18 @@ Please note that the four previous libraries must have Fortran
interfaces compatible with AMG4PSBLAS; usually this means that they interfaces compatible with AMG4PSBLAS; usually this means that they
should all be built with the same compiler being used for AMG4PSBLAS. 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:
\begin{description}
\item[PSBLAS-EXT] Parallel Sparse BLAS (PSBLAS) Extensions,
available from
\href{https://psctoolkit.github.io/products/psblasext/}{psctoolkit.github.io/products/psblasext/}; version 1.3.0 (or later).
\item[SPGPU] Sparse CUDA kernels for NVIDIA GPUs; available from
GitHub, see also
\href{https://psctoolkit.github.io/products/psblasext/}{psctoolkit.github.io/products/psblasext/}.
\end{description}
See also Sec~\ref{sec:gpu-example}.
\subsection{Optional third party libraries\label{sec:third-party}} \subsection{Optional third party libraries\label{sec:third-party}}
We provide interfaces to the following third-party software libraries; We provide interfaces to the following third-party software libraries;

@ -416,6 +416,45 @@ call P%build(A,desc_A,info)
\end{listing} \end{listing}
\subsection{GPU example\label{sec:gpu-example}}
The code reported in Figure~\ref{fig:gpu-ex1} shows how to set up a
program exploiting the combined GPU capabilities of PSBLAS and
AMG4PSBLAS.
\begin{listing}[h!]
\ifpdf
\begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran}
! build a one-level RAS with overlap 2 and ILU(0) on the local blocks.
call P%init('AS',info)
call P%set('SUB_OVR',2,info)
call P%build(A,desc_A,info)
... ...
! solve Ax=b with preconditioned BiCGSTAB
call psb_krylov('BICGSTAB',A,P,b,x,tol,desc_A,info)
\end{minted}
\else
\begin{center}
\begin{minipage}{.90\textwidth}
{\small
\begin{verbatim}
! build a one-level RAS with overlap 2 and ILU(0) on the local blocks.
call P%init('AS',info)
call P%set('SUB_OVR',2,info)
call P%build(A,desc_A,info)
... ...
! solve Ax=b with preconditioned BiCGSTAB
call psb_krylov('BICGSTAB',A,P,b,x,tol,desc_A,info)
\end{verbatim}
}
\end{minipage}
\end{center}
\fi
\caption{setup of a one-level Schwarz preconditioner.\label{fig:gpu-ex1}}
\end{listing}
%%% Local Variables: %%% Local Variables:
%%% mode: latex %%% mode: latex
%%% TeX-master: "userguide" %%% TeX-master: "userguide"

Loading…
Cancel
Save