mirror of
https://github.com/sfilippone/amg4psblas.git
synced 2026-10-20 21:02:35 +00:00
Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2542c0fda4 | ||
|
|
8482067b52 | ||
|
|
7319dab30f | ||
|
|
4bbba3ebd7 | ||
|
|
988021ff24 | ||
|
|
4e177ce926 | ||
|
|
1fa94d0372 | ||
|
|
0fcbdd74cd | ||
|
|
ba854379e4 | ||
|
|
a6cbd64e65 | ||
|
|
5c589dbf30 | ||
|
|
10e9c53e54 | ||
|
|
9b9dfbd198 | ||
|
|
941ca6568a | ||
|
|
4bf009a1ab |
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
@@ -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
@@ -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;}
|
||||||
|
|||||||
@@ -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 |
@@ -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">
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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
@@ -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,
|
||||||
       author = {D’Ambra, Pasqua and Durastante, Fabio and Filippone, Salvatore},
|
 <br />       author = {D’Ambra, Pasqua and Durastante, Fabio and Filippone, Salvatore},
|
||||||
       title = {{{AMG Preconditioners for Linear Solvers towards Extreme Scale}},
|
 <br />       title = {{{AMG Preconditioners for Linear Solvers towards Extreme Scale}},
|
||||||
       journal = {arXiv e-preprints},
|
 <br />       journal = {arXiv e-preprints},
|
||||||
       eprint = {2006.16147v3},
|
 <br />       eprint = {2006.16147v3},
|
||||||
       archivePrefix = {arXiv},
|
 <br />       archivePrefix = {arXiv},
|
||||||
       year={2021}
|
 <br />       year={2021}
|
||||||
     }
|
 <br />     }
|
||||||
@Misc{psctoolkit-web-page,
|
 <br />
|
||||||
       author = {D’Ambra, Pasqua and Durastante, Fabio and Filippone, Salvatore},
|
 <br />@Misc{psctoolkit-web-page,
|
||||||
       title =  {{PSCToolkit} {W}eb page},
|
 <br />       author = {D’Ambra, Pasqua and Durastante, Fabio and Filippone, Salvatore},
|
||||||
       url =    {https://psctoolkit.github.io/},
|
 <br />       title =  {{PSCToolkit} {W}eb page},
|
||||||
       howpublished = {\url{https://psctoolkit.github.io/}},
|
 <br />       url =    {https://psctoolkit.github.io/},
|
||||||
       year = {2021}
|
 <br />       howpublished = {\url{https://psctoolkit.github.io/}},
|
||||||
     }
|
 <br />       year = {2021}
|
||||||
</pre>
|
 <br />     }
|
||||||
|
</div>
|
||||||
<!--l. 70--><p class="nopar" >
|
<!--l. 70--><p class="nopar" >
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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
@@ -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">’</span><span
|
class="cmtt-10x-x-109">’</span><span
|
||||||
class="cmtt-10x-x-109">NONE</span><span
|
class="cmtt-10x-x-109">NONE</span><span
|
||||||
class="cmtt-10x-x-109">’</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-2-3"
|
class="cmtt-10x-x-109">’</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">’</span><span
|
class="cmtt-10x-x-109">’</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">’</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">’</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-3-3"
|
class="cmtt-10x-x-109">’</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 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">’</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
|
||||||
@@ -319,14 +319,14 @@ class="cmtt-10x-x-109">’</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">’</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-4-3"
|
class="cmtt-10x-x-109">’</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">’</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
|
||||||
@@ -336,14 +336,14 @@ class="cmtt-10x-x-109">’</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">’</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-5-3"
|
class="cmtt-10x-x-109">’</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">’</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
|
||||||
@@ -353,27 +353,27 @@ class="cmtt-10x-x-109">’</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">’</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-6-3"
|
class="cmtt-10x-x-109">’</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">’</span><span
|
class="cmtt-10x-x-109">’</span><span
|
||||||
class="cmtt-10x-x-109">AS</span><span
|
class="cmtt-10x-x-109">AS</span><span
|
||||||
class="cmtt-10x-x-109">’</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-7-3"
|
class="cmtt-10x-x-109">’</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 1
|
class="td11"><!--l. 81--><p class="noindent" >Additive Schwarz (AS), with overlap 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">’</span><span
|
class="cmtt-10x-x-109">’</span><span
|
||||||
class="cmtt-10x-x-109">ML</span><span
|
class="cmtt-10x-x-109">ML</span><span
|
||||||
class="cmtt-10x-x-109">’</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-8-3"
|
class="cmtt-10x-x-109">’</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
|
||||||
|
|||||||
@@ -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
@@ -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">
|
||||||
  ! sparse matrix and preconditioner
|
 <br />  ! sparse matrix and preconditioner
|
||||||
  type(psb_dspmat_type) :: a
|
 <br />  type(psb_dspmat_type) :: a
|
||||||
  type(amg_dprec_type)  :: prec
|
 <br />  type(amg_dprec_type)  :: prec
|
||||||
  type(amg_d_tlu_solver_type) :: tlusv
|
 <br />  type(amg_d_tlu_solver_type) :: tlusv
|
||||||
......
|
 <br />
|
||||||
  !
|
 <br />......
|
||||||
  !  prepare the preconditioner: an ML with defaults, but with TLU solver at
|
 <br />  !
|
||||||
  !  intermediate levels. All other parameters are at default values.
|
 <br />  !  prepare the preconditioner: an ML with defaults, but with TLU solver at
|
||||||
  !
|
 <br />  !  intermediate levels. All other parameters are at default values.
|
||||||
  call prec%init(’ML’,       info)
|
 <br />  !
|
||||||
  call prec%hierarchy_build(a,desc_a,info)
|
 <br />  call prec%init(’ML’,       info)
|
||||||
  nlv = prec%get_nlevs()
|
 <br />  call prec%hierarchy_build(a,desc_a,info)
|
||||||
  call prec%set(tlusv,   info,ilev=1,ilmax=max(1,nlv-1))
|
 <br />  nlv = prec%get_nlevs()
|
||||||
  call prec%smoothers_build(a,desc_a,info)
|
 <br />  call prec%set(tlusv,   info,ilev=1,ilmax=max(1,nlv-1))
|
||||||
</pre>
|
 <br />  call prec%smoothers_build(a,desc_a,info)
|
||||||
|
 <br />
|
||||||
|
</div>
|
||||||
<!--l. 107--><p class="nopar" >
|
<!--l. 107--><p class="nopar" >
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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">
|
||||||
                           AMG4PSBLAS  version 1.0
|
 <br />                           AMG4PSBLAS  version 1.0
|
||||||
              Algebraic MultiGrid Preconditioners Package
|
 <br />              Algebraic MultiGrid Preconditioners Package
|
||||||
             based on PSBLAS (Parallel Sparse BLAS version 3.7)
|
 <br />             based on PSBLAS (Parallel Sparse BLAS version 3.7)
|
||||||
  (C) Copyright 2021
|
 <br />
|
||||||
  Pasqua D’Ambra         IAC-CNR, IT
|
 <br />  (C) Copyright 2021
|
||||||
  Fabio Durastante       University of Pisa and IAC-CNR, IT
|
 <br />
|
||||||
  Salvatore Filippone    University of Rome Tor-Vergata and IAC-CNR, IT
|
 <br />  Pasqua D’Ambra         IAC-CNR, IT
|
||||||
  Redistribution and use in source and binary forms, with or without
|
 <br />  Fabio Durastante       University of Pisa and IAC-CNR, IT
|
||||||
  modification, are permitted provided that the following conditions
|
 <br />  Salvatore Filippone    University of Rome Tor-Vergata and IAC-CNR, IT
|
||||||
  are met:
|
 <br />
|
||||||
    1. Redistributions of source code must retain the above copyright
|
 <br />  Redistribution and use in source and binary forms, with or without
|
||||||
       notice, this list of conditions and the following disclaimer.
|
 <br />  modification, are permitted provided that the following conditions
|
||||||
    2. Redistributions in binary form must reproduce the above copyright
|
 <br />  are met:
|
||||||
       notice, this list of conditions, and the following disclaimer in the
|
 <br />    1. Redistributions of source code must retain the above copyright
|
||||||
       documentation and/or other materials provided with the distribution.
|
 <br />       notice, this list of conditions and the following disclaimer.
|
||||||
    3. The name of the MLD2P4 group or the names of its contributors may
|
 <br />    2. Redistributions in binary form must reproduce the above copyright
|
||||||
       not be used to endorse or promote products derived from this
|
 <br />       notice, this list of conditions, and the following disclaimer in the
|
||||||
       software without specific written permission.
|
 <br />       documentation and/or other materials provided with the distribution.
|
||||||
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
 <br />    3. The name of the MLD2P4 group or the names of its contributors may
|
||||||
  ‘‘AS IS’’ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
 <br />       not be used to endorse or promote products derived from this
|
||||||
  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
 <br />       software without specific written permission.
|
||||||
  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
|
 <br />
|
||||||
  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
 <br />  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
 <br />  ‘‘AS IS’’ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
 <br />  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
 <br />  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
|
||||||
  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
 <br />  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
 <br />  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
  POSSIBILITY OF SUCH DAMAGE.
|
 <br />  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
</pre>
|
 <br />  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
 <br />  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
 <br />  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
 <br />  POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
 <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">
|
||||||
                           MLD2P4  version 2.2
|
 <br />
|
||||||
  MultiLevel Domain Decomposition Parallel Preconditioners Package
|
 <br />                           MLD2P4  version 2.2
|
||||||
             based on PSBLAS (Parallel Sparse BLAS version 3.5)
|
 <br />  MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||||
  (C) Copyright 2008-2018
|
 <br />             based on PSBLAS (Parallel Sparse BLAS version 3.5)
|
||||||
      Salvatore Filippone
|
 <br />
|
||||||
      Pasqua D’Ambra
|
 <br />  (C) Copyright 2008-2018
|
||||||
      Daniela di Serafino
|
 <br />
|
||||||
  Redistribution and use in source and binary forms, with or without
|
 <br />      Salvatore Filippone
|
||||||
  modification, are permitted provided that the following conditions
|
 <br />      Pasqua D’Ambra
|
||||||
  are met:
|
 <br />      Daniela di Serafino
|
||||||
    1. Redistributions of source code must retain the above copyright
|
 <br />
|
||||||
       notice, this list of conditions and the following disclaimer.
|
 <br />
|
||||||
    2. Redistributions in binary form must reproduce the above copyright
|
 <br />  Redistribution and use in source and binary forms, with or without
|
||||||
       notice, this list of conditions, and the following disclaimer in the
|
 <br />  modification, are permitted provided that the following conditions
|
||||||
       documentation and/or other materials provided with the distribution.
|
 <br />  are met:
|
||||||
    3. The name of the MLD2P4 group or the names of its contributors may
|
 <br />    1. Redistributions of source code must retain the above copyright
|
||||||
       not be used to endorse or promote products derived from this
|
 <br />       notice, this list of conditions and the following disclaimer.
|
||||||
       software without specific written permission.
|
 <br />    2. Redistributions in binary form must reproduce the above copyright
|
||||||
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
 <br />       notice, this list of conditions, and the following disclaimer in the
|
||||||
  ‘‘AS IS’’ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
 <br />       documentation and/or other materials provided with the distribution.
|
||||||
  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
 <br />    3. The name of the MLD2P4 group or the names of its contributors may
|
||||||
  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
|
 <br />       not be used to endorse or promote products derived from this
|
||||||
  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
 <br />       software without specific written permission.
|
||||||
  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
 <br />
|
||||||
  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
 <br />  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
 <br />  ‘‘AS IS’’ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
 <br />  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
 <br />  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
|
||||||
  POSSIBILITY OF SUCH DAMAGE.
|
 <br />  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
</pre>
|
 <br />  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
 <br />  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
 <br />  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
 <br />  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
 <br />  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
 <br />  POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
 <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">
|
||||||
// ***********************************************************************
|
// ***********************************************************************
|
||||||
//
|
 <br />//
|
||||||
//        MatchboxP: A C++ library for approximate weighted matching
|
 <br />//        MatchboxP: A C++ library for approximate weighted matching
|
||||||
//               Mahantesh Halappanavar (hala@pnnl.gov)
|
 <br />//               Mahantesh Halappanavar (hala@pnnl.gov)
|
||||||
//               Pacific Northwest National Laboratory
|
 <br />//               Pacific Northwest National Laboratory
|
||||||
//
|
 <br />//
|
||||||
// ***********************************************************************
|
 <br />// ***********************************************************************
|
||||||
//
|
 <br />//
|
||||||
//       Copyright (2021) Battelle Memorial Institute
|
 <br />//       Copyright (2021) Battelle Memorial Institute
|
||||||
//                      All rights reserved.
|
 <br />//                      All rights reserved.
|
||||||
//
|
 <br />//
|
||||||
// Redistribution and use in source and binary forms, with or without
|
 <br />// Redistribution and use in source and binary forms, with or without
|
||||||
// modification, are permitted provided that the following conditions
|
 <br />// modification, are permitted provided that the following conditions
|
||||||
// are met:
|
 <br />// are met:
|
||||||
//
|
 <br />//
|
||||||
// 1. Redistributions of source code must retain the above copyright
|
 <br />// 1. Redistributions of source code must retain the above copyright
|
||||||
// notice, this list of conditions and the following disclaimer.
|
 <br />// notice, this list of conditions and the following disclaimer.
|
||||||
//
|
 <br />//
|
||||||
// 2. Redistributions in binary form must reproduce the above copyright
|
 <br />// 2. Redistributions in binary form must reproduce the above copyright
|
||||||
// notice, this list of conditions and the following disclaimer in the
|
 <br />// notice, this list of conditions and the following disclaimer in the
|
||||||
// documentation and/or other materials provided with the distribution.
|
 <br />// documentation and/or other materials provided with the distribution.
|
||||||
//
|
 <br />//
|
||||||
// 3. Neither the name of the copyright holder nor the names of its
|
 <br />// 3. Neither the name of the copyright holder nor the names of its
|
||||||
// contributors may be used to endorse or promote products derived from
|
 <br />// contributors may be used to endorse or promote products derived from
|
||||||
// this software without specific prior written permission.
|
 <br />// this software without specific prior written permission.
|
||||||
//
|
 <br />//
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
 <br />// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
 <br />// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
 <br />// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
 <br />// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
// COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
 <br />// COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
 <br />// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
 <br />// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
 <br />// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
 <br />// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
 <br />// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
 <br />// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
// POSSIBILITY OF SUCH DAMAGE.
|
 <br />// POSSIBILITY OF SUCH DAMAGE.
|
||||||
//
|
 <br />//
|
||||||
// ************************************************************************
|
 <br />// ************************************************************************
|
||||||
</pre>
|
</div>
|
||||||
<!--l. 135--><p class="nopar" >
|
<!--l. 135--><p class="nopar" >
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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
@@ -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"> </span><a
|
class="cmr-12"> </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
@@ -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"> </span><a
|
class="cmr-12"> </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"> </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"> </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"> </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
@@ -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"> </span><a
|
class="cmr-12"> </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"> </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"> </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"> </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
@@ -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)—.</span> </td>
|
class="cmr-12">, dimension(:), intent(in)—.</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)—.</span> </td>
|
class="cmr-12">, dimension(:), intent(out)—.</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"> </span><a
|
class="cmr-12"> </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—.</span> </td>
|
class="cmr-12">, dimension(:), optional, target—.</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>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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"> </span><a
|
class="cmr-12"> </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
@@ -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"> </span><a
|
class="cmr-12"> </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"> </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"> </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"> </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
@@ -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"> </span><a
|
class="cmr-12"> </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"> </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"> </span><a
|
class="cmr-12"> </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"> </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"> </span><a
|
class="cmr-12"> </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"> </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"> </span><a
|
class="cmr-12"> </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>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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 --with-psblas=PSB-INSTALL-DIR
|
./configure --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"> </span><span
|
|||||||
class="cmtt-12">‘--</span><span
|
class="cmtt-12">‘--</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">’.</span><span
|
class="cmtt-12">’.</span><span
|
||||||
class="cmtt-12"> </span><br /><span class="label"><a
|
class="cmtt-12"> </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">>.</span>
|
class="cmtt-12">>.</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 --with-psblas=/opt/psblas-3.7/ \
|
./configure --with-psblas=/opt/psblas-3.7/ \
|
||||||
--with-umfpackincdir=/usr/include/suitesparse/
|
 <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 install
|
make install
|
||||||
</pre>
|
</div>
|
||||||
<!--l. 188--><p class="nopar" >
|
<!--l. 188--><p class="nopar" >
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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"> </span><a
|
class="cmr-12"> </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’s Guide</span><span
|
class="cmr-12">the PSBLAS User’s Guide</span><span
|
||||||
class="cmr-12"> </span><span class="cite"><span
|
class="cmr-12"> </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">
|
||||||
  use psb_base_mod
|
  use psb_base_mod
|
||||||
  use amg_prec_mod
|
 <br />  use amg_prec_mod
|
||||||
  use psb_krylov_mod
|
 <br />  use psb_krylov_mod
|
||||||
... ...
|
 <br />... ...
|
||||||
!
|
 <br />!
|
||||||
! sparse matrix
|
 <br />! sparse matrix
|
||||||
  type(psb_dspmat_type) :: A
|
 <br />  type(psb_dspmat_type) :: A
|
||||||
! sparse matrix descriptor
|
 <br />! sparse matrix descriptor
|
||||||
  type(psb_desc_type)   :: desc_A
|
 <br />  type(psb_desc_type)   :: desc_A
|
||||||
! preconditioner
|
 <br />! preconditioner
|
||||||
  type(amg_dprec_type)  :: P
|
 <br />  type(amg_dprec_type)  :: P
|
||||||
! right-hand side and solution vectors
|
 <br />! right-hand side and solution vectors
|
||||||
  type(psb_d_vect_type) :: b, x
|
 <br />  type(psb_d_vect_type) :: b, x
|
||||||
... ...
|
 <br />... ...
|
||||||
!
|
 <br />!
|
||||||
! initialize the parallel environment
|
 <br />! initialize the parallel environment
|
||||||
  call psb_init(ctxt)
|
 <br />  call psb_init(ctxt)
|
||||||
  call psb_info(ctxt,iam,np)
|
 <br />  call psb_info(ctxt,iam,np)
|
||||||
... ...
|
 <br />... ...
|
||||||
!
|
 <br />!
|
||||||
! read and assemble the spd matrix A and the right-hand side b
|
 <br />! read and assemble the spd matrix A and the right-hand side b
|
||||||
! using PSBLAS routines for sparse matrix / vector management
|
 <br />! using PSBLAS routines for sparse matrix / vector management
|
||||||
... ...
|
 <br />... ...
|
||||||
!
|
 <br />!
|
||||||
! initialize the default multilevel preconditioner, i.e. V-cycle
|
 <br />! initialize the default multilevel preconditioner, i.e. V-cycle
|
||||||
! with basic smoothed aggregation, 1 hybrid forward/backward
|
 <br />! with basic smoothed aggregation, 1 hybrid forward/backward
|
||||||
! GS sweep as pre/post-smoother and UMFPACK as coarsest-level
|
 <br />! GS sweep as pre/post-smoother and UMFPACK as coarsest-level
|
||||||
! solver
|
 <br />! solver
|
||||||
  call P%init(’ML’,info)
|
 <br />  call P%init(’ML’,info)
|
||||||
!
|
 <br />!
|
||||||
! build the preconditioner
|
 <br />! build the preconditioner
|
||||||
  call P%hierarchy_build(A,desc_A,info)
|
 <br />  call P%hierarchy_build(A,desc_A,info)
|
||||||
  call P%smoothers_build(A,desc_A,info)
|
 <br />  call P%smoothers_build(A,desc_A,info)
|
||||||
!
|
 <br />
|
||||||
! set the solver parameters and the initial guess
|
 <br />!
|
||||||
  ... ...
|
 <br />! set the solver parameters and the initial guess
|
||||||
!
|
 <br />  ... ...
|
||||||
! solve Ax=b with preconditioned CG
|
 <br />!
|
||||||
  call psb_krylov(’CG’,A,P,b,x,tol,desc_A,info)
|
 <br />! solve Ax=b with preconditioned CG
|
||||||
  ... ...
|
 <br />  call psb_krylov(’CG’,A,P,b,x,tol,desc_A,info)
|
||||||
!
|
 <br />  ... ...
|
||||||
! deallocate the preconditioner
|
 <br />!
|
||||||
  call P%free(info)
|
 <br />! deallocate the preconditioner
|
||||||
!
|
 <br />  call P%free(info)
|
||||||
! deallocate other data structures
|
 <br />!
|
||||||
  ... ...
|
 <br />! deallocate other data structures
|
||||||
!
|
 <br />  ... ...
|
||||||
! exit the parallel environment
|
 <br />!
|
||||||
  call psb_exit(ctxt)
|
 <br />! exit the parallel environment
|
||||||
  stop
|
 <br />  call psb_exit(ctxt)
|
||||||
</pre>
|
 <br />  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">
|
||||||
... ...
|
... ...
|
||||||
! build a V-cycle preconditioner with 1 block-Jacobi sweep (with
|
 <br />! build a V-cycle preconditioner with 1 block-Jacobi sweep (with
|
||||||
! ILU(0) on the blocks) as pre- and post-smoother, and 8  block-Jacobi
|
 <br />! ILU(0) on the blocks) as pre- and post-smoother, and 8  block-Jacobi
|
||||||
! sweeps (with ILU(0) on the blocks) as coarsest-level solver
|
 <br />! sweeps (with ILU(0) on the blocks) as coarsest-level solver
|
||||||
  call P%init(’ML’,info)
|
 <br />  call P%init(’ML’,info)
|
||||||
  call P%set(’SMOOTHER_TYPE’,’BJAC’,info)
|
 <br />  call P%set(’SMOOTHER_TYPE’,’BJAC’,info)
|
||||||
  call P%set(’COARSE_SOLVE’,’BJAC’,info)
|
 <br />  call P%set(’COARSE_SOLVE’,’BJAC’,info)
|
||||||
  call P%set(’COARSE_SWEEPS’,8,info)
|
 <br />  call P%set(’COARSE_SWEEPS’,8,info)
|
||||||
  call P%hierarchy_build(A,desc_A,info)
|
 <br />  call P%hierarchy_build(A,desc_A,info)
|
||||||
  call P%smoothers_build(A,desc_A,info)
|
 <br />  call P%smoothers_build(A,desc_A,info)
|
||||||
... ...
|
 <br />... ...
|
||||||
</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">
|
||||||
... ...
|
... ...
|
||||||
! build a W-cycle preconditioner with 2 hybrid Gauss-Seidel sweeps
|
 <br />! build a W-cycle preconditioner with 2 hybrid Gauss-Seidel sweeps
|
||||||
! as pre- and post-smoother, a distributed coarsest
|
 <br />! as pre- and post-smoother, a distributed coarsest
|
||||||
! matrix, and MUMPS as coarsest-level solver
|
 <br />! matrix, and MUMPS as coarsest-level solver
|
||||||
  call P%init(’ML’,info)
|
 <br />  call P%init(’ML’,info)
|
||||||
  call P%set(’PAR_AGGR_ALG’,’COUPLED’,info)
|
 <br />  call P%set(’PAR_AGGR_ALG’,’COUPLED’,info)
|
||||||
call P%set(’AGGR_TYPE’,’MATCHBOXP’,info)
|
 <br />call P%set(’AGGR_TYPE’,’MATCHBOXP’,info)
|
||||||
call P%set(’AGGR_SIZE’,8,info)
|
 <br />call P%set(’AGGR_SIZE’,8,info)
|
||||||
  call P%set(’ML_CYCLE’,’WCYCLE’,info)
|
 <br />  call P%set(’ML_CYCLE’,’WCYCLE’,info)
|
||||||
  call P%set(’SMOOTHER_TYPE’,’FBGS’,info)
|
 <br />  call P%set(’SMOOTHER_TYPE’,’FBGS’,info)
|
||||||
  call P%set(’SMOOTHER_SWEEPS’,2,info)
|
 <br />  call P%set(’SMOOTHER_SWEEPS’,2,info)
|
||||||
  call P%set(’COARSE_SOLVE’,’KRM’,info)
|
 <br />  call P%set(’COARSE_SOLVE’,’KRM’,info)
|
||||||
  call P%hierarchy_build(A,desc_A,info)
|
 <br />  call P%hierarchy_build(A,desc_A,info)
|
||||||
  call P%smoothers_build(A,desc_A,info)
|
 <br />  call P%smoothers_build(A,desc_A,info)
|
||||||
... ...
|
 <br />... ...
|
||||||
</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">
|
||||||
... ...
|
... ...
|
||||||
! set RAS with overlap 2 and ILU(0) on the local blocks
|
 <br />! set RAS with overlap 2 and ILU(0) on the local blocks
|
||||||
  call P%init(’AS’,info)
|
 <br />  call P%init(’AS’,info)
|
||||||
  call P%set(’SUB_OVR’,2,info)
|
 <br />  call P%set(’SUB_OVR’,2,info)
|
||||||
  call P%bld(A,desc_A,info)
|
 <br />  call P%bld(A,desc_A,info)
|
||||||
... ...
|
 <br />... ...
|
||||||
! solve Ax=b with preconditioned BiCGSTAB
|
 <br />! solve Ax=b with preconditioned BiCGSTAB
|
||||||
  call psb_krylov(’BICGSTAB’,A,P,b,x,tol,desc_A,info)
|
 <br />  call psb_krylov(’BICGSTAB’,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
@@ -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 amg_dexample_gpu
|
program amg_dexample_gpu
|
||||||
  use psb_base_mod
|
 <br />  use psb_base_mod
|
||||||
  use amg_prec_mod
|
 <br />  use amg_prec_mod
|
||||||
  use psb_krylov_mod
|
 <br />  use psb_krylov_mod
|
||||||
  use psb_util_mod
|
 <br />  use psb_util_mod
|
||||||
  use psb_gpu_mod
|
 <br />  use psb_gpu_mod
|
||||||
  use data_input
|
 <br />  use data_input
|
||||||
  use amg_d_pde_mod
|
 <br />  use amg_d_pde_mod
|
||||||
  implicit none
|
 <br />  implicit none
|
||||||
  .......
|
 <br />  .......
|
||||||
  ! GPU variables
|
 <br />  ! GPU variables
|
||||||
  type(psb_d_hlg_sparse_mat) :: agmold
|
 <br />  type(psb_d_hlg_sparse_mat) :: agmold
|
||||||
  type(psb_d_vect_gpu)       :: vgmold
|
 <br />  type(psb_d_vect_gpu)       :: vgmold
|
||||||
  type(psb_i_vect_gpu)       :: igmold
|
 <br />  type(psb_i_vect_gpu)       :: igmold
|
||||||
 
|
 <br />
|
||||||
</pre>
|
 <br /> 
|
||||||
|
</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">
|
||||||
  call psb_init(ctxt)
|
  call psb_init(ctxt)
|
||||||
  call psb_info(ctxt,iam,np)
|
 <br />  call psb_info(ctxt,iam,np)
|
||||||
  !
|
 <br />  !
|
||||||
  ! BEWARE: if you have NGPUS  per node, the default is to
|
 <br />  ! BEWARE: if you have NGPUS  per node, the default is to
|
||||||
  ! attach to mod(IAM,NGPUS)
|
 <br />  ! attach to mod(IAM,NGPUS)
|
||||||
  !
|
 <br />  !
|
||||||
  call psb_gpu_init(ictxt)
|
 <br />  call psb_gpu_init(ictxt)
|
||||||
  ......
|
 <br />  ......
|
||||||
  t1 = psb_wtime()
|
 <br />  t1 = psb_wtime()
|
||||||
  call prec%smoothers_build(a,desc_a,info, amold=agmold, vmold=vgmold, imold=igmold)
|
 <br />  call prec%smoothers_build(a,desc_a,info, amold=agmold, vmold=vgmold, imold=igmold)
|
||||||
 
|
 <br />
|
||||||
</pre>
|
 <br /> 
|
||||||
|
</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">
|
||||||
  call desc_a%cnv(mold=igmold)
|
  call desc_a%cnv(mold=igmold)
|
||||||
  call a%cscnv(info,mold=agmold)
|
 <br />  call a%cscnv(info,mold=agmold)
|
||||||
  call psb_geasb(x,desc_a,info,mold=vgmold)
|
 <br />  call psb_geasb(x,desc_a,info,mold=vgmold)
|
||||||
  call psb_geasb(b,desc_a,info,mold=vgmold)
|
 <br />  call psb_geasb(b,desc_a,info,mold=vgmold)
|
||||||
  !
|
 <br />
|
||||||
  ! iterative method parameters
|
 <br />  !
|
||||||
  !
|
 <br />  ! iterative method parameters
|
||||||
  call psb_barrier(ctxt)
|
 <br />  !
|
||||||
  call prec%allocate_wrk(info)
|
 <br />  call psb_barrier(ctxt)
|
||||||
  t1 = psb_wtime()
|
 <br />  call prec%allocate_wrk(info)
|
||||||
  call psb_krylov(s_choice%kmethd,a,prec,b,x,s_choice%eps,&
|
 <br />  t1 = psb_wtime()
|
||||||
       & desc_a,info,itmax=s_choice%itmax,iter=iter,err=err,itrace=s_choice%itrace,&
|
 <br />  call psb_krylov(s_choice%kmethd,a,prec,b,x,s_choice%eps,&
|
||||||
       & istop=s_choice%istopc,irst=s_choice%irst)
|
 <br />       & desc_a,info,itmax=s_choice%itmax,iter=iter,err=err,itrace=s_choice%itrace,&
|
||||||
  call prec%deallocate_wrk(info)
|
 <br />       & istop=s_choice%istopc,irst=s_choice%irst)
|
||||||
  call psb_barrier(ctxt)
|
 <br />  call prec%deallocate_wrk(info)
|
||||||
  tslv = psb_wtime() - t1
|
 <br />  call psb_barrier(ctxt)
|
||||||
  ......
|
 <br />  tslv = psb_wtime() - t1
|
||||||
  call psb_gpu_exit()
|
 <br />
|
||||||
  call psb_exit(ctxt)
|
 <br />  ......
|
||||||
  stop
|
 <br />  call psb_gpu_exit()
|
||||||
 
|
 <br />  call psb_exit(ctxt)
|
||||||
</pre>
|
 <br />  stop
|
||||||
<!--l. 579--><p class="nopar" ></div></div>
|
 <br />
|
||||||
|
 <br /> 
|
||||||
|
</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">ℓ</span><sub><span
|
class="cmmi-12">ℓ</span><sub><span
|
||||||
class="cmr-8">1</span></sub> <span
|
class="cmr-8">1</span></sub> <span
|
||||||
|
|||||||
+17
-17
@@ -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"> </span><a
|
class="cmr-12"> </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"> </span><a
|
class="cmr-12"> </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
File diff suppressed because it is too large
Load Diff
@@ -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.
|
||||||
|
|||||||
@@ -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>.
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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
Reference in New Issue
Block a user