Compare commits

..
15 Commits
109 changed files with 5325 additions and 2432 deletions
+2 -2
View File
@@ -126,7 +126,7 @@ module amg_c_base_aggregator_mod
& psb_c_coo_sparse_mat, amg_sml_parms, psb_spk_, psb_ipk_, psb_lpk_ & psb_c_coo_sparse_mat, amg_sml_parms, psb_spk_, psb_ipk_, psb_lpk_
implicit none implicit none
type(psb_c_csr_sparse_mat), intent(inout) :: a_csr type(psb_c_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_c_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr type(psb_c_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
@@ -144,7 +144,7 @@ module amg_c_base_aggregator_mod
& psb_c_coo_sparse_mat, amg_sml_parms, psb_spk_, psb_ipk_, psb_lpk_ & psb_c_coo_sparse_mat, amg_sml_parms, psb_spk_, psb_ipk_, psb_lpk_
implicit none implicit none
type(psb_c_csr_sparse_mat), intent(inout) :: a_csr type(psb_c_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_c_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr type(psb_c_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
+2 -2
View File
@@ -126,7 +126,7 @@ module amg_d_base_aggregator_mod
& psb_d_coo_sparse_mat, amg_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_ & psb_d_coo_sparse_mat, amg_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_
implicit none implicit none
type(psb_d_csr_sparse_mat), intent(inout) :: a_csr type(psb_d_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_d_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr type(psb_d_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
@@ -144,7 +144,7 @@ module amg_d_base_aggregator_mod
& psb_d_coo_sparse_mat, amg_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_ & psb_d_coo_sparse_mat, amg_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_
implicit none implicit none
type(psb_d_csr_sparse_mat), intent(inout) :: a_csr type(psb_d_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_d_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr type(psb_d_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
+7 -4
View File
@@ -118,6 +118,7 @@ module dmatchboxp_mod
module procedure dPMatchBox module procedure dPMatchBox
end interface PMatchBox end interface PMatchBox
logical, parameter, private :: print_statistics=.false.
contains contains
subroutine dmatchboxp_build_prol(w,a,desc_a,ilaggr,nlaggr,prol,info,& subroutine dmatchboxp_build_prol(w,a,desc_a,ilaggr,nlaggr,prol,info,&
@@ -421,11 +422,13 @@ contains
nlpairs = v(3) nlpairs = v(3)
end block end block
if (iam == 0) then if (print_statistics) then
write(0,*) 'Matching statistics: Unmatched nodes ',& if (iam == 0) then
& nunmatched,' Singletons:',nlsingl,' Pairs:',nlpairs write(0,*) 'Matching statistics: Unmatched nodes ',&
& nunmatched,' Singletons:',nlsingl,' Pairs:',nlpairs
end if
end if end if
if (display_out_) then if (display_out_) then
block block
integer(psb_ipk_) :: idx integer(psb_ipk_) :: idx
+8 -8
View File
@@ -168,7 +168,7 @@ module amg_d_parmatch_aggregator_mod
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(inout) :: a type(psb_dspmat_type), intent(inout) :: a
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_ldspmat_type), intent(out) :: t_prol type(psb_ldspmat_type), intent(out) :: t_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -235,7 +235,7 @@ module amg_d_parmatch_aggregator_mod
& psb_ldspmat_type, psb_dpk_, psb_ipk_, psb_lpk_, amg_dml_parms, amg_daggr_data & psb_ldspmat_type, psb_dpk_, psb_ipk_, psb_lpk_, amg_dml_parms, amg_daggr_data
implicit none implicit none
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(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: t_prol type(psb_ldspmat_type), intent(inout) :: t_prol
@@ -257,7 +257,7 @@ module amg_d_parmatch_aggregator_mod
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: t_prol type(psb_ldspmat_type), intent(inout) :: t_prol
type(psb_dspmat_type), intent(out) :: op_prol,ac, op_restr type(psb_dspmat_type), intent(inout) :: op_prol,ac, op_restr
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine amg_d_parmatch_unsmth_bld end subroutine amg_d_parmatch_unsmth_bld
@@ -275,7 +275,7 @@ module amg_d_parmatch_aggregator_mod
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: t_prol type(psb_ldspmat_type), intent(inout) :: t_prol
type(psb_dspmat_type), intent(out) :: op_prol,ac, op_restr type(psb_dspmat_type), intent(inout) :: op_prol,ac, op_restr
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine amg_d_parmatch_smth_bld end subroutine amg_d_parmatch_smth_bld
@@ -288,11 +288,11 @@ module amg_d_parmatch_aggregator_mod
& psb_ldspmat_type, psb_dpk_, psb_ipk_, psb_lpk_, amg_dml_parms, amg_daggr_data & psb_ldspmat_type, psb_dpk_, psb_ipk_, psb_lpk_, amg_dml_parms, amg_daggr_data
implicit none implicit none
type(psb_dspmat_type), intent(inout) :: a type(psb_dspmat_type), intent(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: t_prol type(psb_ldspmat_type), intent(inout) :: t_prol
type(psb_dspmat_type), intent(out) :: op_prol,ac, op_restr type(psb_dspmat_type), intent(inout) :: op_prol,ac, op_restr
type(psb_desc_type), intent(out) :: desc_ac type(psb_desc_type), intent(out) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine amg_d_parmatch_spmm_bld_ov end subroutine amg_d_parmatch_spmm_bld_ov
@@ -306,11 +306,11 @@ module amg_d_parmatch_aggregator_mod
& psb_d_csr_sparse_mat, psb_ld_csr_sparse_mat & psb_d_csr_sparse_mat, psb_ld_csr_sparse_mat
implicit none implicit none
type(psb_d_csr_sparse_mat), intent(inout) :: a type(psb_d_csr_sparse_mat), intent(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: t_prol type(psb_ldspmat_type), intent(inout) :: t_prol
type(psb_dspmat_type), intent(out) :: op_prol,ac, op_restr type(psb_dspmat_type), intent(inout) :: op_prol,ac, op_restr
type(psb_desc_type), intent(out) :: desc_ac type(psb_desc_type), intent(out) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine amg_d_parmatch_spmm_bld_inner end subroutine amg_d_parmatch_spmm_bld_inner
+2 -2
View File
@@ -126,7 +126,7 @@ module amg_s_base_aggregator_mod
& psb_s_coo_sparse_mat, amg_sml_parms, psb_spk_, psb_ipk_, psb_lpk_ & psb_s_coo_sparse_mat, amg_sml_parms, psb_spk_, psb_ipk_, psb_lpk_
implicit none implicit none
type(psb_s_csr_sparse_mat), intent(inout) :: a_csr type(psb_s_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_s_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr type(psb_s_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
@@ -144,7 +144,7 @@ module amg_s_base_aggregator_mod
& psb_s_coo_sparse_mat, amg_sml_parms, psb_spk_, psb_ipk_, psb_lpk_ & psb_s_coo_sparse_mat, amg_sml_parms, psb_spk_, psb_ipk_, psb_lpk_
implicit none implicit none
type(psb_s_csr_sparse_mat), intent(inout) :: a_csr type(psb_s_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_s_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr type(psb_s_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
+7 -4
View File
@@ -118,6 +118,7 @@ module smatchboxp_mod
module procedure sPMatchBox module procedure sPMatchBox
end interface PMatchBox end interface PMatchBox
logical, parameter, private :: print_statistics=.false.
contains contains
subroutine smatchboxp_build_prol(w,a,desc_a,ilaggr,nlaggr,prol,info,& subroutine smatchboxp_build_prol(w,a,desc_a,ilaggr,nlaggr,prol,info,&
@@ -421,11 +422,13 @@ contains
nlpairs = v(3) nlpairs = v(3)
end block end block
if (iam == 0) then if (print_statistics) then
write(0,*) 'Matching statistics: Unmatched nodes ',& if (iam == 0) then
& nunmatched,' Singletons:',nlsingl,' Pairs:',nlpairs write(0,*) 'Matching statistics: Unmatched nodes ',&
& nunmatched,' Singletons:',nlsingl,' Pairs:',nlpairs
end if
end if end if
if (display_out_) then if (display_out_) then
block block
integer(psb_ipk_) :: idx integer(psb_ipk_) :: idx
+8 -8
View File
@@ -168,7 +168,7 @@ module amg_s_parmatch_aggregator_mod
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(inout) :: a type(psb_sspmat_type), intent(inout) :: a
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_lsspmat_type), intent(out) :: t_prol type(psb_lsspmat_type), intent(out) :: t_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -235,7 +235,7 @@ module amg_s_parmatch_aggregator_mod
& psb_lsspmat_type, psb_dpk_, psb_ipk_, psb_lpk_, amg_sml_parms, amg_saggr_data & psb_lsspmat_type, psb_dpk_, psb_ipk_, psb_lpk_, amg_sml_parms, amg_saggr_data
implicit none implicit none
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(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: t_prol type(psb_lsspmat_type), intent(inout) :: t_prol
@@ -257,7 +257,7 @@ module amg_s_parmatch_aggregator_mod
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: t_prol type(psb_lsspmat_type), intent(inout) :: t_prol
type(psb_sspmat_type), intent(out) :: op_prol,ac, op_restr type(psb_sspmat_type), intent(inout) :: op_prol,ac, op_restr
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine amg_s_parmatch_unsmth_bld end subroutine amg_s_parmatch_unsmth_bld
@@ -275,7 +275,7 @@ module amg_s_parmatch_aggregator_mod
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: t_prol type(psb_lsspmat_type), intent(inout) :: t_prol
type(psb_sspmat_type), intent(out) :: op_prol,ac, op_restr type(psb_sspmat_type), intent(inout) :: op_prol,ac, op_restr
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine amg_s_parmatch_smth_bld end subroutine amg_s_parmatch_smth_bld
@@ -288,11 +288,11 @@ module amg_s_parmatch_aggregator_mod
& psb_lsspmat_type, psb_dpk_, psb_ipk_, psb_lpk_, amg_sml_parms, amg_saggr_data & psb_lsspmat_type, psb_dpk_, psb_ipk_, psb_lpk_, amg_sml_parms, amg_saggr_data
implicit none implicit none
type(psb_sspmat_type), intent(inout) :: a type(psb_sspmat_type), intent(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: t_prol type(psb_lsspmat_type), intent(inout) :: t_prol
type(psb_sspmat_type), intent(out) :: op_prol,ac, op_restr type(psb_sspmat_type), intent(inout) :: op_prol,ac, op_restr
type(psb_desc_type), intent(out) :: desc_ac type(psb_desc_type), intent(out) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine amg_s_parmatch_spmm_bld_ov end subroutine amg_s_parmatch_spmm_bld_ov
@@ -306,11 +306,11 @@ module amg_s_parmatch_aggregator_mod
& psb_s_csr_sparse_mat, psb_ls_csr_sparse_mat & psb_s_csr_sparse_mat, psb_ls_csr_sparse_mat
implicit none implicit none
type(psb_s_csr_sparse_mat), intent(inout) :: a type(psb_s_csr_sparse_mat), intent(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: t_prol type(psb_lsspmat_type), intent(inout) :: t_prol
type(psb_sspmat_type), intent(out) :: op_prol,ac, op_restr type(psb_sspmat_type), intent(inout) :: op_prol,ac, op_restr
type(psb_desc_type), intent(out) :: desc_ac type(psb_desc_type), intent(out) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
end subroutine amg_s_parmatch_spmm_bld_inner end subroutine amg_s_parmatch_spmm_bld_inner
+2 -2
View File
@@ -126,7 +126,7 @@ module amg_z_base_aggregator_mod
& psb_z_coo_sparse_mat, amg_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_ & psb_z_coo_sparse_mat, amg_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_
implicit none implicit none
type(psb_z_csr_sparse_mat), intent(inout) :: a_csr type(psb_z_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_z_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr type(psb_z_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
@@ -144,7 +144,7 @@ module amg_z_base_aggregator_mod
& psb_z_coo_sparse_mat, amg_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_ & psb_z_coo_sparse_mat, amg_dml_parms, psb_dpk_, psb_ipk_, psb_lpk_
implicit none implicit none
type(psb_z_csr_sparse_mat), intent(inout) :: a_csr type(psb_z_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: nlaggr(:) integer(psb_lpk_), intent(inout) :: nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_z_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr type(psb_z_coo_sparse_mat), intent(inout) :: coo_prol, coo_restr
@@ -83,8 +83,8 @@ subroutine amg_c_dec_aggregator_build_tprol(ag,parms,ag_data,&
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(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_lcspmat_type), intent(out) :: t_prol type(psb_lcspmat_type), intent(out) :: t_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -86,8 +86,8 @@ subroutine amg_c_symdec_aggregator_build_tprol(ag,parms,ag_data,&
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(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_lcspmat_type), intent(out) :: op_prol type(psb_lcspmat_type), intent(out) :: op_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -105,7 +105,7 @@
! !
! !
subroutine amg_caggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine amg_caggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use amg_base_prec_type use amg_base_prec_type
use amg_c_inner_mod, amg_protect_name => amg_caggrmat_minnrg_bld use amg_c_inner_mod, amg_protect_name => amg_caggrmat_minnrg_bld
@@ -117,8 +117,8 @@ subroutine amg_caggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lcspmat_type), intent(inout) :: op_prol type(psb_lcspmat_type), intent(inout) :: t_prol
type(psb_lcspmat_type), intent(out) :: ac,op_restr type(psb_cspmat_type), intent(inout) :: op_prol, ac,op_restr
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -171,6 +171,8 @@ subroutine amg_caggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
filter_mat = (parms%aggr_filter == amg_filter_mat_) filter_mat = (parms%aggr_filter == amg_filter_mat_)
!NEEDS TO BE REWORKED !!
! naggr: number of local aggregates ! naggr: number of local aggregates
! nrow: local rows. ! nrow: local rows.
! !
@@ -183,361 +185,361 @@ subroutine amg_caggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
goto 9999 goto 9999
end if end if
! Get the diagonal D !!$ ! Get the diagonal D
adiag = a%get_diag(info) !!$ adiag = a%get_diag(info)
if (info == psb_success_) & !!$ if (info == psb_success_) &
& call psb_realloc(ncol,adiag,info) !!$ & call psb_realloc(ncol,adiag,info)
if (info == psb_success_) & !!$ if (info == psb_success_) &
& call psb_halo(adiag,desc_a,info) !!$ & call psb_halo(adiag,desc_a,info)
if (info == psb_success_) call a%cp_to_l(la) !!$ if (info == psb_success_) call a%cp_to_l(la)
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
do i=1,size(adiag) !!$ do i=1,size(adiag)
if (adiag(i) /= czero) then !!$ if (adiag(i) /= czero) then
adinv(i) = cone / adiag(i) !!$ adinv(i) = cone / adiag(i)
else !!$ else
adinv(i) = cone !!$ adinv(i) = cone
end if !!$ end if
end do !!$ end do
!!$
!!$
!!$
! 1. Allocate Ptilde in sparse matrix form !!$ ! 1. Allocate Ptilde in sparse matrix form
call op_prol%mv_to(tmpcoo) !!$ call op_prol%mv_to(tmpcoo)
call ptilde%mv_from(tmpcoo) !!$ call ptilde%mv_from(tmpcoo)
call ptilde%cscnv(info,type='csr') !!$ call ptilde%cscnv(info,type='csr')
!!$
if (info == psb_success_) call la%cscnv(am3,info,type='csr',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call la%cscnv(am3,info,type='csr',dupl=psb_dupl_add_)
if (info == psb_success_) call la%cscnv(da,info,type='csr',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call la%cscnv(da,info,type='csr',dupl=psb_dupl_add_)
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='spcnv') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='spcnv')
goto 9999 !!$ goto 9999
end if !!$ end if
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& ' Initial copies done.' !!$ & ' Initial copies done.'
!!$
call da%scal(adinv,info) !!$ call da%scal(adinv,info)
!!$
call psb_spspmm(da,ptilde,dap,info) !!$ call psb_spspmm(da,ptilde,dap,info)
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='spspmm 1') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='spspmm 1')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
call dap%clone(atmp,info) !!$ call dap%clone(atmp,info)
!!$
call psb_sphalo(atmp,desc_a,am4,info,& !!$ call psb_sphalo(atmp,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.,outfmt='CSR ') !!$ & colcnv=.false.,rowscale=.true.,outfmt='CSR ')
if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
call psb_spspmm(da,atmp,dadap,info) !!$ call psb_spspmm(da,atmp,dadap,info)
call atmp%free() !!$ call atmp%free()
!!$
! !$ write(0,*) 'Columns of AP',psb_sp_get_ncols(ap) !!$ ! !$ write(0,*) 'Columns of AP',psb_sp_get_ncols(ap)
! !$ write(0,*) 'Columns of ADAP',psb_sp_get_ncols(adap) !!$ ! !$ write(0,*) 'Columns of ADAP',psb_sp_get_ncols(adap)
call dap%mv_to(csc_dap) !!$ call dap%mv_to(csc_dap)
call dadap%mv_to(csc_dadap) !!$ call dadap%mv_to(csc_dadap)
!!$
call csc_mat_col_prod(csc_dap,csc_dadap,omp,info) !!$ call csc_mat_col_prod(csc_dap,csc_dadap,omp,info)
call csc_mat_col_prod(csc_dadap,csc_dadap,oden,info) !!$ call csc_mat_col_prod(csc_dadap,csc_dadap,oden,info)
call psb_sum(ctxt,omp) !!$ call psb_sum(ctxt,omp)
call psb_sum(ctxt,oden) !!$ call psb_sum(ctxt,oden)
! !$ write(0,*) trim(name),' OMP :',omp !!$ ! !$ write(0,*) trim(name),' OMP :',omp
! !$ write(0,*) trim(name),' ODEN:',oden !!$ ! !$ write(0,*) trim(name),' ODEN:',oden
!!$
omp = omp/oden !!$ omp = omp/oden
!!$
! !$ write(0,*) 'Check on output prolongator ',omp(1:min(size(omp),10)) !!$ ! !$ write(0,*) 'Check on output prolongator ',omp(1:min(size(omp),10))
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done NUMBMM 1' !!$ & 'Done NUMBMM 1'
!!$
call am3%mv_to(acsr3) !!$ call am3%mv_to(acsr3)
! Compute omega_int !!$ ! Compute omega_int
ommx = czero !!$ ommx = czero
do i=1, ncol !!$ do i=1, ncol
if (ilaggr(i) >0) then !!$ if (ilaggr(i) >0) then
omi(i) = omp(ilaggr(i)) !!$ omi(i) = omp(ilaggr(i))
else !!$ else
omi(i) = czero !!$ omi(i) = czero
end if !!$ end if
if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i) !!$ if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i)
end do !!$ end do
! Compute omega_fine !!$ ! Compute omega_fine
do i=1, nrow !!$ do i=1, nrow
omf(i) = ommx !!$ omf(i) = ommx
do j=acsr3%irp(i),acsr3%irp(i+1)-1 !!$ do j=acsr3%irp(i),acsr3%irp(i+1)-1
if(abs(omi(acsr3%ja(j))) .lt. abs(omf(i))) omf(i)=omi(acsr3%ja(j)) !!$ if(abs(omi(acsr3%ja(j))) .lt. abs(omf(i))) omf(i)=omi(acsr3%ja(j))
end do !!$ end do
!!$ if(min(real(omf(i)),aimag(omf(i))) < szero) omf(i) = czero !!$ ! ! if(min(real(omf(i)),aimag(omf(i))) < szero) omf(i) = czero
if(psb_minreal(omf(i)) < szero) omf(i) = czero !!$ if(psb_minreal(omf(i)) < szero) omf(i) = czero
end do !!$ end do
!!$
omf(1:nrow) = omf(1:nrow) * adinv(1:nrow) !!$ omf(1:nrow) = omf(1:nrow) * adinv(1:nrow)
!!$
if (filter_mat) then !!$ if (filter_mat) then
! !!$ !
! Build the filtered matrix Af from A !!$ ! Build the filtered matrix Af from A
! !!$ !
call la%cscnv(acsrf,info,dupl=psb_dupl_add_) !!$ call la%cscnv(acsrf,info,dupl=psb_dupl_add_)
!!$
do i=1,nrow !!$ do i=1,nrow
tmp = czero !!$ tmp = czero
jd = -1 !!$ jd = -1
do j=acsrf%irp(i),acsrf%irp(i+1)-1 !!$ do j=acsrf%irp(i),acsrf%irp(i+1)-1
if (acsrf%ja(j) == i) jd = j !!$ if (acsrf%ja(j) == i) jd = j
if (abs(acsrf%val(j)) < theta*sqrt(abs(adiag(i)*adiag(acsrf%ja(j))))) then !!$ if (abs(acsrf%val(j)) < theta*sqrt(abs(adiag(i)*adiag(acsrf%ja(j))))) then
tmp=tmp+acsrf%val(j) !!$ tmp=tmp+acsrf%val(j)
acsrf%val(j)=czero !!$ acsrf%val(j)=czero
endif !!$ endif
enddo !!$ enddo
if (jd == -1) then !!$ if (jd == -1) then
write(0,*) 'Wrong input: we need the diagonal!!!!', i !!$ write(0,*) 'Wrong input: we need the diagonal!!!!', i
else !!$ else
acsrf%val(jd)=acsrf%val(jd)-tmp !!$ acsrf%val(jd)=acsrf%val(jd)-tmp
end if !!$ end if
enddo !!$ enddo
! Take out zeroed terms !!$ ! Take out zeroed terms
call acsrf%clean_zeros(info) !!$ call acsrf%clean_zeros(info)
!!$
! !!$ !
! Build the smoothed prolongator using the filtered matrix !!$ ! Build the smoothed prolongator using the filtered matrix
! !!$ !
do i=1,acsrf%get_nrows() !!$ do i=1,acsrf%get_nrows()
do j=acsrf%irp(i),acsrf%irp(i+1)-1 !!$ do j=acsrf%irp(i),acsrf%irp(i+1)-1
if (acsrf%ja(j) == i) then !!$ if (acsrf%ja(j) == i) then
acsrf%val(j) = cone - omf(i)*acsrf%val(j) !!$ acsrf%val(j) = cone - omf(i)*acsrf%val(j)
else !!$ else
acsrf%val(j) = - omf(i)*acsrf%val(j) !!$ acsrf%val(j) = - omf(i)*acsrf%val(j)
end if !!$ end if
end do !!$ end do
end do !!$ end do
!!$
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done gather, going for SYMBMM 1' !!$ & 'Done gather, going for SYMBMM 1'
!!$
call af%mv_from(acsrf) !!$ call af%mv_from(acsrf)
! !!$ !
! op_prol = (I-w*D*Af)Ptilde !!$ ! op_prol = (I-w*D*Af)Ptilde
! Doing it this way means to consider diag(Af_i) !!$ ! Doing it this way means to consider diag(Af_i)
! !!$ !
! !!$ !
call psb_spspmm(af,ptilde,op_prol,info) !!$ call psb_spspmm(af,ptilde,op_prol,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done SPSPMM 1' !!$ & 'Done SPSPMM 1'
else !!$ else
! !!$ !
! Build the smoothed prolongator using the original matrix !!$ ! Build the smoothed prolongator using the original matrix
! !!$ !
do i=1,acsr3%get_nrows() !!$ do i=1,acsr3%get_nrows()
do j=acsr3%irp(i),acsr3%irp(i+1)-1 !!$ do j=acsr3%irp(i),acsr3%irp(i+1)-1
if (acsr3%ja(j) == i) then !!$ if (acsr3%ja(j) == i) then
acsr3%val(j) = cone - omf(i)*acsr3%val(j) !!$ acsr3%val(j) = cone - omf(i)*acsr3%val(j)
else !!$ else
acsr3%val(j) = - omf(i)*acsr3%val(j) !!$ acsr3%val(j) = - omf(i)*acsr3%val(j)
end if !!$ end if
end do !!$ end do
end do !!$ end do
!!$
call am3%mv_from(acsr3) !!$ call am3%mv_from(acsr3)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done gather, going for SYMBMM 1' !!$ & 'Done gather, going for SYMBMM 1'
! !!$ !
! !!$ !
! op_prol = (I-w*D*A)Ptilde !!$ ! op_prol = (I-w*D*A)Ptilde
! !!$ !
! !!$ !
call psb_spspmm(am3,ptilde,op_prol,info) !!$ call psb_spspmm(am3,ptilde,op_prol,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done NUMBMM 1' !!$ & 'Done NUMBMM 1'
!!$
end if !!$ end if
!!$
!!$
! !!$ !
! Ok, let's start over with the restrictor !!$ ! Ok, let's start over with the restrictor
! !!$ !
call ptilde%transc(rtilde) !!$ call ptilde%transc(rtilde)
call la%cscnv(atmp,info,type='csr') !!$ call la%cscnv(atmp,info,type='csr')
call psb_sphalo(atmp,desc_a,am4,info,& !!$ call psb_sphalo(atmp,desc_a,am4,info,&
& colcnv=.true.,rowscale=.true.) !!$ & colcnv=.true.,rowscale=.true.)
nrt = am4%get_nrows() !!$ nrt = am4%get_nrows()
call am4%csclip(atmp2,info,lone,nrt,lone,ncol) !!$ call am4%csclip(atmp2,info,lone,nrt,lone,ncol)
call atmp2%cscnv(info,type='CSR') !!$ call atmp2%cscnv(info,type='CSR')
if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=atmp2) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=atmp2)
call am4%free() !!$ call am4%free()
call atmp2%free() !!$ call atmp2%free()
!!$
! This is to compute the transpose. It ONLY works if the !!$ ! This is to compute the transpose. It ONLY works if the
! original A has a symmetric pattern. !!$ ! original A has a symmetric pattern.
call atmp%transc(atmp2) !!$ call atmp%transc(atmp2)
call atmp2%csclip(dat,info,lone,nrow,lone,ncol) !!$ call atmp2%csclip(dat,info,lone,nrow,lone,ncol)
call dat%cscnv(info,type='csr') !!$ call dat%cscnv(info,type='csr')
call dat%scal(adinv,info) !!$ call dat%scal(adinv,info)
!!$
! Now for the product. !!$ ! Now for the product.
call psb_spspmm(dat,ptilde,datp,info) !!$ call psb_spspmm(dat,ptilde,datp,info)
!!$
call datp%clone(atmp2,info) !!$ call datp%clone(atmp2,info)
call psb_sphalo(atmp2,desc_a,am4,info,& !!$ call psb_sphalo(atmp2,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.,outfmt='CSR ') !!$ & colcnv=.false.,rowscale=.true.,outfmt='CSR ')
if (info == psb_success_) call psb_rwextd(ncol,atmp2,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp2,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
!!$
call psb_symbmm(dat,atmp2,datdatp,info) !!$ call psb_symbmm(dat,atmp2,datdatp,info)
call psb_numbmm(dat,atmp2,datdatp) !!$ call psb_numbmm(dat,atmp2,datdatp)
call atmp2%free() !!$ call atmp2%free()
!!$
call datp%mv_to(csc_datp) !!$ call datp%mv_to(csc_datp)
call datdatp%mv_to(csc_datdatp) !!$ call datdatp%mv_to(csc_datdatp)
!!$
call csc_mat_col_prod(csc_datp,csc_datdatp,omp,info) !!$ call csc_mat_col_prod(csc_datp,csc_datdatp,omp,info)
call csc_mat_col_prod(csc_datdatp,csc_datdatp,oden,info) !!$ call csc_mat_col_prod(csc_datdatp,csc_datdatp,oden,info)
call psb_sum(ctxt,omp) !!$ call psb_sum(ctxt,omp)
call psb_sum(ctxt,oden) !!$ call psb_sum(ctxt,oden)
!!$
!!$
! !$ write(debug_unit,*) trim(name),' OMP_R :',omp !!$ ! !$ write(debug_unit,*) trim(name),' OMP_R :',omp
! ! $ write(debug_unit,*) trim(name),' ODEN_R:',oden !!$ ! ! $ write(debug_unit,*) trim(name),' ODEN_R:',oden
omp = omp/oden !!$ omp = omp/oden
! !$ write(0,*) 'Check on output restrictor',omp(1:min(size(omp),10)) !!$ ! !$ write(0,*) 'Check on output restrictor',omp(1:min(size(omp),10))
! Compute omega_int !!$ ! Compute omega_int
ommx = czero !!$ ommx = czero
do i=1, ncol !!$ do i=1, ncol
if (ilaggr(i) >0) then !!$ if (ilaggr(i) >0) then
omi(i) = omp(ilaggr(i)) !!$ omi(i) = omp(ilaggr(i))
else !!$ else
omi(i) = czero !!$ omi(i) = czero
end if !!$ end if
if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i) !!$ if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i)
end do !!$ end do
! Compute omega_fine !!$ ! Compute omega_fine
! Going over the columns of atmp means going over the rows !!$ ! Going over the columns of atmp means going over the rows
! of A^T. Hopefully ;-) !!$ ! of A^T. Hopefully ;-)
call atmp%cp_to(acsc) !!$ call atmp%cp_to(acsc)
!!$
do i=1, nrow !!$ do i=1, nrow
omf(i) = ommx !!$ omf(i) = ommx
do j= acsc%icp(i),acsc%icp(i+1)-1 !!$ do j= acsc%icp(i),acsc%icp(i+1)-1
if(abs(omi(acsc%ia(j))) .lt. abs(omf(i))) omf(i)=omi(acsc%ia(j)) !!$ if(abs(omi(acsc%ia(j))) .lt. abs(omf(i))) omf(i)=omi(acsc%ia(j))
end do !!$ end do
!!$ if(min(real(omf(i)),aimag(omf(i))) < szero) omf(i) = czero !!$ ! ! if(min(real(omf(i)),aimag(omf(i))) < szero) omf(i) = czero
if(psb_minreal(omf(i)) < szero) omf(i) = czero !!$ if(psb_minreal(omf(i)) < szero) omf(i) = czero
end do !!$ end do
omf(1:nrow) = omf(1:nrow)*adinv(1:nrow) !!$ omf(1:nrow) = omf(1:nrow)*adinv(1:nrow)
call psb_halo(omf,desc_a,info) !!$ call psb_halo(omf,desc_a,info)
call acsc%free() !!$ call acsc%free()
!!$
!!$
call atmp%mv_to(acsr1) !!$ call atmp%mv_to(acsr1)
!!$
do i=1,acsr1%get_nrows() !!$ do i=1,acsr1%get_nrows()
do j=acsr1%irp(i),acsr1%irp(i+1)-1 !!$ do j=acsr1%irp(i),acsr1%irp(i+1)-1
if (acsr1%ja(j) == i) then !!$ if (acsr1%ja(j) == i) then
acsr1%val(j) = cone - acsr1%val(j)*omf(acsr1%ja(j)) !!$ acsr1%val(j) = cone - acsr1%val(j)*omf(acsr1%ja(j))
else !!$ else
acsr1%val(j) = - acsr1%val(j)*omf(acsr1%ja(j)) !!$ acsr1%val(j) = - acsr1%val(j)*omf(acsr1%ja(j))
end if !!$ end if
end do !!$ end do
end do !!$ end do
call atmp%mv_from(acsr1) !!$ call atmp%mv_from(acsr1)
!!$
call rtilde%mv_to(tmpcoo) !!$ call rtilde%mv_to(tmpcoo)
nzl = tmpcoo%get_nzeros() !!$ nzl = tmpcoo%get_nzeros()
i=0 !!$ i=0
do k=1, nzl !!$ do k=1, nzl
if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then !!$ if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then
i = i+1 !!$ i = i+1
tmpcoo%val(i) = tmpcoo%val(k) !!$ tmpcoo%val(i) = tmpcoo%val(k)
tmpcoo%ia(i) = tmpcoo%ia(k) !!$ tmpcoo%ia(i) = tmpcoo%ia(k)
tmpcoo%ja(i) = tmpcoo%ja(k) !!$ tmpcoo%ja(i) = tmpcoo%ja(k)
end if !!$ end if
end do !!$ end do
call tmpcoo%set_nzeros(i) !!$ call tmpcoo%set_nzeros(i)
call rtilde%mv_from(tmpcoo) !!$ call rtilde%mv_from(tmpcoo)
call rtilde%cscnv(info,type='csr') !!$ call rtilde%cscnv(info,type='csr')
!!$
call psb_spspmm(rtilde,atmp,op_restr,info) !!$ call psb_spspmm(rtilde,atmp,op_restr,info)
!!$
! !!$ !
! Now we have to gather the halo of op_prol, and add it to itself !!$ ! Now we have to gather the halo of op_prol, and add it to itself
! to multiply it by A, !!$ ! to multiply it by A,
! !!$ !
call op_prol%clone(tmp_prol,info) !!$ call op_prol%clone(tmp_prol,info)
if (info == psb_success_) call psb_sphalo(tmp_prol,desc_a,am4,info,& !!$ if (info == psb_success_) call psb_sphalo(tmp_prol,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.) !!$ & colcnv=.false.,rowscale=.true.)
if (info == psb_success_) call psb_rwextd(ncol,tmp_prol,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,tmp_prol,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,a_err='Halo of op_prol') !!$ call psb_errpush(psb_err_internal_error_,name,a_err='Halo of op_prol')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
! !!$ !
! Now we have to fix this. The only rows of B that are correct !!$ ! Now we have to fix this. The only rows of B that are correct
! are those corresponding to "local" aggregates, i.e. indices in ilaggr(:) !!$ ! are those corresponding to "local" aggregates, i.e. indices in ilaggr(:)
! !!$ !
call op_restr%mv_to(tmpcoo) !!$ call op_restr%mv_to(tmpcoo)
!!$
nzl = tmpcoo%get_nzeros() !!$ nzl = tmpcoo%get_nzeros()
i=0 !!$ i=0
do k=1, nzl !!$ do k=1, nzl
if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then !!$ if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then
i = i+1 !!$ i = i+1
tmpcoo%val(i) = tmpcoo%val(k) !!$ tmpcoo%val(i) = tmpcoo%val(k)
tmpcoo%ia(i) = tmpcoo%ia(k) !!$ tmpcoo%ia(i) = tmpcoo%ia(k)
tmpcoo%ja(i) = tmpcoo%ja(k) !!$ tmpcoo%ja(i) = tmpcoo%ja(k)
end if !!$ end if
end do !!$ end do
call tmpcoo%set_nzeros(i) !!$ call tmpcoo%set_nzeros(i)
call op_restr%mv_from(tmpcoo) !!$ call op_restr%mv_from(tmpcoo)
call op_restr%cscnv(info,type='csr') !!$ call op_restr%cscnv(info,type='csr')
!!$
!!$
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'starting sphalo/ rwxtd' !!$ & 'starting sphalo/ rwxtd'
!!$
call psb_spspmm(la,tmp_prol,am3,info) !!$ call psb_spspmm(la,tmp_prol,am3,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done SPSPMM 2' !!$ & 'Done SPSPMM 2'
!!$
call psb_sphalo(am3,desc_a,am4,info,& !!$ call psb_sphalo(am3,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.) !!$ & colcnv=.false.,rowscale=.true.)
if (info == psb_success_) call psb_rwextd(ncol,am3,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,am3,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& !!$ call psb_errpush(psb_err_internal_error_,name,&
& a_err='Extend am3') !!$ & a_err='Extend am3')
goto 9999 !!$ goto 9999
end if !!$ end if
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done sphalo/ rwxtd' !!$ & 'Done sphalo/ rwxtd'
!!$
call psb_spspmm(op_restr,am3,ac,info) !!$ call psb_spspmm(op_restr,am3,ac,info)
if (info == psb_success_) call am3%free() !!$ if (info == psb_success_) call am3%free()
if (info == psb_success_) call ac%cscnv(info,type='coo',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call ac%cscnv(info,type='coo',dupl=psb_dupl_add_)
!!$
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& !!$ call psb_errpush(psb_err_internal_error_,name,&
&a_err='Build ac = op_restr x am3') !!$ &a_err='Build ac = op_restr x am3')
goto 9999 !!$ goto 9999
end if !!$ end if
@@ -116,7 +116,7 @@ subroutine amg_caggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_cspmat_type), intent(out) :: op_prol,ac,op_restr type(psb_cspmat_type), intent(inout) :: op_prol,ac,op_restr
type(psb_lcspmat_type), intent(inout) :: t_prol type(psb_lcspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -83,8 +83,8 @@ subroutine amg_d_dec_aggregator_build_tprol(ag,parms,ag_data,&
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(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_ldspmat_type), intent(out) :: t_prol type(psb_ldspmat_type), intent(out) :: t_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -58,7 +58,7 @@ subroutine amg_d_parmatch_aggregator_build_tprol(ag,parms,ag_data,&
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(inout) :: a type(psb_dspmat_type), intent(inout) :: a
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_ldspmat_type), intent(out) :: t_prol type(psb_ldspmat_type), intent(out) :: t_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -122,7 +122,7 @@ subroutine amg_d_parmatch_smth_bld(ag,a,desc_a,ilaggr,nlaggr,parms,&
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: t_prol type(psb_ldspmat_type), intent(inout) :: t_prol
type(psb_dspmat_type), intent(out) :: op_prol,ac,op_restr type(psb_dspmat_type), intent(inout) :: op_prol,ac,op_restr
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -108,7 +108,7 @@ subroutine amg_d_parmatch_spmm_bld(a,desc_a,ilaggr,nlaggr,parms,&
! Arguments ! Arguments
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(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: t_prol type(psb_ldspmat_type), intent(inout) :: t_prol
@@ -108,11 +108,11 @@ subroutine amg_d_parmatch_spmm_bld_inner(a_csr,desc_a,ilaggr,nlaggr,parms,&
! Arguments ! Arguments
type(psb_d_csr_sparse_mat), intent(inout) :: a_csr type(psb_d_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: t_prol type(psb_ldspmat_type), intent(inout) :: t_prol
type(psb_dspmat_type), intent(out) :: ac, op_prol, op_restr type(psb_dspmat_type), intent(inout) :: ac, op_prol, op_restr
type(psb_desc_type), intent(out) :: desc_ac type(psb_desc_type), intent(out) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -108,7 +108,7 @@ subroutine amg_d_parmatch_spmm_bld_ov(a,desc_a,ilaggr,nlaggr,parms,&
! Arguments ! Arguments
type(psb_dspmat_type), intent(inout) :: a type(psb_dspmat_type), intent(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: t_prol type(psb_ldspmat_type), intent(inout) :: t_prol
@@ -86,8 +86,8 @@ subroutine amg_d_symdec_aggregator_build_tprol(ag,parms,ag_data,&
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(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_ldspmat_type), intent(out) :: op_prol type(psb_ldspmat_type), intent(out) :: op_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -105,7 +105,7 @@
! !
! !
subroutine amg_daggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine amg_daggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use amg_base_prec_type use amg_base_prec_type
use amg_d_inner_mod, amg_protect_name => amg_daggrmat_minnrg_bld use amg_d_inner_mod, amg_protect_name => amg_daggrmat_minnrg_bld
@@ -117,8 +117,8 @@ subroutine amg_daggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_ldspmat_type), intent(inout) :: op_prol type(psb_ldspmat_type), intent(inout) :: t_prol
type(psb_ldspmat_type), intent(out) :: ac,op_restr type(psb_dspmat_type), intent(inout) :: op_prol, ac,op_restr
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -171,6 +171,8 @@ subroutine amg_daggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
filter_mat = (parms%aggr_filter == amg_filter_mat_) filter_mat = (parms%aggr_filter == amg_filter_mat_)
!NEEDS TO BE REWORKED !!
! naggr: number of local aggregates ! naggr: number of local aggregates
! nrow: local rows. ! nrow: local rows.
! !
@@ -183,361 +185,361 @@ subroutine amg_daggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
goto 9999 goto 9999
end if end if
! Get the diagonal D !!$ ! Get the diagonal D
adiag = a%get_diag(info) !!$ adiag = a%get_diag(info)
if (info == psb_success_) & !!$ if (info == psb_success_) &
& call psb_realloc(ncol,adiag,info) !!$ & call psb_realloc(ncol,adiag,info)
if (info == psb_success_) & !!$ if (info == psb_success_) &
& call psb_halo(adiag,desc_a,info) !!$ & call psb_halo(adiag,desc_a,info)
if (info == psb_success_) call a%cp_to_l(la) !!$ if (info == psb_success_) call a%cp_to_l(la)
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
do i=1,size(adiag) !!$ do i=1,size(adiag)
if (adiag(i) /= dzero) then !!$ if (adiag(i) /= dzero) then
adinv(i) = done / adiag(i) !!$ adinv(i) = done / adiag(i)
else !!$ else
adinv(i) = done !!$ adinv(i) = done
end if !!$ end if
end do !!$ end do
!!$
!!$
!!$
! 1. Allocate Ptilde in sparse matrix form !!$ ! 1. Allocate Ptilde in sparse matrix form
call op_prol%mv_to(tmpcoo) !!$ call op_prol%mv_to(tmpcoo)
call ptilde%mv_from(tmpcoo) !!$ call ptilde%mv_from(tmpcoo)
call ptilde%cscnv(info,type='csr') !!$ call ptilde%cscnv(info,type='csr')
!!$
if (info == psb_success_) call la%cscnv(am3,info,type='csr',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call la%cscnv(am3,info,type='csr',dupl=psb_dupl_add_)
if (info == psb_success_) call la%cscnv(da,info,type='csr',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call la%cscnv(da,info,type='csr',dupl=psb_dupl_add_)
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='spcnv') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='spcnv')
goto 9999 !!$ goto 9999
end if !!$ end if
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& ' Initial copies done.' !!$ & ' Initial copies done.'
!!$
call da%scal(adinv,info) !!$ call da%scal(adinv,info)
!!$
call psb_spspmm(da,ptilde,dap,info) !!$ call psb_spspmm(da,ptilde,dap,info)
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='spspmm 1') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='spspmm 1')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
call dap%clone(atmp,info) !!$ call dap%clone(atmp,info)
!!$
call psb_sphalo(atmp,desc_a,am4,info,& !!$ call psb_sphalo(atmp,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.,outfmt='CSR ') !!$ & colcnv=.false.,rowscale=.true.,outfmt='CSR ')
if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
call psb_spspmm(da,atmp,dadap,info) !!$ call psb_spspmm(da,atmp,dadap,info)
call atmp%free() !!$ call atmp%free()
!!$
! !$ write(0,*) 'Columns of AP',psb_sp_get_ncols(ap) !!$ ! !$ write(0,*) 'Columns of AP',psb_sp_get_ncols(ap)
! !$ write(0,*) 'Columns of ADAP',psb_sp_get_ncols(adap) !!$ ! !$ write(0,*) 'Columns of ADAP',psb_sp_get_ncols(adap)
call dap%mv_to(csc_dap) !!$ call dap%mv_to(csc_dap)
call dadap%mv_to(csc_dadap) !!$ call dadap%mv_to(csc_dadap)
!!$
call csc_mat_col_prod(csc_dap,csc_dadap,omp,info) !!$ call csc_mat_col_prod(csc_dap,csc_dadap,omp,info)
call csc_mat_col_prod(csc_dadap,csc_dadap,oden,info) !!$ call csc_mat_col_prod(csc_dadap,csc_dadap,oden,info)
call psb_sum(ctxt,omp) !!$ call psb_sum(ctxt,omp)
call psb_sum(ctxt,oden) !!$ call psb_sum(ctxt,oden)
! !$ write(0,*) trim(name),' OMP :',omp !!$ ! !$ write(0,*) trim(name),' OMP :',omp
! !$ write(0,*) trim(name),' ODEN:',oden !!$ ! !$ write(0,*) trim(name),' ODEN:',oden
!!$
omp = omp/oden !!$ omp = omp/oden
!!$
! !$ write(0,*) 'Check on output prolongator ',omp(1:min(size(omp),10)) !!$ ! !$ write(0,*) 'Check on output prolongator ',omp(1:min(size(omp),10))
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done NUMBMM 1' !!$ & 'Done NUMBMM 1'
!!$
call am3%mv_to(acsr3) !!$ call am3%mv_to(acsr3)
! Compute omega_int !!$ ! Compute omega_int
ommx = dzero !!$ ommx = dzero
do i=1, ncol !!$ do i=1, ncol
if (ilaggr(i) >0) then !!$ if (ilaggr(i) >0) then
omi(i) = omp(ilaggr(i)) !!$ omi(i) = omp(ilaggr(i))
else !!$ else
omi(i) = dzero !!$ omi(i) = dzero
end if !!$ end if
if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i) !!$ if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i)
end do !!$ end do
! Compute omega_fine !!$ ! Compute omega_fine
do i=1, nrow !!$ do i=1, nrow
omf(i) = ommx !!$ omf(i) = ommx
do j=acsr3%irp(i),acsr3%irp(i+1)-1 !!$ do j=acsr3%irp(i),acsr3%irp(i+1)-1
if(abs(omi(acsr3%ja(j))) .lt. abs(omf(i))) omf(i)=omi(acsr3%ja(j)) !!$ if(abs(omi(acsr3%ja(j))) .lt. abs(omf(i))) omf(i)=omi(acsr3%ja(j))
end do !!$ end do
!!$ if(min(real(omf(i)),aimag(omf(i))) < dzero) omf(i) = dzero !!$ ! ! if(min(real(omf(i)),aimag(omf(i))) < dzero) omf(i) = dzero
if(psb_minreal(omf(i)) < dzero) omf(i) = dzero !!$ if(psb_minreal(omf(i)) < dzero) omf(i) = dzero
end do !!$ end do
!!$
omf(1:nrow) = omf(1:nrow) * adinv(1:nrow) !!$ omf(1:nrow) = omf(1:nrow) * adinv(1:nrow)
!!$
if (filter_mat) then !!$ if (filter_mat) then
! !!$ !
! Build the filtered matrix Af from A !!$ ! Build the filtered matrix Af from A
! !!$ !
call la%cscnv(acsrf,info,dupl=psb_dupl_add_) !!$ call la%cscnv(acsrf,info,dupl=psb_dupl_add_)
!!$
do i=1,nrow !!$ do i=1,nrow
tmp = dzero !!$ tmp = dzero
jd = -1 !!$ jd = -1
do j=acsrf%irp(i),acsrf%irp(i+1)-1 !!$ do j=acsrf%irp(i),acsrf%irp(i+1)-1
if (acsrf%ja(j) == i) jd = j !!$ if (acsrf%ja(j) == i) jd = j
if (abs(acsrf%val(j)) < theta*sqrt(abs(adiag(i)*adiag(acsrf%ja(j))))) then !!$ if (abs(acsrf%val(j)) < theta*sqrt(abs(adiag(i)*adiag(acsrf%ja(j))))) then
tmp=tmp+acsrf%val(j) !!$ tmp=tmp+acsrf%val(j)
acsrf%val(j)=dzero !!$ acsrf%val(j)=dzero
endif !!$ endif
enddo !!$ enddo
if (jd == -1) then !!$ if (jd == -1) then
write(0,*) 'Wrong input: we need the diagonal!!!!', i !!$ write(0,*) 'Wrong input: we need the diagonal!!!!', i
else !!$ else
acsrf%val(jd)=acsrf%val(jd)-tmp !!$ acsrf%val(jd)=acsrf%val(jd)-tmp
end if !!$ end if
enddo !!$ enddo
! Take out zeroed terms !!$ ! Take out zeroed terms
call acsrf%clean_zeros(info) !!$ call acsrf%clean_zeros(info)
!!$
! !!$ !
! Build the smoothed prolongator using the filtered matrix !!$ ! Build the smoothed prolongator using the filtered matrix
! !!$ !
do i=1,acsrf%get_nrows() !!$ do i=1,acsrf%get_nrows()
do j=acsrf%irp(i),acsrf%irp(i+1)-1 !!$ do j=acsrf%irp(i),acsrf%irp(i+1)-1
if (acsrf%ja(j) == i) then !!$ if (acsrf%ja(j) == i) then
acsrf%val(j) = done - omf(i)*acsrf%val(j) !!$ acsrf%val(j) = done - omf(i)*acsrf%val(j)
else !!$ else
acsrf%val(j) = - omf(i)*acsrf%val(j) !!$ acsrf%val(j) = - omf(i)*acsrf%val(j)
end if !!$ end if
end do !!$ end do
end do !!$ end do
!!$
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done gather, going for SYMBMM 1' !!$ & 'Done gather, going for SYMBMM 1'
!!$
call af%mv_from(acsrf) !!$ call af%mv_from(acsrf)
! !!$ !
! op_prol = (I-w*D*Af)Ptilde !!$ ! op_prol = (I-w*D*Af)Ptilde
! Doing it this way means to consider diag(Af_i) !!$ ! Doing it this way means to consider diag(Af_i)
! !!$ !
! !!$ !
call psb_spspmm(af,ptilde,op_prol,info) !!$ call psb_spspmm(af,ptilde,op_prol,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done SPSPMM 1' !!$ & 'Done SPSPMM 1'
else !!$ else
! !!$ !
! Build the smoothed prolongator using the original matrix !!$ ! Build the smoothed prolongator using the original matrix
! !!$ !
do i=1,acsr3%get_nrows() !!$ do i=1,acsr3%get_nrows()
do j=acsr3%irp(i),acsr3%irp(i+1)-1 !!$ do j=acsr3%irp(i),acsr3%irp(i+1)-1
if (acsr3%ja(j) == i) then !!$ if (acsr3%ja(j) == i) then
acsr3%val(j) = done - omf(i)*acsr3%val(j) !!$ acsr3%val(j) = done - omf(i)*acsr3%val(j)
else !!$ else
acsr3%val(j) = - omf(i)*acsr3%val(j) !!$ acsr3%val(j) = - omf(i)*acsr3%val(j)
end if !!$ end if
end do !!$ end do
end do !!$ end do
!!$
call am3%mv_from(acsr3) !!$ call am3%mv_from(acsr3)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done gather, going for SYMBMM 1' !!$ & 'Done gather, going for SYMBMM 1'
! !!$ !
! !!$ !
! op_prol = (I-w*D*A)Ptilde !!$ ! op_prol = (I-w*D*A)Ptilde
! !!$ !
! !!$ !
call psb_spspmm(am3,ptilde,op_prol,info) !!$ call psb_spspmm(am3,ptilde,op_prol,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done NUMBMM 1' !!$ & 'Done NUMBMM 1'
!!$
end if !!$ end if
!!$
!!$
! !!$ !
! Ok, let's start over with the restrictor !!$ ! Ok, let's start over with the restrictor
! !!$ !
call ptilde%transc(rtilde) !!$ call ptilde%transc(rtilde)
call la%cscnv(atmp,info,type='csr') !!$ call la%cscnv(atmp,info,type='csr')
call psb_sphalo(atmp,desc_a,am4,info,& !!$ call psb_sphalo(atmp,desc_a,am4,info,&
& colcnv=.true.,rowscale=.true.) !!$ & colcnv=.true.,rowscale=.true.)
nrt = am4%get_nrows() !!$ nrt = am4%get_nrows()
call am4%csclip(atmp2,info,lone,nrt,lone,ncol) !!$ call am4%csclip(atmp2,info,lone,nrt,lone,ncol)
call atmp2%cscnv(info,type='CSR') !!$ call atmp2%cscnv(info,type='CSR')
if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=atmp2) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=atmp2)
call am4%free() !!$ call am4%free()
call atmp2%free() !!$ call atmp2%free()
!!$
! This is to compute the transpose. It ONLY works if the !!$ ! This is to compute the transpose. It ONLY works if the
! original A has a symmetric pattern. !!$ ! original A has a symmetric pattern.
call atmp%transc(atmp2) !!$ call atmp%transc(atmp2)
call atmp2%csclip(dat,info,lone,nrow,lone,ncol) !!$ call atmp2%csclip(dat,info,lone,nrow,lone,ncol)
call dat%cscnv(info,type='csr') !!$ call dat%cscnv(info,type='csr')
call dat%scal(adinv,info) !!$ call dat%scal(adinv,info)
!!$
! Now for the product. !!$ ! Now for the product.
call psb_spspmm(dat,ptilde,datp,info) !!$ call psb_spspmm(dat,ptilde,datp,info)
!!$
call datp%clone(atmp2,info) !!$ call datp%clone(atmp2,info)
call psb_sphalo(atmp2,desc_a,am4,info,& !!$ call psb_sphalo(atmp2,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.,outfmt='CSR ') !!$ & colcnv=.false.,rowscale=.true.,outfmt='CSR ')
if (info == psb_success_) call psb_rwextd(ncol,atmp2,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp2,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
!!$
call psb_symbmm(dat,atmp2,datdatp,info) !!$ call psb_symbmm(dat,atmp2,datdatp,info)
call psb_numbmm(dat,atmp2,datdatp) !!$ call psb_numbmm(dat,atmp2,datdatp)
call atmp2%free() !!$ call atmp2%free()
!!$
call datp%mv_to(csc_datp) !!$ call datp%mv_to(csc_datp)
call datdatp%mv_to(csc_datdatp) !!$ call datdatp%mv_to(csc_datdatp)
!!$
call csc_mat_col_prod(csc_datp,csc_datdatp,omp,info) !!$ call csc_mat_col_prod(csc_datp,csc_datdatp,omp,info)
call csc_mat_col_prod(csc_datdatp,csc_datdatp,oden,info) !!$ call csc_mat_col_prod(csc_datdatp,csc_datdatp,oden,info)
call psb_sum(ctxt,omp) !!$ call psb_sum(ctxt,omp)
call psb_sum(ctxt,oden) !!$ call psb_sum(ctxt,oden)
!!$
!!$
! !$ write(debug_unit,*) trim(name),' OMP_R :',omp !!$ ! !$ write(debug_unit,*) trim(name),' OMP_R :',omp
! ! $ write(debug_unit,*) trim(name),' ODEN_R:',oden !!$ ! ! $ write(debug_unit,*) trim(name),' ODEN_R:',oden
omp = omp/oden !!$ omp = omp/oden
! !$ write(0,*) 'Check on output restrictor',omp(1:min(size(omp),10)) !!$ ! !$ write(0,*) 'Check on output restrictor',omp(1:min(size(omp),10))
! Compute omega_int !!$ ! Compute omega_int
ommx = dzero !!$ ommx = dzero
do i=1, ncol !!$ do i=1, ncol
if (ilaggr(i) >0) then !!$ if (ilaggr(i) >0) then
omi(i) = omp(ilaggr(i)) !!$ omi(i) = omp(ilaggr(i))
else !!$ else
omi(i) = dzero !!$ omi(i) = dzero
end if !!$ end if
if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i) !!$ if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i)
end do !!$ end do
! Compute omega_fine !!$ ! Compute omega_fine
! Going over the columns of atmp means going over the rows !!$ ! Going over the columns of atmp means going over the rows
! of A^T. Hopefully ;-) !!$ ! of A^T. Hopefully ;-)
call atmp%cp_to(acsc) !!$ call atmp%cp_to(acsc)
!!$
do i=1, nrow !!$ do i=1, nrow
omf(i) = ommx !!$ omf(i) = ommx
do j= acsc%icp(i),acsc%icp(i+1)-1 !!$ do j= acsc%icp(i),acsc%icp(i+1)-1
if(abs(omi(acsc%ia(j))) .lt. abs(omf(i))) omf(i)=omi(acsc%ia(j)) !!$ if(abs(omi(acsc%ia(j))) .lt. abs(omf(i))) omf(i)=omi(acsc%ia(j))
end do !!$ end do
!!$ if(min(real(omf(i)),aimag(omf(i))) < dzero) omf(i) = dzero !!$ ! ! if(min(real(omf(i)),aimag(omf(i))) < dzero) omf(i) = dzero
if(psb_minreal(omf(i)) < dzero) omf(i) = dzero !!$ if(psb_minreal(omf(i)) < dzero) omf(i) = dzero
end do !!$ end do
omf(1:nrow) = omf(1:nrow)*adinv(1:nrow) !!$ omf(1:nrow) = omf(1:nrow)*adinv(1:nrow)
call psb_halo(omf,desc_a,info) !!$ call psb_halo(omf,desc_a,info)
call acsc%free() !!$ call acsc%free()
!!$
!!$
call atmp%mv_to(acsr1) !!$ call atmp%mv_to(acsr1)
!!$
do i=1,acsr1%get_nrows() !!$ do i=1,acsr1%get_nrows()
do j=acsr1%irp(i),acsr1%irp(i+1)-1 !!$ do j=acsr1%irp(i),acsr1%irp(i+1)-1
if (acsr1%ja(j) == i) then !!$ if (acsr1%ja(j) == i) then
acsr1%val(j) = done - acsr1%val(j)*omf(acsr1%ja(j)) !!$ acsr1%val(j) = done - acsr1%val(j)*omf(acsr1%ja(j))
else !!$ else
acsr1%val(j) = - acsr1%val(j)*omf(acsr1%ja(j)) !!$ acsr1%val(j) = - acsr1%val(j)*omf(acsr1%ja(j))
end if !!$ end if
end do !!$ end do
end do !!$ end do
call atmp%mv_from(acsr1) !!$ call atmp%mv_from(acsr1)
!!$
call rtilde%mv_to(tmpcoo) !!$ call rtilde%mv_to(tmpcoo)
nzl = tmpcoo%get_nzeros() !!$ nzl = tmpcoo%get_nzeros()
i=0 !!$ i=0
do k=1, nzl !!$ do k=1, nzl
if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then !!$ if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then
i = i+1 !!$ i = i+1
tmpcoo%val(i) = tmpcoo%val(k) !!$ tmpcoo%val(i) = tmpcoo%val(k)
tmpcoo%ia(i) = tmpcoo%ia(k) !!$ tmpcoo%ia(i) = tmpcoo%ia(k)
tmpcoo%ja(i) = tmpcoo%ja(k) !!$ tmpcoo%ja(i) = tmpcoo%ja(k)
end if !!$ end if
end do !!$ end do
call tmpcoo%set_nzeros(i) !!$ call tmpcoo%set_nzeros(i)
call rtilde%mv_from(tmpcoo) !!$ call rtilde%mv_from(tmpcoo)
call rtilde%cscnv(info,type='csr') !!$ call rtilde%cscnv(info,type='csr')
!!$
call psb_spspmm(rtilde,atmp,op_restr,info) !!$ call psb_spspmm(rtilde,atmp,op_restr,info)
!!$
! !!$ !
! Now we have to gather the halo of op_prol, and add it to itself !!$ ! Now we have to gather the halo of op_prol, and add it to itself
! to multiply it by A, !!$ ! to multiply it by A,
! !!$ !
call op_prol%clone(tmp_prol,info) !!$ call op_prol%clone(tmp_prol,info)
if (info == psb_success_) call psb_sphalo(tmp_prol,desc_a,am4,info,& !!$ if (info == psb_success_) call psb_sphalo(tmp_prol,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.) !!$ & colcnv=.false.,rowscale=.true.)
if (info == psb_success_) call psb_rwextd(ncol,tmp_prol,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,tmp_prol,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,a_err='Halo of op_prol') !!$ call psb_errpush(psb_err_internal_error_,name,a_err='Halo of op_prol')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
! !!$ !
! Now we have to fix this. The only rows of B that are correct !!$ ! Now we have to fix this. The only rows of B that are correct
! are those corresponding to "local" aggregates, i.e. indices in ilaggr(:) !!$ ! are those corresponding to "local" aggregates, i.e. indices in ilaggr(:)
! !!$ !
call op_restr%mv_to(tmpcoo) !!$ call op_restr%mv_to(tmpcoo)
!!$
nzl = tmpcoo%get_nzeros() !!$ nzl = tmpcoo%get_nzeros()
i=0 !!$ i=0
do k=1, nzl !!$ do k=1, nzl
if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then !!$ if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then
i = i+1 !!$ i = i+1
tmpcoo%val(i) = tmpcoo%val(k) !!$ tmpcoo%val(i) = tmpcoo%val(k)
tmpcoo%ia(i) = tmpcoo%ia(k) !!$ tmpcoo%ia(i) = tmpcoo%ia(k)
tmpcoo%ja(i) = tmpcoo%ja(k) !!$ tmpcoo%ja(i) = tmpcoo%ja(k)
end if !!$ end if
end do !!$ end do
call tmpcoo%set_nzeros(i) !!$ call tmpcoo%set_nzeros(i)
call op_restr%mv_from(tmpcoo) !!$ call op_restr%mv_from(tmpcoo)
call op_restr%cscnv(info,type='csr') !!$ call op_restr%cscnv(info,type='csr')
!!$
!!$
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'starting sphalo/ rwxtd' !!$ & 'starting sphalo/ rwxtd'
!!$
call psb_spspmm(la,tmp_prol,am3,info) !!$ call psb_spspmm(la,tmp_prol,am3,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done SPSPMM 2' !!$ & 'Done SPSPMM 2'
!!$
call psb_sphalo(am3,desc_a,am4,info,& !!$ call psb_sphalo(am3,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.) !!$ & colcnv=.false.,rowscale=.true.)
if (info == psb_success_) call psb_rwextd(ncol,am3,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,am3,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& !!$ call psb_errpush(psb_err_internal_error_,name,&
& a_err='Extend am3') !!$ & a_err='Extend am3')
goto 9999 !!$ goto 9999
end if !!$ end if
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done sphalo/ rwxtd' !!$ & 'Done sphalo/ rwxtd'
!!$
call psb_spspmm(op_restr,am3,ac,info) !!$ call psb_spspmm(op_restr,am3,ac,info)
if (info == psb_success_) call am3%free() !!$ if (info == psb_success_) call am3%free()
if (info == psb_success_) call ac%cscnv(info,type='coo',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call ac%cscnv(info,type='coo',dupl=psb_dupl_add_)
!!$
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& !!$ call psb_errpush(psb_err_internal_error_,name,&
&a_err='Build ac = op_restr x am3') !!$ &a_err='Build ac = op_restr x am3')
goto 9999 !!$ goto 9999
end if !!$ end if
@@ -116,7 +116,7 @@ subroutine amg_daggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_dspmat_type), intent(out) :: op_prol,ac,op_restr type(psb_dspmat_type), intent(inout) :: op_prol,ac,op_restr
type(psb_ldspmat_type), intent(inout) :: t_prol type(psb_ldspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -83,8 +83,8 @@ subroutine amg_s_dec_aggregator_build_tprol(ag,parms,ag_data,&
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(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_lsspmat_type), intent(out) :: t_prol type(psb_lsspmat_type), intent(out) :: t_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -58,7 +58,7 @@ subroutine amg_s_parmatch_aggregator_build_tprol(ag,parms,ag_data,&
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(inout) :: a type(psb_sspmat_type), intent(inout) :: a
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_lsspmat_type), intent(out) :: t_prol type(psb_lsspmat_type), intent(out) :: t_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -122,7 +122,7 @@ subroutine amg_s_parmatch_smth_bld(ag,a,desc_a,ilaggr,nlaggr,parms,&
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: t_prol type(psb_lsspmat_type), intent(inout) :: t_prol
type(psb_sspmat_type), intent(out) :: op_prol,ac,op_restr type(psb_sspmat_type), intent(inout) :: op_prol,ac,op_restr
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -108,7 +108,7 @@ subroutine amg_s_parmatch_spmm_bld(a,desc_a,ilaggr,nlaggr,parms,&
! Arguments ! Arguments
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(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: t_prol type(psb_lsspmat_type), intent(inout) :: t_prol
@@ -108,11 +108,11 @@ subroutine amg_s_parmatch_spmm_bld_inner(a_csr,desc_a,ilaggr,nlaggr,parms,&
! Arguments ! Arguments
type(psb_s_csr_sparse_mat), intent(inout) :: a_csr type(psb_s_csr_sparse_mat), intent(inout) :: a_csr
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: t_prol type(psb_lsspmat_type), intent(inout) :: t_prol
type(psb_sspmat_type), intent(out) :: ac, op_prol, op_restr type(psb_sspmat_type), intent(inout) :: ac, op_prol, op_restr
type(psb_desc_type), intent(out) :: desc_ac type(psb_desc_type), intent(out) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -108,7 +108,7 @@ subroutine amg_s_parmatch_spmm_bld_ov(a,desc_a,ilaggr,nlaggr,parms,&
! Arguments ! Arguments
type(psb_sspmat_type), intent(inout) :: a type(psb_sspmat_type), intent(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: t_prol type(psb_lsspmat_type), intent(inout) :: t_prol
@@ -86,8 +86,8 @@ subroutine amg_s_symdec_aggregator_build_tprol(ag,parms,ag_data,&
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(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_lsspmat_type), intent(out) :: op_prol type(psb_lsspmat_type), intent(out) :: op_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -105,7 +105,7 @@
! !
! !
subroutine amg_saggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine amg_saggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use amg_base_prec_type use amg_base_prec_type
use amg_s_inner_mod, amg_protect_name => amg_saggrmat_minnrg_bld use amg_s_inner_mod, amg_protect_name => amg_saggrmat_minnrg_bld
@@ -117,8 +117,8 @@ subroutine amg_saggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_lsspmat_type), intent(inout) :: op_prol type(psb_lsspmat_type), intent(inout) :: t_prol
type(psb_lsspmat_type), intent(out) :: ac,op_restr type(psb_sspmat_type), intent(inout) :: op_prol, ac,op_restr
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -171,6 +171,8 @@ subroutine amg_saggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
filter_mat = (parms%aggr_filter == amg_filter_mat_) filter_mat = (parms%aggr_filter == amg_filter_mat_)
!NEEDS TO BE REWORKED !!
! naggr: number of local aggregates ! naggr: number of local aggregates
! nrow: local rows. ! nrow: local rows.
! !
@@ -183,361 +185,361 @@ subroutine amg_saggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
goto 9999 goto 9999
end if end if
! Get the diagonal D !!$ ! Get the diagonal D
adiag = a%get_diag(info) !!$ adiag = a%get_diag(info)
if (info == psb_success_) & !!$ if (info == psb_success_) &
& call psb_realloc(ncol,adiag,info) !!$ & call psb_realloc(ncol,adiag,info)
if (info == psb_success_) & !!$ if (info == psb_success_) &
& call psb_halo(adiag,desc_a,info) !!$ & call psb_halo(adiag,desc_a,info)
if (info == psb_success_) call a%cp_to_l(la) !!$ if (info == psb_success_) call a%cp_to_l(la)
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
do i=1,size(adiag) !!$ do i=1,size(adiag)
if (adiag(i) /= szero) then !!$ if (adiag(i) /= szero) then
adinv(i) = sone / adiag(i) !!$ adinv(i) = sone / adiag(i)
else !!$ else
adinv(i) = sone !!$ adinv(i) = sone
end if !!$ end if
end do !!$ end do
!!$
!!$
!!$
! 1. Allocate Ptilde in sparse matrix form !!$ ! 1. Allocate Ptilde in sparse matrix form
call op_prol%mv_to(tmpcoo) !!$ call op_prol%mv_to(tmpcoo)
call ptilde%mv_from(tmpcoo) !!$ call ptilde%mv_from(tmpcoo)
call ptilde%cscnv(info,type='csr') !!$ call ptilde%cscnv(info,type='csr')
!!$
if (info == psb_success_) call la%cscnv(am3,info,type='csr',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call la%cscnv(am3,info,type='csr',dupl=psb_dupl_add_)
if (info == psb_success_) call la%cscnv(da,info,type='csr',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call la%cscnv(da,info,type='csr',dupl=psb_dupl_add_)
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='spcnv') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='spcnv')
goto 9999 !!$ goto 9999
end if !!$ end if
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& ' Initial copies done.' !!$ & ' Initial copies done.'
!!$
call da%scal(adinv,info) !!$ call da%scal(adinv,info)
!!$
call psb_spspmm(da,ptilde,dap,info) !!$ call psb_spspmm(da,ptilde,dap,info)
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='spspmm 1') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='spspmm 1')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
call dap%clone(atmp,info) !!$ call dap%clone(atmp,info)
!!$
call psb_sphalo(atmp,desc_a,am4,info,& !!$ call psb_sphalo(atmp,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.,outfmt='CSR ') !!$ & colcnv=.false.,rowscale=.true.,outfmt='CSR ')
if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
call psb_spspmm(da,atmp,dadap,info) !!$ call psb_spspmm(da,atmp,dadap,info)
call atmp%free() !!$ call atmp%free()
!!$
! !$ write(0,*) 'Columns of AP',psb_sp_get_ncols(ap) !!$ ! !$ write(0,*) 'Columns of AP',psb_sp_get_ncols(ap)
! !$ write(0,*) 'Columns of ADAP',psb_sp_get_ncols(adap) !!$ ! !$ write(0,*) 'Columns of ADAP',psb_sp_get_ncols(adap)
call dap%mv_to(csc_dap) !!$ call dap%mv_to(csc_dap)
call dadap%mv_to(csc_dadap) !!$ call dadap%mv_to(csc_dadap)
!!$
call csc_mat_col_prod(csc_dap,csc_dadap,omp,info) !!$ call csc_mat_col_prod(csc_dap,csc_dadap,omp,info)
call csc_mat_col_prod(csc_dadap,csc_dadap,oden,info) !!$ call csc_mat_col_prod(csc_dadap,csc_dadap,oden,info)
call psb_sum(ctxt,omp) !!$ call psb_sum(ctxt,omp)
call psb_sum(ctxt,oden) !!$ call psb_sum(ctxt,oden)
! !$ write(0,*) trim(name),' OMP :',omp !!$ ! !$ write(0,*) trim(name),' OMP :',omp
! !$ write(0,*) trim(name),' ODEN:',oden !!$ ! !$ write(0,*) trim(name),' ODEN:',oden
!!$
omp = omp/oden !!$ omp = omp/oden
!!$
! !$ write(0,*) 'Check on output prolongator ',omp(1:min(size(omp),10)) !!$ ! !$ write(0,*) 'Check on output prolongator ',omp(1:min(size(omp),10))
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done NUMBMM 1' !!$ & 'Done NUMBMM 1'
!!$
call am3%mv_to(acsr3) !!$ call am3%mv_to(acsr3)
! Compute omega_int !!$ ! Compute omega_int
ommx = szero !!$ ommx = szero
do i=1, ncol !!$ do i=1, ncol
if (ilaggr(i) >0) then !!$ if (ilaggr(i) >0) then
omi(i) = omp(ilaggr(i)) !!$ omi(i) = omp(ilaggr(i))
else !!$ else
omi(i) = szero !!$ omi(i) = szero
end if !!$ end if
if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i) !!$ if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i)
end do !!$ end do
! Compute omega_fine !!$ ! Compute omega_fine
do i=1, nrow !!$ do i=1, nrow
omf(i) = ommx !!$ omf(i) = ommx
do j=acsr3%irp(i),acsr3%irp(i+1)-1 !!$ do j=acsr3%irp(i),acsr3%irp(i+1)-1
if(abs(omi(acsr3%ja(j))) .lt. abs(omf(i))) omf(i)=omi(acsr3%ja(j)) !!$ if(abs(omi(acsr3%ja(j))) .lt. abs(omf(i))) omf(i)=omi(acsr3%ja(j))
end do !!$ end do
!!$ if(min(real(omf(i)),aimag(omf(i))) < szero) omf(i) = szero !!$ ! ! if(min(real(omf(i)),aimag(omf(i))) < szero) omf(i) = szero
if(psb_minreal(omf(i)) < szero) omf(i) = szero !!$ if(psb_minreal(omf(i)) < szero) omf(i) = szero
end do !!$ end do
!!$
omf(1:nrow) = omf(1:nrow) * adinv(1:nrow) !!$ omf(1:nrow) = omf(1:nrow) * adinv(1:nrow)
!!$
if (filter_mat) then !!$ if (filter_mat) then
! !!$ !
! Build the filtered matrix Af from A !!$ ! Build the filtered matrix Af from A
! !!$ !
call la%cscnv(acsrf,info,dupl=psb_dupl_add_) !!$ call la%cscnv(acsrf,info,dupl=psb_dupl_add_)
!!$
do i=1,nrow !!$ do i=1,nrow
tmp = szero !!$ tmp = szero
jd = -1 !!$ jd = -1
do j=acsrf%irp(i),acsrf%irp(i+1)-1 !!$ do j=acsrf%irp(i),acsrf%irp(i+1)-1
if (acsrf%ja(j) == i) jd = j !!$ if (acsrf%ja(j) == i) jd = j
if (abs(acsrf%val(j)) < theta*sqrt(abs(adiag(i)*adiag(acsrf%ja(j))))) then !!$ if (abs(acsrf%val(j)) < theta*sqrt(abs(adiag(i)*adiag(acsrf%ja(j))))) then
tmp=tmp+acsrf%val(j) !!$ tmp=tmp+acsrf%val(j)
acsrf%val(j)=szero !!$ acsrf%val(j)=szero
endif !!$ endif
enddo !!$ enddo
if (jd == -1) then !!$ if (jd == -1) then
write(0,*) 'Wrong input: we need the diagonal!!!!', i !!$ write(0,*) 'Wrong input: we need the diagonal!!!!', i
else !!$ else
acsrf%val(jd)=acsrf%val(jd)-tmp !!$ acsrf%val(jd)=acsrf%val(jd)-tmp
end if !!$ end if
enddo !!$ enddo
! Take out zeroed terms !!$ ! Take out zeroed terms
call acsrf%clean_zeros(info) !!$ call acsrf%clean_zeros(info)
!!$
! !!$ !
! Build the smoothed prolongator using the filtered matrix !!$ ! Build the smoothed prolongator using the filtered matrix
! !!$ !
do i=1,acsrf%get_nrows() !!$ do i=1,acsrf%get_nrows()
do j=acsrf%irp(i),acsrf%irp(i+1)-1 !!$ do j=acsrf%irp(i),acsrf%irp(i+1)-1
if (acsrf%ja(j) == i) then !!$ if (acsrf%ja(j) == i) then
acsrf%val(j) = sone - omf(i)*acsrf%val(j) !!$ acsrf%val(j) = sone - omf(i)*acsrf%val(j)
else !!$ else
acsrf%val(j) = - omf(i)*acsrf%val(j) !!$ acsrf%val(j) = - omf(i)*acsrf%val(j)
end if !!$ end if
end do !!$ end do
end do !!$ end do
!!$
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done gather, going for SYMBMM 1' !!$ & 'Done gather, going for SYMBMM 1'
!!$
call af%mv_from(acsrf) !!$ call af%mv_from(acsrf)
! !!$ !
! op_prol = (I-w*D*Af)Ptilde !!$ ! op_prol = (I-w*D*Af)Ptilde
! Doing it this way means to consider diag(Af_i) !!$ ! Doing it this way means to consider diag(Af_i)
! !!$ !
! !!$ !
call psb_spspmm(af,ptilde,op_prol,info) !!$ call psb_spspmm(af,ptilde,op_prol,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done SPSPMM 1' !!$ & 'Done SPSPMM 1'
else !!$ else
! !!$ !
! Build the smoothed prolongator using the original matrix !!$ ! Build the smoothed prolongator using the original matrix
! !!$ !
do i=1,acsr3%get_nrows() !!$ do i=1,acsr3%get_nrows()
do j=acsr3%irp(i),acsr3%irp(i+1)-1 !!$ do j=acsr3%irp(i),acsr3%irp(i+1)-1
if (acsr3%ja(j) == i) then !!$ if (acsr3%ja(j) == i) then
acsr3%val(j) = sone - omf(i)*acsr3%val(j) !!$ acsr3%val(j) = sone - omf(i)*acsr3%val(j)
else !!$ else
acsr3%val(j) = - omf(i)*acsr3%val(j) !!$ acsr3%val(j) = - omf(i)*acsr3%val(j)
end if !!$ end if
end do !!$ end do
end do !!$ end do
!!$
call am3%mv_from(acsr3) !!$ call am3%mv_from(acsr3)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done gather, going for SYMBMM 1' !!$ & 'Done gather, going for SYMBMM 1'
! !!$ !
! !!$ !
! op_prol = (I-w*D*A)Ptilde !!$ ! op_prol = (I-w*D*A)Ptilde
! !!$ !
! !!$ !
call psb_spspmm(am3,ptilde,op_prol,info) !!$ call psb_spspmm(am3,ptilde,op_prol,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done NUMBMM 1' !!$ & 'Done NUMBMM 1'
!!$
end if !!$ end if
!!$
!!$
! !!$ !
! Ok, let's start over with the restrictor !!$ ! Ok, let's start over with the restrictor
! !!$ !
call ptilde%transc(rtilde) !!$ call ptilde%transc(rtilde)
call la%cscnv(atmp,info,type='csr') !!$ call la%cscnv(atmp,info,type='csr')
call psb_sphalo(atmp,desc_a,am4,info,& !!$ call psb_sphalo(atmp,desc_a,am4,info,&
& colcnv=.true.,rowscale=.true.) !!$ & colcnv=.true.,rowscale=.true.)
nrt = am4%get_nrows() !!$ nrt = am4%get_nrows()
call am4%csclip(atmp2,info,lone,nrt,lone,ncol) !!$ call am4%csclip(atmp2,info,lone,nrt,lone,ncol)
call atmp2%cscnv(info,type='CSR') !!$ call atmp2%cscnv(info,type='CSR')
if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=atmp2) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=atmp2)
call am4%free() !!$ call am4%free()
call atmp2%free() !!$ call atmp2%free()
!!$
! This is to compute the transpose. It ONLY works if the !!$ ! This is to compute the transpose. It ONLY works if the
! original A has a symmetric pattern. !!$ ! original A has a symmetric pattern.
call atmp%transc(atmp2) !!$ call atmp%transc(atmp2)
call atmp2%csclip(dat,info,lone,nrow,lone,ncol) !!$ call atmp2%csclip(dat,info,lone,nrow,lone,ncol)
call dat%cscnv(info,type='csr') !!$ call dat%cscnv(info,type='csr')
call dat%scal(adinv,info) !!$ call dat%scal(adinv,info)
!!$
! Now for the product. !!$ ! Now for the product.
call psb_spspmm(dat,ptilde,datp,info) !!$ call psb_spspmm(dat,ptilde,datp,info)
!!$
call datp%clone(atmp2,info) !!$ call datp%clone(atmp2,info)
call psb_sphalo(atmp2,desc_a,am4,info,& !!$ call psb_sphalo(atmp2,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.,outfmt='CSR ') !!$ & colcnv=.false.,rowscale=.true.,outfmt='CSR ')
if (info == psb_success_) call psb_rwextd(ncol,atmp2,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp2,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
!!$
call psb_symbmm(dat,atmp2,datdatp,info) !!$ call psb_symbmm(dat,atmp2,datdatp,info)
call psb_numbmm(dat,atmp2,datdatp) !!$ call psb_numbmm(dat,atmp2,datdatp)
call atmp2%free() !!$ call atmp2%free()
!!$
call datp%mv_to(csc_datp) !!$ call datp%mv_to(csc_datp)
call datdatp%mv_to(csc_datdatp) !!$ call datdatp%mv_to(csc_datdatp)
!!$
call csc_mat_col_prod(csc_datp,csc_datdatp,omp,info) !!$ call csc_mat_col_prod(csc_datp,csc_datdatp,omp,info)
call csc_mat_col_prod(csc_datdatp,csc_datdatp,oden,info) !!$ call csc_mat_col_prod(csc_datdatp,csc_datdatp,oden,info)
call psb_sum(ctxt,omp) !!$ call psb_sum(ctxt,omp)
call psb_sum(ctxt,oden) !!$ call psb_sum(ctxt,oden)
!!$
!!$
! !$ write(debug_unit,*) trim(name),' OMP_R :',omp !!$ ! !$ write(debug_unit,*) trim(name),' OMP_R :',omp
! ! $ write(debug_unit,*) trim(name),' ODEN_R:',oden !!$ ! ! $ write(debug_unit,*) trim(name),' ODEN_R:',oden
omp = omp/oden !!$ omp = omp/oden
! !$ write(0,*) 'Check on output restrictor',omp(1:min(size(omp),10)) !!$ ! !$ write(0,*) 'Check on output restrictor',omp(1:min(size(omp),10))
! Compute omega_int !!$ ! Compute omega_int
ommx = szero !!$ ommx = szero
do i=1, ncol !!$ do i=1, ncol
if (ilaggr(i) >0) then !!$ if (ilaggr(i) >0) then
omi(i) = omp(ilaggr(i)) !!$ omi(i) = omp(ilaggr(i))
else !!$ else
omi(i) = szero !!$ omi(i) = szero
end if !!$ end if
if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i) !!$ if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i)
end do !!$ end do
! Compute omega_fine !!$ ! Compute omega_fine
! Going over the columns of atmp means going over the rows !!$ ! Going over the columns of atmp means going over the rows
! of A^T. Hopefully ;-) !!$ ! of A^T. Hopefully ;-)
call atmp%cp_to(acsc) !!$ call atmp%cp_to(acsc)
!!$
do i=1, nrow !!$ do i=1, nrow
omf(i) = ommx !!$ omf(i) = ommx
do j= acsc%icp(i),acsc%icp(i+1)-1 !!$ do j= acsc%icp(i),acsc%icp(i+1)-1
if(abs(omi(acsc%ia(j))) .lt. abs(omf(i))) omf(i)=omi(acsc%ia(j)) !!$ if(abs(omi(acsc%ia(j))) .lt. abs(omf(i))) omf(i)=omi(acsc%ia(j))
end do !!$ end do
!!$ if(min(real(omf(i)),aimag(omf(i))) < szero) omf(i) = szero !!$ ! ! if(min(real(omf(i)),aimag(omf(i))) < szero) omf(i) = szero
if(psb_minreal(omf(i)) < szero) omf(i) = szero !!$ if(psb_minreal(omf(i)) < szero) omf(i) = szero
end do !!$ end do
omf(1:nrow) = omf(1:nrow)*adinv(1:nrow) !!$ omf(1:nrow) = omf(1:nrow)*adinv(1:nrow)
call psb_halo(omf,desc_a,info) !!$ call psb_halo(omf,desc_a,info)
call acsc%free() !!$ call acsc%free()
!!$
!!$
call atmp%mv_to(acsr1) !!$ call atmp%mv_to(acsr1)
!!$
do i=1,acsr1%get_nrows() !!$ do i=1,acsr1%get_nrows()
do j=acsr1%irp(i),acsr1%irp(i+1)-1 !!$ do j=acsr1%irp(i),acsr1%irp(i+1)-1
if (acsr1%ja(j) == i) then !!$ if (acsr1%ja(j) == i) then
acsr1%val(j) = sone - acsr1%val(j)*omf(acsr1%ja(j)) !!$ acsr1%val(j) = sone - acsr1%val(j)*omf(acsr1%ja(j))
else !!$ else
acsr1%val(j) = - acsr1%val(j)*omf(acsr1%ja(j)) !!$ acsr1%val(j) = - acsr1%val(j)*omf(acsr1%ja(j))
end if !!$ end if
end do !!$ end do
end do !!$ end do
call atmp%mv_from(acsr1) !!$ call atmp%mv_from(acsr1)
!!$
call rtilde%mv_to(tmpcoo) !!$ call rtilde%mv_to(tmpcoo)
nzl = tmpcoo%get_nzeros() !!$ nzl = tmpcoo%get_nzeros()
i=0 !!$ i=0
do k=1, nzl !!$ do k=1, nzl
if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then !!$ if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then
i = i+1 !!$ i = i+1
tmpcoo%val(i) = tmpcoo%val(k) !!$ tmpcoo%val(i) = tmpcoo%val(k)
tmpcoo%ia(i) = tmpcoo%ia(k) !!$ tmpcoo%ia(i) = tmpcoo%ia(k)
tmpcoo%ja(i) = tmpcoo%ja(k) !!$ tmpcoo%ja(i) = tmpcoo%ja(k)
end if !!$ end if
end do !!$ end do
call tmpcoo%set_nzeros(i) !!$ call tmpcoo%set_nzeros(i)
call rtilde%mv_from(tmpcoo) !!$ call rtilde%mv_from(tmpcoo)
call rtilde%cscnv(info,type='csr') !!$ call rtilde%cscnv(info,type='csr')
!!$
call psb_spspmm(rtilde,atmp,op_restr,info) !!$ call psb_spspmm(rtilde,atmp,op_restr,info)
!!$
! !!$ !
! Now we have to gather the halo of op_prol, and add it to itself !!$ ! Now we have to gather the halo of op_prol, and add it to itself
! to multiply it by A, !!$ ! to multiply it by A,
! !!$ !
call op_prol%clone(tmp_prol,info) !!$ call op_prol%clone(tmp_prol,info)
if (info == psb_success_) call psb_sphalo(tmp_prol,desc_a,am4,info,& !!$ if (info == psb_success_) call psb_sphalo(tmp_prol,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.) !!$ & colcnv=.false.,rowscale=.true.)
if (info == psb_success_) call psb_rwextd(ncol,tmp_prol,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,tmp_prol,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,a_err='Halo of op_prol') !!$ call psb_errpush(psb_err_internal_error_,name,a_err='Halo of op_prol')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
! !!$ !
! Now we have to fix this. The only rows of B that are correct !!$ ! Now we have to fix this. The only rows of B that are correct
! are those corresponding to "local" aggregates, i.e. indices in ilaggr(:) !!$ ! are those corresponding to "local" aggregates, i.e. indices in ilaggr(:)
! !!$ !
call op_restr%mv_to(tmpcoo) !!$ call op_restr%mv_to(tmpcoo)
!!$
nzl = tmpcoo%get_nzeros() !!$ nzl = tmpcoo%get_nzeros()
i=0 !!$ i=0
do k=1, nzl !!$ do k=1, nzl
if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then !!$ if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then
i = i+1 !!$ i = i+1
tmpcoo%val(i) = tmpcoo%val(k) !!$ tmpcoo%val(i) = tmpcoo%val(k)
tmpcoo%ia(i) = tmpcoo%ia(k) !!$ tmpcoo%ia(i) = tmpcoo%ia(k)
tmpcoo%ja(i) = tmpcoo%ja(k) !!$ tmpcoo%ja(i) = tmpcoo%ja(k)
end if !!$ end if
end do !!$ end do
call tmpcoo%set_nzeros(i) !!$ call tmpcoo%set_nzeros(i)
call op_restr%mv_from(tmpcoo) !!$ call op_restr%mv_from(tmpcoo)
call op_restr%cscnv(info,type='csr') !!$ call op_restr%cscnv(info,type='csr')
!!$
!!$
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'starting sphalo/ rwxtd' !!$ & 'starting sphalo/ rwxtd'
!!$
call psb_spspmm(la,tmp_prol,am3,info) !!$ call psb_spspmm(la,tmp_prol,am3,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done SPSPMM 2' !!$ & 'Done SPSPMM 2'
!!$
call psb_sphalo(am3,desc_a,am4,info,& !!$ call psb_sphalo(am3,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.) !!$ & colcnv=.false.,rowscale=.true.)
if (info == psb_success_) call psb_rwextd(ncol,am3,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,am3,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& !!$ call psb_errpush(psb_err_internal_error_,name,&
& a_err='Extend am3') !!$ & a_err='Extend am3')
goto 9999 !!$ goto 9999
end if !!$ end if
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done sphalo/ rwxtd' !!$ & 'Done sphalo/ rwxtd'
!!$
call psb_spspmm(op_restr,am3,ac,info) !!$ call psb_spspmm(op_restr,am3,ac,info)
if (info == psb_success_) call am3%free() !!$ if (info == psb_success_) call am3%free()
if (info == psb_success_) call ac%cscnv(info,type='coo',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call ac%cscnv(info,type='coo',dupl=psb_dupl_add_)
!!$
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& !!$ call psb_errpush(psb_err_internal_error_,name,&
&a_err='Build ac = op_restr x am3') !!$ &a_err='Build ac = op_restr x am3')
goto 9999 !!$ goto 9999
end if !!$ end if
@@ -116,7 +116,7 @@ subroutine amg_saggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_sml_parms), intent(inout) :: parms type(amg_sml_parms), intent(inout) :: parms
type(psb_sspmat_type), intent(out) :: op_prol,ac,op_restr type(psb_sspmat_type), intent(inout) :: op_prol,ac,op_restr
type(psb_lsspmat_type), intent(inout) :: t_prol type(psb_lsspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -83,8 +83,8 @@ subroutine amg_z_dec_aggregator_build_tprol(ag,parms,ag_data,&
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(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_lzspmat_type), intent(out) :: t_prol type(psb_lzspmat_type), intent(out) :: t_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -86,8 +86,8 @@ subroutine amg_z_symdec_aggregator_build_tprol(ag,parms,ag_data,&
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(inout) :: a
type(psb_desc_type), intent(in) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) integer(psb_lpk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:)
type(psb_lzspmat_type), intent(out) :: op_prol type(psb_lzspmat_type), intent(out) :: op_prol
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -105,7 +105,7 @@
! !
! !
subroutine amg_zaggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,& subroutine amg_zaggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
& ac,desc_ac,op_prol,op_restr,info) & ac,desc_ac,op_prol,op_restr,t_prol,info)
use psb_base_mod use psb_base_mod
use amg_base_prec_type use amg_base_prec_type
use amg_z_inner_mod, amg_protect_name => amg_zaggrmat_minnrg_bld use amg_z_inner_mod, amg_protect_name => amg_zaggrmat_minnrg_bld
@@ -117,8 +117,8 @@ subroutine amg_zaggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_lzspmat_type), intent(inout) :: op_prol type(psb_lzspmat_type), intent(inout) :: t_prol
type(psb_lzspmat_type), intent(out) :: ac,op_restr type(psb_zspmat_type), intent(inout) :: op_prol, ac,op_restr
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
@@ -171,6 +171,8 @@ subroutine amg_zaggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
filter_mat = (parms%aggr_filter == amg_filter_mat_) filter_mat = (parms%aggr_filter == amg_filter_mat_)
!NEEDS TO BE REWORKED !!
! naggr: number of local aggregates ! naggr: number of local aggregates
! nrow: local rows. ! nrow: local rows.
! !
@@ -183,361 +185,361 @@ subroutine amg_zaggrmat_minnrg_bld(a,desc_a,ilaggr,nlaggr,parms,&
goto 9999 goto 9999
end if end if
! Get the diagonal D !!$ ! Get the diagonal D
adiag = a%get_diag(info) !!$ adiag = a%get_diag(info)
if (info == psb_success_) & !!$ if (info == psb_success_) &
& call psb_realloc(ncol,adiag,info) !!$ & call psb_realloc(ncol,adiag,info)
if (info == psb_success_) & !!$ if (info == psb_success_) &
& call psb_halo(adiag,desc_a,info) !!$ & call psb_halo(adiag,desc_a,info)
if (info == psb_success_) call a%cp_to_l(la) !!$ if (info == psb_success_) call a%cp_to_l(la)
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='sp_getdiag')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
do i=1,size(adiag) !!$ do i=1,size(adiag)
if (adiag(i) /= zzero) then !!$ if (adiag(i) /= zzero) then
adinv(i) = zone / adiag(i) !!$ adinv(i) = zone / adiag(i)
else !!$ else
adinv(i) = zone !!$ adinv(i) = zone
end if !!$ end if
end do !!$ end do
!!$
!!$
!!$
! 1. Allocate Ptilde in sparse matrix form !!$ ! 1. Allocate Ptilde in sparse matrix form
call op_prol%mv_to(tmpcoo) !!$ call op_prol%mv_to(tmpcoo)
call ptilde%mv_from(tmpcoo) !!$ call ptilde%mv_from(tmpcoo)
call ptilde%cscnv(info,type='csr') !!$ call ptilde%cscnv(info,type='csr')
!!$
if (info == psb_success_) call la%cscnv(am3,info,type='csr',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call la%cscnv(am3,info,type='csr',dupl=psb_dupl_add_)
if (info == psb_success_) call la%cscnv(da,info,type='csr',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call la%cscnv(da,info,type='csr',dupl=psb_dupl_add_)
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='spcnv') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='spcnv')
goto 9999 !!$ goto 9999
end if !!$ end if
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& ' Initial copies done.' !!$ & ' Initial copies done.'
!!$
call da%scal(adinv,info) !!$ call da%scal(adinv,info)
!!$
call psb_spspmm(da,ptilde,dap,info) !!$ call psb_spspmm(da,ptilde,dap,info)
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='spspmm 1') !!$ call psb_errpush(psb_err_from_subroutine_,name,a_err='spspmm 1')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
call dap%clone(atmp,info) !!$ call dap%clone(atmp,info)
!!$
call psb_sphalo(atmp,desc_a,am4,info,& !!$ call psb_sphalo(atmp,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.,outfmt='CSR ') !!$ & colcnv=.false.,rowscale=.true.,outfmt='CSR ')
if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
call psb_spspmm(da,atmp,dadap,info) !!$ call psb_spspmm(da,atmp,dadap,info)
call atmp%free() !!$ call atmp%free()
!!$
! !$ write(0,*) 'Columns of AP',psb_sp_get_ncols(ap) !!$ ! !$ write(0,*) 'Columns of AP',psb_sp_get_ncols(ap)
! !$ write(0,*) 'Columns of ADAP',psb_sp_get_ncols(adap) !!$ ! !$ write(0,*) 'Columns of ADAP',psb_sp_get_ncols(adap)
call dap%mv_to(csc_dap) !!$ call dap%mv_to(csc_dap)
call dadap%mv_to(csc_dadap) !!$ call dadap%mv_to(csc_dadap)
!!$
call csc_mat_col_prod(csc_dap,csc_dadap,omp,info) !!$ call csc_mat_col_prod(csc_dap,csc_dadap,omp,info)
call csc_mat_col_prod(csc_dadap,csc_dadap,oden,info) !!$ call csc_mat_col_prod(csc_dadap,csc_dadap,oden,info)
call psb_sum(ctxt,omp) !!$ call psb_sum(ctxt,omp)
call psb_sum(ctxt,oden) !!$ call psb_sum(ctxt,oden)
! !$ write(0,*) trim(name),' OMP :',omp !!$ ! !$ write(0,*) trim(name),' OMP :',omp
! !$ write(0,*) trim(name),' ODEN:',oden !!$ ! !$ write(0,*) trim(name),' ODEN:',oden
!!$
omp = omp/oden !!$ omp = omp/oden
!!$
! !$ write(0,*) 'Check on output prolongator ',omp(1:min(size(omp),10)) !!$ ! !$ write(0,*) 'Check on output prolongator ',omp(1:min(size(omp),10))
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done NUMBMM 1' !!$ & 'Done NUMBMM 1'
!!$
call am3%mv_to(acsr3) !!$ call am3%mv_to(acsr3)
! Compute omega_int !!$ ! Compute omega_int
ommx = zzero !!$ ommx = zzero
do i=1, ncol !!$ do i=1, ncol
if (ilaggr(i) >0) then !!$ if (ilaggr(i) >0) then
omi(i) = omp(ilaggr(i)) !!$ omi(i) = omp(ilaggr(i))
else !!$ else
omi(i) = zzero !!$ omi(i) = zzero
end if !!$ end if
if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i) !!$ if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i)
end do !!$ end do
! Compute omega_fine !!$ ! Compute omega_fine
do i=1, nrow !!$ do i=1, nrow
omf(i) = ommx !!$ omf(i) = ommx
do j=acsr3%irp(i),acsr3%irp(i+1)-1 !!$ do j=acsr3%irp(i),acsr3%irp(i+1)-1
if(abs(omi(acsr3%ja(j))) .lt. abs(omf(i))) omf(i)=omi(acsr3%ja(j)) !!$ if(abs(omi(acsr3%ja(j))) .lt. abs(omf(i))) omf(i)=omi(acsr3%ja(j))
end do !!$ end do
!!$ if(min(real(omf(i)),aimag(omf(i))) < dzero) omf(i) = zzero !!$ ! ! if(min(real(omf(i)),aimag(omf(i))) < dzero) omf(i) = zzero
if(psb_minreal(omf(i)) < dzero) omf(i) = zzero !!$ if(psb_minreal(omf(i)) < dzero) omf(i) = zzero
end do !!$ end do
!!$
omf(1:nrow) = omf(1:nrow) * adinv(1:nrow) !!$ omf(1:nrow) = omf(1:nrow) * adinv(1:nrow)
!!$
if (filter_mat) then !!$ if (filter_mat) then
! !!$ !
! Build the filtered matrix Af from A !!$ ! Build the filtered matrix Af from A
! !!$ !
call la%cscnv(acsrf,info,dupl=psb_dupl_add_) !!$ call la%cscnv(acsrf,info,dupl=psb_dupl_add_)
!!$
do i=1,nrow !!$ do i=1,nrow
tmp = zzero !!$ tmp = zzero
jd = -1 !!$ jd = -1
do j=acsrf%irp(i),acsrf%irp(i+1)-1 !!$ do j=acsrf%irp(i),acsrf%irp(i+1)-1
if (acsrf%ja(j) == i) jd = j !!$ if (acsrf%ja(j) == i) jd = j
if (abs(acsrf%val(j)) < theta*sqrt(abs(adiag(i)*adiag(acsrf%ja(j))))) then !!$ if (abs(acsrf%val(j)) < theta*sqrt(abs(adiag(i)*adiag(acsrf%ja(j))))) then
tmp=tmp+acsrf%val(j) !!$ tmp=tmp+acsrf%val(j)
acsrf%val(j)=zzero !!$ acsrf%val(j)=zzero
endif !!$ endif
enddo !!$ enddo
if (jd == -1) then !!$ if (jd == -1) then
write(0,*) 'Wrong input: we need the diagonal!!!!', i !!$ write(0,*) 'Wrong input: we need the diagonal!!!!', i
else !!$ else
acsrf%val(jd)=acsrf%val(jd)-tmp !!$ acsrf%val(jd)=acsrf%val(jd)-tmp
end if !!$ end if
enddo !!$ enddo
! Take out zeroed terms !!$ ! Take out zeroed terms
call acsrf%clean_zeros(info) !!$ call acsrf%clean_zeros(info)
!!$
! !!$ !
! Build the smoothed prolongator using the filtered matrix !!$ ! Build the smoothed prolongator using the filtered matrix
! !!$ !
do i=1,acsrf%get_nrows() !!$ do i=1,acsrf%get_nrows()
do j=acsrf%irp(i),acsrf%irp(i+1)-1 !!$ do j=acsrf%irp(i),acsrf%irp(i+1)-1
if (acsrf%ja(j) == i) then !!$ if (acsrf%ja(j) == i) then
acsrf%val(j) = zone - omf(i)*acsrf%val(j) !!$ acsrf%val(j) = zone - omf(i)*acsrf%val(j)
else !!$ else
acsrf%val(j) = - omf(i)*acsrf%val(j) !!$ acsrf%val(j) = - omf(i)*acsrf%val(j)
end if !!$ end if
end do !!$ end do
end do !!$ end do
!!$
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done gather, going for SYMBMM 1' !!$ & 'Done gather, going for SYMBMM 1'
!!$
call af%mv_from(acsrf) !!$ call af%mv_from(acsrf)
! !!$ !
! op_prol = (I-w*D*Af)Ptilde !!$ ! op_prol = (I-w*D*Af)Ptilde
! Doing it this way means to consider diag(Af_i) !!$ ! Doing it this way means to consider diag(Af_i)
! !!$ !
! !!$ !
call psb_spspmm(af,ptilde,op_prol,info) !!$ call psb_spspmm(af,ptilde,op_prol,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done SPSPMM 1' !!$ & 'Done SPSPMM 1'
else !!$ else
! !!$ !
! Build the smoothed prolongator using the original matrix !!$ ! Build the smoothed prolongator using the original matrix
! !!$ !
do i=1,acsr3%get_nrows() !!$ do i=1,acsr3%get_nrows()
do j=acsr3%irp(i),acsr3%irp(i+1)-1 !!$ do j=acsr3%irp(i),acsr3%irp(i+1)-1
if (acsr3%ja(j) == i) then !!$ if (acsr3%ja(j) == i) then
acsr3%val(j) = zone - omf(i)*acsr3%val(j) !!$ acsr3%val(j) = zone - omf(i)*acsr3%val(j)
else !!$ else
acsr3%val(j) = - omf(i)*acsr3%val(j) !!$ acsr3%val(j) = - omf(i)*acsr3%val(j)
end if !!$ end if
end do !!$ end do
end do !!$ end do
!!$
call am3%mv_from(acsr3) !!$ call am3%mv_from(acsr3)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done gather, going for SYMBMM 1' !!$ & 'Done gather, going for SYMBMM 1'
! !!$ !
! !!$ !
! op_prol = (I-w*D*A)Ptilde !!$ ! op_prol = (I-w*D*A)Ptilde
! !!$ !
! !!$ !
call psb_spspmm(am3,ptilde,op_prol,info) !!$ call psb_spspmm(am3,ptilde,op_prol,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done NUMBMM 1' !!$ & 'Done NUMBMM 1'
!!$
end if !!$ end if
!!$
!!$
! !!$ !
! Ok, let's start over with the restrictor !!$ ! Ok, let's start over with the restrictor
! !!$ !
call ptilde%transc(rtilde) !!$ call ptilde%transc(rtilde)
call la%cscnv(atmp,info,type='csr') !!$ call la%cscnv(atmp,info,type='csr')
call psb_sphalo(atmp,desc_a,am4,info,& !!$ call psb_sphalo(atmp,desc_a,am4,info,&
& colcnv=.true.,rowscale=.true.) !!$ & colcnv=.true.,rowscale=.true.)
nrt = am4%get_nrows() !!$ nrt = am4%get_nrows()
call am4%csclip(atmp2,info,lone,nrt,lone,ncol) !!$ call am4%csclip(atmp2,info,lone,nrt,lone,ncol)
call atmp2%cscnv(info,type='CSR') !!$ call atmp2%cscnv(info,type='CSR')
if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=atmp2) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp,info,b=atmp2)
call am4%free() !!$ call am4%free()
call atmp2%free() !!$ call atmp2%free()
!!$
! This is to compute the transpose. It ONLY works if the !!$ ! This is to compute the transpose. It ONLY works if the
! original A has a symmetric pattern. !!$ ! original A has a symmetric pattern.
call atmp%transc(atmp2) !!$ call atmp%transc(atmp2)
call atmp2%csclip(dat,info,lone,nrow,lone,ncol) !!$ call atmp2%csclip(dat,info,lone,nrow,lone,ncol)
call dat%cscnv(info,type='csr') !!$ call dat%cscnv(info,type='csr')
call dat%scal(adinv,info) !!$ call dat%scal(adinv,info)
!!$
! Now for the product. !!$ ! Now for the product.
call psb_spspmm(dat,ptilde,datp,info) !!$ call psb_spspmm(dat,ptilde,datp,info)
!!$
call datp%clone(atmp2,info) !!$ call datp%clone(atmp2,info)
call psb_sphalo(atmp2,desc_a,am4,info,& !!$ call psb_sphalo(atmp2,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.,outfmt='CSR ') !!$ & colcnv=.false.,rowscale=.true.,outfmt='CSR ')
if (info == psb_success_) call psb_rwextd(ncol,atmp2,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,atmp2,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
!!$
call psb_symbmm(dat,atmp2,datdatp,info) !!$ call psb_symbmm(dat,atmp2,datdatp,info)
call psb_numbmm(dat,atmp2,datdatp) !!$ call psb_numbmm(dat,atmp2,datdatp)
call atmp2%free() !!$ call atmp2%free()
!!$
call datp%mv_to(csc_datp) !!$ call datp%mv_to(csc_datp)
call datdatp%mv_to(csc_datdatp) !!$ call datdatp%mv_to(csc_datdatp)
!!$
call csc_mat_col_prod(csc_datp,csc_datdatp,omp,info) !!$ call csc_mat_col_prod(csc_datp,csc_datdatp,omp,info)
call csc_mat_col_prod(csc_datdatp,csc_datdatp,oden,info) !!$ call csc_mat_col_prod(csc_datdatp,csc_datdatp,oden,info)
call psb_sum(ctxt,omp) !!$ call psb_sum(ctxt,omp)
call psb_sum(ctxt,oden) !!$ call psb_sum(ctxt,oden)
!!$
!!$
! !$ write(debug_unit,*) trim(name),' OMP_R :',omp !!$ ! !$ write(debug_unit,*) trim(name),' OMP_R :',omp
! ! $ write(debug_unit,*) trim(name),' ODEN_R:',oden !!$ ! ! $ write(debug_unit,*) trim(name),' ODEN_R:',oden
omp = omp/oden !!$ omp = omp/oden
! !$ write(0,*) 'Check on output restrictor',omp(1:min(size(omp),10)) !!$ ! !$ write(0,*) 'Check on output restrictor',omp(1:min(size(omp),10))
! Compute omega_int !!$ ! Compute omega_int
ommx = zzero !!$ ommx = zzero
do i=1, ncol !!$ do i=1, ncol
if (ilaggr(i) >0) then !!$ if (ilaggr(i) >0) then
omi(i) = omp(ilaggr(i)) !!$ omi(i) = omp(ilaggr(i))
else !!$ else
omi(i) = zzero !!$ omi(i) = zzero
end if !!$ end if
if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i) !!$ if(abs(omi(i)) .gt. abs(ommx)) ommx = omi(i)
end do !!$ end do
! Compute omega_fine !!$ ! Compute omega_fine
! Going over the columns of atmp means going over the rows !!$ ! Going over the columns of atmp means going over the rows
! of A^T. Hopefully ;-) !!$ ! of A^T. Hopefully ;-)
call atmp%cp_to(acsc) !!$ call atmp%cp_to(acsc)
!!$
do i=1, nrow !!$ do i=1, nrow
omf(i) = ommx !!$ omf(i) = ommx
do j= acsc%icp(i),acsc%icp(i+1)-1 !!$ do j= acsc%icp(i),acsc%icp(i+1)-1
if(abs(omi(acsc%ia(j))) .lt. abs(omf(i))) omf(i)=omi(acsc%ia(j)) !!$ if(abs(omi(acsc%ia(j))) .lt. abs(omf(i))) omf(i)=omi(acsc%ia(j))
end do !!$ end do
!!$ if(min(real(omf(i)),aimag(omf(i))) < dzero) omf(i) = zzero !!$ ! ! if(min(real(omf(i)),aimag(omf(i))) < dzero) omf(i) = zzero
if(psb_minreal(omf(i)) < dzero) omf(i) = zzero !!$ if(psb_minreal(omf(i)) < dzero) omf(i) = zzero
end do !!$ end do
omf(1:nrow) = omf(1:nrow)*adinv(1:nrow) !!$ omf(1:nrow) = omf(1:nrow)*adinv(1:nrow)
call psb_halo(omf,desc_a,info) !!$ call psb_halo(omf,desc_a,info)
call acsc%free() !!$ call acsc%free()
!!$
!!$
call atmp%mv_to(acsr1) !!$ call atmp%mv_to(acsr1)
!!$
do i=1,acsr1%get_nrows() !!$ do i=1,acsr1%get_nrows()
do j=acsr1%irp(i),acsr1%irp(i+1)-1 !!$ do j=acsr1%irp(i),acsr1%irp(i+1)-1
if (acsr1%ja(j) == i) then !!$ if (acsr1%ja(j) == i) then
acsr1%val(j) = zone - acsr1%val(j)*omf(acsr1%ja(j)) !!$ acsr1%val(j) = zone - acsr1%val(j)*omf(acsr1%ja(j))
else !!$ else
acsr1%val(j) = - acsr1%val(j)*omf(acsr1%ja(j)) !!$ acsr1%val(j) = - acsr1%val(j)*omf(acsr1%ja(j))
end if !!$ end if
end do !!$ end do
end do !!$ end do
call atmp%mv_from(acsr1) !!$ call atmp%mv_from(acsr1)
!!$
call rtilde%mv_to(tmpcoo) !!$ call rtilde%mv_to(tmpcoo)
nzl = tmpcoo%get_nzeros() !!$ nzl = tmpcoo%get_nzeros()
i=0 !!$ i=0
do k=1, nzl !!$ do k=1, nzl
if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then !!$ if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then
i = i+1 !!$ i = i+1
tmpcoo%val(i) = tmpcoo%val(k) !!$ tmpcoo%val(i) = tmpcoo%val(k)
tmpcoo%ia(i) = tmpcoo%ia(k) !!$ tmpcoo%ia(i) = tmpcoo%ia(k)
tmpcoo%ja(i) = tmpcoo%ja(k) !!$ tmpcoo%ja(i) = tmpcoo%ja(k)
end if !!$ end if
end do !!$ end do
call tmpcoo%set_nzeros(i) !!$ call tmpcoo%set_nzeros(i)
call rtilde%mv_from(tmpcoo) !!$ call rtilde%mv_from(tmpcoo)
call rtilde%cscnv(info,type='csr') !!$ call rtilde%cscnv(info,type='csr')
!!$
call psb_spspmm(rtilde,atmp,op_restr,info) !!$ call psb_spspmm(rtilde,atmp,op_restr,info)
!!$
! !!$ !
! Now we have to gather the halo of op_prol, and add it to itself !!$ ! Now we have to gather the halo of op_prol, and add it to itself
! to multiply it by A, !!$ ! to multiply it by A,
! !!$ !
call op_prol%clone(tmp_prol,info) !!$ call op_prol%clone(tmp_prol,info)
if (info == psb_success_) call psb_sphalo(tmp_prol,desc_a,am4,info,& !!$ if (info == psb_success_) call psb_sphalo(tmp_prol,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.) !!$ & colcnv=.false.,rowscale=.true.)
if (info == psb_success_) call psb_rwextd(ncol,tmp_prol,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,tmp_prol,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,a_err='Halo of op_prol') !!$ call psb_errpush(psb_err_internal_error_,name,a_err='Halo of op_prol')
goto 9999 !!$ goto 9999
end if !!$ end if
!!$
! !!$ !
! Now we have to fix this. The only rows of B that are correct !!$ ! Now we have to fix this. The only rows of B that are correct
! are those corresponding to "local" aggregates, i.e. indices in ilaggr(:) !!$ ! are those corresponding to "local" aggregates, i.e. indices in ilaggr(:)
! !!$ !
call op_restr%mv_to(tmpcoo) !!$ call op_restr%mv_to(tmpcoo)
!!$
nzl = tmpcoo%get_nzeros() !!$ nzl = tmpcoo%get_nzeros()
i=0 !!$ i=0
do k=1, nzl !!$ do k=1, nzl
if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then !!$ if ((naggrm1 < tmpcoo%ia(k)) .and. (tmpcoo%ia(k) <= naggrp1)) then
i = i+1 !!$ i = i+1
tmpcoo%val(i) = tmpcoo%val(k) !!$ tmpcoo%val(i) = tmpcoo%val(k)
tmpcoo%ia(i) = tmpcoo%ia(k) !!$ tmpcoo%ia(i) = tmpcoo%ia(k)
tmpcoo%ja(i) = tmpcoo%ja(k) !!$ tmpcoo%ja(i) = tmpcoo%ja(k)
end if !!$ end if
end do !!$ end do
call tmpcoo%set_nzeros(i) !!$ call tmpcoo%set_nzeros(i)
call op_restr%mv_from(tmpcoo) !!$ call op_restr%mv_from(tmpcoo)
call op_restr%cscnv(info,type='csr') !!$ call op_restr%cscnv(info,type='csr')
!!$
!!$
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'starting sphalo/ rwxtd' !!$ & 'starting sphalo/ rwxtd'
!!$
call psb_spspmm(la,tmp_prol,am3,info) !!$ call psb_spspmm(la,tmp_prol,am3,info)
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done SPSPMM 2' !!$ & 'Done SPSPMM 2'
!!$
call psb_sphalo(am3,desc_a,am4,info,& !!$ call psb_sphalo(am3,desc_a,am4,info,&
& colcnv=.false.,rowscale=.true.) !!$ & colcnv=.false.,rowscale=.true.)
if (info == psb_success_) call psb_rwextd(ncol,am3,info,b=am4) !!$ if (info == psb_success_) call psb_rwextd(ncol,am3,info,b=am4)
if (info == psb_success_) call am4%free() !!$ if (info == psb_success_) call am4%free()
!!$
if(info /= psb_success_) then !!$ if(info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& !!$ call psb_errpush(psb_err_internal_error_,name,&
& a_err='Extend am3') !!$ & a_err='Extend am3')
goto 9999 !!$ goto 9999
end if !!$ end if
if (debug_level >= psb_debug_outer_) & !!$ if (debug_level >= psb_debug_outer_) &
& write(debug_unit,*) me,' ',trim(name),& !!$ & write(debug_unit,*) me,' ',trim(name),&
& 'Done sphalo/ rwxtd' !!$ & 'Done sphalo/ rwxtd'
!!$
call psb_spspmm(op_restr,am3,ac,info) !!$ call psb_spspmm(op_restr,am3,ac,info)
if (info == psb_success_) call am3%free() !!$ if (info == psb_success_) call am3%free()
if (info == psb_success_) call ac%cscnv(info,type='coo',dupl=psb_dupl_add_) !!$ if (info == psb_success_) call ac%cscnv(info,type='coo',dupl=psb_dupl_add_)
!!$
if (info /= psb_success_) then !!$ if (info /= psb_success_) then
call psb_errpush(psb_err_internal_error_,name,& !!$ call psb_errpush(psb_err_internal_error_,name,&
&a_err='Build ac = op_restr x am3') !!$ &a_err='Build ac = op_restr x am3')
goto 9999 !!$ goto 9999
end if !!$ end if
@@ -116,7 +116,7 @@ subroutine amg_zaggrmat_smth_bld(a,desc_a,ilaggr,nlaggr,parms,&
type(psb_desc_type), intent(inout) :: desc_a type(psb_desc_type), intent(inout) :: desc_a
integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:) integer(psb_lpk_), intent(inout) :: ilaggr(:), nlaggr(:)
type(amg_dml_parms), intent(inout) :: parms type(amg_dml_parms), intent(inout) :: parms
type(psb_zspmat_type), intent(out) :: op_prol,ac,op_restr type(psb_zspmat_type), intent(inout) :: op_prol,ac,op_restr
type(psb_lzspmat_type), intent(inout) :: t_prol type(psb_lzspmat_type), intent(inout) :: t_prol
type(psb_desc_type), intent(inout) :: desc_ac type(psb_desc_type), intent(inout) :: desc_ac
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
+1 -1
View File
@@ -45,7 +45,7 @@ subroutine amg_cprecsetsm(p,val,info,ilev,ilmax,pos)
implicit none implicit none
! Arguments ! Arguments
class(amg_cprec_type), intent(inout) :: p class(amg_cprec_type), target, intent(inout):: p
class(amg_c_base_smoother_type), intent(in) :: val class(amg_c_base_smoother_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), optional, intent(in) :: ilev,ilmax integer(psb_ipk_), optional, intent(in) :: ilev,ilmax
+1 -1
View File
@@ -45,7 +45,7 @@ subroutine amg_dprecsetsm(p,val,info,ilev,ilmax,pos)
implicit none implicit none
! Arguments ! Arguments
class(amg_dprec_type), intent(inout) :: p class(amg_dprec_type), target, intent(inout):: p
class(amg_d_base_smoother_type), intent(in) :: val class(amg_d_base_smoother_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), optional, intent(in) :: ilev,ilmax integer(psb_ipk_), optional, intent(in) :: ilev,ilmax
+1 -1
View File
@@ -45,7 +45,7 @@ subroutine amg_sprecsetsm(p,val,info,ilev,ilmax,pos)
implicit none implicit none
! Arguments ! Arguments
class(amg_sprec_type), intent(inout) :: p class(amg_sprec_type), target, intent(inout):: p
class(amg_s_base_smoother_type), intent(in) :: val class(amg_s_base_smoother_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), optional, intent(in) :: ilev,ilmax integer(psb_ipk_), optional, intent(in) :: ilev,ilmax
+1 -1
View File
@@ -45,7 +45,7 @@ subroutine amg_zprecsetsm(p,val,info,ilev,ilmax,pos)
implicit none implicit none
! Arguments ! Arguments
class(amg_zprec_type), intent(inout) :: p class(amg_zprec_type), target, intent(inout):: p
class(amg_z_base_smoother_type), intent(in) :: val class(amg_z_base_smoother_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), optional, intent(in) :: ilev,ilmax integer(psb_ipk_), optional, intent(in) :: ilev,ilmax
@@ -61,6 +61,7 @@ subroutine amg_c_as_smoother_free(sm,info)
end if end if
end if end if
call sm%nd%free() call sm%nd%free()
call sm%desc_data%free(info)
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
@@ -61,6 +61,7 @@ subroutine amg_d_as_smoother_free(sm,info)
end if end if
end if end if
call sm%nd%free() call sm%nd%free()
call sm%desc_data%free(info)
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
@@ -61,6 +61,7 @@ subroutine amg_s_as_smoother_free(sm,info)
end if end if
end if end if
call sm%nd%free() call sm%nd%free()
call sm%desc_data%free(info)
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
@@ -61,6 +61,7 @@ subroutine amg_z_as_smoother_free(sm,info)
end if end if
end if end if
call sm%nd%free() call sm%nd%free()
call sm%desc_data%free(info)
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
@@ -42,7 +42,7 @@ subroutine amg_c_base_solver_csetr(sv,what,val,info,idx)
Implicit None Implicit None
! Arguments ! Arguments
class(amg_c_base_solver_type), intent(inout) :: sv class(amg_c_base_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what character(len=*), intent(in) :: what
real(psb_spk_), intent(in) :: val real(psb_spk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: idx integer(psb_ipk_), intent(in), optional :: idx
@@ -44,7 +44,7 @@ subroutine amg_c_bwgs_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold)
! Arguments ! Arguments
type(psb_cspmat_type), intent(in), target :: a type(psb_cspmat_type), intent(in), target :: a
Type(psb_desc_type), Intent(in) :: desc_a Type(psb_desc_type), Intent(inout) :: desc_a
class(amg_c_bwgs_solver_type), intent(inout) :: sv class(amg_c_bwgs_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_cspmat_type), intent(in), target, optional :: b type(psb_cspmat_type), intent(in), target, optional :: b
@@ -77,7 +77,7 @@
! This is the implementation file corresponding to amg_c_krm_solver_mod. ! This is the implementation file corresponding to amg_c_krm_solver_mod.
! !
! !
subroutine amg_c_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold) subroutine amg_c_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold)
use psb_base_mod use psb_base_mod
use amg_c_krm_solver, amg_protect_name => amg_c_krm_solver_bld use amg_c_krm_solver, amg_protect_name => amg_c_krm_solver_bld
@@ -85,13 +85,14 @@ subroutine amg_c_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold)
Implicit None Implicit None
! Arguments ! Arguments
type(psb_cspmat_type), intent(inout), target :: a type(psb_cspmat_type), intent(in), target :: a
Type(psb_desc_type), Intent(inout) :: desc_a Type(psb_desc_type), Intent(inout) :: desc_a
class(amg_c_krm_solver_type), intent(inout) :: sv class(amg_c_krm_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_cspmat_type), intent(in), target, optional :: b type(psb_cspmat_type), intent(in), target, optional :: b
class(psb_c_base_sparse_mat), intent(in), optional :: amold class(psb_c_base_sparse_mat), intent(in), optional :: amold
class(psb_c_base_vect_type), intent(in), optional :: vmold class(psb_c_base_vect_type), intent(in), optional :: vmold
class(psb_i_base_vect_type), intent(in), optional :: imold
! Local variables ! Local variables
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota
integer(psb_lpk_) :: lnr integer(psb_lpk_) :: lnr
@@ -42,7 +42,7 @@ subroutine amg_d_base_solver_csetr(sv,what,val,info,idx)
Implicit None Implicit None
! Arguments ! Arguments
class(amg_d_base_solver_type), intent(inout) :: sv class(amg_d_base_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what character(len=*), intent(in) :: what
real(psb_dpk_), intent(in) :: val real(psb_dpk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: idx integer(psb_ipk_), intent(in), optional :: idx
@@ -44,7 +44,7 @@ subroutine amg_d_bwgs_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold)
! Arguments ! Arguments
type(psb_dspmat_type), intent(in), target :: a type(psb_dspmat_type), intent(in), target :: a
Type(psb_desc_type), Intent(in) :: desc_a Type(psb_desc_type), Intent(inout) :: desc_a
class(amg_d_bwgs_solver_type), intent(inout) :: sv class(amg_d_bwgs_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_dspmat_type), intent(in), target, optional :: b type(psb_dspmat_type), intent(in), target, optional :: b
@@ -77,7 +77,7 @@
! This is the implementation file corresponding to amg_d_krm_solver_mod. ! This is the implementation file corresponding to amg_d_krm_solver_mod.
! !
! !
subroutine amg_d_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold) subroutine amg_d_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold)
use psb_base_mod use psb_base_mod
use amg_d_krm_solver, amg_protect_name => amg_d_krm_solver_bld use amg_d_krm_solver, amg_protect_name => amg_d_krm_solver_bld
@@ -85,13 +85,14 @@ subroutine amg_d_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold)
Implicit None Implicit None
! Arguments ! Arguments
type(psb_dspmat_type), intent(inout), target :: a type(psb_dspmat_type), intent(in), target :: a
Type(psb_desc_type), Intent(inout) :: desc_a Type(psb_desc_type), Intent(inout) :: desc_a
class(amg_d_krm_solver_type), intent(inout) :: sv class(amg_d_krm_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_dspmat_type), intent(in), target, optional :: b type(psb_dspmat_type), intent(in), target, optional :: b
class(psb_d_base_sparse_mat), intent(in), optional :: amold class(psb_d_base_sparse_mat), intent(in), optional :: amold
class(psb_d_base_vect_type), intent(in), optional :: vmold class(psb_d_base_vect_type), intent(in), optional :: vmold
class(psb_i_base_vect_type), intent(in), optional :: imold
! Local variables ! Local variables
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota
integer(psb_lpk_) :: lnr integer(psb_lpk_) :: lnr
@@ -42,7 +42,7 @@ subroutine amg_s_base_solver_csetr(sv,what,val,info,idx)
Implicit None Implicit None
! Arguments ! Arguments
class(amg_s_base_solver_type), intent(inout) :: sv class(amg_s_base_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what character(len=*), intent(in) :: what
real(psb_spk_), intent(in) :: val real(psb_spk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: idx integer(psb_ipk_), intent(in), optional :: idx
@@ -44,7 +44,7 @@ subroutine amg_s_bwgs_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold)
! Arguments ! Arguments
type(psb_sspmat_type), intent(in), target :: a type(psb_sspmat_type), intent(in), target :: a
Type(psb_desc_type), Intent(in) :: desc_a Type(psb_desc_type), Intent(inout) :: desc_a
class(amg_s_bwgs_solver_type), intent(inout) :: sv class(amg_s_bwgs_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_sspmat_type), intent(in), target, optional :: b type(psb_sspmat_type), intent(in), target, optional :: b
@@ -77,7 +77,7 @@
! This is the implementation file corresponding to amg_s_krm_solver_mod. ! This is the implementation file corresponding to amg_s_krm_solver_mod.
! !
! !
subroutine amg_s_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold) subroutine amg_s_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold)
use psb_base_mod use psb_base_mod
use amg_s_krm_solver, amg_protect_name => amg_s_krm_solver_bld use amg_s_krm_solver, amg_protect_name => amg_s_krm_solver_bld
@@ -85,13 +85,14 @@ subroutine amg_s_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold)
Implicit None Implicit None
! Arguments ! Arguments
type(psb_sspmat_type), intent(inout), target :: a type(psb_sspmat_type), intent(in), target :: a
Type(psb_desc_type), Intent(inout) :: desc_a Type(psb_desc_type), Intent(inout) :: desc_a
class(amg_s_krm_solver_type), intent(inout) :: sv class(amg_s_krm_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_sspmat_type), intent(in), target, optional :: b type(psb_sspmat_type), intent(in), target, optional :: b
class(psb_s_base_sparse_mat), intent(in), optional :: amold class(psb_s_base_sparse_mat), intent(in), optional :: amold
class(psb_s_base_vect_type), intent(in), optional :: vmold class(psb_s_base_vect_type), intent(in), optional :: vmold
class(psb_i_base_vect_type), intent(in), optional :: imold
! Local variables ! Local variables
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota
integer(psb_lpk_) :: lnr integer(psb_lpk_) :: lnr
@@ -42,7 +42,7 @@ subroutine amg_z_base_solver_csetr(sv,what,val,info,idx)
Implicit None Implicit None
! Arguments ! Arguments
class(amg_z_base_solver_type), intent(inout) :: sv class(amg_z_base_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what character(len=*), intent(in) :: what
real(psb_dpk_), intent(in) :: val real(psb_dpk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: idx integer(psb_ipk_), intent(in), optional :: idx
@@ -44,7 +44,7 @@ subroutine amg_z_bwgs_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold)
! Arguments ! Arguments
type(psb_zspmat_type), intent(in), target :: a type(psb_zspmat_type), intent(in), target :: a
Type(psb_desc_type), Intent(in) :: desc_a Type(psb_desc_type), Intent(inout) :: desc_a
class(amg_z_bwgs_solver_type), intent(inout) :: sv class(amg_z_bwgs_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_zspmat_type), intent(in), target, optional :: b type(psb_zspmat_type), intent(in), target, optional :: b
@@ -77,7 +77,7 @@
! This is the implementation file corresponding to amg_z_krm_solver_mod. ! This is the implementation file corresponding to amg_z_krm_solver_mod.
! !
! !
subroutine amg_z_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold) subroutine amg_z_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold,imold)
use psb_base_mod use psb_base_mod
use amg_z_krm_solver, amg_protect_name => amg_z_krm_solver_bld use amg_z_krm_solver, amg_protect_name => amg_z_krm_solver_bld
@@ -85,13 +85,14 @@ subroutine amg_z_krm_solver_bld(a,desc_a,sv,info,b,amold,vmold)
Implicit None Implicit None
! Arguments ! Arguments
type(psb_zspmat_type), intent(inout), target :: a type(psb_zspmat_type), intent(in), target :: a
Type(psb_desc_type), Intent(inout) :: desc_a Type(psb_desc_type), Intent(inout) :: desc_a
class(amg_z_krm_solver_type), intent(inout) :: sv class(amg_z_krm_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
type(psb_zspmat_type), intent(in), target, optional :: b type(psb_zspmat_type), intent(in), target, optional :: b
class(psb_z_base_sparse_mat), intent(in), optional :: amold class(psb_z_base_sparse_mat), intent(in), optional :: amold
class(psb_z_base_vect_type), intent(in), optional :: vmold class(psb_z_base_vect_type), intent(in), optional :: vmold
class(psb_i_base_vect_type), intent(in), optional :: imold
! Local variables ! Local variables
integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota integer(psb_ipk_) :: n_row,n_col, nrow_a, nztota
integer(psb_lpk_) :: lnr integer(psb_lpk_) :: lnr
Binary file not shown.
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title></title> <head><title></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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+25 -24
View File
@@ -13,35 +13,33 @@
.cmbx-12{font-size:109%; font-weight: bold;} .cmbx-12{font-size:109%; font-weight: bold;}
.cmbx-12{ font-weight: bold;} .cmbx-12{ font-weight: bold;}
.cmbx-12{ font-weight: bold;} .cmbx-12{ font-weight: bold;}
.cmtt-12{font-size:109%;font-family: monospace,monospace;} .cmtt-12{font-size:109%;font-family: monospace;}
.cmtt-12{font-family: monospace,monospace;} .cmtt-12{font-family: monospace;}
.cmtt-12{font-family: monospace,monospace;} .cmtt-12{font-family: monospace;}
.cmcsc-10x-x-120{font-size:109%;} .cmcsc-10x-x-120{font-size:109%;}
.cmr-8{font-size:72%;} .cmr-8{font-size:72%;}
.cmmi-12{font-size:109%;font-style: italic;} .cmmi-12{font-size:109%;font-style: italic;}
.cmmi-8{font-size:72%;font-style: italic;} .cmmi-8{font-size:72%;font-style: italic;}
.cmsy-10x-x-120{font-size:109%;} .cmsy-10x-x-120{font-size:109%;}
.cmsy-8{font-size:72%;} .cmsy-8{font-size:72%;}
.tctt-1200{font-size:109%;font-family: monospace,monospace;}
.cmmi-10x-x-109{font-style: italic;} .cmmi-10x-x-109{font-style: italic;}
.cmsy-10x-x-109{} .cmsy-10x-x-109{}
.cmtt-10x-x-109{font-family: monospace,monospace;} .cmtt-10x-x-109{font-family: monospace;}
.cmtt-10x-x-109{font-family: monospace,monospace;} .cmtt-10x-x-109{font-family: monospace;}
.cmtt-10x-x-109{font-family: monospace,monospace;} .cmtt-10x-x-109{font-family: monospace;}
.cmcsc-10x-x-109{} .cmcsc-10x-x-109{}
.cmtt-10{font-size:90%;font-family: monospace,monospace;} .cmtt-10{font-size:90%;font-family: monospace;}
.cmtt-10{font-family: monospace,monospace;} .cmtt-10{font-family: monospace;}
.cmtt-10{font-family: monospace,monospace;} .cmtt-10{font-family: monospace;}
.cmbx-10x-x-109{ font-weight: bold;} .cmbx-10x-x-109{ font-weight: bold;}
.cmbx-10x-x-109{ font-weight: bold;} .cmbx-10x-x-109{ font-weight: bold;}
.cmbx-10x-x-109{ font-weight: bold;} .cmbx-10x-x-109{ font-weight: bold;}
.cmcsc-10{font-size:90%;} .cmcsc-10{font-size:90%;}
.small-caps{font-variant: small-caps; } .small-caps{font-variant: small-caps; }
p{margin-top:0;margin-bottom:0} p.noindent { text-indent: 0em }
p.indent{text-indent:0;} td p.noindent { text-indent: 0em; margin-top:0em; }
p + p{margin-top:1em;} p.nopar { text-indent: 0em; }
p + div, p + pre {margin-top:1em;} p.indent{ text-indent: 1.5em }
div + p, pre + p {margin-top:1em;}
@media print {div.crosslinks {visibility:hidden;}} @media print {div.crosslinks {visibility:hidden;}}
a img { border-top: 0; border-left: 0; border-right: 0; } a img { border-top: 0; border-left: 0; border-right: 0; }
center { margin-top:1em; margin-bottom:1em; } center { margin-top:1em; margin-bottom:1em; }
@@ -64,7 +62,7 @@ div.obeylines-v p { margin-top:0; margin-bottom:0; }
td.displaylines {text-align:center; white-space:nowrap;} td.displaylines {text-align:center; white-space:nowrap;}
.centerline {text-align:center;} .centerline {text-align:center;}
.rightline {text-align:right;} .rightline {text-align:right;}
pre.verbatim {font-family: monospace,monospace; text-align:left; clear:both; } div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; }
.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } .fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
div.fbox {display:table} div.fbox {display:table}
div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
@@ -97,16 +95,18 @@ td.td01{ padding-left:0pt; padding-right:5pt; }
td.td10{ padding-left:5pt; padding-right:0pt; } td.td10{ padding-left:5pt; padding-right:0pt; }
td.td11{ padding-left:5pt; padding-right:5pt; } td.td11{ padding-left:5pt; padding-right:5pt; }
table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
.hline hr, .cline hr{ height : 0px; margin:0px; } .hline hr, .cline hr{ height : 1px; margin:0px; }
.hline td, .cline td{ padding: 0; }
.hline hr, .cline hr{border:none;border-top:1px solid black;}
.tabbing-right {text-align:right;} .tabbing-right {text-align:right;}
span.TEX {letter-spacing: -0.125em; }
span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}
a span.TEX span.E {text-decoration: none; }
span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
span.LATEX span.TEX{ position:relative; left: -0.4em; }
div.float, div.figure {margin-left: auto; margin-right: auto;} div.float, div.figure {margin-left: auto; margin-right: auto;}
div.float img {text-align:center;} div.float img {text-align:center;}
div.figure img {text-align:center;} div.figure img {text-align:center;}
.marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} .marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
.marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;} .marginpar p{margin-top:0.4em; margin-bottom:0.4em;}
.reversemarginpar{float:left;}
table.equation {width:100%;} table.equation {width:100%;}
.equation td{text-align:center; } .equation td{text-align:center; }
td.equation { margin-top:1em; margin-bottom:1em; } td.equation { margin-top:1em; margin-bottom:1em; }
@@ -150,9 +150,10 @@ div.abstract {width:100%;}
.shadowbox { padding-left:3pt; padding-right:3pt; border:solid thin; border-right:solid thick; border-bottom:solid thick; } .shadowbox { padding-left:3pt; padding-right:3pt; border:solid thin; border-right:solid thick; border-bottom:solid thick; }
.doublebox { padding-left:3pt; padding-right:3pt; border-style:double; border:solid thick; } .doublebox { padding-left:3pt; padding-right:3pt; border-style:double; border:solid thick; }
.rotatebox{display: inline-block;} .rotatebox{display: inline-block;}
.figure img.graphics {margin-left:10%;}
.lstlisting .label{margin-right:0.5em; } .lstlisting .label{margin-right:0.5em; }
div.lstlisting{font-family: monospace,monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; } div.lstlisting{font-family: monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; }
div.lstinputlisting{ font-family: monospace,monospace; white-space: nowrap; } div.lstinputlisting{ font-family: monospace; white-space: nowrap; }
.lstinputlisting .label{margin-right:0.5em;} .lstinputlisting .label{margin-right:0.5em;}
#TBL-1 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-1 colgroup{border-left: 1px solid black;border-right:1px solid black;}
#TBL-1{border-collapse:collapse;} #TBL-1{border-collapse:collapse;}
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title></title> <head><title></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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
Binary file not shown.

Before

Width:  |  Height:  |  Size: 892 B

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Abstract</title> <head><title>Abstract</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Contents</title> <head><title>Contents</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Contributors</title> <head><title>Contributors</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+19 -18
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Citing AMG4PSBLAS</title> <head><title>Citing AMG4PSBLAS</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -32,23 +32,24 @@ class="cmr-12">When use the library, please cite the following:</span>
<pre class="verbatim" id="verbatim-1"> <div class="verbatim" id="verbatim-1">
@article{DDF2021, @article{DDF2021,
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;author&#x00A0;=&#x00A0;{D&#8217;Ambra,&#x00A0;Pasqua&#x00A0;and&#x00A0;Durastante,&#x00A0;Fabio&#x00A0;and&#x00A0;Filippone,&#x00A0;Salvatore}, &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;author&#x00A0;=&#x00A0;{D&#8217;Ambra,&#x00A0;Pasqua&#x00A0;and&#x00A0;Durastante,&#x00A0;Fabio&#x00A0;and&#x00A0;Filippone,&#x00A0;Salvatore},
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;title&#x00A0;=&#x00A0;{{{AMG&#x00A0;Preconditioners&#x00A0;for&#x00A0;Linear&#x00A0;Solvers&#x00A0;towards&#x00A0;Extreme&#x00A0;Scale}}, &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;title&#x00A0;=&#x00A0;{{{AMG&#x00A0;Preconditioners&#x00A0;for&#x00A0;Linear&#x00A0;Solvers&#x00A0;towards&#x00A0;Extreme&#x00A0;Scale}},
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;journal&#x00A0;=&#x00A0;{arXiv&#x00A0;e-preprints}, &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;journal&#x00A0;=&#x00A0;{arXiv&#x00A0;e-preprints},
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;eprint&#x00A0;=&#x00A0;{2006.16147v3}, &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;eprint&#x00A0;=&#x00A0;{2006.16147v3},
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;archivePrefix&#x00A0;=&#x00A0;{arXiv}, &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;archivePrefix&#x00A0;=&#x00A0;{arXiv},
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;year={2021} &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;year={2021}
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;} &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;}
@Misc{psctoolkit-web-page, &#x00A0;<br />
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;author&#x00A0;=&#x00A0;{D&#8217;Ambra,&#x00A0;Pasqua&#x00A0;and&#x00A0;Durastante,&#x00A0;Fabio&#x00A0;and&#x00A0;Filippone,&#x00A0;Salvatore}, &#x00A0;<br />@Misc{psctoolkit-web-page,
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;title&#x00A0;=&#x00A0;&#x00A0;{{PSCToolkit}&#x00A0;{W}eb&#x00A0;page}, &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;author&#x00A0;=&#x00A0;{D&#8217;Ambra,&#x00A0;Pasqua&#x00A0;and&#x00A0;Durastante,&#x00A0;Fabio&#x00A0;and&#x00A0;Filippone,&#x00A0;Salvatore},
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;url&#x00A0;=&#x00A0;&#x00A0;&#x00A0;&#x00A0;{https://psctoolkit.github.io/}, &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;title&#x00A0;=&#x00A0;&#x00A0;{{PSCToolkit}&#x00A0;{W}eb&#x00A0;page},
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;howpublished&#x00A0;=&#x00A0;{\url{https://psctoolkit.github.io/}}, &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;url&#x00A0;=&#x00A0;&#x00A0;&#x00A0;&#x00A0;{https://psctoolkit.github.io/},
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;year&#x00A0;=&#x00A0;{2021} &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;howpublished&#x00A0;=&#x00A0;{\url{https://psctoolkit.github.io/}},
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;} &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;year&#x00A0;=&#x00A0;{2021}
</pre> &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;}
</div>
<!--l. 70--><p class="nopar" > <!--l. 70--><p class="nopar" >
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>References</title> <head><title>References</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>General Overview</title> <head><title>General Overview</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Code Distribution</title> <head><title>Code Distribution</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Configuring and Building AMG4PSBLAS</title> <head><title>Configuring and Building AMG4PSBLAS</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+18 -18
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Getting Started</title> <head><title>Getting Started</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -243,7 +243,7 @@ class="cmcsc-10x-x-109"><span
class="small-caps">t</span><span class="small-caps">t</span><span
class="small-caps">y</span><span class="small-caps">y</span><span
class="small-caps">p</span><span class="small-caps">p</span><span
class="small-caps">e</span> </span></td><td style="white-space:normal; text-align:left;" id="TBL-1-1-2" class="small-caps">e</span> </span></td><td style="white-space:wrap; text-align:left;" id="TBL-1-1-2"
class="td11"><!--l. 68--><p class="noindent" ><span class="td11"><!--l. 68--><p class="noindent" ><span
class="cmcsc-10x-x-109"><span class="cmcsc-10x-x-109"><span
class="small-caps">s</span><span class="small-caps">s</span><span
@@ -251,7 +251,7 @@ class="small-caps">t</span><span
class="small-caps">r</span><span class="small-caps">r</span><span
class="small-caps">i</span><span class="small-caps">i</span><span
class="small-caps">n</span><span class="small-caps">n</span><span
class="small-caps">g</span></span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-1-3" class="small-caps">g</span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-1-3"
class="td11"><!--l. 68--><p class="noindent" ><span class="td11"><!--l. 68--><p class="noindent" ><span
class="cmcsc-10x-x-109"><span class="cmcsc-10x-x-109"><span
class="small-caps">d</span><span class="small-caps">d</span><span
@@ -277,17 +277,17 @@ class="small-caps">e</span><span
class="small-caps">r</span></span> </td></tr><tr class="small-caps">r</span></span> </td></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
style="vertical-align:baseline;" id="TBL-1-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-2-1" style="vertical-align:baseline;" id="TBL-1-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-2-1"
class="td11">No preconditioner </td><td style="white-space:normal; text-align:left;" id="TBL-1-2-2" class="td11">No preconditioner </td><td style="white-space:wrap; text-align:left;" id="TBL-1-2-2"
class="td11"><!--l. 69--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 69--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">NONE</span><span class="cmtt-10x-x-109">NONE</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-2-3" class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-2-3"
class="td11"><!--l. 69--><p class="noindent" >Considered to use the PSBLAS Krylov class="td11"><!--l. 69--><p class="noindent" >Considered to use the PSBLAS Krylov
solvers with no preconditioner. </td> solvers with no 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
style="vertical-align:baseline;" id="TBL-1-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-3-1" style="vertical-align:baseline;" id="TBL-1-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-3-1"
class="td11">Diagonal </td><td style="white-space:normal; text-align:left;" id="TBL-1-3-2" class="td11">Diagonal </td><td style="white-space:wrap; text-align:left;" id="TBL-1-3-2"
class="td11"><!--l. 71--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 71--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">DIAG</span><span class="cmtt-10x-x-109">DIAG</span><span
@@ -301,7 +301,7 @@ class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">L1</span><span class="cmtt-10x-x-109">L1</span><span
class="cmtt-10x-x-109">-</span><span class="cmtt-10x-x-109">-</span><span
class="cmtt-10x-x-109">JACOBI</span><span class="cmtt-10x-x-109">JACOBI</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-3-3" class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-3-3"
class="td11"><!--l. 71--><p class="noindent" >Diagonal preconditioner. For any zero class="td11"><!--l. 71--><p class="noindent" >Diagonal preconditioner. For any zero
diagonal entry of the matrix to be diagonal entry of the matrix to be
preconditioned, the corresponding entry preconditioned, the corresponding entry
@@ -309,7 +309,7 @@ of the preconditioner is set to&#x00A0;1. </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
style="vertical-align:baseline;" id="TBL-1-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-4-1" style="vertical-align:baseline;" id="TBL-1-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-4-1"
class="td11">Gauss-Seidel </td><td style="white-space:normal; text-align:left;" id="TBL-1-4-2" class="td11">Gauss-Seidel </td><td style="white-space:wrap; text-align:left;" id="TBL-1-4-2"
class="td11"><!--l. 74--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 74--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">GS</span><span class="cmtt-10x-x-109">GS</span><span
@@ -319,14 +319,14 @@ class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">L1</span><span class="cmtt-10x-x-109">L1</span><span
class="cmtt-10x-x-109">-</span><span class="cmtt-10x-x-109">-</span><span
class="cmtt-10x-x-109">GS</span><span class="cmtt-10x-x-109">GS</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-4-3" class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-4-3"
class="td11"><!--l. 74--><p class="noindent" >Hybrid Gauss-Seidel (forward), that is, class="td11"><!--l. 74--><p class="noindent" >Hybrid Gauss-Seidel (forward), that is,
global block Jacobi with Gauss-Seidel as global block Jacobi with Gauss-Seidel as
local solver. </td> local solver. </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
style="vertical-align:baseline;" id="TBL-1-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-5-1" style="vertical-align:baseline;" id="TBL-1-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-5-1"
class="td11">Symmetrized Gauss-Seidel</td><td style="white-space:normal; text-align:left;" id="TBL-1-5-2" class="td11">Symmetrized Gauss-Seidel</td><td style="white-space:wrap; text-align:left;" id="TBL-1-5-2"
class="td11"><!--l. 77--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 77--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">FBGS</span><span class="cmtt-10x-x-109">FBGS</span><span
@@ -336,14 +336,14 @@ class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">L1</span><span class="cmtt-10x-x-109">L1</span><span
class="cmtt-10x-x-109">-</span><span class="cmtt-10x-x-109">-</span><span
class="cmtt-10x-x-109">FBGS</span><span class="cmtt-10x-x-109">FBGS</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-5-3" class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-5-3"
class="td11"><!--l. 77--><p class="noindent" >Symmetrized hybrid Gauss-Seidel, that class="td11"><!--l. 77--><p class="noindent" >Symmetrized hybrid Gauss-Seidel, that
is, forward Gauss-Seidel followed by is, forward Gauss-Seidel followed by
backward Gauss-Seidel. </td> backward Gauss-Seidel. </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
style="vertical-align:baseline;" id="TBL-1-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-6-1" style="vertical-align:baseline;" id="TBL-1-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-6-1"
class="td11">Block Jacobi </td><td style="white-space:normal; text-align:left;" id="TBL-1-6-2" class="td11">Block Jacobi </td><td style="white-space:wrap; text-align:left;" id="TBL-1-6-2"
class="td11"><!--l. 80--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 80--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">BJAC</span><span class="cmtt-10x-x-109">BJAC</span><span
@@ -353,27 +353,27 @@ class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">L1</span><span class="cmtt-10x-x-109">L1</span><span
class="cmtt-10x-x-109">-</span><span class="cmtt-10x-x-109">-</span><span
class="cmtt-10x-x-109">BJAC</span><span class="cmtt-10x-x-109">BJAC</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-6-3" class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-6-3"
class="td11"><!--l. 80--><p class="noindent" >Block-Jacobi with ILU(0) on the local class="td11"><!--l. 80--><p class="noindent" >Block-Jacobi with ILU(0) on the local
blocks. </td> blocks. </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
style="vertical-align:baseline;" id="TBL-1-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-7-1" style="vertical-align:baseline;" id="TBL-1-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-7-1"
class="td11">Additive Schwarz </td><td style="white-space:normal; text-align:left;" id="TBL-1-7-2" class="td11">Additive Schwarz </td><td style="white-space:wrap; text-align:left;" id="TBL-1-7-2"
class="td11"><!--l. 81--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 81--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">AS</span><span class="cmtt-10x-x-109">AS</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-7-3" class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-7-3"
class="td11"><!--l. 81--><p class="noindent" >Additive Schwarz (AS), with overlap&#x00A0;1 class="td11"><!--l. 81--><p class="noindent" >Additive Schwarz (AS), with overlap&#x00A0;1
and ILU(0) on the local blocks. </td> and ILU(0) on the local blocks. </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
style="vertical-align:baseline;" id="TBL-1-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-8-1" style="vertical-align:baseline;" id="TBL-1-8-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-8-1"
class="td11">Multilevel </td><td style="white-space:normal; text-align:left;" id="TBL-1-8-2" class="td11">Multilevel </td><td style="white-space:wrap; text-align:left;" id="TBL-1-8-2"
class="td11"><!--l. 83--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 83--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">ML</span><span class="cmtt-10x-x-109">ML</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-8-3" class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-8-3"
class="td11"><!--l. 83--><p class="noindent" >V-cycle with one hybrid class="td11"><!--l. 83--><p class="noindent" >V-cycle with one hybrid
forward Gauss-Seidel (GS) sweep as forward Gauss-Seidel (GS) sweep as
pre-smoother and one hybrid backward pre-smoother and one hybrid backward
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>User Interface</title> <head><title>User Interface</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+28 -26
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Adding new smoother and solver objects to AMG4PSBLAS</title> <head><title>Adding new smoother and solver objects to AMG4PSBLAS</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -170,33 +170,33 @@ cellspacing="0" cellpadding="0"
><colgroup id="TBL-22-1g"><col ><colgroup id="TBL-22-1g"><col
id="TBL-22-1"><col id="TBL-22-1"><col
id="TBL-22-2"></colgroup><tr id="TBL-22-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-22-1-"><td style="white-space:normal; text-align:left;" id="TBL-22-1-1" style="vertical-align:baseline;" id="TBL-22-1-"><td style="white-space:wrap; text-align:left;" id="TBL-22-1-1"
class="td11"><!--l. 58--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 58--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">smoother</span> </td><td style="white-space:normal; text-align:left;" id="TBL-22-1-2" class="cmtt-12">smoother</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-22-1-2"
class="td11"><!--l. 58--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 58--><p class="noindent" ><span class="lstinline"></span><span
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">amg_x_base_smoother_type</span><span class="cmtt-12">amg_x_base_smoother_type</span><span
class="cmtt-12">)</span> </td> class="cmtt-12">)</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-22-2-"><td style="white-space:normal; text-align:left;" id="TBL-22-2-1" style="vertical-align:baseline;" id="TBL-22-2-"><td style="white-space:wrap; text-align:left;" id="TBL-22-2-1"
class="td11"><!--l. 59--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-22-2-2" class="td11"><!--l. 59--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-22-2-2"
class="td11"><!--l. 59--><p class="noindent" ><span class="td11"><!--l. 59--><p class="noindent" ><span
class="cmr-12">The user-defined new smoother to be employed in the</span> class="cmr-12">The user-defined new smoother to be employed in the</span>
<span <span
class="cmr-12">preconditioner.</span> </td> class="cmr-12">preconditioner.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-22-3-"><td style="white-space:normal; text-align:left;" id="TBL-22-3-1" style="vertical-align:baseline;" id="TBL-22-3-"><td style="white-space:wrap; text-align:left;" id="TBL-22-3-1"
class="td11"><!--l. 61--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 61--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">solver</span> </td><td style="white-space:normal; text-align:left;" id="TBL-22-3-2" class="cmtt-12">solver</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-22-3-2"
class="td11"><!--l. 61--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 61--><p class="noindent" ><span class="lstinline"></span><span
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">amg_x_base_solver_type</span><span class="cmtt-12">amg_x_base_solver_type</span><span
class="cmtt-12">)</span> </td> class="cmtt-12">)</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-22-4-"><td style="white-space:normal; text-align:left;" id="TBL-22-4-1" style="vertical-align:baseline;" id="TBL-22-4-"><td style="white-space:wrap; text-align:left;" id="TBL-22-4-1"
class="td11"><!--l. 62--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-22-4-2" class="td11"><!--l. 62--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-22-4-2"
class="td11"><!--l. 62--><p class="noindent" ><span class="td11"><!--l. 62--><p class="noindent" ><span
class="cmr-12">The user-defined new solver to be employed in the preconditioner.</span></td></tr></table></div></div> class="cmr-12">The user-defined new solver to be employed in the preconditioner.</span></td></tr></table></div></div>
<!--l. 66--><p class="noindent" ><span <!--l. 66--><p class="noindent" ><span
@@ -215,22 +215,24 @@ class="cmr-12">pass it as follows:</span>
<pre class="verbatim" id="verbatim-13"> <div class="verbatim" id="verbatim-13">
&#x00A0;&#x00A0;!&#x00A0;sparse&#x00A0;matrix&#x00A0;and&#x00A0;preconditioner &#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;sparse&#x00A0;matrix&#x00A0;and&#x00A0;preconditioner
&#x00A0;&#x00A0;type(psb_dspmat_type)&#x00A0;::&#x00A0;a &#x00A0;<br />&#x00A0;&#x00A0;type(psb_dspmat_type)&#x00A0;::&#x00A0;a
&#x00A0;&#x00A0;type(amg_dprec_type)&#x00A0;&#x00A0;::&#x00A0;prec &#x00A0;<br />&#x00A0;&#x00A0;type(amg_dprec_type)&#x00A0;&#x00A0;::&#x00A0;prec
&#x00A0;&#x00A0;type(amg_d_tlu_solver_type)&#x00A0;::&#x00A0;tlusv &#x00A0;<br />&#x00A0;&#x00A0;type(amg_d_tlu_solver_type)&#x00A0;::&#x00A0;tlusv
...... &#x00A0;<br />
&#x00A0;&#x00A0;! &#x00A0;<br />......
&#x00A0;&#x00A0;!&#x00A0;&#x00A0;prepare&#x00A0;the&#x00A0;preconditioner:&#x00A0;an&#x00A0;ML&#x00A0;with&#x00A0;defaults,&#x00A0;but&#x00A0;with&#x00A0;TLU&#x00A0;solver&#x00A0;at &#x00A0;<br />&#x00A0;&#x00A0;!
&#x00A0;&#x00A0;!&#x00A0;&#x00A0;intermediate&#x00A0;levels.&#x00A0;All&#x00A0;other&#x00A0;parameters&#x00A0;are&#x00A0;at&#x00A0;default&#x00A0;values. &#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;&#x00A0;prepare&#x00A0;the&#x00A0;preconditioner:&#x00A0;an&#x00A0;ML&#x00A0;with&#x00A0;defaults,&#x00A0;but&#x00A0;with&#x00A0;TLU&#x00A0;solver&#x00A0;at
&#x00A0;&#x00A0;! &#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;&#x00A0;intermediate&#x00A0;levels.&#x00A0;All&#x00A0;other&#x00A0;parameters&#x00A0;are&#x00A0;at&#x00A0;default&#x00A0;values.
&#x00A0;&#x00A0;call&#x00A0;prec%init(&#8217;ML&#8217;,&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;info) &#x00A0;<br />&#x00A0;&#x00A0;!
&#x00A0;&#x00A0;call&#x00A0;prec%hierarchy_build(a,desc_a,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%init(&#8217;ML&#8217;,&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;info)
&#x00A0;&#x00A0;nlv&#x00A0;=&#x00A0;prec%get_nlevs() &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%hierarchy_build(a,desc_a,info)
&#x00A0;&#x00A0;call&#x00A0;prec%set(tlusv,&#x00A0;&#x00A0;&#x00A0;info,ilev=1,ilmax=max(1,nlv-1)) &#x00A0;<br />&#x00A0;&#x00A0;nlv&#x00A0;=&#x00A0;prec%get_nlevs()
&#x00A0;&#x00A0;call&#x00A0;prec%smoothers_build(a,desc_a,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%set(tlusv,&#x00A0;&#x00A0;&#x00A0;info,ilev=1,ilmax=max(1,nlv-1))
</pre> &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%smoothers_build(a,desc_a,info)
&#x00A0;<br />
</div>
<!--l. 107--><p class="nopar" > <!--l. 107--><p class="nopar" >
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Error Handling</title> <head><title>Error Handling</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+117 -105
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>License</title> <head><title>License</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -36,37 +36,42 @@ class="cmr-12">AMG4PSBLAS is freely distributable under the following copyright
<pre class="verbatim" id="verbatim-14"> <div class="verbatim" id="verbatim-14">
&#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;<br />&#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;<br />&#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;<br />&#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;(C)&#x00A0;Copyright&#x00A0;2021 &#x00A0;<br />
&#x00A0;&#x00A0;Pasqua&#x00A0;D&#8217;Ambra&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;IAC-CNR,&#x00A0;IT &#x00A0;<br />&#x00A0;&#x00A0;(C)&#x00A0;Copyright&#x00A0;2021
&#x00A0;&#x00A0;Fabio&#x00A0;Durastante&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;University&#x00A0;of&#x00A0;Pisa&#x00A0;and&#x00A0;IAC-CNR,&#x00A0;IT &#x00A0;<br />
&#x00A0;&#x00A0;Salvatore&#x00A0;Filippone&#x00A0;&#x00A0;&#x00A0;&#x00A0;University&#x00A0;of&#x00A0;Rome&#x00A0;Tor-Vergata&#x00A0;and&#x00A0;IAC-CNR,&#x00A0;IT &#x00A0;<br />&#x00A0;&#x00A0;Pasqua&#x00A0;D&#8217;Ambra&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;IAC-CNR,&#x00A0;IT
&#x00A0;&#x00A0;Redistribution&#x00A0;and&#x00A0;use&#x00A0;in&#x00A0;source&#x00A0;and&#x00A0;binary&#x00A0;forms,&#x00A0;with&#x00A0;or&#x00A0;without &#x00A0;<br />&#x00A0;&#x00A0;Fabio&#x00A0;Durastante&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;University&#x00A0;of&#x00A0;Pisa&#x00A0;and&#x00A0;IAC-CNR,&#x00A0;IT
&#x00A0;&#x00A0;modification,&#x00A0;are&#x00A0;permitted&#x00A0;provided&#x00A0;that&#x00A0;the&#x00A0;following&#x00A0;conditions &#x00A0;<br />&#x00A0;&#x00A0;Salvatore&#x00A0;Filippone&#x00A0;&#x00A0;&#x00A0;&#x00A0;University&#x00A0;of&#x00A0;Rome&#x00A0;Tor-Vergata&#x00A0;and&#x00A0;IAC-CNR,&#x00A0;IT
&#x00A0;&#x00A0;are&#x00A0;met: &#x00A0;<br />
&#x00A0;&#x00A0;&#x00A0;&#x00A0;1.&#x00A0;Redistributions&#x00A0;of&#x00A0;source&#x00A0;code&#x00A0;must&#x00A0;retain&#x00A0;the&#x00A0;above&#x00A0;copyright &#x00A0;<br />&#x00A0;&#x00A0;Redistribution&#x00A0;and&#x00A0;use&#x00A0;in&#x00A0;source&#x00A0;and&#x00A0;binary&#x00A0;forms,&#x00A0;with&#x00A0;or&#x00A0;without
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer. &#x00A0;<br />&#x00A0;&#x00A0;modification,&#x00A0;are&#x00A0;permitted&#x00A0;provided&#x00A0;that&#x00A0;the&#x00A0;following&#x00A0;conditions
&#x00A0;&#x00A0;&#x00A0;&#x00A0;2.&#x00A0;Redistributions&#x00A0;in&#x00A0;binary&#x00A0;form&#x00A0;must&#x00A0;reproduce&#x00A0;the&#x00A0;above&#x00A0;copyright &#x00A0;<br />&#x00A0;&#x00A0;are&#x00A0;met:
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions,&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer&#x00A0;in&#x00A0;the &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;1.&#x00A0;Redistributions&#x00A0;of&#x00A0;source&#x00A0;code&#x00A0;must&#x00A0;retain&#x00A0;the&#x00A0;above&#x00A0;copyright
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;documentation&#x00A0;and/or&#x00A0;other&#x00A0;materials&#x00A0;provided&#x00A0;with&#x00A0;the&#x00A0;distribution. &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer.
&#x00A0;&#x00A0;&#x00A0;&#x00A0;3.&#x00A0;The&#x00A0;name&#x00A0;of&#x00A0;the&#x00A0;MLD2P4&#x00A0;group&#x00A0;or&#x00A0;the&#x00A0;names&#x00A0;of&#x00A0;its&#x00A0;contributors&#x00A0;may &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;2.&#x00A0;Redistributions&#x00A0;in&#x00A0;binary&#x00A0;form&#x00A0;must&#x00A0;reproduce&#x00A0;the&#x00A0;above&#x00A0;copyright
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;not&#x00A0;be&#x00A0;used&#x00A0;to&#x00A0;endorse&#x00A0;or&#x00A0;promote&#x00A0;products&#x00A0;derived&#x00A0;from&#x00A0;this &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions,&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer&#x00A0;in&#x00A0;the
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;software&#x00A0;without&#x00A0;specific&#x00A0;written&#x00A0;permission. &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;documentation&#x00A0;and/or&#x00A0;other&#x00A0;materials&#x00A0;provided&#x00A0;with&#x00A0;the&#x00A0;distribution.
&#x00A0;&#x00A0;THIS&#x00A0;SOFTWARE&#x00A0;IS&#x00A0;PROVIDED&#x00A0;BY&#x00A0;THE&#x00A0;COPYRIGHT&#x00A0;HOLDERS&#x00A0;AND&#x00A0;CONTRIBUTORS &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;3.&#x00A0;The&#x00A0;name&#x00A0;of&#x00A0;the&#x00A0;MLD2P4&#x00A0;group&#x00A0;or&#x00A0;the&#x00A0;names&#x00A0;of&#x00A0;its&#x00A0;contributors&#x00A0;may
&#x00A0;&#x00A0;&#8216;&#8216;AS&#x00A0;IS&#8217;&#8217;&#x00A0;AND&#x00A0;ANY&#x00A0;EXPRESS&#x00A0;OR&#x00A0;IMPLIED&#x00A0;WARRANTIES,&#x00A0;INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;not&#x00A0;be&#x00A0;used&#x00A0;to&#x00A0;endorse&#x00A0;or&#x00A0;promote&#x00A0;products&#x00A0;derived&#x00A0;from&#x00A0;this
&#x00A0;&#x00A0;TO,&#x00A0;THE&#x00A0;IMPLIED&#x00A0;WARRANTIES&#x00A0;OF&#x00A0;MERCHANTABILITY&#x00A0;AND&#x00A0;FITNESS&#x00A0;FOR&#x00A0;A&#x00A0;PARTICULAR &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;software&#x00A0;without&#x00A0;specific&#x00A0;written&#x00A0;permission.
&#x00A0;&#x00A0;PURPOSE&#x00A0;ARE&#x00A0;DISCLAIMED.&#x00A0;IN&#x00A0;NO&#x00A0;EVENT&#x00A0;SHALL&#x00A0;THE&#x00A0;MLD2P4&#x00A0;GROUP&#x00A0;OR&#x00A0;ITS&#x00A0;CONTRIBUTORS &#x00A0;<br />
&#x00A0;&#x00A0;BE&#x00A0;LIABLE&#x00A0;FOR&#x00A0;ANY&#x00A0;DIRECT,&#x00A0;INDIRECT,&#x00A0;INCIDENTAL,&#x00A0;SPECIAL,&#x00A0;EXEMPLARY,&#x00A0;OR &#x00A0;<br />&#x00A0;&#x00A0;THIS&#x00A0;SOFTWARE&#x00A0;IS&#x00A0;PROVIDED&#x00A0;BY&#x00A0;THE&#x00A0;COPYRIGHT&#x00A0;HOLDERS&#x00A0;AND&#x00A0;CONTRIBUTORS
&#x00A0;&#x00A0;CONSEQUENTIAL&#x00A0;DAMAGES&#x00A0;(INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED&#x00A0;TO,&#x00A0;PROCUREMENT&#x00A0;OF &#x00A0;<br />&#x00A0;&#x00A0;&#8216;&#8216;AS&#x00A0;IS&#8217;&#8217;&#x00A0;AND&#x00A0;ANY&#x00A0;EXPRESS&#x00A0;OR&#x00A0;IMPLIED&#x00A0;WARRANTIES,&#x00A0;INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED
&#x00A0;&#x00A0;SUBSTITUTE&#x00A0;GOODS&#x00A0;OR&#x00A0;SERVICES;&#x00A0;LOSS&#x00A0;OF&#x00A0;USE,&#x00A0;DATA,&#x00A0;OR&#x00A0;PROFITS;&#x00A0;OR&#x00A0;BUSINESS &#x00A0;<br />&#x00A0;&#x00A0;TO,&#x00A0;THE&#x00A0;IMPLIED&#x00A0;WARRANTIES&#x00A0;OF&#x00A0;MERCHANTABILITY&#x00A0;AND&#x00A0;FITNESS&#x00A0;FOR&#x00A0;A&#x00A0;PARTICULAR
&#x00A0;&#x00A0;INTERRUPTION)&#x00A0;HOWEVER&#x00A0;CAUSED&#x00A0;AND&#x00A0;ON&#x00A0;ANY&#x00A0;THEORY&#x00A0;OF&#x00A0;LIABILITY,&#x00A0;WHETHER&#x00A0;IN &#x00A0;<br />&#x00A0;&#x00A0;PURPOSE&#x00A0;ARE&#x00A0;DISCLAIMED.&#x00A0;IN&#x00A0;NO&#x00A0;EVENT&#x00A0;SHALL&#x00A0;THE&#x00A0;MLD2P4&#x00A0;GROUP&#x00A0;OR&#x00A0;ITS&#x00A0;CONTRIBUTORS
&#x00A0;&#x00A0;CONTRACT,&#x00A0;STRICT&#x00A0;LIABILITY,&#x00A0;OR&#x00A0;TORT&#x00A0;(INCLUDING&#x00A0;NEGLIGENCE&#x00A0;OR&#x00A0;OTHERWISE) &#x00A0;<br />&#x00A0;&#x00A0;BE&#x00A0;LIABLE&#x00A0;FOR&#x00A0;ANY&#x00A0;DIRECT,&#x00A0;INDIRECT,&#x00A0;INCIDENTAL,&#x00A0;SPECIAL,&#x00A0;EXEMPLARY,&#x00A0;OR
&#x00A0;&#x00A0;ARISING&#x00A0;IN&#x00A0;ANY&#x00A0;WAY&#x00A0;OUT&#x00A0;OF&#x00A0;THE&#x00A0;USE&#x00A0;OF&#x00A0;THIS&#x00A0;SOFTWARE,&#x00A0;EVEN&#x00A0;IF&#x00A0;ADVISED&#x00A0;OF&#x00A0;THE &#x00A0;<br />&#x00A0;&#x00A0;CONSEQUENTIAL&#x00A0;DAMAGES&#x00A0;(INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED&#x00A0;TO,&#x00A0;PROCUREMENT&#x00A0;OF
&#x00A0;&#x00A0;POSSIBILITY&#x00A0;OF&#x00A0;SUCH&#x00A0;DAMAGE. &#x00A0;<br />&#x00A0;&#x00A0;SUBSTITUTE&#x00A0;GOODS&#x00A0;OR&#x00A0;SERVICES;&#x00A0;LOSS&#x00A0;OF&#x00A0;USE,&#x00A0;DATA,&#x00A0;OR&#x00A0;PROFITS;&#x00A0;OR&#x00A0;BUSINESS
</pre> &#x00A0;<br />&#x00A0;&#x00A0;INTERRUPTION)&#x00A0;HOWEVER&#x00A0;CAUSED&#x00A0;AND&#x00A0;ON&#x00A0;ANY&#x00A0;THEORY&#x00A0;OF&#x00A0;LIABILITY,&#x00A0;WHETHER&#x00A0;IN
&#x00A0;<br />&#x00A0;&#x00A0;CONTRACT,&#x00A0;STRICT&#x00A0;LIABILITY,&#x00A0;OR&#x00A0;TORT&#x00A0;(INCLUDING&#x00A0;NEGLIGENCE&#x00A0;OR&#x00A0;OTHERWISE)
&#x00A0;<br />&#x00A0;&#x00A0;ARISING&#x00A0;IN&#x00A0;ANY&#x00A0;WAY&#x00A0;OUT&#x00A0;OF&#x00A0;THE&#x00A0;USE&#x00A0;OF&#x00A0;THIS&#x00A0;SOFTWARE,&#x00A0;EVEN&#x00A0;IF&#x00A0;ADVISED&#x00A0;OF&#x00A0;THE
&#x00A0;<br />&#x00A0;&#x00A0;POSSIBILITY&#x00A0;OF&#x00A0;SUCH&#x00A0;DAMAGE.
&#x00A0;<br />
</div>
<!--l. 44--><p class="nopar" > <!--l. 44--><p class="nopar" >
@@ -78,37 +83,44 @@ class="cmr-12">abide by its terms:</span>
<pre class="verbatim" id="verbatim-15"> <div class="verbatim" id="verbatim-15">
&#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;<br />
&#x00A0;&#x00A0;MultiLevel&#x00A0;Domain&#x00A0;Decomposition&#x00A0;Parallel&#x00A0;Preconditioners&#x00A0;Package &#x00A0;<br />&#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;based&#x00A0;on&#x00A0;PSBLAS&#x00A0;(Parallel&#x00A0;Sparse&#x00A0;BLAS&#x00A0;version&#x00A0;3.5) &#x00A0;<br />&#x00A0;&#x00A0;MultiLevel&#x00A0;Domain&#x00A0;Decomposition&#x00A0;Parallel&#x00A0;Preconditioners&#x00A0;Package
&#x00A0;&#x00A0;(C)&#x00A0;Copyright&#x00A0;2008-2018 &#x00A0;<br />&#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;Salvatore&#x00A0;Filippone &#x00A0;<br />
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Pasqua&#x00A0;D&#8217;Ambra &#x00A0;<br />&#x00A0;&#x00A0;(C)&#x00A0;Copyright&#x00A0;2008-2018
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Daniela&#x00A0;di&#x00A0;Serafino &#x00A0;<br />
&#x00A0;&#x00A0;Redistribution&#x00A0;and&#x00A0;use&#x00A0;in&#x00A0;source&#x00A0;and&#x00A0;binary&#x00A0;forms,&#x00A0;with&#x00A0;or&#x00A0;without &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Salvatore&#x00A0;Filippone
&#x00A0;&#x00A0;modification,&#x00A0;are&#x00A0;permitted&#x00A0;provided&#x00A0;that&#x00A0;the&#x00A0;following&#x00A0;conditions &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Pasqua&#x00A0;D&#8217;Ambra
&#x00A0;&#x00A0;are&#x00A0;met: &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Daniela&#x00A0;di&#x00A0;Serafino
&#x00A0;&#x00A0;&#x00A0;&#x00A0;1.&#x00A0;Redistributions&#x00A0;of&#x00A0;source&#x00A0;code&#x00A0;must&#x00A0;retain&#x00A0;the&#x00A0;above&#x00A0;copyright &#x00A0;<br />
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer. &#x00A0;<br />
&#x00A0;&#x00A0;&#x00A0;&#x00A0;2.&#x00A0;Redistributions&#x00A0;in&#x00A0;binary&#x00A0;form&#x00A0;must&#x00A0;reproduce&#x00A0;the&#x00A0;above&#x00A0;copyright &#x00A0;<br />&#x00A0;&#x00A0;Redistribution&#x00A0;and&#x00A0;use&#x00A0;in&#x00A0;source&#x00A0;and&#x00A0;binary&#x00A0;forms,&#x00A0;with&#x00A0;or&#x00A0;without
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions,&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer&#x00A0;in&#x00A0;the &#x00A0;<br />&#x00A0;&#x00A0;modification,&#x00A0;are&#x00A0;permitted&#x00A0;provided&#x00A0;that&#x00A0;the&#x00A0;following&#x00A0;conditions
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;documentation&#x00A0;and/or&#x00A0;other&#x00A0;materials&#x00A0;provided&#x00A0;with&#x00A0;the&#x00A0;distribution. &#x00A0;<br />&#x00A0;&#x00A0;are&#x00A0;met:
&#x00A0;&#x00A0;&#x00A0;&#x00A0;3.&#x00A0;The&#x00A0;name&#x00A0;of&#x00A0;the&#x00A0;MLD2P4&#x00A0;group&#x00A0;or&#x00A0;the&#x00A0;names&#x00A0;of&#x00A0;its&#x00A0;contributors&#x00A0;may &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;1.&#x00A0;Redistributions&#x00A0;of&#x00A0;source&#x00A0;code&#x00A0;must&#x00A0;retain&#x00A0;the&#x00A0;above&#x00A0;copyright
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;not&#x00A0;be&#x00A0;used&#x00A0;to&#x00A0;endorse&#x00A0;or&#x00A0;promote&#x00A0;products&#x00A0;derived&#x00A0;from&#x00A0;this &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer.
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;software&#x00A0;without&#x00A0;specific&#x00A0;written&#x00A0;permission. &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;2.&#x00A0;Redistributions&#x00A0;in&#x00A0;binary&#x00A0;form&#x00A0;must&#x00A0;reproduce&#x00A0;the&#x00A0;above&#x00A0;copyright
&#x00A0;&#x00A0;THIS&#x00A0;SOFTWARE&#x00A0;IS&#x00A0;PROVIDED&#x00A0;BY&#x00A0;THE&#x00A0;COPYRIGHT&#x00A0;HOLDERS&#x00A0;AND&#x00A0;CONTRIBUTORS &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions,&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer&#x00A0;in&#x00A0;the
&#x00A0;&#x00A0;&#8216;&#8216;AS&#x00A0;IS&#8217;&#8217;&#x00A0;AND&#x00A0;ANY&#x00A0;EXPRESS&#x00A0;OR&#x00A0;IMPLIED&#x00A0;WARRANTIES,&#x00A0;INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;documentation&#x00A0;and/or&#x00A0;other&#x00A0;materials&#x00A0;provided&#x00A0;with&#x00A0;the&#x00A0;distribution.
&#x00A0;&#x00A0;TO,&#x00A0;THE&#x00A0;IMPLIED&#x00A0;WARRANTIES&#x00A0;OF&#x00A0;MERCHANTABILITY&#x00A0;AND&#x00A0;FITNESS&#x00A0;FOR&#x00A0;A&#x00A0;PARTICULAR &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;3.&#x00A0;The&#x00A0;name&#x00A0;of&#x00A0;the&#x00A0;MLD2P4&#x00A0;group&#x00A0;or&#x00A0;the&#x00A0;names&#x00A0;of&#x00A0;its&#x00A0;contributors&#x00A0;may
&#x00A0;&#x00A0;PURPOSE&#x00A0;ARE&#x00A0;DISCLAIMED.&#x00A0;IN&#x00A0;NO&#x00A0;EVENT&#x00A0;SHALL&#x00A0;THE&#x00A0;MLD2P4&#x00A0;GROUP&#x00A0;OR&#x00A0;ITS&#x00A0;CONTRIBUTORS &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;not&#x00A0;be&#x00A0;used&#x00A0;to&#x00A0;endorse&#x00A0;or&#x00A0;promote&#x00A0;products&#x00A0;derived&#x00A0;from&#x00A0;this
&#x00A0;&#x00A0;BE&#x00A0;LIABLE&#x00A0;FOR&#x00A0;ANY&#x00A0;DIRECT,&#x00A0;INDIRECT,&#x00A0;INCIDENTAL,&#x00A0;SPECIAL,&#x00A0;EXEMPLARY,&#x00A0;OR &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;software&#x00A0;without&#x00A0;specific&#x00A0;written&#x00A0;permission.
&#x00A0;&#x00A0;CONSEQUENTIAL&#x00A0;DAMAGES&#x00A0;(INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED&#x00A0;TO,&#x00A0;PROCUREMENT&#x00A0;OF &#x00A0;<br />
&#x00A0;&#x00A0;SUBSTITUTE&#x00A0;GOODS&#x00A0;OR&#x00A0;SERVICES;&#x00A0;LOSS&#x00A0;OF&#x00A0;USE,&#x00A0;DATA,&#x00A0;OR&#x00A0;PROFITS;&#x00A0;OR&#x00A0;BUSINESS &#x00A0;<br />&#x00A0;&#x00A0;THIS&#x00A0;SOFTWARE&#x00A0;IS&#x00A0;PROVIDED&#x00A0;BY&#x00A0;THE&#x00A0;COPYRIGHT&#x00A0;HOLDERS&#x00A0;AND&#x00A0;CONTRIBUTORS
&#x00A0;&#x00A0;INTERRUPTION)&#x00A0;HOWEVER&#x00A0;CAUSED&#x00A0;AND&#x00A0;ON&#x00A0;ANY&#x00A0;THEORY&#x00A0;OF&#x00A0;LIABILITY,&#x00A0;WHETHER&#x00A0;IN &#x00A0;<br />&#x00A0;&#x00A0;&#8216;&#8216;AS&#x00A0;IS&#8217;&#8217;&#x00A0;AND&#x00A0;ANY&#x00A0;EXPRESS&#x00A0;OR&#x00A0;IMPLIED&#x00A0;WARRANTIES,&#x00A0;INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED
&#x00A0;&#x00A0;CONTRACT,&#x00A0;STRICT&#x00A0;LIABILITY,&#x00A0;OR&#x00A0;TORT&#x00A0;(INCLUDING&#x00A0;NEGLIGENCE&#x00A0;OR&#x00A0;OTHERWISE) &#x00A0;<br />&#x00A0;&#x00A0;TO,&#x00A0;THE&#x00A0;IMPLIED&#x00A0;WARRANTIES&#x00A0;OF&#x00A0;MERCHANTABILITY&#x00A0;AND&#x00A0;FITNESS&#x00A0;FOR&#x00A0;A&#x00A0;PARTICULAR
&#x00A0;&#x00A0;ARISING&#x00A0;IN&#x00A0;ANY&#x00A0;WAY&#x00A0;OUT&#x00A0;OF&#x00A0;THE&#x00A0;USE&#x00A0;OF&#x00A0;THIS&#x00A0;SOFTWARE,&#x00A0;EVEN&#x00A0;IF&#x00A0;ADVISED&#x00A0;OF&#x00A0;THE &#x00A0;<br />&#x00A0;&#x00A0;PURPOSE&#x00A0;ARE&#x00A0;DISCLAIMED.&#x00A0;IN&#x00A0;NO&#x00A0;EVENT&#x00A0;SHALL&#x00A0;THE&#x00A0;MLD2P4&#x00A0;GROUP&#x00A0;OR&#x00A0;ITS&#x00A0;CONTRIBUTORS
&#x00A0;&#x00A0;POSSIBILITY&#x00A0;OF&#x00A0;SUCH&#x00A0;DAMAGE. &#x00A0;<br />&#x00A0;&#x00A0;BE&#x00A0;LIABLE&#x00A0;FOR&#x00A0;ANY&#x00A0;DIRECT,&#x00A0;INDIRECT,&#x00A0;INCIDENTAL,&#x00A0;SPECIAL,&#x00A0;EXEMPLARY,&#x00A0;OR
</pre> &#x00A0;<br />&#x00A0;&#x00A0;CONSEQUENTIAL&#x00A0;DAMAGES&#x00A0;(INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED&#x00A0;TO,&#x00A0;PROCUREMENT&#x00A0;OF
&#x00A0;<br />&#x00A0;&#x00A0;SUBSTITUTE&#x00A0;GOODS&#x00A0;OR&#x00A0;SERVICES;&#x00A0;LOSS&#x00A0;OF&#x00A0;USE,&#x00A0;DATA,&#x00A0;OR&#x00A0;PROFITS;&#x00A0;OR&#x00A0;BUSINESS
&#x00A0;<br />&#x00A0;&#x00A0;INTERRUPTION)&#x00A0;HOWEVER&#x00A0;CAUSED&#x00A0;AND&#x00A0;ON&#x00A0;ANY&#x00A0;THEORY&#x00A0;OF&#x00A0;LIABILITY,&#x00A0;WHETHER&#x00A0;IN
&#x00A0;<br />&#x00A0;&#x00A0;CONTRACT,&#x00A0;STRICT&#x00A0;LIABILITY,&#x00A0;OR&#x00A0;TORT&#x00A0;(INCLUDING&#x00A0;NEGLIGENCE&#x00A0;OR&#x00A0;OTHERWISE)
&#x00A0;<br />&#x00A0;&#x00A0;ARISING&#x00A0;IN&#x00A0;ANY&#x00A0;WAY&#x00A0;OUT&#x00A0;OF&#x00A0;THE&#x00A0;USE&#x00A0;OF&#x00A0;THIS&#x00A0;SOFTWARE,&#x00A0;EVEN&#x00A0;IF&#x00A0;ADVISED&#x00A0;OF&#x00A0;THE
&#x00A0;<br />&#x00A0;&#x00A0;POSSIBILITY&#x00A0;OF&#x00A0;SUCH&#x00A0;DAMAGE.
&#x00A0;<br />
</div>
<!--l. 87--><p class="nopar" > <span <!--l. 87--><p class="nopar" > <span
class="cmr-12">AMG4PSBLAS is distributed together with (a small part of) the graph-matching</span> class="cmr-12">AMG4PSBLAS is distributed together with (a small part of) the graph-matching</span>
@@ -127,48 +139,48 @@ class="cmr-12">here.</span>
<pre class="verbatim" id="verbatim-16"> <div class="verbatim" id="verbatim-16">
//&#x00A0;*********************************************************************** //&#x00A0;***********************************************************************
// &#x00A0;<br />//
//&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MatchboxP:&#x00A0;A&#x00A0;C++&#x00A0;library&#x00A0;for&#x00A0;approximate&#x00A0;weighted&#x00A0;matching &#x00A0;<br />//&#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;<br />//&#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;<br />//&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Pacific&#x00A0;Northwest&#x00A0;National&#x00A0;Laboratory
// &#x00A0;<br />//
//&#x00A0;*********************************************************************** &#x00A0;<br />//&#x00A0;***********************************************************************
// &#x00A0;<br />//
//&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Copyright&#x00A0;(2021)&#x00A0;Battelle&#x00A0;Memorial&#x00A0;Institute &#x00A0;<br />//&#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;<br />//&#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;<br />//
//&#x00A0;Redistribution&#x00A0;and&#x00A0;use&#x00A0;in&#x00A0;source&#x00A0;and&#x00A0;binary&#x00A0;forms,&#x00A0;with&#x00A0;or&#x00A0;without &#x00A0;<br />//&#x00A0;Redistribution&#x00A0;and&#x00A0;use&#x00A0;in&#x00A0;source&#x00A0;and&#x00A0;binary&#x00A0;forms,&#x00A0;with&#x00A0;or&#x00A0;without
//&#x00A0;modification,&#x00A0;are&#x00A0;permitted&#x00A0;provided&#x00A0;that&#x00A0;the&#x00A0;following&#x00A0;conditions &#x00A0;<br />//&#x00A0;modification,&#x00A0;are&#x00A0;permitted&#x00A0;provided&#x00A0;that&#x00A0;the&#x00A0;following&#x00A0;conditions
//&#x00A0;are&#x00A0;met: &#x00A0;<br />//&#x00A0;are&#x00A0;met:
// &#x00A0;<br />//
//&#x00A0;1.&#x00A0;Redistributions&#x00A0;of&#x00A0;source&#x00A0;code&#x00A0;must&#x00A0;retain&#x00A0;the&#x00A0;above&#x00A0;copyright &#x00A0;<br />//&#x00A0;1.&#x00A0;Redistributions&#x00A0;of&#x00A0;source&#x00A0;code&#x00A0;must&#x00A0;retain&#x00A0;the&#x00A0;above&#x00A0;copyright
//&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer. &#x00A0;<br />//&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer.
// &#x00A0;<br />//
//&#x00A0;2.&#x00A0;Redistributions&#x00A0;in&#x00A0;binary&#x00A0;form&#x00A0;must&#x00A0;reproduce&#x00A0;the&#x00A0;above&#x00A0;copyright &#x00A0;<br />//&#x00A0;2.&#x00A0;Redistributions&#x00A0;in&#x00A0;binary&#x00A0;form&#x00A0;must&#x00A0;reproduce&#x00A0;the&#x00A0;above&#x00A0;copyright
//&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer&#x00A0;in&#x00A0;the &#x00A0;<br />//&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer&#x00A0;in&#x00A0;the
//&#x00A0;documentation&#x00A0;and/or&#x00A0;other&#x00A0;materials&#x00A0;provided&#x00A0;with&#x00A0;the&#x00A0;distribution. &#x00A0;<br />//&#x00A0;documentation&#x00A0;and/or&#x00A0;other&#x00A0;materials&#x00A0;provided&#x00A0;with&#x00A0;the&#x00A0;distribution.
// &#x00A0;<br />//
//&#x00A0;3.&#x00A0;Neither&#x00A0;the&#x00A0;name&#x00A0;of&#x00A0;the&#x00A0;copyright&#x00A0;holder&#x00A0;nor&#x00A0;the&#x00A0;names&#x00A0;of&#x00A0;its &#x00A0;<br />//&#x00A0;3.&#x00A0;Neither&#x00A0;the&#x00A0;name&#x00A0;of&#x00A0;the&#x00A0;copyright&#x00A0;holder&#x00A0;nor&#x00A0;the&#x00A0;names&#x00A0;of&#x00A0;its
//&#x00A0;contributors&#x00A0;may&#x00A0;be&#x00A0;used&#x00A0;to&#x00A0;endorse&#x00A0;or&#x00A0;promote&#x00A0;products&#x00A0;derived&#x00A0;from &#x00A0;<br />//&#x00A0;contributors&#x00A0;may&#x00A0;be&#x00A0;used&#x00A0;to&#x00A0;endorse&#x00A0;or&#x00A0;promote&#x00A0;products&#x00A0;derived&#x00A0;from
//&#x00A0;this&#x00A0;software&#x00A0;without&#x00A0;specific&#x00A0;prior&#x00A0;written&#x00A0;permission. &#x00A0;<br />//&#x00A0;this&#x00A0;software&#x00A0;without&#x00A0;specific&#x00A0;prior&#x00A0;written&#x00A0;permission.
// &#x00A0;<br />//
//&#x00A0;THIS&#x00A0;SOFTWARE&#x00A0;IS&#x00A0;PROVIDED&#x00A0;BY&#x00A0;THE&#x00A0;COPYRIGHT&#x00A0;HOLDERS&#x00A0;AND&#x00A0;CONTRIBUTORS &#x00A0;<br />//&#x00A0;THIS&#x00A0;SOFTWARE&#x00A0;IS&#x00A0;PROVIDED&#x00A0;BY&#x00A0;THE&#x00A0;COPYRIGHT&#x00A0;HOLDERS&#x00A0;AND&#x00A0;CONTRIBUTORS
//&#x00A0;"AS&#x00A0;IS"&#x00A0;AND&#x00A0;ANY&#x00A0;EXPRESS&#x00A0;OR&#x00A0;IMPLIED&#x00A0;WARRANTIES,&#x00A0;INCLUDING,&#x00A0;BUT&#x00A0;NOT &#x00A0;<br />//&#x00A0;"AS&#x00A0;IS"&#x00A0;AND&#x00A0;ANY&#x00A0;EXPRESS&#x00A0;OR&#x00A0;IMPLIED&#x00A0;WARRANTIES,&#x00A0;INCLUDING,&#x00A0;BUT&#x00A0;NOT
//&#x00A0;LIMITED&#x00A0;TO,&#x00A0;THE&#x00A0;IMPLIED&#x00A0;WARRANTIES&#x00A0;OF&#x00A0;MERCHANTABILITY&#x00A0;AND&#x00A0;FITNESS &#x00A0;<br />//&#x00A0;LIMITED&#x00A0;TO,&#x00A0;THE&#x00A0;IMPLIED&#x00A0;WARRANTIES&#x00A0;OF&#x00A0;MERCHANTABILITY&#x00A0;AND&#x00A0;FITNESS
//&#x00A0;FOR&#x00A0;A&#x00A0;PARTICULAR&#x00A0;PURPOSE&#x00A0;ARE&#x00A0;DISCLAIMED.&#x00A0;IN&#x00A0;NO&#x00A0;EVENT&#x00A0;SHALL&#x00A0;THE &#x00A0;<br />//&#x00A0;FOR&#x00A0;A&#x00A0;PARTICULAR&#x00A0;PURPOSE&#x00A0;ARE&#x00A0;DISCLAIMED.&#x00A0;IN&#x00A0;NO&#x00A0;EVENT&#x00A0;SHALL&#x00A0;THE
//&#x00A0;COPYRIGHT&#x00A0;HOLDER&#x00A0;OR&#x00A0;CONTRIBUTORS&#x00A0;BE&#x00A0;LIABLE&#x00A0;FOR&#x00A0;ANY&#x00A0;DIRECT,&#x00A0;INDIRECT, &#x00A0;<br />//&#x00A0;COPYRIGHT&#x00A0;HOLDER&#x00A0;OR&#x00A0;CONTRIBUTORS&#x00A0;BE&#x00A0;LIABLE&#x00A0;FOR&#x00A0;ANY&#x00A0;DIRECT,&#x00A0;INDIRECT,
//&#x00A0;INCIDENTAL,&#x00A0;SPECIAL,&#x00A0;EXEMPLARY,&#x00A0;OR&#x00A0;CONSEQUENTIAL&#x00A0;DAMAGES&#x00A0;(INCLUDING, &#x00A0;<br />//&#x00A0;INCIDENTAL,&#x00A0;SPECIAL,&#x00A0;EXEMPLARY,&#x00A0;OR&#x00A0;CONSEQUENTIAL&#x00A0;DAMAGES&#x00A0;(INCLUDING,
//&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED&#x00A0;TO,&#x00A0;PROCUREMENT&#x00A0;OF&#x00A0;SUBSTITUTE&#x00A0;GOODS&#x00A0;OR&#x00A0;SERVICES; &#x00A0;<br />//&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED&#x00A0;TO,&#x00A0;PROCUREMENT&#x00A0;OF&#x00A0;SUBSTITUTE&#x00A0;GOODS&#x00A0;OR&#x00A0;SERVICES;
//&#x00A0;LOSS&#x00A0;OF&#x00A0;USE,&#x00A0;DATA,&#x00A0;OR&#x00A0;PROFITS;&#x00A0;OR&#x00A0;BUSINESS&#x00A0;INTERRUPTION)&#x00A0;HOWEVER &#x00A0;<br />//&#x00A0;LOSS&#x00A0;OF&#x00A0;USE,&#x00A0;DATA,&#x00A0;OR&#x00A0;PROFITS;&#x00A0;OR&#x00A0;BUSINESS&#x00A0;INTERRUPTION)&#x00A0;HOWEVER
//&#x00A0;CAUSED&#x00A0;AND&#x00A0;ON&#x00A0;ANY&#x00A0;THEORY&#x00A0;OF&#x00A0;LIABILITY,&#x00A0;WHETHER&#x00A0;IN&#x00A0;CONTRACT,&#x00A0;STRICT &#x00A0;<br />//&#x00A0;CAUSED&#x00A0;AND&#x00A0;ON&#x00A0;ANY&#x00A0;THEORY&#x00A0;OF&#x00A0;LIABILITY,&#x00A0;WHETHER&#x00A0;IN&#x00A0;CONTRACT,&#x00A0;STRICT
//&#x00A0;LIABILITY,&#x00A0;OR&#x00A0;TORT&#x00A0;(INCLUDING&#x00A0;NEGLIGENCE&#x00A0;OR&#x00A0;OTHERWISE)&#x00A0;ARISING&#x00A0;IN &#x00A0;<br />//&#x00A0;LIABILITY,&#x00A0;OR&#x00A0;TORT&#x00A0;(INCLUDING&#x00A0;NEGLIGENCE&#x00A0;OR&#x00A0;OTHERWISE)&#x00A0;ARISING&#x00A0;IN
//&#x00A0;ANY&#x00A0;WAY&#x00A0;OUT&#x00A0;OF&#x00A0;THE&#x00A0;USE&#x00A0;OF&#x00A0;THIS&#x00A0;SOFTWARE,&#x00A0;EVEN&#x00A0;IF&#x00A0;ADVISED&#x00A0;OF&#x00A0;THE &#x00A0;<br />//&#x00A0;ANY&#x00A0;WAY&#x00A0;OUT&#x00A0;OF&#x00A0;THE&#x00A0;USE&#x00A0;OF&#x00A0;THIS&#x00A0;SOFTWARE,&#x00A0;EVEN&#x00A0;IF&#x00A0;ADVISED&#x00A0;OF&#x00A0;THE
//&#x00A0;POSSIBILITY&#x00A0;OF&#x00A0;SUCH&#x00A0;DAMAGE. &#x00A0;<br />//&#x00A0;POSSIBILITY&#x00A0;OF&#x00A0;SUCH&#x00A0;DAMAGE.
// &#x00A0;<br />//
//&#x00A0;************************************************************************ &#x00A0;<br />//&#x00A0;************************************************************************
</pre> </div>
<!--l. 135--><p class="nopar" > <!--l. 135--><p class="nopar" >
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Contributor Covenant Code of Conduct</title> <head><title>Contributor Covenant Code of Conduct</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Prerequisites</title> <head><title>Prerequisites</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+15 -15
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Method hierarchy_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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -68,9 +68,9 @@ cellspacing="0" cellpadding="0"
><colgroup id="TBL-11-1g"><col ><colgroup id="TBL-11-1g"><col
id="TBL-11-1"><col id="TBL-11-1"><col
id="TBL-11-2"></colgroup><tr 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" style="vertical-align:baseline;" id="TBL-11-1-"><td style="white-space:wrap; text-align:left;" id="TBL-11-1-1"
class="td11"><!--l. 692--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 692--><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="cmtt-12">a</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-11-1-2"
class="td11"><!--l. 692--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 692--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -85,8 +85,8 @@ 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
style="vertical-align:baseline;" id="TBL-11-2-"><td style="white-space:normal; text-align:left;" id="TBL-11-2-1" style="vertical-align:baseline;" id="TBL-11-2-"><td style="white-space:wrap; text-align:left;" id="TBL-11-2-1"
class="td11"><!--l. 693--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-2-2" class="td11"><!--l. 693--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-2-2"
class="td11"><!--l. 693--><p class="noindent" ><span class="td11"><!--l. 693--><p class="noindent" ><span
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
@@ -106,9 +106,9 @@ 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
style="vertical-align:baseline;" id="TBL-11-3-"><td style="white-space:normal; text-align:left;" id="TBL-11-3-1" style="vertical-align:baseline;" id="TBL-11-3-"><td style="white-space:wrap; text-align:left;" id="TBL-11-3-1"
class="td11"><!--l. 698--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 698--><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="cmtt-12">desc_a</span></td><td style="white-space:wrap; text-align:left;" id="TBL-11-3-2"
class="td11"><!--l. 698--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 698--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -121,8 +121,8 @@ 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
style="vertical-align:baseline;" id="TBL-11-4-"><td style="white-space:normal; text-align:left;" id="TBL-11-4-1" style="vertical-align:baseline;" id="TBL-11-4-"><td style="white-space:wrap; text-align:left;" id="TBL-11-4-1"
class="td11"><!--l. 699--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-4-2" class="td11"><!--l. 699--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-4-2"
class="td11"><!--l. 699--><p class="noindent" ><span class="td11"><!--l. 699--><p class="noindent" ><span
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
@@ -135,9 +135,9 @@ 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
style="vertical-align:baseline;" id="TBL-11-5-"><td style="white-space:normal; text-align:left;" id="TBL-11-5-1" style="vertical-align:baseline;" id="TBL-11-5-"><td style="white-space:wrap; text-align:left;" id="TBL-11-5-1"
class="td11"><!--l. 701--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 701--><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="cmtt-12">info</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-11-5-2"
class="td11"><!--l. 701--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 701--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -148,8 +148,8 @@ 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
style="vertical-align:baseline;" id="TBL-11-6-"><td style="white-space:normal; text-align:left;" id="TBL-11-6-1" style="vertical-align:baseline;" id="TBL-11-6-"><td style="white-space:wrap; text-align:left;" id="TBL-11-6-1"
class="td11"><!--l. 702--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-6-2" class="td11"><!--l. 702--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-6-2"
class="td11"><!--l. 702--><p class="noindent" ><span class="td11"><!--l. 702--><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
@@ -157,7 +157,7 @@ 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
style="vertical-align:baseline;" id="TBL-11-7-"><td style="white-space:normal; text-align:left;" id="TBL-11-7-1" style="vertical-align:baseline;" id="TBL-11-7-"><td style="white-space:wrap; text-align:left;" id="TBL-11-7-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
+27 -27
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Method smoothers_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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -82,9 +82,9 @@ cellspacing="0" cellpadding="0"
><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
style="vertical-align:baseline;" id="TBL-12-1-"><td style="white-space:normal; text-align:left;" id="TBL-12-1-1" style="vertical-align:baseline;" id="TBL-12-1-"><td style="white-space:wrap; text-align:left;" id="TBL-12-1-1"
class="td11"><!--l. 725--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 725--><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:wrap; text-align:left;" id="TBL-12-1-2"
class="td11"><!--l. 725--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 725--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -99,8 +99,8 @@ 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
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:wrap; text-align:left;" id="TBL-12-2-1"
class="td11"><!--l. 726--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-2-2" class="td11"><!--l. 726--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-2-2"
class="td11"><!--l. 726--><p class="noindent" ><span class="td11"><!--l. 726--><p class="noindent" ><span
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
@@ -120,9 +120,9 @@ 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
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:wrap; text-align:left;" id="TBL-12-3-1"
class="td11"><!--l. 730--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 730--><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:wrap; text-align:left;" id="TBL-12-3-2"
class="td11"><!--l. 730--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 730--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -135,8 +135,8 @@ 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
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:wrap; text-align:left;" id="TBL-12-4-1"
class="td11"><!--l. 731--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-4-2" class="td11"><!--l. 731--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-4-2"
class="td11"><!--l. 731--><p class="noindent" ><span class="td11"><!--l. 731--><p class="noindent" ><span
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
@@ -149,9 +149,9 @@ 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
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:wrap; text-align:left;" id="TBL-12-5-1"
class="td11"><!--l. 733--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 733--><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:wrap; text-align:left;" id="TBL-12-5-2"
class="td11"><!--l. 733--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 733--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -162,8 +162,8 @@ 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
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:wrap; text-align:left;" id="TBL-12-6-1"
class="td11"><!--l. 734--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-6-2" class="td11"><!--l. 734--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-6-2"
class="td11"><!--l. 734--><p class="noindent" ><span class="td11"><!--l. 734--><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
@@ -171,9 +171,9 @@ 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
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:wrap; text-align:left;" id="TBL-12-7-1"
class="td11"><!--l. 735--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 735--><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:wrap; text-align:left;" id="TBL-12-7-2"
class="td11"><!--l. 735--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 735--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -190,8 +190,8 @@ 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
style="vertical-align:baseline;" id="TBL-12-8-"><td style="white-space:normal; text-align:left;" id="TBL-12-8-1" style="vertical-align:baseline;" id="TBL-12-8-"><td style="white-space:wrap; text-align:left;" id="TBL-12-8-1"
class="td11"><!--l. 736--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-8-2" class="td11"><!--l. 736--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-8-2"
class="td11"><!--l. 736--><p class="noindent" ><span class="td11"><!--l. 736--><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>
<span <span
@@ -204,9 +204,9 @@ 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
style="vertical-align:baseline;" id="TBL-12-9-"><td style="white-space:normal; text-align:left;" id="TBL-12-9-1" style="vertical-align:baseline;" id="TBL-12-9-"><td style="white-space:wrap; text-align:left;" id="TBL-12-9-1"
class="td11"><!--l. 740--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 740--><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="cmtt-12">vmold</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-9-2"
class="td11"><!--l. 740--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 740--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -223,16 +223,16 @@ 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
style="vertical-align:baseline;" id="TBL-12-10-"><td style="white-space:normal; text-align:left;" id="TBL-12-10-1" style="vertical-align:baseline;" id="TBL-12-10-"><td style="white-space:wrap; text-align:left;" id="TBL-12-10-1"
class="td11"><!--l. 741--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-10-2" class="td11"><!--l. 741--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-10-2"
class="td11"><!--l. 741--><p class="noindent" ><span class="td11"><!--l. 741--><p class="noindent" ><span
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
style="vertical-align:baseline;" id="TBL-12-11-"><td style="white-space:normal; text-align:left;" id="TBL-12-11-1" style="vertical-align:baseline;" id="TBL-12-11-"><td style="white-space:wrap; text-align:left;" id="TBL-12-11-1"
class="td11"><!--l. 743--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 743--><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="cmtt-12">imold</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-11-2"
class="td11"><!--l. 743--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 743--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -247,14 +247,14 @@ 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
style="vertical-align:baseline;" id="TBL-12-12-"><td style="white-space:normal; text-align:left;" id="TBL-12-12-1" style="vertical-align:baseline;" id="TBL-12-12-"><td style="white-space:wrap; text-align:left;" id="TBL-12-12-1"
class="td11"><!--l. 744--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-12-12-2" class="td11"><!--l. 744--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-12-2"
class="td11"><!--l. 744--><p class="noindent" ><span class="td11"><!--l. 744--><p class="noindent" ><span
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
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:wrap; text-align:left;" id="TBL-12-13-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
+27 -27
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Method build</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -90,9 +90,9 @@ cellspacing="0" cellpadding="0"
><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
style="vertical-align:baseline;" id="TBL-13-1-"><td style="white-space:normal; text-align:left;" id="TBL-13-1-1" style="vertical-align:baseline;" id="TBL-13-1-"><td style="white-space:wrap; text-align:left;" id="TBL-13-1-1"
class="td11"><!--l. 769--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 769--><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:wrap; text-align:left;" id="TBL-13-1-2"
class="td11"><!--l. 769--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 769--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -107,8 +107,8 @@ 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
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:wrap; text-align:left;" id="TBL-13-2-1"
class="td11"><!--l. 770--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-2-2" class="td11"><!--l. 770--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-2-2"
class="td11"><!--l. 770--><p class="noindent" ><span class="td11"><!--l. 770--><p class="noindent" ><span
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
@@ -128,9 +128,9 @@ 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
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:wrap; text-align:left;" id="TBL-13-3-1"
class="td11"><!--l. 774--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 774--><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:wrap; text-align:left;" id="TBL-13-3-2"
class="td11"><!--l. 774--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 774--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -143,8 +143,8 @@ 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
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:wrap; text-align:left;" id="TBL-13-4-1"
class="td11"><!--l. 775--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-4-2" class="td11"><!--l. 775--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-4-2"
class="td11"><!--l. 775--><p class="noindent" ><span class="td11"><!--l. 775--><p class="noindent" ><span
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
@@ -157,9 +157,9 @@ 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
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:wrap; text-align:left;" id="TBL-13-5-1"
class="td11"><!--l. 777--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 777--><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:wrap; text-align:left;" id="TBL-13-5-2"
class="td11"><!--l. 777--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 777--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -170,8 +170,8 @@ 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
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:wrap; text-align:left;" id="TBL-13-6-1"
class="td11"><!--l. 778--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-6-2" class="td11"><!--l. 778--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-6-2"
class="td11"><!--l. 778--><p class="noindent" ><span class="td11"><!--l. 778--><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
@@ -179,9 +179,9 @@ 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
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:wrap; text-align:left;" id="TBL-13-7-1"
class="td11"><!--l. 779--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 779--><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:wrap; text-align:left;" id="TBL-13-7-2"
class="td11"><!--l. 779--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 779--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -198,8 +198,8 @@ 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
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:wrap; text-align:left;" id="TBL-13-8-1"
class="td11"><!--l. 780--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-8-2" class="td11"><!--l. 780--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-8-2"
class="td11"><!--l. 780--><p class="noindent" ><span class="td11"><!--l. 780--><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>
<span <span
@@ -212,9 +212,9 @@ 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
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:wrap; text-align:left;" id="TBL-13-9-1"
class="td11"><!--l. 784--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 784--><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:wrap; text-align:left;" id="TBL-13-9-2"
class="td11"><!--l. 784--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 784--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -231,16 +231,16 @@ 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
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:wrap; text-align:left;" id="TBL-13-10-1"
class="td11"><!--l. 785--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-10-2" class="td11"><!--l. 785--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-10-2"
class="td11"><!--l. 785--><p class="noindent" ><span class="td11"><!--l. 785--><p class="noindent" ><span
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
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:wrap; text-align:left;" id="TBL-13-11-1"
class="td11"><!--l. 787--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 787--><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:wrap; text-align:left;" id="TBL-13-11-2"
class="td11"><!--l. 787--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 787--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -255,14 +255,14 @@ 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
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:wrap; text-align:left;" id="TBL-13-12-1"
class="td11"><!--l. 788--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-12-2" class="td11"><!--l. 788--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-12-2"
class="td11"><!--l. 788--><p class="noindent" ><span class="td11"><!--l. 788--><p class="noindent" ><span
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
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:wrap; text-align:left;" id="TBL-13-13-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 793--><p class="noindent" ><span <!--l. 793--><p class="noindent" ><span
class="cmr-12">The method can be used to build multilevel preconditioners too.</span> class="cmr-12">The method can be used to build multilevel preconditioners too.</span>
+27 -27
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Method apply</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -96,9 +96,9 @@ cellspacing="0" cellpadding="0"
><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
style="vertical-align:baseline;" id="TBL-14-1-"><td style="white-space:normal; text-align:left;" id="TBL-14-1-1" style="vertical-align:baseline;" id="TBL-14-1-"><td style="white-space:wrap; text-align:left;" id="TBL-14-1-1"
class="td11"><!--l. 816--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 816--><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="cmtt-12">x</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-1-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
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -106,8 +106,8 @@ class="cmtt-12">kind_parameter</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">, dimension(:), intent(in)&#8212;.</span> </td> class="cmr-12">, dimension(:), intent(in)&#8212;.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-14-2-"><td style="white-space:normal; text-align:left;" id="TBL-14-2-1" style="vertical-align:baseline;" id="TBL-14-2-"><td style="white-space:wrap; text-align:left;" id="TBL-14-2-1"
class="td11"><!--l. 817--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-2-2" class="td11"><!--l. 817--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-2-2"
class="td11"><!--l. 817--><p class="noindent" ><span class="td11"><!--l. 817--><p class="noindent" ><span
class="cmr-12">The local part of the vector </span><span class="cmr-12">The local part of the vector </span><span
class="cmmi-12">x</span><span class="cmmi-12">x</span><span
@@ -125,9 +125,9 @@ class="cmr-12">, single/double</span>
<span <span
class="cmr-12">precision version of AMG4PSBLAS under use.</span> </td> class="cmr-12">precision version of AMG4PSBLAS under use.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-14-3-"><td style="white-space:normal; text-align:left;" id="TBL-14-3-1" style="vertical-align:baseline;" id="TBL-14-3-"><td style="white-space:wrap; text-align:left;" id="TBL-14-3-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">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:wrap; text-align:left;" id="TBL-14-3-2"
class="td11"><!--l. 820--><p class="noindent" ><span class="td11"><!--l. 820--><p class="noindent" ><span
class="cmti-12">type</span><span class="lstinline"></span><span class="cmti-12">type</span><span class="lstinline"></span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -135,8 +135,8 @@ class="cmtt-12">kind_parameter</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">, dimension(:), intent(out)&#8212;.</span> </td> class="cmr-12">, dimension(:), intent(out)&#8212;.</span> </td>
</tr><tr </tr><tr
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:wrap; text-align:left;" id="TBL-14-4-1"
class="td11"><!--l. 821--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-4-2" class="td11"><!--l. 821--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-4-2"
class="td11"><!--l. 821--><p class="noindent" ><span class="td11"><!--l. 821--><p class="noindent" ><span
class="cmr-12">The local part of the vector </span><span class="cmr-12">The local part of the vector </span><span
class="cmmi-12">y</span><span class="cmmi-12">y</span><span
@@ -154,9 +154,9 @@ class="cmr-12">, single/double</span>
<span <span
class="cmr-12">precision version of AMG4PSBLAS under use.</span> </td> class="cmr-12">precision version of AMG4PSBLAS under use.</span> </td>
</tr><tr </tr><tr
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:wrap; text-align:left;" id="TBL-14-5-1"
class="td11"><!--l. 824--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 824--><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:wrap; text-align:left;" id="TBL-14-5-2"
class="td11"><!--l. 824--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 824--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -169,16 +169,16 @@ 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
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:wrap; text-align:left;" id="TBL-14-6-1"
class="td11"><!--l. 825--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-6-2" class="td11"><!--l. 825--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-6-2"
class="td11"><!--l. 825--><p class="noindent" ><span class="td11"><!--l. 825--><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>
<span <span
class="cmr-12">preconditioned.</span> </td> class="cmr-12">preconditioned.</span> </td>
</tr><tr </tr><tr
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:wrap; text-align:left;" id="TBL-14-7-1"
class="td11"><!--l. 827--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 827--><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:wrap; text-align:left;" id="TBL-14-7-2"
class="td11"><!--l. 827--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 827--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -189,8 +189,8 @@ 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
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:wrap; text-align:left;" id="TBL-14-8-1"
class="td11"><!--l. 828--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-8-2" class="td11"><!--l. 828--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-8-2"
class="td11"><!--l. 828--><p class="noindent" ><span class="td11"><!--l. 828--><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
@@ -198,9 +198,9 @@ 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
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:wrap; text-align:left;" id="TBL-14-9-1"
class="td11"><!--l. 829--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 829--><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:wrap; text-align:left;" id="TBL-14-9-2"
class="td11"><!--l. 829--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 829--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">character</span><span class="cmtt-12">character</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -215,8 +215,8 @@ 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> </td>
</tr><tr </tr><tr
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:wrap; text-align:left;" id="TBL-14-10-1"
class="td11"><!--l. 830--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-10-2" class="td11"><!--l. 830--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-10-2"
class="td11"><!--l. 830--><p class="noindent" ><span class="td11"><!--l. 830--><p class="noindent" ><span
class="cmr-12">If </span><span class="lstinline"></span><span class="cmr-12">If </span><span class="lstinline"></span><span
class="cmtt-12">trans</span> <span class="cmtt-12">trans</span> <span
@@ -290,9 +290,9 @@ class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span class="cmr-8">1</span></sup><span
class="cmr-12">).</span> </td> class="cmr-12">).</span> </td>
</tr><tr </tr><tr
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:wrap; text-align:left;" id="TBL-14-11-1"
class="td11"><!--l. 834--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 834--><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:wrap; text-align:left;" id="TBL-14-11-2"
class="td11"><!--l. 834--><p class="noindent" ><span class="td11"><!--l. 834--><p class="noindent" ><span
class="cmti-12">type</span><span class="lstinline"></span><span class="cmti-12">type</span><span class="lstinline"></span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -300,8 +300,8 @@ class="cmtt-12">kind_parameter</span><span
class="cmtt-12">)</span><span class="cmtt-12">)</span><span
class="cmr-12">, dimension(:), optional, target&#8212;.</span> </td> class="cmr-12">, dimension(:), optional, target&#8212;.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-14-12-"><td style="white-space:normal; text-align:left;" id="TBL-14-12-1" style="vertical-align:baseline;" id="TBL-14-12-"><td style="white-space:wrap; text-align:left;" id="TBL-14-12-1"
class="td11"><!--l. 835--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-12-2" class="td11"><!--l. 835--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-12-2"
class="td11"><!--l. 835--><p class="noindent" ><span class="td11"><!--l. 835--><p class="noindent" ><span
class="cmr-12">Workspace. Its size should be at least </span><span class="lstinline"></span><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">4</span><span
@@ -328,7 +328,7 @@ class="cmr-12">,</span>
<span <span
class="cmr-12">single/double precision version of AMG4PSBLAS under use.</span> </td> class="cmr-12">single/double precision version of AMG4PSBLAS under use.</span> </td>
</tr><tr </tr><tr
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:wrap; text-align:left;" id="TBL-14-13-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
+7 -7
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Method free</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -57,9 +57,9 @@ cellspacing="0" cellpadding="0"
><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
style="vertical-align:baseline;" id="TBL-15-1-"><td style="white-space:normal; text-align:left;" id="TBL-15-1-1" style="vertical-align:baseline;" id="TBL-15-1-"><td style="white-space:wrap; text-align:left;" id="TBL-15-1-1"
class="td11"><!--l. 856--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 856--><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:wrap; text-align:left;" id="TBL-15-1-2"
class="td11"><!--l. 856--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 856--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -70,8 +70,8 @@ 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
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:wrap; text-align:left;" id="TBL-15-2-1"
class="td11"><!--l. 857--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-15-2-2" class="td11"><!--l. 857--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-15-2-2"
class="td11"><!--l. 857--><p class="noindent" ><span class="td11"><!--l. 857--><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
@@ -81,7 +81,7 @@ class="cmr-12">for</span>
<span <span
class="cmr-12">details.</span> </td> class="cmr-12">details.</span> </td>
</tr><tr </tr><tr
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:wrap; text-align:left;" id="TBL-15-3-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
+19 -19
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Method descr</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -75,9 +75,9 @@ cellspacing="0" cellpadding="0"
><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
style="vertical-align:baseline;" id="TBL-16-1-"><td style="white-space:normal; text-align:left;" id="TBL-16-1-1" style="vertical-align:baseline;" id="TBL-16-1-"><td style="white-space:wrap; text-align:left;" id="TBL-16-1-1"
class="td11"><!--l. 877--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 877--><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:wrap; text-align:left;" id="TBL-16-1-2"
class="td11"><!--l. 877--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 877--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -88,8 +88,8 @@ 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
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:wrap; text-align:left;" id="TBL-16-2-1"
class="td11"><!--l. 878--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-2-2" class="td11"><!--l. 878--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-2-2"
class="td11"><!--l. 878--><p class="noindent" ><span class="td11"><!--l. 878--><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
@@ -97,9 +97,9 @@ 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
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:wrap; text-align:left;" id="TBL-16-3-1"
class="td11"><!--l. 879--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 879--><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="cmtt-12">iout</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-16-3-2"
class="td11"><!--l. 879--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 879--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -112,16 +112,16 @@ 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
style="vertical-align:baseline;" id="TBL-16-4-"><td style="white-space:normal; text-align:left;" id="TBL-16-4-1" style="vertical-align:baseline;" id="TBL-16-4-"><td style="white-space:wrap; text-align:left;" id="TBL-16-4-1"
class="td11"><!--l. 880--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-4-2" class="td11"><!--l. 880--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-4-2"
class="td11"><!--l. 880--><p class="noindent" ><span class="td11"><!--l. 880--><p class="noindent" ><span
class="cmr-12">The id of the file where the preconditioner description will be</span> class="cmr-12">The id of the file where the preconditioner description will be</span>
<span <span
class="cmr-12">printed; the default is the standard output.</span> </td> class="cmr-12">printed; the default is the standard output.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-16-5-"><td style="white-space:normal; text-align:left;" id="TBL-16-5-1" style="vertical-align:baseline;" id="TBL-16-5-"><td style="white-space:wrap; text-align:left;" id="TBL-16-5-1"
class="td11"><!--l. 882--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 882--><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="cmtt-12">root</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-16-5-2"
class="td11"><!--l. 882--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 882--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -134,8 +134,8 @@ 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
style="vertical-align:baseline;" id="TBL-16-6-"><td style="white-space:normal; text-align:left;" id="TBL-16-6-1" style="vertical-align:baseline;" id="TBL-16-6-"><td style="white-space:wrap; text-align:left;" id="TBL-16-6-1"
class="td11"><!--l. 883--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-6-2" class="td11"><!--l. 883--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-6-2"
class="td11"><!--l. 883--><p class="noindent" ><span class="td11"><!--l. 883--><p class="noindent" ><span
class="cmr-12">The id of the process where the preconditioner description</span> class="cmr-12">The id of the process where the preconditioner description</span>
<span <span
@@ -143,9 +143,9 @@ class="cmr-12">will be printed; the default is </span><span class="lstinline"></
class="cmtt-12">psb_root_</span><span class="cmtt-12">psb_root_</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-16-7-"><td style="white-space:normal; text-align:left;" id="TBL-16-7-1" style="vertical-align:baseline;" id="TBL-16-7-"><td style="white-space:wrap; text-align:left;" id="TBL-16-7-1"
class="td11"><!--l. 885--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 885--><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="cmtt-12">verbosity</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-16-7-2"
class="td11"><!--l. 885--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 885--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -158,8 +158,8 @@ 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
style="vertical-align:baseline;" id="TBL-16-8-"><td style="white-space:normal; text-align:left;" id="TBL-16-8-1" style="vertical-align:baseline;" id="TBL-16-8-"><td style="white-space:wrap; text-align:left;" id="TBL-16-8-1"
class="td11"><!--l. 886--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-8-2" class="td11"><!--l. 886--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-8-2"
class="td11"><!--l. 886--><p class="noindent" ><span class="td11"><!--l. 886--><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
@@ -169,7 +169,7 @@ class="cmr-12">a distributed multilevel preconditioner the size of the coarse</s
<span <span
class="cmr-12">matrices on every process.</span> </td> class="cmr-12">matrices on every process.</span> </td>
</tr><tr </tr><tr
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:wrap; text-align:left;" id="TBL-16-9-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
+39 -39
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Auxiliary Methods</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 (https://tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -77,9 +77,9 @@ cellspacing="0" cellpadding="0"
><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
style="vertical-align:baseline;" id="TBL-17-1-"><td style="white-space:normal; text-align:left;" id="TBL-17-1-1" style="vertical-align:baseline;" id="TBL-17-1-"><td style="white-space:wrap; text-align:left;" id="TBL-17-1-1"
class="td11"><!--l. 909--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 909--><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:wrap; text-align:left;" id="TBL-17-1-2"
class="td11"><!--l. 909--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 909--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -90,8 +90,8 @@ 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
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:wrap; text-align:left;" id="TBL-17-2-1"
class="td11"><!--l. 910--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-17-2-2" class="td11"><!--l. 910--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-17-2-2"
class="td11"><!--l. 910--><p class="noindent" ><span class="td11"><!--l. 910--><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
@@ -99,9 +99,9 @@ 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
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:wrap; text-align:left;" id="TBL-17-3-1"
class="td11"><!--l. 911--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 911--><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:wrap; text-align:left;" id="TBL-17-3-2"
class="td11"><!--l. 911--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 911--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -118,8 +118,8 @@ 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
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:wrap; text-align:left;" id="TBL-17-4-1"
class="td11"><!--l. 912--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-17-4-2" class="td11"><!--l. 912--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-17-4-2"
class="td11"><!--l. 912--><p class="noindent" ><span class="td11"><!--l. 912--><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>
<span <span
@@ -132,7 +132,7 @@ 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
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:wrap; text-align:left;" id="TBL-17-5-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 919--><p class="noindent" > <!--l. 919--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span <h5 class="subsubsectionHead"><span class="titlemark"><span
@@ -166,9 +166,9 @@ cellspacing="0" cellpadding="0"
><colgroup id="TBL-18-1g"><col ><colgroup id="TBL-18-1g"><col
id="TBL-18-1"><col id="TBL-18-1"><col
id="TBL-18-2"></colgroup><tr 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" style="vertical-align:baseline;" id="TBL-18-1-"><td style="white-space:wrap; text-align:left;" id="TBL-18-1-1"
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">pout</span> </td><td style="white-space:normal; text-align:left;" id="TBL-18-1-2" class="cmtt-12">pout</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-18-1-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
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -183,8 +183,8 @@ 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
style="vertical-align:baseline;" id="TBL-18-2-"><td style="white-space:normal; text-align:left;" id="TBL-18-2-1" style="vertical-align:baseline;" id="TBL-18-2-"><td style="white-space:wrap; text-align:left;" id="TBL-18-2-1"
class="td11"><!--l. 932--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-18-2-2" class="td11"><!--l. 932--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-18-2-2"
class="td11"><!--l. 932--><p class="noindent" ><span class="td11"><!--l. 932--><p class="noindent" ><span
class="cmr-12">The copy of the preconditioner data structure. Note that </span><span class="cmr-12">The copy of the preconditioner data structure. Note that </span><span
class="cmti-12">x </span><span class="cmti-12">x </span><span
@@ -198,9 +198,9 @@ class="cmr-12">, single/double precision</span>
<span <span
class="cmr-12">version of AMG4PSBLAS under use.</span> </td> class="cmr-12">version of AMG4PSBLAS under use.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-18-3-"><td style="white-space:normal; text-align:left;" id="TBL-18-3-1" style="vertical-align:baseline;" id="TBL-18-3-"><td style="white-space:wrap; text-align:left;" id="TBL-18-3-1"
class="td11"><!--l. 935--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 935--><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:wrap; text-align:left;" id="TBL-18-3-2"
class="td11"><!--l. 935--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 935--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -211,8 +211,8 @@ 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
style="vertical-align:baseline;" id="TBL-18-4-"><td style="white-space:normal; text-align:left;" id="TBL-18-4-1" style="vertical-align:baseline;" id="TBL-18-4-"><td style="white-space:wrap; text-align:left;" id="TBL-18-4-1"
class="td11"><!--l. 936--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-18-4-2" class="td11"><!--l. 936--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-18-4-2"
class="td11"><!--l. 936--><p class="noindent" ><span class="td11"><!--l. 936--><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
@@ -220,7 +220,7 @@ 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
style="vertical-align:baseline;" id="TBL-18-5-"><td style="white-space:normal; text-align:left;" id="TBL-18-5-1" style="vertical-align:baseline;" id="TBL-18-5-"><td style="white-space:wrap; text-align:left;" id="TBL-18-5-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 941--><p class="noindent" > <!--l. 941--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span <h5 class="subsubsectionHead"><span class="titlemark"><span
@@ -247,9 +247,9 @@ cellspacing="0" cellpadding="0"
><colgroup id="TBL-19-1g"><col ><colgroup id="TBL-19-1g"><col
id="TBL-19-1"><col id="TBL-19-1"><col
id="TBL-19-2"></colgroup><tr 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" style="vertical-align:baseline;" id="TBL-19-1-"><td style="white-space:wrap; text-align:left;" id="TBL-19-1-1"
class="td11"><!--l. 948--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 948--><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="cmtt-12">global</span> </td> <td style="white-space:wrap; text-align:left;" id="TBL-19-1-2"
class="td11"><!--l. 948--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 948--><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
@@ -257,8 +257,8 @@ 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
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:wrap; text-align:left;" id="TBL-19-2-1"
class="td11"><!--l. 949--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-19-2-2" class="td11"><!--l. 949--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-19-2-2"
class="td11"><!--l. 949--><p class="noindent" ><span class="td11"><!--l. 949--><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>
<span <span
@@ -268,7 +268,7 @@ class="cmtt-12">false</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
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:wrap; text-align:left;" id="TBL-19-3-1"
class="td11"> </td> </tr></table> class="td11"> </td> </tr></table>
</div> <span </div> <span
class="cmr-12">Return memory footprint in bytes.</span> class="cmr-12">Return memory footprint in bytes.</span>
@@ -333,9 +333,9 @@ cellspacing="0" cellpadding="0"
><colgroup id="TBL-20-1g"><col ><colgroup id="TBL-20-1g"><col
id="TBL-20-1"><col id="TBL-20-1"><col
id="TBL-20-2"></colgroup><tr 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" style="vertical-align:baseline;" id="TBL-20-1-"><td style="white-space:wrap; text-align:left;" id="TBL-20-1-1"
class="td11"><!--l. 981--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 981--><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:wrap; text-align:left;" id="TBL-20-1-2"
class="td11"><!--l. 981--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 981--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -346,8 +346,8 @@ 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
style="vertical-align:baseline;" id="TBL-20-2-"><td style="white-space:normal; text-align:left;" id="TBL-20-2-1" style="vertical-align:baseline;" id="TBL-20-2-"><td style="white-space:wrap; text-align:left;" id="TBL-20-2-1"
class="td11"><!--l. 982--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-20-2-2" class="td11"><!--l. 982--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-20-2-2"
class="td11"><!--l. 982--><p class="noindent" ><span class="td11"><!--l. 982--><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
@@ -355,9 +355,9 @@ 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
style="vertical-align:baseline;" id="TBL-20-3-"><td style="white-space:normal; text-align:left;" id="TBL-20-3-1" style="vertical-align:baseline;" id="TBL-20-3-"><td style="white-space:wrap; text-align:left;" id="TBL-20-3-1"
class="td11"><!--l. 983--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 983--><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="cmtt-12">vmold</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-20-3-2"
class="td11"><!--l. 983--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 983--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span class="cmtt-12">class</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -374,14 +374,14 @@ 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
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:wrap; text-align:left;" id="TBL-20-4-1"
class="td11"><!--l. 984--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-20-4-2" class="td11"><!--l. 984--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-20-4-2"
class="td11"><!--l. 984--><p class="noindent" ><span class="td11"><!--l. 984--><p class="noindent" ><span
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
style="vertical-align:baseline;" id="TBL-20-5-"><td style="white-space:normal; text-align:left;" id="TBL-20-5-1" style="vertical-align:baseline;" id="TBL-20-5-"><td style="white-space:wrap; text-align:left;" id="TBL-20-5-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 990--><p class="noindent" > <!--l. 990--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span <h5 class="subsubsectionHead"><span class="titlemark"><span
@@ -411,9 +411,9 @@ cellspacing="0" cellpadding="0"
><colgroup id="TBL-21-1g"><col ><colgroup id="TBL-21-1g"><col
id="TBL-21-1"><col id="TBL-21-1"><col
id="TBL-21-2"></colgroup><tr 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" style="vertical-align:baseline;" id="TBL-21-1-"><td style="white-space:wrap; text-align:left;" id="TBL-21-1-1"
class="td11"><!--l. 1002--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 1002--><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="cmtt-12">info</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-21-1-2"
class="td11"><!--l. 1002--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 1002--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -424,8 +424,8 @@ 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
style="vertical-align:baseline;" id="TBL-21-2-"><td style="white-space:normal; text-align:left;" id="TBL-21-2-1" style="vertical-align:baseline;" id="TBL-21-2-"><td style="white-space:wrap; text-align:left;" id="TBL-21-2-1"
class="td11"><!--l. 1003--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-21-2-2" class="td11"><!--l. 1003--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-21-2-2"
class="td11"><!--l. 1003--><p class="noindent" ><span class="td11"><!--l. 1003--><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
@@ -433,7 +433,7 @@ 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
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:wrap; text-align:left;" id="TBL-21-3-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
+2 -2
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Optional third party libraries</title> <head><title>Optional third party libraries</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
+14 -15
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Configuration options</title> <head><title>Configuration options</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -42,9 +42,9 @@ class="cmr-12">As a minimal example consider the following:</span>
<pre class="verbatim" id="verbatim-2"> <div class="verbatim" id="verbatim-2">
./configure&#x00A0;--with-psblas=PSB-INSTALL-DIR ./configure&#x00A0;--with-psblas=PSB-INSTALL-DIR
</pre> </div>
<!--l. 130--><p class="nopar" > <span <!--l. 130--><p class="nopar" > <span
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
@@ -685,8 +685,7 @@ class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">&#8216;--</span><span class="cmtt-12">&#8216;--</span><span
class="cmtt-12">prefix</span><span class="cmtt-12">prefix</span><span
class="cmtt-12">=</span><span class="cmtt-12">=</span><span
class="tctt-1200">$</span><span class="cmtt-12">$HOME</span><span
class="cmtt-12">HOME</span><span
class="cmtt-12">&#8217;.</span><span class="cmtt-12">&#8217;.</span><span
class="cmtt-12">&#x00A0;</span><br /><span class="label"><a class="cmtt-12">&#x00A0;</span><br /><span class="label"><a
id="x11-10032r31"></a></span><span id="x11-10032r31"></a></span><span
@@ -4228,9 +4227,9 @@ class="cmtt-12">github</span><span
class="cmtt-12">.</span><span class="cmtt-12">.</span><span
class="cmtt-12">com</span><span class="cmtt-12">com</span><span
class="cmtt-12">/</span><span class="cmtt-12">/</span><span
class="cmtt-12">sfilippone</span><span class="cmtt-12">psctoolkit</span><span
class="cmtt-12">/</span><span class="cmtt-12">/</span><span
class="cmtt-12">amg4psblas</span><span class="cmtt-12">psctoolkit</span><span
class="cmtt-12">/</span><span class="cmtt-12">/</span><span
class="cmtt-12">issues</span><span class="cmtt-12">issues</span><span
class="cmtt-12">&#x003E;.</span> class="cmtt-12">&#x003E;.</span>
@@ -4247,10 +4246,10 @@ class="cmr-12">might be configured with:</span>
<pre class="verbatim" id="verbatim-3"> <div class="verbatim" id="verbatim-3">
./configure&#x00A0;--with-psblas=/opt/psblas-3.7/&#x00A0;\ ./configure&#x00A0;--with-psblas=/opt/psblas-3.7/&#x00A0;\
--with-umfpackincdir=/usr/include/suitesparse/ &#x00A0;<br />--with-umfpackincdir=/usr/include/suitesparse/
</pre> </div>
<!--l. 155--><p class="nopar" > <span <!--l. 155--><p class="nopar" > <span
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
@@ -4285,17 +4284,17 @@ class="cmr-12">To build the library the user will now enter</span>
<pre class="verbatim" id="verbatim-4"> <div class="verbatim" id="verbatim-4">
make make
</pre> </div>
<!--l. 178--><p class="nopar" > <span <!--l. 178--><p class="nopar" > <span
class="cmr-12">followed (optionally) by</span> class="cmr-12">followed (optionally) by</span>
<pre class="verbatim" id="verbatim-5"> <div class="verbatim" id="verbatim-5">
make&#x00A0;install make&#x00A0;install
</pre> </div>
<!--l. 188--><p class="nopar" > <!--l. 188--><p class="nopar" >
+4 -4
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Bug reporting</title> <head><title>Bug reporting</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -36,8 +36,8 @@ class="cmr-12">If you find any bugs in our codes, please report them through our
<span <span
class="cmr-12">on</span><br class="cmr-12">on</span><br
class="newline" /> <a class="newline" /> <a
href="https://github.com/psctoolkit/amg4psblas/issues" class="url" ><span href="https://github.com/psctoolkit/psctoolkit/issues" class="url" ><span
class="cmtt-12">https://github.com/psctoolkit/amg4psblas/issues</span></a><br class="cmtt-12">https://github.com/psctoolkit/psctoolkit/issues</span></a><br
class="newline" /> class="newline" />
<!--l. 195--><p class="indent" > <span <!--l. 195--><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>
+21 -20
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Example and test programs</title> <head><title>Example and test programs</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -29,40 +29,41 @@ 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. 200--><p class="noindent" ><span <!--l. 200--><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 a </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">examples</span></span></span> <span class="cmtt-12">samples</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">directory, divided in two subdirs </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">tests</span></span></span> <span class="cmtt-12">simple</span></span></span> <span
class="cmr-12">directories; both of them are</span> class="cmr-12">and</span>
<span <span class="obeylines-h"><span class="verb"><span
class="cmr-12">further divided into </span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">advanced</span></span></span><span
class="cmr-12">; both of them are further divided into </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">and </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">pdegen</span></span></span> <span class="cmtt-12">pdegen</span></span></span> <span
class="cmr-12">subdirectories. Their purpose is as</span> class="cmr-12">subdirectories.</span>
<span <span
class="cmr-12">follows:</span> class="cmr-12">Their purpose is as follows:</span>
<dl class="description"><dt class="description"> <dl class="description"><dt class="description">
<span <span
class="cmtt-12">examples</span> </dt><dd class="cmtt-12">simple</span> </dt><dd
class="description"><span class="description"><span
class="cmr-12">contains a set of simple example programs with a predefined choice</span> class="cmr-12">contains a set of simple example programs with a predefined choice of</span>
<span <span
class="cmr-12">of preconditioners, selectable via integer values. These are intended to get</span> class="cmr-12">preconditioners, selectable via integer values. These are intended to get</span>
<span <span
class="cmr-12">acquainted with the multilevel preconditioners available in AMG4PSBLAS.</span> class="cmr-12">acquainted with the multilevel preconditioners available in AMG4PSBLAS.</span>
</dd><dt class="description"> </dd><dt class="description">
<span <span
class="cmtt-12">tests</span> </dt><dd class="cmtt-12">advanced</span> </dt><dd
class="description"><span class="description"><span
class="cmr-12">contains a set of more sophisticated examples that will allow the user, via</span> class="cmr-12">contains a set of more sophisticated examples that will allow the user,</span>
<span <span
class="cmr-12">the input files in the </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">via the input files in the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">runs</span></span></span> <span 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</span>
<span <span
class="cmr-12">of preconditioners implemented in the package.</span></dd></dl> class="cmr-12">range of preconditioners implemented in the package.</span></dd></dl>
<!--l. 213--><p class="noindent" ><span <!--l. 214--><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>
+110 -107
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Examples</title> <head><title>Examples</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -71,38 +71,39 @@ class="cmr-12">The part of the code dealing with reading and assembling the spar
<span <span
class="cmr-12">right-hand side vector and the deallocation of the relevant data structures, performed</span> class="cmr-12">right-hand side vector and the deallocation of the relevant data structures, performed</span>
<span <span
class="cmr-12">through the PSBLAS routines for sparse matrix and vector management, is not</span> class="cmr-12">through the PSBLAS routines for sparse matrix and vector management,</span>
<span <span
class="cmr-12">reported here for the sake of conciseness. The complete code can be found in the</span> class="cmr-12">is not reported here for the sake of conciseness. The complete code can be</span>
<span <span
class="cmr-12">example program file </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">found in the example program file </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_dexample_ml.f90</span></span></span><span class="cmtt-12">amg_dexample_ml.f90</span></span></span><span
class="cmr-12">, in the directory </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">, in the directory</span>
class="cmtt-12">examples/fileread</span></span></span> <span <span class="obeylines-h"><span class="verb"><span
class="cmr-12">of</span> class="cmtt-12">samples/simple/file</span></span></span><span class="obeylines-h"><span class="verb"><span
<span class="cmtt-12">read</span></span></span> <span
class="cmr-12">the AMG4PSBLAS implementation (see Section</span><span class="cmr-12">of the AMG4PSBLAS implementation (see Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlsu5.html#x13-120003.5"><span href="userhtmlsu5.html#x13-120003.5"><span
class="cmr-12">3.5</span><!--tex4ht:ref: sec:ex_and_test --></a><span class="cmr-12">3.5</span><!--tex4ht:ref: sec:ex_and_test --></a><span
class="cmr-12">). A sample test problem along</span> class="cmr-12">). A</span>
<span <span
class="cmr-12">with the relevant input data is available in </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">sample test problem along with the relevant input data is available in</span>
class="cmtt-12">examples/fileread/runs</span></span></span><span <span class="obeylines-h"><span class="verb"><span
class="cmr-12">. For details on</span> class="cmtt-12">samples/simple/fileread/runs</span></span></span><span
class="cmr-12">. For details on the use of the PSBLAS routines, see</span>
<span <span
class="cmr-12">the use of the PSBLAS routines, see the PSBLAS User&#8217;s Guide</span><span class="cmr-12">the PSBLAS User&#8217;s Guide</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli5.html#XPSBLASGUIDE"><span href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">20</span></a><span class="cmr-12">20</span></a><span
class="cmr-12">]</span></span><span class="cmr-12">]</span></span><span
class="cmr-12">.</span> class="cmr-12">.</span>
<!--l. 138--><p class="indent" > <span
class="cmr-12">The setup and application of the default multilevel preconditioner for the real single</span>
<!--l. 138--><p class="indent" > <span
class="cmr-12">The setup and application of the default multilevel preconditioner for the real single</span>
<span <span
class="cmr-12">precision and the complex, single and double precision, versions are obtained</span> class="cmr-12">precision and the complex, single and double precision, versions are obtained</span>
<span <span
@@ -114,7 +115,8 @@ class="cmr-12">for</span>
<span <span
class="cmr-12">details). If these versions are installed, the corresponding codes are available in</span> class="cmr-12">details). If these versions are installed, the corresponding codes are available in</span>
<span class="obeylines-h"><span class="verb"><span <span class="obeylines-h"><span class="verb"><span
class="cmtt-12">examples/fileread/</span></span></span><span class="cmtt-12">samples/simple/file</span></span></span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">read</span></span></span><span
class="cmr-12">.</span> class="cmr-12">.</span>
@@ -131,58 +133,59 @@ class="cmr-12">.</span>
<div class="minipage"><pre class="verbatim" id="verbatim-6"> <div class="minipage"><div class="verbatim" id="verbatim-6">
&#x00A0;&#x00A0;use&#x00A0;psb_base_mod &#x00A0;&#x00A0;use&#x00A0;psb_base_mod
&#x00A0;&#x00A0;use&#x00A0;amg_prec_mod &#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;amg_prec_mod
&#x00A0;&#x00A0;use&#x00A0;psb_krylov_mod &#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;psb_krylov_mod
...&#x00A0;... &#x00A0;<br />...&#x00A0;...
! &#x00A0;<br />!
!&#x00A0;sparse&#x00A0;matrix &#x00A0;<br />!&#x00A0;sparse&#x00A0;matrix
&#x00A0;&#x00A0;type(psb_dspmat_type)&#x00A0;::&#x00A0;A &#x00A0;<br />&#x00A0;&#x00A0;type(psb_dspmat_type)&#x00A0;::&#x00A0;A
!&#x00A0;sparse&#x00A0;matrix&#x00A0;descriptor &#x00A0;<br />!&#x00A0;sparse&#x00A0;matrix&#x00A0;descriptor
&#x00A0;&#x00A0;type(psb_desc_type)&#x00A0;&#x00A0;&#x00A0;::&#x00A0;desc_A &#x00A0;<br />&#x00A0;&#x00A0;type(psb_desc_type)&#x00A0;&#x00A0;&#x00A0;::&#x00A0;desc_A
!&#x00A0;preconditioner &#x00A0;<br />!&#x00A0;preconditioner
&#x00A0;&#x00A0;type(amg_dprec_type)&#x00A0;&#x00A0;::&#x00A0;P &#x00A0;<br />&#x00A0;&#x00A0;type(amg_dprec_type)&#x00A0;&#x00A0;::&#x00A0;P
!&#x00A0;right-hand&#x00A0;side&#x00A0;and&#x00A0;solution&#x00A0;vectors &#x00A0;<br />!&#x00A0;right-hand&#x00A0;side&#x00A0;and&#x00A0;solution&#x00A0;vectors
&#x00A0;&#x00A0;type(psb_d_vect_type)&#x00A0;::&#x00A0;b,&#x00A0;x &#x00A0;<br />&#x00A0;&#x00A0;type(psb_d_vect_type)&#x00A0;::&#x00A0;b,&#x00A0;x
...&#x00A0;... &#x00A0;<br />...&#x00A0;...
! &#x00A0;<br />!
!&#x00A0;initialize&#x00A0;the&#x00A0;parallel&#x00A0;environment &#x00A0;<br />!&#x00A0;initialize&#x00A0;the&#x00A0;parallel&#x00A0;environment
&#x00A0;&#x00A0;call&#x00A0;psb_init(ctxt) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_init(ctxt)
&#x00A0;&#x00A0;call&#x00A0;psb_info(ctxt,iam,np) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_info(ctxt,iam,np)
...&#x00A0;... &#x00A0;<br />...&#x00A0;...
! &#x00A0;<br />!
!&#x00A0;read&#x00A0;and&#x00A0;assemble&#x00A0;the&#x00A0;spd&#x00A0;matrix&#x00A0;A&#x00A0;and&#x00A0;the&#x00A0;right-hand&#x00A0;side&#x00A0;b &#x00A0;<br />!&#x00A0;read&#x00A0;and&#x00A0;assemble&#x00A0;the&#x00A0;spd&#x00A0;matrix&#x00A0;A&#x00A0;and&#x00A0;the&#x00A0;right-hand&#x00A0;side&#x00A0;b
!&#x00A0;using&#x00A0;PSBLAS&#x00A0;routines&#x00A0;for&#x00A0;sparse&#x00A0;matrix&#x00A0;/&#x00A0;vector&#x00A0;management &#x00A0;<br />!&#x00A0;using&#x00A0;PSBLAS&#x00A0;routines&#x00A0;for&#x00A0;sparse&#x00A0;matrix&#x00A0;/&#x00A0;vector&#x00A0;management
...&#x00A0;... &#x00A0;<br />...&#x00A0;...
! &#x00A0;<br />!
!&#x00A0;initialize&#x00A0;the&#x00A0;default&#x00A0;multilevel&#x00A0;preconditioner,&#x00A0;i.e.&#x00A0;V-cycle &#x00A0;<br />!&#x00A0;initialize&#x00A0;the&#x00A0;default&#x00A0;multilevel&#x00A0;preconditioner,&#x00A0;i.e.&#x00A0;V-cycle
!&#x00A0;with&#x00A0;basic&#x00A0;smoothed&#x00A0;aggregation,&#x00A0;1&#x00A0;hybrid&#x00A0;forward/backward &#x00A0;<br />!&#x00A0;with&#x00A0;basic&#x00A0;smoothed&#x00A0;aggregation,&#x00A0;1&#x00A0;hybrid&#x00A0;forward/backward
!&#x00A0;GS&#x00A0;sweep&#x00A0;as&#x00A0;pre/post-smoother&#x00A0;and&#x00A0;UMFPACK&#x00A0;as&#x00A0;coarsest-level &#x00A0;<br />!&#x00A0;GS&#x00A0;sweep&#x00A0;as&#x00A0;pre/post-smoother&#x00A0;and&#x00A0;UMFPACK&#x00A0;as&#x00A0;coarsest-level
!&#x00A0;solver &#x00A0;<br />!&#x00A0;solver
&#x00A0;&#x00A0;call&#x00A0;P%init(&#8217;ML&#8217;,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%init(&#8217;ML&#8217;,info)
! &#x00A0;<br />!
!&#x00A0;build&#x00A0;the&#x00A0;preconditioner &#x00A0;<br />!&#x00A0;build&#x00A0;the&#x00A0;preconditioner
&#x00A0;&#x00A0;call&#x00A0;P%hierarchy_build(A,desc_A,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%hierarchy_build(A,desc_A,info)
&#x00A0;&#x00A0;call&#x00A0;P%smoothers_build(A,desc_A,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%smoothers_build(A,desc_A,info)
! &#x00A0;<br />
!&#x00A0;set&#x00A0;the&#x00A0;solver&#x00A0;parameters&#x00A0;and&#x00A0;the&#x00A0;initial&#x00A0;guess &#x00A0;<br />!
&#x00A0;&#x00A0;...&#x00A0;... &#x00A0;<br />!&#x00A0;set&#x00A0;the&#x00A0;solver&#x00A0;parameters&#x00A0;and&#x00A0;the&#x00A0;initial&#x00A0;guess
! &#x00A0;<br />&#x00A0;&#x00A0;...&#x00A0;...
!&#x00A0;solve&#x00A0;Ax=b&#x00A0;with&#x00A0;preconditioned&#x00A0;CG &#x00A0;<br />!
&#x00A0;&#x00A0;call&#x00A0;psb_krylov(&#8217;CG&#8217;,A,P,b,x,tol,desc_A,info) &#x00A0;<br />!&#x00A0;solve&#x00A0;Ax=b&#x00A0;with&#x00A0;preconditioned&#x00A0;CG
&#x00A0;&#x00A0;...&#x00A0;... &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_krylov(&#8217;CG&#8217;,A,P,b,x,tol,desc_A,info)
! &#x00A0;<br />&#x00A0;&#x00A0;...&#x00A0;...
!&#x00A0;deallocate&#x00A0;the&#x00A0;preconditioner &#x00A0;<br />!
&#x00A0;&#x00A0;call&#x00A0;P%free(info) &#x00A0;<br />!&#x00A0;deallocate&#x00A0;the&#x00A0;preconditioner
! &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%free(info)
!&#x00A0;deallocate&#x00A0;other&#x00A0;data&#x00A0;structures &#x00A0;<br />!
&#x00A0;&#x00A0;...&#x00A0;... &#x00A0;<br />!&#x00A0;deallocate&#x00A0;other&#x00A0;data&#x00A0;structures
! &#x00A0;<br />&#x00A0;&#x00A0;...&#x00A0;...
!&#x00A0;exit&#x00A0;the&#x00A0;parallel&#x00A0;environment &#x00A0;<br />!
&#x00A0;&#x00A0;call&#x00A0;psb_exit(ctxt) &#x00A0;<br />!&#x00A0;exit&#x00A0;the&#x00A0;parallel&#x00A0;environment
&#x00A0;&#x00A0;stop &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_exit(ctxt)
</pre> &#x00A0;<br />&#x00A0;&#x00A0;stop
</div>
<!--l. 255--><p class="nopar" > <!--l. 255--><p class="nopar" >
@@ -277,7 +280,7 @@ class="cmr-12">For all the previous preconditioners, example programs where the
class="cmr-12">and the right-hand side are generated by discretizing a PDE with Dirichlet</span> class="cmr-12">and the right-hand side are generated by discretizing a PDE with Dirichlet</span>
<span <span
class="cmr-12">boundary conditions are also available in the directory </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">boundary conditions are also available in the directory </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">examples/pdegen</span></span></span><span class="cmtt-12">samples/simple/pdegen</span></span></span><span
class="cmr-12">.</span> class="cmr-12">.</span>
@@ -291,19 +294,19 @@ class="cmr-12">.</span>
<div class="center" <div class="center"
> >
<!--l. 318--><p class="noindent" > <!--l. 318--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-7"> <div class="minipage"><div class="verbatim" id="verbatim-7">
...&#x00A0;... ...&#x00A0;...
!&#x00A0;build&#x00A0;a&#x00A0;V-cycle&#x00A0;preconditioner&#x00A0;with&#x00A0;1&#x00A0;block-Jacobi&#x00A0;sweep&#x00A0;(with &#x00A0;<br />!&#x00A0;build&#x00A0;a&#x00A0;V-cycle&#x00A0;preconditioner&#x00A0;with&#x00A0;1&#x00A0;block-Jacobi&#x00A0;sweep&#x00A0;(with
!&#x00A0;ILU(0)&#x00A0;on&#x00A0;the&#x00A0;blocks)&#x00A0;as&#x00A0;pre-&#x00A0;and&#x00A0;post-smoother,&#x00A0;and&#x00A0;8&#x00A0;&#x00A0;block-Jacobi &#x00A0;<br />!&#x00A0;ILU(0)&#x00A0;on&#x00A0;the&#x00A0;blocks)&#x00A0;as&#x00A0;pre-&#x00A0;and&#x00A0;post-smoother,&#x00A0;and&#x00A0;8&#x00A0;&#x00A0;block-Jacobi
!&#x00A0;sweeps&#x00A0;(with&#x00A0;ILU(0)&#x00A0;on&#x00A0;the&#x00A0;blocks)&#x00A0;as&#x00A0;coarsest-level&#x00A0;solver &#x00A0;<br />!&#x00A0;sweeps&#x00A0;(with&#x00A0;ILU(0)&#x00A0;on&#x00A0;the&#x00A0;blocks)&#x00A0;as&#x00A0;coarsest-level&#x00A0;solver
&#x00A0;&#x00A0;call&#x00A0;P%init(&#8217;ML&#8217;,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%init(&#8217;ML&#8217;,info)
&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;SMOOTHER_TYPE&#8217;,&#8217;BJAC&#8217;,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;SMOOTHER_TYPE&#8217;,&#8217;BJAC&#8217;,info)
&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;COARSE_SOLVE&#8217;,&#8217;BJAC&#8217;,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;COARSE_SOLVE&#8217;,&#8217;BJAC&#8217;,info)
&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;COARSE_SWEEPS&#8217;,8,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;COARSE_SWEEPS&#8217;,8,info)
&#x00A0;&#x00A0;call&#x00A0;P%hierarchy_build(A,desc_A,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%hierarchy_build(A,desc_A,info)
&#x00A0;&#x00A0;call&#x00A0;P%smoothers_build(A,desc_A,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%smoothers_build(A,desc_A,info)
...&#x00A0;... &#x00A0;<br />...&#x00A0;...
</pre> </div>
<!--l. 333--><p class="nopar" ></div></div> <!--l. 333--><p class="nopar" ></div></div>
<br /><div class="caption" <br /><div class="caption"
><span class="id">Listing 2: </span><span ><span class="id">Listing 2: </span><span
@@ -324,23 +327,23 @@ class="content">setup of a multilevel preconditioner based on the default decoup
<div class="center" <div class="center"
> >
<!--l. 360--><p class="noindent" > <!--l. 360--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-8"> <div class="minipage"><div class="verbatim" id="verbatim-8">
...&#x00A0;... ...&#x00A0;...
!&#x00A0;build&#x00A0;a&#x00A0;W-cycle&#x00A0;preconditioner&#x00A0;with&#x00A0;2&#x00A0;hybrid&#x00A0;Gauss-Seidel&#x00A0;sweeps &#x00A0;<br />!&#x00A0;build&#x00A0;a&#x00A0;W-cycle&#x00A0;preconditioner&#x00A0;with&#x00A0;2&#x00A0;hybrid&#x00A0;Gauss-Seidel&#x00A0;sweeps
!&#x00A0;as&#x00A0;pre-&#x00A0;and&#x00A0;post-smoother,&#x00A0;a&#x00A0;distributed&#x00A0;coarsest &#x00A0;<br />!&#x00A0;as&#x00A0;pre-&#x00A0;and&#x00A0;post-smoother,&#x00A0;a&#x00A0;distributed&#x00A0;coarsest
!&#x00A0;matrix,&#x00A0;and&#x00A0;MUMPS&#x00A0;as&#x00A0;coarsest-level&#x00A0;solver &#x00A0;<br />!&#x00A0;matrix,&#x00A0;and&#x00A0;MUMPS&#x00A0;as&#x00A0;coarsest-level&#x00A0;solver
&#x00A0;&#x00A0;call&#x00A0;P%init(&#8217;ML&#8217;,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%init(&#8217;ML&#8217;,info)
&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;PAR_AGGR_ALG&#8217;,&#8217;COUPLED&#8217;,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;PAR_AGGR_ALG&#8217;,&#8217;COUPLED&#8217;,info)
call&#x00A0;P%set(&#8217;AGGR_TYPE&#8217;,&#8217;MATCHBOXP&#8217;,info) &#x00A0;<br />call&#x00A0;P%set(&#8217;AGGR_TYPE&#8217;,&#8217;MATCHBOXP&#8217;,info)
call&#x00A0;P%set(&#8217;AGGR_SIZE&#8217;,8,info) &#x00A0;<br />call&#x00A0;P%set(&#8217;AGGR_SIZE&#8217;,8,info)
&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;ML_CYCLE&#8217;,&#8217;WCYCLE&#8217;,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;ML_CYCLE&#8217;,&#8217;WCYCLE&#8217;,info)
&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;SMOOTHER_TYPE&#8217;,&#8217;FBGS&#8217;,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;SMOOTHER_TYPE&#8217;,&#8217;FBGS&#8217;,info)
&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;SMOOTHER_SWEEPS&#8217;,2,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;SMOOTHER_SWEEPS&#8217;,2,info)
&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;COARSE_SOLVE&#8217;,&#8217;KRM&#8217;,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;COARSE_SOLVE&#8217;,&#8217;KRM&#8217;,info)
&#x00A0;&#x00A0;call&#x00A0;P%hierarchy_build(A,desc_A,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%hierarchy_build(A,desc_A,info)
&#x00A0;&#x00A0;call&#x00A0;P%smoothers_build(A,desc_A,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%smoothers_build(A,desc_A,info)
...&#x00A0;... &#x00A0;<br />...&#x00A0;...
</pre> </div>
<!--l. 379--><p class="nopar" ></div></div> <!--l. 379--><p class="nopar" ></div></div>
<br /> <div class="caption" <br /> <div class="caption"
><span class="id">Listing 3: </span><span ><span class="id">Listing 3: </span><span
@@ -362,16 +365,16 @@ weighted matching</span></div><!--tex4ht:label?: x15-14003r3 -->
<div class="center" <div class="center"
> >
<!--l. 398--><p class="noindent" > <!--l. 398--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-9"> <div class="minipage"><div class="verbatim" id="verbatim-9">
...&#x00A0;... ...&#x00A0;...
!&#x00A0;set&#x00A0;RAS&#x00A0;with&#x00A0;overlap&#x00A0;2&#x00A0;and&#x00A0;ILU(0)&#x00A0;on&#x00A0;the&#x00A0;local&#x00A0;blocks &#x00A0;<br />!&#x00A0;set&#x00A0;RAS&#x00A0;with&#x00A0;overlap&#x00A0;2&#x00A0;and&#x00A0;ILU(0)&#x00A0;on&#x00A0;the&#x00A0;local&#x00A0;blocks
&#x00A0;&#x00A0;call&#x00A0;P%init(&#8217;AS&#8217;,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%init(&#8217;AS&#8217;,info)
&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;SUB_OVR&#8217;,2,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%set(&#8217;SUB_OVR&#8217;,2,info)
&#x00A0;&#x00A0;call&#x00A0;P%bld(A,desc_A,info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;P%bld(A,desc_A,info)
...&#x00A0;... &#x00A0;<br />...&#x00A0;...
!&#x00A0;solve&#x00A0;Ax=b&#x00A0;with&#x00A0;preconditioned&#x00A0;BiCGSTAB &#x00A0;<br />!&#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) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_krylov(&#8217;BICGSTAB&#8217;,A,P,b,x,tol,desc_A,info)
</pre> </div>
<!--l. 410--><p class="nopar" ></div></div> <!--l. 410--><p class="nopar" ></div></div>
<br /> <div class="caption" <br /> <div class="caption"
><span class="id">Listing 4: </span><span ><span class="id">Listing 4: </span><span
+73 -63
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>GPU example</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -52,23 +52,24 @@ class="cmr-12">variables:</span>
<div class="center" <div class="center"
> >
<!--l. 448--><p class="noindent" > <!--l. 448--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-10"> <div class="minipage"><div class="verbatim" id="verbatim-10">
program&#x00A0;amg_dexample_gpu program&#x00A0;amg_dexample_gpu
&#x00A0;&#x00A0;use&#x00A0;psb_base_mod &#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;psb_base_mod
&#x00A0;&#x00A0;use&#x00A0;amg_prec_mod &#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;amg_prec_mod
&#x00A0;&#x00A0;use&#x00A0;psb_krylov_mod &#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;psb_krylov_mod
&#x00A0;&#x00A0;use&#x00A0;psb_util_mod &#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;psb_util_mod
&#x00A0;&#x00A0;use&#x00A0;psb_gpu_mod &#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;psb_gpu_mod
&#x00A0;&#x00A0;use&#x00A0;data_input &#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;data_input
&#x00A0;&#x00A0;use&#x00A0;amg_d_pde_mod &#x00A0;<br />&#x00A0;&#x00A0;use&#x00A0;amg_d_pde_mod
&#x00A0;&#x00A0;implicit&#x00A0;none &#x00A0;<br />&#x00A0;&#x00A0;implicit&#x00A0;none
&#x00A0;&#x00A0;....... &#x00A0;<br />&#x00A0;&#x00A0;.......
&#x00A0;&#x00A0;!&#x00A0;GPU&#x00A0;variables &#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;GPU&#x00A0;variables
&#x00A0;&#x00A0;type(psb_d_hlg_sparse_mat)&#x00A0;::&#x00A0;agmold &#x00A0;<br />&#x00A0;&#x00A0;type(psb_d_hlg_sparse_mat)&#x00A0;::&#x00A0;agmold
&#x00A0;&#x00A0;type(psb_d_vect_gpu)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;vgmold &#x00A0;<br />&#x00A0;&#x00A0;type(psb_d_vect_gpu)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;vgmold
&#x00A0;&#x00A0;type(psb_i_vect_gpu)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;igmold &#x00A0;<br />&#x00A0;&#x00A0;type(psb_i_vect_gpu)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;igmold
&#x00A0; &#x00A0;<br />
</pre> &#x00A0;<br />&#x00A0;
</div>
<!--l. 467--><p class="nopar" ></div></div> <!--l. 467--><p class="nopar" ></div></div>
<br /> <div class="caption" <br /> <div class="caption"
><span class="id">Listing 5: </span><span ><span class="id">Listing 5: </span><span
@@ -103,19 +104,20 @@ class="cmr-12">guides).</span>
<div class="center" <div class="center"
> >
<!--l. 497--><p class="noindent" > <!--l. 497--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-11"> <div class="minipage"><div class="verbatim" id="verbatim-11">
&#x00A0;&#x00A0;call&#x00A0;psb_init(ctxt) &#x00A0;&#x00A0;call&#x00A0;psb_init(ctxt)
&#x00A0;&#x00A0;call&#x00A0;psb_info(ctxt,iam,np) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_info(ctxt,iam,np)
&#x00A0;&#x00A0;! &#x00A0;<br />&#x00A0;&#x00A0;!
&#x00A0;&#x00A0;!&#x00A0;BEWARE:&#x00A0;if&#x00A0;you&#x00A0;have&#x00A0;NGPUS&#x00A0;&#x00A0;per&#x00A0;node,&#x00A0;the&#x00A0;default&#x00A0;is&#x00A0;to &#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;BEWARE:&#x00A0;if&#x00A0;you&#x00A0;have&#x00A0;NGPUS&#x00A0;&#x00A0;per&#x00A0;node,&#x00A0;the&#x00A0;default&#x00A0;is&#x00A0;to
&#x00A0;&#x00A0;!&#x00A0;attach&#x00A0;to&#x00A0;mod(IAM,NGPUS) &#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;attach&#x00A0;to&#x00A0;mod(IAM,NGPUS)
&#x00A0;&#x00A0;! &#x00A0;<br />&#x00A0;&#x00A0;!
&#x00A0;&#x00A0;call&#x00A0;psb_gpu_init(ictxt) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_gpu_init(ictxt)
&#x00A0;&#x00A0;...... &#x00A0;<br />&#x00A0;&#x00A0;......
&#x00A0;&#x00A0;t1&#x00A0;=&#x00A0;psb_wtime() &#x00A0;<br />&#x00A0;&#x00A0;t1&#x00A0;=&#x00A0;psb_wtime()
&#x00A0;&#x00A0;call&#x00A0;prec%smoothers_build(a,desc_a,info,&#x00A0;amold=agmold,&#x00A0;vmold=vgmold,&#x00A0;imold=igmold) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%smoothers_build(a,desc_a,info,&#x00A0;amold=agmold,&#x00A0;vmold=vgmold,&#x00A0;imold=igmold)
&#x00A0; &#x00A0;<br />
</pre> &#x00A0;<br />&#x00A0;
</div>
<!--l. 512--><p class="nopar" ></div></div> <!--l. 512--><p class="nopar" ></div></div>
<br /> <div class="caption" <br /> <div class="caption"
><span class="id">Listing 6: </span><span ><span class="id">Listing 6: </span><span
@@ -143,31 +145,34 @@ class="cmr-12">GPU environment</span>
<div class="center" <div class="center"
> >
<!--l. 552--><p class="noindent" > <!--l. 553--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-12"> <div class="minipage"><div class="verbatim" id="verbatim-12">
&#x00A0;&#x00A0;call&#x00A0;desc_a%cnv(mold=igmold) &#x00A0;&#x00A0;call&#x00A0;desc_a%cnv(mold=igmold)
&#x00A0;&#x00A0;call&#x00A0;a%cscnv(info,mold=agmold) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;a%cscnv(info,mold=agmold)
&#x00A0;&#x00A0;call&#x00A0;psb_geasb(x,desc_a,info,mold=vgmold) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_geasb(x,desc_a,info,mold=vgmold)
&#x00A0;&#x00A0;call&#x00A0;psb_geasb(b,desc_a,info,mold=vgmold) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_geasb(b,desc_a,info,mold=vgmold)
&#x00A0;&#x00A0;! &#x00A0;<br />
&#x00A0;&#x00A0;!&#x00A0;iterative&#x00A0;method&#x00A0;parameters &#x00A0;<br />&#x00A0;&#x00A0;!
&#x00A0;&#x00A0;! &#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;iterative&#x00A0;method&#x00A0;parameters
&#x00A0;&#x00A0;call&#x00A0;psb_barrier(ctxt) &#x00A0;<br />&#x00A0;&#x00A0;!
&#x00A0;&#x00A0;call&#x00A0;prec%allocate_wrk(info) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_barrier(ctxt)
&#x00A0;&#x00A0;t1&#x00A0;=&#x00A0;psb_wtime() &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%allocate_wrk(info)
&#x00A0;&#x00A0;call&#x00A0;psb_krylov(s_choice%kmethd,a,prec,b,x,s_choice%eps,&amp; &#x00A0;<br />&#x00A0;&#x00A0;t1&#x00A0;=&#x00A0;psb_wtime()
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;desc_a,info,itmax=s_choice%itmax,iter=iter,err=err,itrace=s_choice%itrace,&amp; &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_krylov(s_choice%kmethd,a,prec,b,x,s_choice%eps,&amp;
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;istop=s_choice%istopc,irst=s_choice%irst) &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;desc_a,info,itmax=s_choice%itmax,iter=iter,err=err,itrace=s_choice%itrace,&amp;
&#x00A0;&#x00A0;call&#x00A0;prec%deallocate_wrk(info) &#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&amp;&#x00A0;istop=s_choice%istopc,irst=s_choice%irst)
&#x00A0;&#x00A0;call&#x00A0;psb_barrier(ctxt) &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%deallocate_wrk(info)
&#x00A0;&#x00A0;tslv&#x00A0;=&#x00A0;psb_wtime()&#x00A0;-&#x00A0;t1 &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_barrier(ctxt)
&#x00A0;&#x00A0;...... &#x00A0;<br />&#x00A0;&#x00A0;tslv&#x00A0;=&#x00A0;psb_wtime()&#x00A0;-&#x00A0;t1
&#x00A0;&#x00A0;call&#x00A0;psb_gpu_exit() &#x00A0;<br />
&#x00A0;&#x00A0;call&#x00A0;psb_exit(ctxt) &#x00A0;<br />&#x00A0;&#x00A0;......
&#x00A0;&#x00A0;stop &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_gpu_exit()
&#x00A0; &#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;psb_exit(ctxt)
</pre> &#x00A0;<br />&#x00A0;&#x00A0;stop
<!--l. 579--><p class="nopar" ></div></div> &#x00A0;<br />
&#x00A0;<br />&#x00A0;
</div>
<!--l. 580--><p class="nopar" ></div></div>
<br /> <div class="caption" <br /> <div class="caption"
><span class="id">Listing 7: </span><span ><span class="id">Listing 7: </span><span
class="content">setup of a GPU-enabled test program part three.</span></div><!--tex4ht:label?: x16-15003r7 --> class="content">setup of a GPU-enabled test program part three.</span></div><!--tex4ht:label?: x16-15003r7 -->
@@ -175,25 +180,30 @@ class="content">setup of a GPU-enabled test program part three.</span></div><!--
</div><hr class="endfloat" /> </div><hr class="endfloat" />
<!--l. 587--><p class="indent" > <span <!--l. 588--><p class="indent" > <span
class="cmr-12">It is very important to employ solvers that are suited to the GPU, i.e. solvers that</span> class="cmr-12">It is very important to employ smoothers and coarsest solvers that are suited to the</span>
<span <span
class="cmr-12">do NOT employ triangular system solve kernels. Solvers that satisfy this constraint</span> class="cmr-12">GPU, i.e. methods that do NOT employ triangular system solve kernels. Methods that</span>
<span <span
class="cmr-12">include:</span> class="cmr-12">satisfy this constraint include:</span>
<ul class="itemize1"> <ul class="itemize1">
<li class="itemize"><span class="obeylines-h"><span class="verb"><span <li class="itemize"><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">JACOBI</span></span></span> class="cmtt-12">JACOBI</span></span></span>
</li> </li>
<li class="itemize"><span class="obeylines-h"><span class="verb"><span <li class="itemize"><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">BJAC</span></span></span> <span
class="cmr-12">with the following methods on the local blocks:</span>
<ul class="itemize2">
<li class="itemize"><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">INVK</span></span></span> class="cmtt-12">INVK</span></span></span>
</li> </li>
<li class="itemize"><span class="obeylines-h"><span class="verb"><span <li class="itemize"><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">INVT</span></span></span> class="cmtt-12">INVT</span></span></span>
</li> </li>
<li class="itemize"><span class="obeylines-h"><span class="verb"><span <li class="itemize"><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">AINV</span></span></span></li></ul> class="cmtt-12">AINV</span></span></span></li></ul>
<!--l. 596--><p class="noindent" ><span </li></ul>
<!--l. 600--><p class="noindent" ><span
class="cmr-12">and their </span><span class="cmr-12">and their </span><span
class="cmmi-12">&#x2113;</span><sub><span class="cmmi-12">&#x2113;</span><sub><span
class="cmr-8">1</span></sub> <span class="cmr-8">1</span></sub> <span
+17 -17
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Method init</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 (http://www.tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (http://www.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">
@@ -54,9 +54,9 @@ cellspacing="0" cellpadding="0"
><colgroup id="TBL-2-1g"><col ><colgroup id="TBL-2-1g"><col
id="TBL-2-1"><col id="TBL-2-1"><col
id="TBL-2-2"></colgroup><tr 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" style="vertical-align:baseline;" id="TBL-2-1-"><td style="white-space:wrap; text-align:left;" id="TBL-2-1-1"
class="td11"><!--l. 56--><p class="noindent" ><span class="lstinline"></span><span 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="cmtt-12">contxt</span> </td> <td style="white-space:wrap; text-align:left;" id="TBL-2-1-2"
class="td11"><!--l. 56--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 56--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span class="cmtt-12">type</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -69,13 +69,13 @@ 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
style="vertical-align:baseline;" id="TBL-2-2-"><td style="white-space:normal; text-align:left;" id="TBL-2-2-1" style="vertical-align:baseline;" id="TBL-2-2-"><td style="white-space:wrap; 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" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-2-2"
class="td11"><!--l. 57--><p class="noindent" ><span class="td11"><!--l. 57--><p class="noindent" ><span
class="cmr-12">The communication context.</span> </td></tr><tr 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" style="vertical-align:baseline;" id="TBL-2-3-"><td style="white-space:wrap; text-align:left;" id="TBL-2-3-1"
class="td11"><!--l. 58--><p class="noindent" ><span class="lstinline"></span><span 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="cmtt-12">ptype</span> </td> <td style="white-space:wrap; text-align:left;" id="TBL-2-3-2"
class="td11"><!--l. 58--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 58--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">character</span><span class="cmtt-12">character</span><span
class="cmtt-12">(</span><span class="cmtt-12">(</span><span
@@ -88,8 +88,8 @@ 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
style="vertical-align:baseline;" id="TBL-2-4-"><td style="white-space:normal; text-align:left;" id="TBL-2-4-1" style="vertical-align:baseline;" id="TBL-2-4-"><td style="white-space:wrap; 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" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-4-2"
class="td11"><!--l. 59--><p class="noindent" ><span 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">The type of preconditioner. Its values are specified in Table</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
@@ -97,14 +97,14 @@ href="userhtmlse4.html#x14-13015r1"><span
class="cmr-12">1</span><!--tex4ht:ref: tab:precinit --></a><span class="cmr-12">1</span><!--tex4ht:ref: tab:precinit --></a><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-2-5-"><td style="white-space:normal; text-align:left;" id="TBL-2-5-1" style="vertical-align:baseline;" id="TBL-2-5-"><td style="white-space:wrap; 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" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-5-2"
class="td11"><!--l. 61--><p class="noindent" ><span class="td11"><!--l. 61--><p class="noindent" ><span
class="cmr-12">Note that strings are case insensitive.</span> </td> class="cmr-12">Note that strings are case insensitive.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-2-6-"><td style="white-space:normal; text-align:left;" id="TBL-2-6-1" style="vertical-align:baseline;" id="TBL-2-6-"><td style="white-space:wrap; text-align:left;" id="TBL-2-6-1"
class="td11"><!--l. 62--><p class="noindent" ><span class="lstinline"></span><span 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="cmtt-12">info</span> </td><td style="white-space:wrap; text-align:left;" id="TBL-2-6-2"
class="td11"><!--l. 62--><p class="noindent" ><span class="lstinline"></span><span class="td11"><!--l. 62--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span class="cmtt-12">,</span><span
@@ -115,8 +115,8 @@ 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
style="vertical-align:baseline;" id="TBL-2-7-"><td style="white-space:normal; text-align:left;" id="TBL-2-7-1" style="vertical-align:baseline;" id="TBL-2-7-"><td style="white-space:wrap; 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" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-7-2"
class="td11"><!--l. 63--><p class="noindent" ><span 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">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
@@ -124,7 +124,7 @@ 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
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:wrap; text-align:left;" id="TBL-2-8-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
+261 -261
View File
File diff suppressed because it is too large Load Diff
+5 -4
View File
@@ -190,22 +190,23 @@ make install
\subsection{Bug reporting} \subsection{Bug reporting}
If you find any bugs in our codes, please report them through our If you find any bugs in our codes, please report them through our
issues page on \\[2mm] issues page on \\[2mm]
\url{https://github.com/psctoolkit/amg4psblas/issues}\\ \url{https://github.com/psctoolkit/psctoolkit/issues}\\
To enable us to track the bug, please provide a log from the failing To enable us to track the bug, please provide a log from the failing
application, the test conditions, and ideally a self-contained test application, the test conditions, and ideally a self-contained test
program reproducing the issue. program reproducing the issue.
\subsection{Example and test programs\label{sec:ex_and_test}} \subsection{Example and test programs\label{sec:ex_and_test}}
The package contains the \verb|examples| and \verb|tests| directories; The package contains a \verb|samples| directory, divided in two
subdirs \verb|simple| and \verb|advanced|;
both of them are further divided into \verb|fileread| and both of them are further divided into \verb|fileread| and
\verb|pdegen| subdirectories. Their purpose is as follows: \verb|pdegen| subdirectories. Their purpose is as follows:
\begin{description} \begin{description}
\item[\tt examples] contains a set of simple example programs with a \item[\tt simple] contains a set of simple example programs with a
predefined choice of preconditioners, selectable via integer predefined choice of preconditioners, selectable via integer
values. These are intended to get acquainted with the values. These are intended to get acquainted with the
multilevel preconditioners available in AMG4PSBLAS. multilevel preconditioners available in AMG4PSBLAS.
\item[\tt tests] contains a set of more sophisticated examples that \item[\tt advanced] contains a set of more sophisticated examples that
will allow the user, via the input files in the \verb|runs| will allow the user, via the input files in the \verb|runs|
subdirectories, to experiment with the full range of preconditioners subdirectories, to experiment with the full range of preconditioners
implemented in the package. implemented in the package.
+1 -1
View File
@@ -159,4 +159,4 @@ Some influential environment variables:
Use these variables to override the choices made by `configure' or to help Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations. it to find libraries and programs with nonstandard names/locations.
Report bugs to <https://github.com/sfilippone/amg4psblas/issues>. Report bugs to <https://github.com/psctoolkit/psctoolkit/issues>.
+12 -8
View File
@@ -129,9 +129,9 @@ relevant data structures, performed
through the PSBLAS routines for sparse matrix and vector management, is not reported through the PSBLAS routines for sparse matrix and vector management, is not reported
here for the sake of conciseness. here for the sake of conciseness.
The complete code can be found in the example program file \verb|amg_dexample_ml.f90|, The complete code can be found in the example program file \verb|amg_dexample_ml.f90|,
in the directory \verb|examples/fileread| of the AMG4PSBLAS implementation (see in the directory \verb|samples/simple/file|\-\verb|read| of the AMG4PSBLAS implementation (see
Section~\ref{sec:ex_and_test}). A sample test problem along with the relevant Section~\ref{sec:ex_and_test}). A sample test problem along with the relevant
input data is available in \verb|examples/fileread/runs|. input data is available in \verb|samples/simple/fileread/runs|.
For details on the use of the PSBLAS routines, see the PSBLAS User's For details on the use of the PSBLAS routines, see the PSBLAS User's
Guide~\cite{PSBLASGUIDE}. Guide~\cite{PSBLASGUIDE}.
@@ -139,7 +139,7 @@ The setup and application of the default multilevel preconditioner
for the real single precision and the complex, single and double for the real single precision and the complex, single and double
precision, versions are obtained with straightforward modifications of the previous precision, versions are obtained with straightforward modifications of the previous
example (see Section~\ref{sec:userinterface} for details). If these versions are installed, example (see Section~\ref{sec:userinterface} for details). If these versions are installed,
the corresponding codes are available in \verb|examples/fileread/|. the corresponding codes are available in \verb|samples/simple/file|\-\verb|read|.
\begin{listing}[tbp] \begin{listing}[tbp]
\begin{center} \begin{center}
@@ -300,7 +300,7 @@ The corresponding example program is available in the file
For all the previous preconditioners, example programs where the sparse matrix and For all the previous preconditioners, example programs where the sparse matrix and
the right-hand side are generated by discretizing a PDE with Dirichlet the right-hand side are generated by discretizing a PDE with Dirichlet
boundary conditions are also available in the directory \verb|examples/pdegen|. boundary conditions are also available in the directory \verb|samples/simple/pdegen|.
\vspace{-1em}\begin{listing}[tbh] \vspace{-1em}\begin{listing}[tbh]
\ifpdf% \ifpdf%
\begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran} \begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran}
@@ -535,7 +535,8 @@ Krylov method. At the end of the code, we close the GPU environment
call prec%allocate_wrk(info) call prec%allocate_wrk(info)
t1 = psb_wtime() t1 = psb_wtime()
call psb_krylov(s_choice%kmethd,a,prec,b,x,s_choice%eps,& call psb_krylov(s_choice%kmethd,a,prec,b,x,s_choice%eps,&
& desc_a,info,itmax=s_choice%itmax,iter=iter,err=err,itrace=s_choice%itrace,& & desc_a,info,itmax=s_choice%itmax,iter=iter,err=err,&
& itrace=s_choice%itrace,&
& istop=s_choice%istopc,irst=s_choice%irst) & istop=s_choice%istopc,irst=s_choice%irst)
call prec%deallocate_wrk(info) call prec%deallocate_wrk(info)
call psb_barrier(ctxt) call psb_barrier(ctxt)
@@ -584,15 +585,18 @@ Krylov method. At the end of the code, we close the GPU environment
\caption{setup of a GPU-enabled test program part three.\label{fig:gpu-ex3}} \caption{setup of a GPU-enabled test program part three.\label{fig:gpu-ex3}}
\end{listing} \end{listing}
It is very important to employ solvers that are suited It is very important to employ smoothers and coarsest solvers that are suited
to the GPU, i.e. solvers that do NOT employ triangular to the GPU, i.e. methods that do NOT employ triangular
system solve kernels. Solvers that satisfy this constraint include: system solve kernels. Methods that satisfy this constraint include:
\begin{itemize} \begin{itemize}
\item \verb|JACOBI| \item \verb|JACOBI|
\item \verb|BJAC| with the following methods on the local blocks:
\begin{itemize}
\item \verb|INVK| \item \verb|INVK|
\item \verb|INVT| \item \verb|INVT|
\item \verb|AINV| \item \verb|AINV|
\end{itemize} \end{itemize}
\end{itemize}
and their $\ell_1$ variants. and their $\ell_1$ variants.
%%% Local Variables: %%% Local Variables:
+19 -20
View File
@@ -39,23 +39,18 @@
! !
! This sample program solves a linear system obtained by discretizing a ! This sample program solves a linear system obtained by discretizing a
! PDE with Dirichlet BCs. The solver is CG, coupled with one of the ! PDE with Dirichlet BCs. The solver is CG, coupled with one of the
! following multi-level preconditioner, as explained in Section 4.1 of ! following multi-level preconditioner, as explained in Section 4.2 of
! the AMG4PSBLAS User's and Reference Guide: ! the AMG4PSBLAS User's and Reference Guide:
! !
! - choice = 1, the default multi-level preconditioner solver, i.e., ! - choice = 1, a V-cycle with decoupled smoothed aggregation, 4 Jacobi
! V-cycle with decoupled smoothed aggregation, 1 hybrid forward/backward ! sweeps as pre/post-smoother and 8 Jacobi sweeps as coarsest-level
! GS sweep as pre/post-smoother and UMFPACK as coarsest-level ! solver with replicated coarsest matrix
! solver (Sec. 4.1, Listing 1)
! !
! - choice = 2, a V-cycle preconditioner with 1 block-Jacobi sweep ! - choice = 2, a W-cycle based on the coupled aggregation relying on matching,
! (with ILU(0) on the blocks) as pre- and post-smoother, and 8 block-Jacobi ! with maximum size of aggregates equal to 8 and smoothed prolongators,
! sweeps (with ILU(0) on the blocks) as coarsest-level solver (Sec. 4.1, Listing 2) ! 2 sweeps of Block-Jacobi ipre/post-smoother using approximate inverse INVK and
! ! 4 sweeps of Block-Jacobi with INVK as coarsest-level solver on distributed
! - choice = 3, W-cycle preconditioner based on the coupled aggregation relying ! coarsest matrix
! on matching, with maximum size of aggregates equal to 8 and smoothed prolongators,
! 2 hybrid forward/backward GS sweeps as pre/post-smoother, a distributed coarsest
! matrix, and preconditioned Flexible Conjugate Gradient as coarsest-level solver
! (Sec. 4.1, Listing 3)
! !
! The matrix and the rhs are read from files (if an rhs is not available, the ! The matrix and the rhs are read from files (if an rhs is not available, the
! unit rhs is set). ! unit rhs is set).
@@ -183,8 +178,9 @@ program amg_dexample_gpu
case(1) case(1)
! initialize a V-cycle preconditioner with 4 Jacobi sweep ! initialize a V-cycle preconditioner, relying on decoupled smoothed aggregation
! and 8 Jacobi sweeps as coarsest-level solver ! with 4 Jacobi sweeps as pre/post-smoother
! and 8 Jacobi sweeps as coarsest-level solver on replicated coarsest matrix
call P%init(ctxt,'ML',info) call P%init(ctxt,'ML',info)
call P%set('SMOOTHER_TYPE','JACOBI',info) call P%set('SMOOTHER_TYPE','JACOBI',info)
@@ -195,19 +191,22 @@ program amg_dexample_gpu
case(2) case(2)
! initialize a V-cycle preconditioner based on the coupled aggregation relying on matching, ! initialize a W-cycle preconditioner based on the coupled aggregation relying on matching,
! with maximum size of aggregates equal to 8 and smoothed prolongators, ! with maximum size of aggregates equal to 8 and smoothed prolongators,
! Block-Jacobi smoother using approximate inverse INVK and ! 2 sweeps of Block-Jacobi pre/post-smoother using approximate inverse INVK and
! and 4 sweeps of INVK on he coarsest level ! 4 sweeps of Block-Jacobi with INVK on the coarsest level distributed matrix
call P%init(ctxt,'ML',info) call P%init(ctxt,'ML',info)
call P%set('PAR_AGGR_ALG','COUPLED',info) call P%set('PAR_AGGR_ALG','COUPLED',info)
call P%set('AGGR_TYPE','MATCHBOXP',info) call P%set('AGGR_TYPE','MATCHBOXP',info)
call P%set('AGGR_SIZE',8,info) call P%set('AGGR_SIZE',8,info)
call P%set('ML_CYCLE','WCYCLE',info) call P%set('ML_CYCLE','WCYCLE',info)
call P%set('SMOOTHER_TYPE','BJAC',info)
call P%set('SMOOTHER_SWEEPS',2,info) call P%set('SMOOTHER_SWEEPS',2,info)
call P%set('SUB_SOLVE','INVK',info) call P%set('SUB_SOLVE','INVK',info)
call P%set('COARSE_SOLVE','INVK',info) call P%set('COARSE_SOLVE','BJAC',info)
call P%set('COARSE_SUBSOLVE','INVK',info)
call P%set('COARSE_SWEEPS',4,info)
call P%set('COARSE_MAT','DIST',info) call P%set('COARSE_MAT','DIST',info)
kmethod = 'CG' kmethod = 'CG'
+7 -7
View File
@@ -1,14 +1,14 @@
! !
! !
! MLD2P4 version 2.2 ! AMG4PSBLAS version 1.0
! MultiLevel Domain Decomposition Parallel Preconditioners Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.5) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2008-2018 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Daniela di Serafino ! 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
@@ -18,14 +18,14 @@
! 2. Redistributions in binary form must reproduce the above copyright ! 2. Redistributions in binary form must reproduce the above copyright
! notice, this list of conditions, and the following disclaimer in the ! notice, this list of conditions, and the following disclaimer in the
! documentation and/or other materials provided with the distribution. ! documentation and/or other materials provided with the distribution.
! 3. The name of the MLD2P4 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
! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS ! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AMG4PSBLAS GROUP OR ITS CONTRIBUTORS
! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
@@ -64,7 +64,7 @@ contains
b3=done/sqrt(3.0_psb_dpk_) b3=done/sqrt(3.0_psb_dpk_)
end function b3 end function b3
function c(x,y,z) function c(x,y,z)
use psb_base_mod, only : psb_dpk_, done use psb_base_mod, only : psb_dpk_, dzero, done
real(psb_dpk_) :: c real(psb_dpk_) :: c
real(psb_dpk_), intent(in) :: x,y,z real(psb_dpk_), intent(in) :: x,y,z
c=dzero c=dzero
@@ -64,7 +64,7 @@ contains
b3=sone/sqrt(3.0_psb_spk_) b3=sone/sqrt(3.0_psb_spk_)
end function b3 end function b3
function c(x,y,z) function c(x,y,z)
use psb_base_mod, only : psb_spk_, sone use psb_base_mod, only : psb_spk_, szero, sone
real(psb_spk_) :: c real(psb_spk_) :: c
real(psb_spk_), intent(in) :: x,y,z real(psb_spk_), intent(in) :: x,y,z
c=szero c=szero
+7 -7
View File
@@ -1,14 +1,14 @@
! !
! !
! MLD2P4 version 2.2 ! AMG4PSBLAS version 1.0
! MultiLevel Domain Decomposition Parallel Preconditioners Package ! Algebraic Multigrid Package
! based on PSBLAS (Parallel Sparse BLAS version 3.5) ! based on PSBLAS (Parallel Sparse BLAS version 3.7)
! !
! (C) Copyright 2008-2018 ! (C) Copyright 2021
! !
! Salvatore Filippone ! Salvatore Filippone
! Pasqua D'Ambra ! Pasqua D'Ambra
! Daniela di Serafino ! 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
@@ -18,14 +18,14 @@
! 2. Redistributions in binary form must reproduce the above copyright ! 2. Redistributions in binary form must reproduce the above copyright
! notice, this list of conditions, and the following disclaimer in the ! notice, this list of conditions, and the following disclaimer in the
! documentation and/or other materials provided with the distribution. ! documentation and/or other materials provided with the distribution.
! 3. The name of the MLD2P4 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
! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS ! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AMG4PSBLAS GROUP OR ITS CONTRIBUTORS
! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+59
View File
@@ -0,0 +1,59 @@
MLDDIR=../..
MLDINCDIR=$(MLDDIR)/include
include $(MLDINCDIR)/Make.inc.amg4psblas
MLDMODDIR=$(MLDDIR)/modules
MLDLIBDIR=$(MLDDIR)/lib
MLD_LIBS=-L$(MLDLIBDIR) -lpsb_krylov -lmld_prec -lpsb_prec
FINCLUDES=$(FMFLAG). $(FMFLAG)$(MLDMODDIR) $(FMFLAG)$(MLDINCDIR) $(PSBLAS_INCLUDES) $(FIFLAG).
HSL_DIR=/opt/hsl/2.3.1/gnu/6.4.0
HSL_INCDIR=$(HSL_DIR)/include
HSL_LIBDIR=$(HSL_DIR)/lib
HSL_LIBS=-lhsl_mc64 -L$(HSL_LIBDIR)
HSL_FLAGS= -DHAVE_HSL -I$(HSL_INCDIR)
# SPRAL package for auction algorithm
SPRAL_DIR=/opt/spral/2015.04.20/gnu/6.4.0
SPRAL_INCDIR=$(SPRAL_DIR)/include
SPRAL_LIBDIR=$(SPRAL_DIR)/lib
SPRAL_LIBS=-lspral -L$(SPRAL_LIBDIR)
SPRAL_FLAGS=-DHAVE_SPRAL -I$(SPRAL_INCDIR)
BCM_DIR=/opt/bcm/0.9/gnu/6.4.0
BCM_INCDIR=$(BCM_DIR)/include
BCM_LIBDIR=$(BCM_DIR)/lib
BCM_LDLIBS=-lBCM -L$(BCM_LIBDIR) $(HSL_LIBS) $(SPRAL_LIBS)
CDEFINES=$(MLDCDEFINES) -I$(BCM_INCDIR)
LINKOPT=
EXEDIR=./runs
all: mld_d_pde3d
BCMOBJS= mld_d_bcmatch_aggregator_mod.o mld_d_bcmatch_aggregator_mat_asb.o \
mld_d_bcmatch_aggregator_tprol.o mld_d_bcmatch_map_to_tprol.o \
mld_daggrmat_unsmth_spmm_asb.o bootCMatch_interface.o
mld_d_pde3d: mld_d_pde3d.o data_input.o $(BCMOBJS)
$(FLINK) $(LINKOPT) mld_d_pde3d.o data_input.o $(BCMOBJS) -o mld_d_pde3d $(MLD_LIBS) $(BCM_LDLIBS) $(PSBLAS_LIBS) $(LDLIBS)
/bin/mv mld_d_pde3d $(EXEDIR)
mld_d_pde3d.o: data_input.o mld_d_bcmatch_aggregator_mod.o
mld_d_bcmatch_aggregator_mat_asb.o mld_d_bcmatch_aggregator_tprol.o mld_d_bcmatch_map_to_tprol.o: mld_d_bcmatch_aggregator_mod.o
check: all
cd runs && ./mld_d_pde2d <mld_pde2d.inp && ./mld_s_pde2d<mld_pde2d.inp
clean:
/bin/rm -f data_input.o mld_d_pde3d.o *$(.mod) $(BCMOBJS)\
$(EXEDIR)/mld_d_pde3d
verycleanlib:
(cd ../..; make veryclean)
lib:
(cd ../../; make library)
+3
View File
@@ -0,0 +1,3 @@
This directory contains an experimental interface to the BootCMatch
aggregator. It may also serve as an example of how to introduce a new
aggregation procedure.

Some files were not shown because too many files have changed in this diff Show More