Compare commits

..
Author SHA1 Message Date
Salvatore Filippone 718b574519 Doc fixes 2021-03-29 14:12:56 +02:00
Salvatore Filippone 859714ca70 Doc fixes 2021-03-24 11:08:10 +01:00
Salvatore Filippone 867b7d37f4 Doc fixes. 2021-03-23 14:55:15 +01:00
Cirdans-Home 76bb6b3c4a Fixed repeated table caption numbers 2021-03-17 11:31:29 +01:00
Salvatore Filippone 511aa802e5 Merge branch 'development' into documentation 2021-03-16 19:27:51 +01:00
Salvatore Filippone 871dea4348 Make RKR available to SET in the main library 2021-03-16 14:26:14 -04:00
Salvatore Filippone 434f1e2cc4 Doc fixes 2021-03-16 11:47:24 +01:00
Salvatore Filippone 77fd14b89b Merge branch 'development' into documentation 2021-03-15 15:33:58 +01:00
Salvatore Filippone 1159659b4f New global option for sizeof() 2021-03-15 15:24:22 +01:00
Cirdans-Home 274db9e4dc Fixed repeated entries in html toc 2021-03-13 23:55:54 +01:00
Salvatore Filippone c51414f7ab Fix use of defaults for min_coarse_size_per_process 2021-03-12 13:21:53 +01:00
Salvatore Filippone eb6ba73525 Doc updates. 2021-03-12 13:14:57 +01:00
Salvatore Filippone f23df4cb48 Fix test programs to use min_coarse_size_per_processor 2021-03-12 09:33:07 +01:00
Salvatore Filippone 44acd20726 Merge branch 'documentation' of github.com:sfilippone/amg4psblas into documentation
# Conflicts:
#	docs/amg4psblas_1.0-guide.pdf
#	docs/html/userhtmlse1.html
#	docs/html/userhtmlse4.html
#	docs/html/userhtmlse6.html
#	docs/html/userhtmlsu10.html
#	docs/html/userhtmlsu11.html
#	docs/html/userhtmlsu12.html
#	docs/html/userhtmlsu13.html
#	docs/html/userhtmlsu14.html
#	docs/html/userhtmlsu15.html
#	docs/html/userhtmlsu3.html
#	docs/html/userhtmlsu4.html
#	docs/html/userhtmlsu5.html
#	docs/html/userhtmlsu6.html
#	docs/html/userhtmlsu7.html
#	docs/html/userhtmlsu8.html
#	docs/html/userhtmlsu9.html
#	docs/src/building.tex
#	docs/src/overview.tex
2021-03-11 18:38:25 +01:00
Salvatore Filippone 51f1bf947a Doc changes to overview, build and prereqs 2021-03-11 18:26:32 +01:00
Cirdans-Home ea6411c730 Fixed table splitting among pages 2021-03-11 09:28:02 +01:00
Cirdans-Home d1447297c5 Added options to prec%dump and further code highlighting 2021-03-11 08:30:05 +01:00
Cirdans-Home 8b9a6c5f9a Full highlighting and code-of-conduct 2021-03-10 23:28:04 +01:00
Cirdans-Home 7af511a218 Added command for inline code highlighting 2021-03-10 21:36:32 +01:00
Cirdans-Home 1188b6d9b3 Added link-break and code highlighting 2021-03-10 21:14:34 +01:00
Cirdans-Home 54f56dac23 Fixed indentation 2021-03-10 20:25:54 +01:00
Cirdans-Home c42cd99d62 Fixed justified text 2021-03-10 19:52:47 +01:00
Cirdans-Home 0bc626e1d3 Remove old author from HTML docs 2021-03-10 19:47:21 +01:00
Cirdans-Home 3780cf1d98 Changed Author infos for HTML guide 2021-03-10 18:13:42 +01:00
Salvatore Filippone 7f2145a6d4 Fixes 2021-03-10 17:25:08 +01:00
Pasqua D'Ambra e786f26a05 Add files via upload 2021-03-10 15:01:50 +01:00
Pasqua D'Ambra 8a84bfa2bf Add files via upload 2021-03-10 14:58:06 +01:00
Pasqua D'Ambra c119689ebc Add files via upload 2021-03-10 14:54:41 +01:00
Salvatore Filippone 90bf65f117 Merged license updates and updates from Pasqua. 2021-03-10 13:41:26 +01:00
Salvatore Filippone 3bfe62517b New description of min_coarse_size_per_process 2021-03-10 13:19:00 +01:00
Salvatore Filippone d644f8f76e Defined min_coarse_size_per_processor and related methods and defaults. 2021-03-10 09:03:24 +01:00
Cirdans-Home 6258d2398c Last modification to the guide 2021-03-09 19:38:10 +01:00
Cirdans-Home 4531532a07 Updated descriptions 2021-03-08 13:44:46 +01:00
Cirdans-Home ea6a260253 Implemented changes to AMG4PSBLAS 2021-03-05 09:04:04 +01:00
Salvatore Filippone 6541e3a95c Change interface to descr with verbosity level 2021-02-18 15:05:19 +01:00
Cirdans-Home 7f378e445d Changed amg_precset to %set call to remove redundancy 2021-02-12 09:25:29 +01:00
Salvatore Filippone 6beaf49275 Take out SET and generic. 2021-02-09 11:35:23 +01:00
Salvatore Filippone cbcb0507a2 Take out wrong generic SET does not belong here- 2021-02-09 10:07:47 +01:00
Salvatore Filippone f3614c9deb Fix pde generation in examples and tests. 2021-02-09 10:06:23 +01:00
Salvatore Filippone 5a70bde74c Taking out amg_precset fixes Intel compile problem 2021-02-08 16:49:46 +01:00
Salvatore Filippone 9f55b2fec2 Fix amg_X_prec_mod for intel compilation 2021-02-08 16:47:54 +01:00
Salvatore Filippone 4d4c8e8ab9 Move cc in test order in configure 2021-02-08 16:47:35 +01:00
Salvatore Filippone bf71175d89 Missing z_ainv_solvercset* in Makefile 2021-02-08 16:47:16 +01:00
Cirdans-Home a96bbbc135 Changed library prefix to amg_ 2020-12-21 21:07:30 +01:00
Salvatore Filippone 78a4f30951 Fix matrix generation to use desc%set_p_adjcncy 2020-12-16 12:47:34 +01:00
136 changed files with 12785 additions and 19285 deletions
+1 -1
View File
@@ -4,7 +4,7 @@
Algebraic Multigrid Package Algebraic Multigrid Package
based on PSBLAS (Parallel Sparse BLAS version 3.7) based on PSBLAS (Parallel Sparse BLAS version 3.7)
(C) Copyright 2020 (C) Copyright 2021
Salvatore Filippone Salvatore Filippone
Pasqua D'Ambra Pasqua D'Ambra
+13 -4
View File
@@ -15,7 +15,7 @@ DMODOBJS=amg_d_prec_type.o \
amg_d_base_aggregator_mod.o \ amg_d_base_aggregator_mod.o \
amg_d_dec_aggregator_mod.o amg_d_symdec_aggregator_mod.o \ amg_d_dec_aggregator_mod.o amg_d_symdec_aggregator_mod.o \
amg_d_ainv_solver.o amg_d_base_ainv_mod.o \ amg_d_ainv_solver.o amg_d_base_ainv_mod.o \
amg_d_invk_solver.o amg_d_invt_solver.o amg_d_invk_solver.o amg_d_invt_solver.o amg_d_rkr_solver.o
#amg_d_bcmatch_aggregator_mod.o #amg_d_bcmatch_aggregator_mod.o
SMODOBJS=amg_s_prec_type.o amg_s_ilu_fact_mod.o \ SMODOBJS=amg_s_prec_type.o amg_s_ilu_fact_mod.o \
@@ -26,7 +26,7 @@ SMODOBJS=amg_s_prec_type.o amg_s_ilu_fact_mod.o \
amg_s_base_aggregator_mod.o \ amg_s_base_aggregator_mod.o \
amg_s_dec_aggregator_mod.o amg_s_symdec_aggregator_mod.o \ amg_s_dec_aggregator_mod.o amg_s_symdec_aggregator_mod.o \
amg_s_ainv_solver.o amg_s_base_ainv_mod.o \ amg_s_ainv_solver.o amg_s_base_ainv_mod.o \
amg_s_invk_solver.o amg_s_invt_solver.o amg_s_invk_solver.o amg_s_invt_solver.o amg_s_rkr_solver.o
ZMODOBJS=amg_z_prec_type.o amg_z_ilu_fact_mod.o \ ZMODOBJS=amg_z_prec_type.o amg_z_ilu_fact_mod.o \
amg_z_inner_mod.o amg_z_ilu_solver.o amg_z_diag_solver.o amg_z_jac_smoother.o amg_z_as_smoother.o \ amg_z_inner_mod.o amg_z_ilu_solver.o amg_z_diag_solver.o amg_z_jac_smoother.o amg_z_as_smoother.o \
@@ -36,7 +36,7 @@ ZMODOBJS=amg_z_prec_type.o amg_z_ilu_fact_mod.o \
amg_z_base_aggregator_mod.o \ amg_z_base_aggregator_mod.o \
amg_z_dec_aggregator_mod.o amg_z_symdec_aggregator_mod.o \ amg_z_dec_aggregator_mod.o amg_z_symdec_aggregator_mod.o \
amg_z_ainv_solver.o amg_z_base_ainv_mod.o \ amg_z_ainv_solver.o amg_z_base_ainv_mod.o \
amg_z_invk_solver.o amg_z_invt_solver.o amg_z_invk_solver.o amg_z_invt_solver.o amg_z_rkr_solver.o
CMODOBJS=amg_c_prec_type.o amg_c_ilu_fact_mod.o \ CMODOBJS=amg_c_prec_type.o amg_c_ilu_fact_mod.o \
amg_c_inner_mod.o amg_c_ilu_solver.o amg_c_diag_solver.o amg_c_jac_smoother.o amg_c_as_smoother.o \ amg_c_inner_mod.o amg_c_ilu_solver.o amg_c_diag_solver.o amg_c_jac_smoother.o amg_c_as_smoother.o \
@@ -46,7 +46,7 @@ CMODOBJS=amg_c_prec_type.o amg_c_ilu_fact_mod.o \
amg_c_base_aggregator_mod.o \ amg_c_base_aggregator_mod.o \
amg_c_dec_aggregator_mod.o amg_c_symdec_aggregator_mod.o \ amg_c_dec_aggregator_mod.o amg_c_symdec_aggregator_mod.o \
amg_c_ainv_solver.o amg_c_base_ainv_mod.o \ amg_c_ainv_solver.o amg_c_base_ainv_mod.o \
amg_c_invk_solver.o amg_c_invt_solver.o amg_c_invk_solver.o amg_c_invt_solver.o amg_c_rkr_solver.o
@@ -80,6 +80,15 @@ amg_base_prec_type.o: amg_const.h
amg_s_prec_type.o amg_d_prec_type.o amg_c_prec_type.o amg_z_prec_type.o : amg_base_prec_type.o amg_s_prec_type.o amg_d_prec_type.o amg_c_prec_type.o amg_z_prec_type.o : amg_base_prec_type.o
amg_prec_type.o: amg_s_prec_type.o amg_d_prec_type.o amg_c_prec_type.o amg_z_prec_type.o amg_prec_type.o: amg_s_prec_type.o amg_d_prec_type.o amg_c_prec_type.o amg_z_prec_type.o
amg_prec_mod.o: amg_prec_type.o amg_s_prec_mod.o amg_d_prec_mod.o amg_c_prec_mod.o amg_z_prec_mod.o amg_prec_mod.o: amg_prec_type.o amg_s_prec_mod.o amg_d_prec_mod.o amg_c_prec_mod.o amg_z_prec_mod.o
amg_s_rkr_solver.o: amg_s_prec_type.o amg_s_base_solver_mod.o
amg_d_rkr_solver.o: amg_d_prec_type.o amg_d_base_solver_mod.o
amg_c_rkr_solver.o: amg_c_prec_type.o amg_c_base_solver_mod.o
amg_z_rkr_solver.o: amg_z_prec_type.o amg_z_base_solver_mod.o
amg_s_prec_mod.o: amg_s_rkr_solver.o
amg_d_prec_mod.o: amg_d_rkr_solver.o
amg_c_prec_mod.o: amg_c_rkr_solver.o
amg_z_prec_mod.o: amg_z_rkr_solver.o
$(SINNEROBJS) $(SOUTEROBJS): $(SMODOBJS) $(SINNEROBJS) $(SOUTEROBJS): $(SMODOBJS)
$(DINNEROBJS) $(DOUTEROBJS): $(DMODOBJS) $(DINNEROBJS) $(DOUTEROBJS): $(DMODOBJS)
+10 -15
View File
@@ -120,7 +120,9 @@ module amg_base_prec_type
procedure, pass(pm) :: printout => d_ml_parms_printout procedure, pass(pm) :: printout => d_ml_parms_printout
end type amg_dml_parms end type amg_dml_parms
type amg_saggr_data
type amg_iaggr_data
! !
! Aggregation data and defaults: ! Aggregation data and defaults:
! !
@@ -129,28 +131,21 @@ module amg_base_prec_type
! We are assuming that the coarse size fits in ! We are assuming that the coarse size fits in
! integer range of psb_ipk_, but this is ! integer range of psb_ipk_, but this is
! not very restrictive ! not very restrictive
integer(psb_ipk_) :: min_coarse_size = izero integer(psb_ipk_) :: min_coarse_size = -ione
integer(psb_ipk_) :: min_coarse_size_per_process = -ione
integer(psb_lpk_) :: target_coarse_size
! 2. maximum number of levels. Defaults to 20 ! 2. maximum number of levels. Defaults to 20
integer(psb_ipk_) :: max_levs = 20_psb_ipk_ integer(psb_ipk_) :: max_levs = 20_psb_ipk_
end type amg_iaggr_data
type, extends(amg_iaggr_data) :: amg_saggr_data
! 3. min_cr_ratio = 1.5 ! 3. min_cr_ratio = 1.5
real(psb_spk_) :: min_cr_ratio = 1.5_psb_spk_ real(psb_spk_) :: min_cr_ratio = 1.5_psb_spk_
real(psb_spk_) :: op_complexity = szero real(psb_spk_) :: op_complexity = szero
real(psb_spk_) :: avg_cr = szero real(psb_spk_) :: avg_cr = szero
end type amg_saggr_data end type amg_saggr_data
type amg_daggr_data type, extends(amg_iaggr_data) :: amg_daggr_data
!
! Aggregation data and defaults:
!
!
! 1. min_coarse_size = 0 Default target size will be computed as
! 40*(N_fine)**(1./3.)
! We are assuming that the coarse size fits in
! integer range of psb_ipk_, but this is
! not very restrictive
integer(psb_ipk_) :: min_coarse_size = izero
! 2. maximum number of levels. Defaults to 20
integer(psb_ipk_) :: max_levs = 20_psb_ipk_
! 3. min_cr_ratio = 1.5 ! 3. min_cr_ratio = 1.5
real(psb_dpk_) :: min_cr_ratio = 1.5_psb_dpk_ real(psb_dpk_) :: min_cr_ratio = 1.5_psb_dpk_
real(psb_dpk_) :: op_complexity = dzero real(psb_dpk_) :: op_complexity = dzero
+38 -39
View File
@@ -58,10 +58,9 @@ module amg_c_ainv_solver
procedure, pass(sv) :: cseti => amg_c_ainv_solver_cseti procedure, pass(sv) :: cseti => amg_c_ainv_solver_cseti
procedure, pass(sv) :: csetc => amg_c_ainv_solver_csetc procedure, pass(sv) :: csetc => amg_c_ainv_solver_csetc
procedure, pass(sv) :: csetr => amg_c_ainv_solver_csetr procedure, pass(sv) :: csetr => amg_c_ainv_solver_csetr
procedure, pass(sv) :: seti => amg_c_ainv_solver_seti !!$ procedure, pass(sv) :: seti => amg_c_ainv_solver_seti
procedure, pass(sv) :: setc => amg_c_ainv_solver_setc !!$ procedure, pass(sv) :: setc => amg_c_ainv_solver_setc
procedure, pass(sv) :: setr => amg_c_ainv_solver_setr !!$ procedure, pass(sv) :: setr => amg_c_ainv_solver_setr
generic, public :: set => seti, setr, setc
procedure, pass(sv) :: descr => amg_c_ainv_solver_descr procedure, pass(sv) :: descr => amg_c_ainv_solver_descr
procedure, pass(sv) :: default => c_ainv_solver_default procedure, pass(sv) :: default => c_ainv_solver_default
procedure, nopass :: stringval => c_ainv_stringval procedure, nopass :: stringval => c_ainv_stringval
@@ -159,41 +158,41 @@ module amg_c_ainv_solver
end subroutine amg_c_ainv_solver_csetr end subroutine amg_c_ainv_solver_csetr
end interface end interface
interface !!$ interface
subroutine amg_c_ainv_solver_setc(sv,what,val,info) !!$ subroutine amg_c_ainv_solver_setc(sv,what,val,info)
import :: amg_c_ainv_solver_type, psb_ipk_ !!$ import :: amg_c_ainv_solver_type, psb_ipk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_c_ainv_solver_type), intent(inout) :: sv !!$ class(amg_c_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), intent(in) :: what
character(len=*), intent(in) :: val !!$ character(len=*), intent(in) :: val
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
end subroutine amg_c_ainv_solver_setc !!$ end subroutine amg_c_ainv_solver_setc
end interface !!$ end interface
!!$
interface !!$ interface
subroutine amg_c_ainv_solver_seti(sv,what,val,info) !!$ subroutine amg_c_ainv_solver_seti(sv,what,val,info)
import :: amg_c_ainv_solver_type, psb_ipk_ !!$ import :: amg_c_ainv_solver_type, psb_ipk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_c_ainv_solver_type), intent(inout) :: sv !!$ class(amg_c_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val !!$ integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
end subroutine amg_c_ainv_solver_seti !!$ end subroutine amg_c_ainv_solver_seti
end interface !!$ end interface
!!$
interface !!$ interface
subroutine amg_c_ainv_solver_setr(sv,what,val,info) !!$ subroutine amg_c_ainv_solver_setr(sv,what,val,info)
import :: amg_c_ainv_solver_type, psb_ipk_, psb_spk_ !!$ import :: amg_c_ainv_solver_type, psb_ipk_, psb_spk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_c_ainv_solver_type), intent(inout) :: sv !!$ class(amg_c_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), 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
end subroutine amg_c_ainv_solver_setr !!$ end subroutine amg_c_ainv_solver_setr
end interface !!$ end interface
interface interface
subroutine amg_c_ainv_solver_descr(sv,info,iout,coarse) subroutine amg_c_ainv_solver_descr(sv,info,iout,coarse)
-14
View File
@@ -51,8 +51,6 @@ module amg_c_invk_solver
procedure, pass(sv) :: clone => amg_c_invk_solver_clone procedure, pass(sv) :: clone => amg_c_invk_solver_clone
procedure, pass(sv) :: build => amg_c_invk_solver_bld procedure, pass(sv) :: build => amg_c_invk_solver_bld
procedure, pass(sv) :: cseti => amg_c_invk_solver_cseti procedure, pass(sv) :: cseti => amg_c_invk_solver_cseti
procedure, pass(sv) :: seti => amg_c_invk_solver_seti
generic, public :: set => seti
procedure, pass(sv) :: descr => amg_c_invk_solver_descr procedure, pass(sv) :: descr => amg_c_invk_solver_descr
procedure, pass(sv) :: default => c_invk_solver_default procedure, pass(sv) :: default => c_invk_solver_default
end type amg_c_invk_solver_type end type amg_c_invk_solver_type
@@ -136,18 +134,6 @@ module amg_c_invk_solver
end subroutine amg_c_invk_solver_descr end subroutine amg_c_invk_solver_descr
end interface end interface
interface
subroutine amg_c_invk_solver_seti(sv,what,val,info)
import :: amg_c_invk_solver_type, psb_ipk_
Implicit none
! Arguments
class(amg_c_invk_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine amg_c_invk_solver_seti
end interface
contains contains
subroutine c_invk_solver_default(sv) subroutine c_invk_solver_default(sv)
-27
View File
@@ -52,9 +52,6 @@ module amg_c_invt_solver
procedure, pass(sv) :: build => amg_c_invt_solver_bld procedure, pass(sv) :: build => amg_c_invt_solver_bld
procedure, pass(sv) :: cseti => amg_c_invt_solver_cseti procedure, pass(sv) :: cseti => amg_c_invt_solver_cseti
procedure, pass(sv) :: csetr => amg_c_invt_solver_csetr procedure, pass(sv) :: csetr => amg_c_invt_solver_csetr
procedure, pass(sv) :: seti => amg_c_invt_solver_seti
procedure, pass(sv) :: setr => amg_c_invt_solver_setr
generic, public :: set => seti, setr
procedure, pass(sv) :: descr => amg_c_invt_solver_descr procedure, pass(sv) :: descr => amg_c_invt_solver_descr
procedure, pass(sv) :: default => c_invt_solver_default procedure, pass(sv) :: default => c_invt_solver_default
end type amg_c_invt_solver_type end type amg_c_invt_solver_type
@@ -148,30 +145,6 @@ module amg_c_invt_solver
end subroutine amg_c_invt_solver_descr end subroutine amg_c_invt_solver_descr
end interface end interface
interface
subroutine amg_c_invt_solver_setr(sv,what,val,info)
import :: amg_c_invt_solver_type, psb_spk_, psb_ipk_
Implicit none
! Arguments
class(amg_c_invt_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
real(psb_spk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine amg_c_invt_solver_setr
end interface
interface
subroutine amg_c_invt_solver_seti(sv,what,val,info)
import :: amg_c_invt_solver_type, psb_ipk_
Implicit none
! Arguments
class(amg_c_invt_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine
end interface
contains contains
subroutine c_invt_solver_default(sv) subroutine c_invt_solver_default(sv)
+6 -5
View File
@@ -256,16 +256,17 @@ module amg_c_onelev_mod
end interface end interface
interface interface
subroutine amg_c_base_onelev_descr(lv,il,nl,ilmin,info,iout) subroutine amg_c_base_onelev_descr(lv,il,nl,ilmin,info,iout, verbosity)
import :: psb_cspmat_type, psb_c_vect_type, psb_c_base_vect_type, & import :: psb_cspmat_type, psb_c_vect_type, psb_c_base_vect_type, &
& psb_clinmap_type, psb_spk_, amg_c_onelev_type, & & psb_clinmap_type, psb_spk_, amg_c_onelev_type, &
& psb_ipk_, psb_epk_, psb_desc_type & psb_ipk_, psb_epk_, psb_desc_type
Implicit None Implicit None
! Arguments ! Arguments
class(amg_c_onelev_type), intent(in) :: lv class(amg_c_onelev_type), intent(in) :: lv
integer(psb_ipk_), intent(in) :: il,nl,ilmin integer(psb_ipk_), intent(in) :: il,nl,ilmin
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: verbosity
end subroutine amg_c_base_onelev_descr end subroutine amg_c_base_onelev_descr
end interface end interface
+1 -63
View File
@@ -55,12 +55,7 @@ module amg_c_prec_mod
use amg_c_ainv_solver use amg_c_ainv_solver
use amg_c_invk_solver use amg_c_invk_solver
use amg_c_invt_solver use amg_c_invt_solver
use amg_c_rkr_solver
interface amg_precset
module procedure amg_c_iprecsetsm, amg_c_iprecsetsv, &
& amg_c_cprecseti, amg_c_cprecsetc, amg_c_cprecsetr, &
& amg_c_iprecsetag
end interface amg_precset
interface amg_extprol_bld interface amg_extprol_bld
subroutine amg_c_extprol_bld(a,desc_a,p,prolv,restrv,info,amold,vmold,imold) subroutine amg_c_extprol_bld(a,desc_a,p,prolv,restrv,info,amold,vmold,imold)
@@ -82,61 +77,4 @@ module amg_c_prec_mod
end subroutine amg_c_extprol_bld end subroutine amg_c_extprol_bld
end interface amg_extprol_bld end interface amg_extprol_bld
contains
subroutine amg_c_iprecsetsm(p,val,info,pos)
type(amg_cprec_type), intent(inout) :: p
class(amg_c_base_smoother_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info,pos=pos)
end subroutine amg_c_iprecsetsm
subroutine amg_c_iprecsetsv(p,val,info,pos)
type(amg_cprec_type), intent(inout) :: p
class(amg_c_base_solver_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info, pos=pos)
end subroutine amg_c_iprecsetsv
subroutine amg_c_iprecsetag(p,val,info,pos)
type(amg_cprec_type), intent(inout) :: p
class(amg_c_base_aggregator_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info, pos=pos)
end subroutine amg_c_iprecsetag
subroutine amg_c_cprecseti(p,what,val,info,pos)
type(amg_cprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_c_cprecseti
subroutine amg_c_cprecsetr(p,what,val,info,pos)
type(amg_cprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
real(psb_spk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_c_cprecsetr
subroutine amg_c_cprecsetc(p,what,val,info,pos)
type(amg_cprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
character(len=*), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_c_cprecsetc
end module amg_c_prec_mod end module amg_c_prec_mod
+20 -3
View File
@@ -155,13 +155,14 @@ module amg_c_prec_type
interface amg_precdescr interface amg_precdescr
subroutine amg_cfile_prec_descr(prec,iout,root) subroutine amg_cfile_prec_descr(prec,iout,root,verbosity)
import :: amg_cprec_type, psb_ipk_ import :: amg_cprec_type, psb_ipk_
implicit none implicit none
! Arguments ! Arguments
class(amg_cprec_type), intent(in) :: prec class(amg_cprec_type), intent(in) :: prec
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
integer(psb_ipk_), intent(in), optional :: verbosity
end subroutine amg_cfile_prec_descr end subroutine amg_cfile_prec_descr
end interface end interface
@@ -424,11 +425,22 @@ contains
end if end if
end function amg_c_get_nzeros end function amg_c_get_nzeros
function amg_cprec_sizeof(prec) result(val) function amg_cprec_sizeof(prec, global) result(val)
implicit none implicit none
class(amg_cprec_type), intent(in) :: prec class(amg_cprec_type), intent(in) :: prec
integer(psb_epk_) :: val logical, intent(in), optional :: global
integer(psb_epk_) :: val
integer(psb_ipk_) :: i integer(psb_ipk_) :: i
type(psb_ctxt_type) :: ctxt
logical :: global_
if (present(global)) then
global_ = global
else
global_ = .false.
end if
val = 0 val = 0
val = val + psb_sizeof_ip val = val + psb_sizeof_ip
if (allocated(prec%precv)) then if (allocated(prec%precv)) then
@@ -436,6 +448,11 @@ contains
val = val + prec%precv(i)%sizeof() val = val + prec%precv(i)%sizeof()
end do end do
end if end if
if (global_) then
ctxt = prec%ctxt
call psb_sum(ctxt,val)
end if
end function amg_cprec_sizeof end function amg_cprec_sizeof
! !
+38 -39
View File
@@ -58,10 +58,9 @@ module amg_d_ainv_solver
procedure, pass(sv) :: cseti => amg_d_ainv_solver_cseti procedure, pass(sv) :: cseti => amg_d_ainv_solver_cseti
procedure, pass(sv) :: csetc => amg_d_ainv_solver_csetc procedure, pass(sv) :: csetc => amg_d_ainv_solver_csetc
procedure, pass(sv) :: csetr => amg_d_ainv_solver_csetr procedure, pass(sv) :: csetr => amg_d_ainv_solver_csetr
procedure, pass(sv) :: seti => amg_d_ainv_solver_seti !!$ procedure, pass(sv) :: seti => amg_d_ainv_solver_seti
procedure, pass(sv) :: setc => amg_d_ainv_solver_setc !!$ procedure, pass(sv) :: setc => amg_d_ainv_solver_setc
procedure, pass(sv) :: setr => amg_d_ainv_solver_setr !!$ procedure, pass(sv) :: setr => amg_d_ainv_solver_setr
generic, public :: set => seti, setr, setc
procedure, pass(sv) :: descr => amg_d_ainv_solver_descr procedure, pass(sv) :: descr => amg_d_ainv_solver_descr
procedure, pass(sv) :: default => d_ainv_solver_default procedure, pass(sv) :: default => d_ainv_solver_default
procedure, nopass :: stringval => d_ainv_stringval procedure, nopass :: stringval => d_ainv_stringval
@@ -159,41 +158,41 @@ module amg_d_ainv_solver
end subroutine amg_d_ainv_solver_csetr end subroutine amg_d_ainv_solver_csetr
end interface end interface
interface !!$ interface
subroutine amg_d_ainv_solver_setc(sv,what,val,info) !!$ subroutine amg_d_ainv_solver_setc(sv,what,val,info)
import :: amg_d_ainv_solver_type, psb_ipk_ !!$ import :: amg_d_ainv_solver_type, psb_ipk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_d_ainv_solver_type), intent(inout) :: sv !!$ class(amg_d_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), intent(in) :: what
character(len=*), intent(in) :: val !!$ character(len=*), intent(in) :: val
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
end subroutine amg_d_ainv_solver_setc !!$ end subroutine amg_d_ainv_solver_setc
end interface !!$ end interface
!!$
interface !!$ interface
subroutine amg_d_ainv_solver_seti(sv,what,val,info) !!$ subroutine amg_d_ainv_solver_seti(sv,what,val,info)
import :: amg_d_ainv_solver_type, psb_ipk_ !!$ import :: amg_d_ainv_solver_type, psb_ipk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_d_ainv_solver_type), intent(inout) :: sv !!$ class(amg_d_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val !!$ integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
end subroutine amg_d_ainv_solver_seti !!$ end subroutine amg_d_ainv_solver_seti
end interface !!$ end interface
!!$
interface !!$ interface
subroutine amg_d_ainv_solver_setr(sv,what,val,info) !!$ subroutine amg_d_ainv_solver_setr(sv,what,val,info)
import :: amg_d_ainv_solver_type, psb_ipk_, psb_dpk_ !!$ import :: amg_d_ainv_solver_type, psb_ipk_, psb_dpk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_d_ainv_solver_type), intent(inout) :: sv !!$ class(amg_d_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), 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
end subroutine amg_d_ainv_solver_setr !!$ end subroutine amg_d_ainv_solver_setr
end interface !!$ end interface
interface interface
subroutine amg_d_ainv_solver_descr(sv,info,iout,coarse) subroutine amg_d_ainv_solver_descr(sv,info,iout,coarse)
-14
View File
@@ -51,8 +51,6 @@ module amg_d_invk_solver
procedure, pass(sv) :: clone => amg_d_invk_solver_clone procedure, pass(sv) :: clone => amg_d_invk_solver_clone
procedure, pass(sv) :: build => amg_d_invk_solver_bld procedure, pass(sv) :: build => amg_d_invk_solver_bld
procedure, pass(sv) :: cseti => amg_d_invk_solver_cseti procedure, pass(sv) :: cseti => amg_d_invk_solver_cseti
procedure, pass(sv) :: seti => amg_d_invk_solver_seti
generic, public :: set => seti
procedure, pass(sv) :: descr => amg_d_invk_solver_descr procedure, pass(sv) :: descr => amg_d_invk_solver_descr
procedure, pass(sv) :: default => d_invk_solver_default procedure, pass(sv) :: default => d_invk_solver_default
end type amg_d_invk_solver_type end type amg_d_invk_solver_type
@@ -136,18 +134,6 @@ module amg_d_invk_solver
end subroutine amg_d_invk_solver_descr end subroutine amg_d_invk_solver_descr
end interface end interface
interface
subroutine amg_d_invk_solver_seti(sv,what,val,info)
import :: amg_d_invk_solver_type, psb_ipk_
Implicit none
! Arguments
class(amg_d_invk_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine amg_d_invk_solver_seti
end interface
contains contains
subroutine d_invk_solver_default(sv) subroutine d_invk_solver_default(sv)
-27
View File
@@ -52,9 +52,6 @@ module amg_d_invt_solver
procedure, pass(sv) :: build => amg_d_invt_solver_bld procedure, pass(sv) :: build => amg_d_invt_solver_bld
procedure, pass(sv) :: cseti => amg_d_invt_solver_cseti procedure, pass(sv) :: cseti => amg_d_invt_solver_cseti
procedure, pass(sv) :: csetr => amg_d_invt_solver_csetr procedure, pass(sv) :: csetr => amg_d_invt_solver_csetr
procedure, pass(sv) :: seti => amg_d_invt_solver_seti
procedure, pass(sv) :: setr => amg_d_invt_solver_setr
generic, public :: set => seti, setr
procedure, pass(sv) :: descr => amg_d_invt_solver_descr procedure, pass(sv) :: descr => amg_d_invt_solver_descr
procedure, pass(sv) :: default => d_invt_solver_default procedure, pass(sv) :: default => d_invt_solver_default
end type amg_d_invt_solver_type end type amg_d_invt_solver_type
@@ -148,30 +145,6 @@ module amg_d_invt_solver
end subroutine amg_d_invt_solver_descr end subroutine amg_d_invt_solver_descr
end interface end interface
interface
subroutine amg_d_invt_solver_setr(sv,what,val,info)
import :: amg_d_invt_solver_type, psb_dpk_, psb_ipk_
Implicit none
! Arguments
class(amg_d_invt_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
real(psb_dpk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine amg_d_invt_solver_setr
end interface
interface
subroutine amg_d_invt_solver_seti(sv,what,val,info)
import :: amg_d_invt_solver_type, psb_ipk_
Implicit none
! Arguments
class(amg_d_invt_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine
end interface
contains contains
subroutine d_invt_solver_default(sv) subroutine d_invt_solver_default(sv)
+6 -5
View File
@@ -256,16 +256,17 @@ module amg_d_onelev_mod
end interface end interface
interface interface
subroutine amg_d_base_onelev_descr(lv,il,nl,ilmin,info,iout) subroutine amg_d_base_onelev_descr(lv,il,nl,ilmin,info,iout, verbosity)
import :: psb_dspmat_type, psb_d_vect_type, psb_d_base_vect_type, & import :: psb_dspmat_type, psb_d_vect_type, psb_d_base_vect_type, &
& psb_dlinmap_type, psb_dpk_, amg_d_onelev_type, & & psb_dlinmap_type, psb_dpk_, amg_d_onelev_type, &
& psb_ipk_, psb_epk_, psb_desc_type & psb_ipk_, psb_epk_, psb_desc_type
Implicit None Implicit None
! Arguments ! Arguments
class(amg_d_onelev_type), intent(in) :: lv class(amg_d_onelev_type), intent(in) :: lv
integer(psb_ipk_), intent(in) :: il,nl,ilmin integer(psb_ipk_), intent(in) :: il,nl,ilmin
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: verbosity
end subroutine amg_d_base_onelev_descr end subroutine amg_d_base_onelev_descr
end interface end interface
+1 -63
View File
@@ -55,12 +55,7 @@ module amg_d_prec_mod
use amg_d_ainv_solver use amg_d_ainv_solver
use amg_d_invk_solver use amg_d_invk_solver
use amg_d_invt_solver use amg_d_invt_solver
use amg_d_rkr_solver
interface amg_precset
module procedure amg_d_iprecsetsm, amg_d_iprecsetsv, &
& amg_d_cprecseti, amg_d_cprecsetc, amg_d_cprecsetr, &
& amg_d_iprecsetag
end interface amg_precset
interface amg_extprol_bld interface amg_extprol_bld
subroutine amg_d_extprol_bld(a,desc_a,p,prolv,restrv,info,amold,vmold,imold) subroutine amg_d_extprol_bld(a,desc_a,p,prolv,restrv,info,amold,vmold,imold)
@@ -82,61 +77,4 @@ module amg_d_prec_mod
end subroutine amg_d_extprol_bld end subroutine amg_d_extprol_bld
end interface amg_extprol_bld end interface amg_extprol_bld
contains
subroutine amg_d_iprecsetsm(p,val,info,pos)
type(amg_dprec_type), intent(inout) :: p
class(amg_d_base_smoother_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info,pos=pos)
end subroutine amg_d_iprecsetsm
subroutine amg_d_iprecsetsv(p,val,info,pos)
type(amg_dprec_type), intent(inout) :: p
class(amg_d_base_solver_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info, pos=pos)
end subroutine amg_d_iprecsetsv
subroutine amg_d_iprecsetag(p,val,info,pos)
type(amg_dprec_type), intent(inout) :: p
class(amg_d_base_aggregator_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info, pos=pos)
end subroutine amg_d_iprecsetag
subroutine amg_d_cprecseti(p,what,val,info,pos)
type(amg_dprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_d_cprecseti
subroutine amg_d_cprecsetr(p,what,val,info,pos)
type(amg_dprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
real(psb_dpk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_d_cprecsetr
subroutine amg_d_cprecsetc(p,what,val,info,pos)
type(amg_dprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
character(len=*), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_d_cprecsetc
end module amg_d_prec_mod end module amg_d_prec_mod
+20 -3
View File
@@ -155,13 +155,14 @@ module amg_d_prec_type
interface amg_precdescr interface amg_precdescr
subroutine amg_dfile_prec_descr(prec,iout,root) subroutine amg_dfile_prec_descr(prec,iout,root,verbosity)
import :: amg_dprec_type, psb_ipk_ import :: amg_dprec_type, psb_ipk_
implicit none implicit none
! Arguments ! Arguments
class(amg_dprec_type), intent(in) :: prec class(amg_dprec_type), intent(in) :: prec
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
integer(psb_ipk_), intent(in), optional :: verbosity
end subroutine amg_dfile_prec_descr end subroutine amg_dfile_prec_descr
end interface end interface
@@ -424,11 +425,22 @@ contains
end if end if
end function amg_d_get_nzeros end function amg_d_get_nzeros
function amg_dprec_sizeof(prec) result(val) function amg_dprec_sizeof(prec, global) result(val)
implicit none implicit none
class(amg_dprec_type), intent(in) :: prec class(amg_dprec_type), intent(in) :: prec
integer(psb_epk_) :: val logical, intent(in), optional :: global
integer(psb_epk_) :: val
integer(psb_ipk_) :: i integer(psb_ipk_) :: i
type(psb_ctxt_type) :: ctxt
logical :: global_
if (present(global)) then
global_ = global
else
global_ = .false.
end if
val = 0 val = 0
val = val + psb_sizeof_ip val = val + psb_sizeof_ip
if (allocated(prec%precv)) then if (allocated(prec%precv)) then
@@ -436,6 +448,11 @@ contains
val = val + prec%precv(i)%sizeof() val = val + prec%precv(i)%sizeof()
end do end do
end if end if
if (global_) then
ctxt = prec%ctxt
call psb_sum(ctxt,val)
end if
end function amg_dprec_sizeof end function amg_dprec_sizeof
! !
+38 -39
View File
@@ -58,10 +58,9 @@ module amg_s_ainv_solver
procedure, pass(sv) :: cseti => amg_s_ainv_solver_cseti procedure, pass(sv) :: cseti => amg_s_ainv_solver_cseti
procedure, pass(sv) :: csetc => amg_s_ainv_solver_csetc procedure, pass(sv) :: csetc => amg_s_ainv_solver_csetc
procedure, pass(sv) :: csetr => amg_s_ainv_solver_csetr procedure, pass(sv) :: csetr => amg_s_ainv_solver_csetr
procedure, pass(sv) :: seti => amg_s_ainv_solver_seti !!$ procedure, pass(sv) :: seti => amg_s_ainv_solver_seti
procedure, pass(sv) :: setc => amg_s_ainv_solver_setc !!$ procedure, pass(sv) :: setc => amg_s_ainv_solver_setc
procedure, pass(sv) :: setr => amg_s_ainv_solver_setr !!$ procedure, pass(sv) :: setr => amg_s_ainv_solver_setr
generic, public :: set => seti, setr, setc
procedure, pass(sv) :: descr => amg_s_ainv_solver_descr procedure, pass(sv) :: descr => amg_s_ainv_solver_descr
procedure, pass(sv) :: default => s_ainv_solver_default procedure, pass(sv) :: default => s_ainv_solver_default
procedure, nopass :: stringval => s_ainv_stringval procedure, nopass :: stringval => s_ainv_stringval
@@ -159,41 +158,41 @@ module amg_s_ainv_solver
end subroutine amg_s_ainv_solver_csetr end subroutine amg_s_ainv_solver_csetr
end interface end interface
interface !!$ interface
subroutine amg_s_ainv_solver_setc(sv,what,val,info) !!$ subroutine amg_s_ainv_solver_setc(sv,what,val,info)
import :: amg_s_ainv_solver_type, psb_ipk_ !!$ import :: amg_s_ainv_solver_type, psb_ipk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_s_ainv_solver_type), intent(inout) :: sv !!$ class(amg_s_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), intent(in) :: what
character(len=*), intent(in) :: val !!$ character(len=*), intent(in) :: val
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
end subroutine amg_s_ainv_solver_setc !!$ end subroutine amg_s_ainv_solver_setc
end interface !!$ end interface
!!$
interface !!$ interface
subroutine amg_s_ainv_solver_seti(sv,what,val,info) !!$ subroutine amg_s_ainv_solver_seti(sv,what,val,info)
import :: amg_s_ainv_solver_type, psb_ipk_ !!$ import :: amg_s_ainv_solver_type, psb_ipk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_s_ainv_solver_type), intent(inout) :: sv !!$ class(amg_s_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val !!$ integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
end subroutine amg_s_ainv_solver_seti !!$ end subroutine amg_s_ainv_solver_seti
end interface !!$ end interface
!!$
interface !!$ interface
subroutine amg_s_ainv_solver_setr(sv,what,val,info) !!$ subroutine amg_s_ainv_solver_setr(sv,what,val,info)
import :: amg_s_ainv_solver_type, psb_ipk_, psb_spk_ !!$ import :: amg_s_ainv_solver_type, psb_ipk_, psb_spk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_s_ainv_solver_type), intent(inout) :: sv !!$ class(amg_s_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), 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
end subroutine amg_s_ainv_solver_setr !!$ end subroutine amg_s_ainv_solver_setr
end interface !!$ end interface
interface interface
subroutine amg_s_ainv_solver_descr(sv,info,iout,coarse) subroutine amg_s_ainv_solver_descr(sv,info,iout,coarse)
-14
View File
@@ -51,8 +51,6 @@ module amg_s_invk_solver
procedure, pass(sv) :: clone => amg_s_invk_solver_clone procedure, pass(sv) :: clone => amg_s_invk_solver_clone
procedure, pass(sv) :: build => amg_s_invk_solver_bld procedure, pass(sv) :: build => amg_s_invk_solver_bld
procedure, pass(sv) :: cseti => amg_s_invk_solver_cseti procedure, pass(sv) :: cseti => amg_s_invk_solver_cseti
procedure, pass(sv) :: seti => amg_s_invk_solver_seti
generic, public :: set => seti
procedure, pass(sv) :: descr => amg_s_invk_solver_descr procedure, pass(sv) :: descr => amg_s_invk_solver_descr
procedure, pass(sv) :: default => s_invk_solver_default procedure, pass(sv) :: default => s_invk_solver_default
end type amg_s_invk_solver_type end type amg_s_invk_solver_type
@@ -136,18 +134,6 @@ module amg_s_invk_solver
end subroutine amg_s_invk_solver_descr end subroutine amg_s_invk_solver_descr
end interface end interface
interface
subroutine amg_s_invk_solver_seti(sv,what,val,info)
import :: amg_s_invk_solver_type, psb_ipk_
Implicit none
! Arguments
class(amg_s_invk_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine amg_s_invk_solver_seti
end interface
contains contains
subroutine s_invk_solver_default(sv) subroutine s_invk_solver_default(sv)
-27
View File
@@ -52,9 +52,6 @@ module amg_s_invt_solver
procedure, pass(sv) :: build => amg_s_invt_solver_bld procedure, pass(sv) :: build => amg_s_invt_solver_bld
procedure, pass(sv) :: cseti => amg_s_invt_solver_cseti procedure, pass(sv) :: cseti => amg_s_invt_solver_cseti
procedure, pass(sv) :: csetr => amg_s_invt_solver_csetr procedure, pass(sv) :: csetr => amg_s_invt_solver_csetr
procedure, pass(sv) :: seti => amg_s_invt_solver_seti
procedure, pass(sv) :: setr => amg_s_invt_solver_setr
generic, public :: set => seti, setr
procedure, pass(sv) :: descr => amg_s_invt_solver_descr procedure, pass(sv) :: descr => amg_s_invt_solver_descr
procedure, pass(sv) :: default => s_invt_solver_default procedure, pass(sv) :: default => s_invt_solver_default
end type amg_s_invt_solver_type end type amg_s_invt_solver_type
@@ -148,30 +145,6 @@ module amg_s_invt_solver
end subroutine amg_s_invt_solver_descr end subroutine amg_s_invt_solver_descr
end interface end interface
interface
subroutine amg_s_invt_solver_setr(sv,what,val,info)
import :: amg_s_invt_solver_type, psb_spk_, psb_ipk_
Implicit none
! Arguments
class(amg_s_invt_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
real(psb_spk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine amg_s_invt_solver_setr
end interface
interface
subroutine amg_s_invt_solver_seti(sv,what,val,info)
import :: amg_s_invt_solver_type, psb_ipk_
Implicit none
! Arguments
class(amg_s_invt_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine
end interface
contains contains
subroutine s_invt_solver_default(sv) subroutine s_invt_solver_default(sv)
+6 -5
View File
@@ -256,16 +256,17 @@ module amg_s_onelev_mod
end interface end interface
interface interface
subroutine amg_s_base_onelev_descr(lv,il,nl,ilmin,info,iout) subroutine amg_s_base_onelev_descr(lv,il,nl,ilmin,info,iout, verbosity)
import :: psb_sspmat_type, psb_s_vect_type, psb_s_base_vect_type, & import :: psb_sspmat_type, psb_s_vect_type, psb_s_base_vect_type, &
& psb_slinmap_type, psb_spk_, amg_s_onelev_type, & & psb_slinmap_type, psb_spk_, amg_s_onelev_type, &
& psb_ipk_, psb_epk_, psb_desc_type & psb_ipk_, psb_epk_, psb_desc_type
Implicit None Implicit None
! Arguments ! Arguments
class(amg_s_onelev_type), intent(in) :: lv class(amg_s_onelev_type), intent(in) :: lv
integer(psb_ipk_), intent(in) :: il,nl,ilmin integer(psb_ipk_), intent(in) :: il,nl,ilmin
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: verbosity
end subroutine amg_s_base_onelev_descr end subroutine amg_s_base_onelev_descr
end interface end interface
+1 -63
View File
@@ -55,12 +55,7 @@ module amg_s_prec_mod
use amg_s_ainv_solver use amg_s_ainv_solver
use amg_s_invk_solver use amg_s_invk_solver
use amg_s_invt_solver use amg_s_invt_solver
use amg_s_rkr_solver
interface amg_precset
module procedure amg_s_iprecsetsm, amg_s_iprecsetsv, &
& amg_s_cprecseti, amg_s_cprecsetc, amg_s_cprecsetr, &
& amg_s_iprecsetag
end interface amg_precset
interface amg_extprol_bld interface amg_extprol_bld
subroutine amg_s_extprol_bld(a,desc_a,p,prolv,restrv,info,amold,vmold,imold) subroutine amg_s_extprol_bld(a,desc_a,p,prolv,restrv,info,amold,vmold,imold)
@@ -82,61 +77,4 @@ module amg_s_prec_mod
end subroutine amg_s_extprol_bld end subroutine amg_s_extprol_bld
end interface amg_extprol_bld end interface amg_extprol_bld
contains
subroutine amg_s_iprecsetsm(p,val,info,pos)
type(amg_sprec_type), intent(inout) :: p
class(amg_s_base_smoother_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info,pos=pos)
end subroutine amg_s_iprecsetsm
subroutine amg_s_iprecsetsv(p,val,info,pos)
type(amg_sprec_type), intent(inout) :: p
class(amg_s_base_solver_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info, pos=pos)
end subroutine amg_s_iprecsetsv
subroutine amg_s_iprecsetag(p,val,info,pos)
type(amg_sprec_type), intent(inout) :: p
class(amg_s_base_aggregator_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info, pos=pos)
end subroutine amg_s_iprecsetag
subroutine amg_s_cprecseti(p,what,val,info,pos)
type(amg_sprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_s_cprecseti
subroutine amg_s_cprecsetr(p,what,val,info,pos)
type(amg_sprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
real(psb_spk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_s_cprecsetr
subroutine amg_s_cprecsetc(p,what,val,info,pos)
type(amg_sprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
character(len=*), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_s_cprecsetc
end module amg_s_prec_mod end module amg_s_prec_mod
+20 -3
View File
@@ -155,13 +155,14 @@ module amg_s_prec_type
interface amg_precdescr interface amg_precdescr
subroutine amg_sfile_prec_descr(prec,iout,root) subroutine amg_sfile_prec_descr(prec,iout,root,verbosity)
import :: amg_sprec_type, psb_ipk_ import :: amg_sprec_type, psb_ipk_
implicit none implicit none
! Arguments ! Arguments
class(amg_sprec_type), intent(in) :: prec class(amg_sprec_type), intent(in) :: prec
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
integer(psb_ipk_), intent(in), optional :: verbosity
end subroutine amg_sfile_prec_descr end subroutine amg_sfile_prec_descr
end interface end interface
@@ -424,11 +425,22 @@ contains
end if end if
end function amg_s_get_nzeros end function amg_s_get_nzeros
function amg_sprec_sizeof(prec) result(val) function amg_sprec_sizeof(prec, global) result(val)
implicit none implicit none
class(amg_sprec_type), intent(in) :: prec class(amg_sprec_type), intent(in) :: prec
integer(psb_epk_) :: val logical, intent(in), optional :: global
integer(psb_epk_) :: val
integer(psb_ipk_) :: i integer(psb_ipk_) :: i
type(psb_ctxt_type) :: ctxt
logical :: global_
if (present(global)) then
global_ = global
else
global_ = .false.
end if
val = 0 val = 0
val = val + psb_sizeof_ip val = val + psb_sizeof_ip
if (allocated(prec%precv)) then if (allocated(prec%precv)) then
@@ -436,6 +448,11 @@ contains
val = val + prec%precv(i)%sizeof() val = val + prec%precv(i)%sizeof()
end do end do
end if end if
if (global_) then
ctxt = prec%ctxt
call psb_sum(ctxt,val)
end if
end function amg_sprec_sizeof end function amg_sprec_sizeof
! !
+38 -39
View File
@@ -58,10 +58,9 @@ module amg_z_ainv_solver
procedure, pass(sv) :: cseti => amg_z_ainv_solver_cseti procedure, pass(sv) :: cseti => amg_z_ainv_solver_cseti
procedure, pass(sv) :: csetc => amg_z_ainv_solver_csetc procedure, pass(sv) :: csetc => amg_z_ainv_solver_csetc
procedure, pass(sv) :: csetr => amg_z_ainv_solver_csetr procedure, pass(sv) :: csetr => amg_z_ainv_solver_csetr
procedure, pass(sv) :: seti => amg_z_ainv_solver_seti !!$ procedure, pass(sv) :: seti => amg_z_ainv_solver_seti
procedure, pass(sv) :: setc => amg_z_ainv_solver_setc !!$ procedure, pass(sv) :: setc => amg_z_ainv_solver_setc
procedure, pass(sv) :: setr => amg_z_ainv_solver_setr !!$ procedure, pass(sv) :: setr => amg_z_ainv_solver_setr
generic, public :: set => seti, setr, setc
procedure, pass(sv) :: descr => amg_z_ainv_solver_descr procedure, pass(sv) :: descr => amg_z_ainv_solver_descr
procedure, pass(sv) :: default => z_ainv_solver_default procedure, pass(sv) :: default => z_ainv_solver_default
procedure, nopass :: stringval => z_ainv_stringval procedure, nopass :: stringval => z_ainv_stringval
@@ -159,41 +158,41 @@ module amg_z_ainv_solver
end subroutine amg_z_ainv_solver_csetr end subroutine amg_z_ainv_solver_csetr
end interface end interface
interface !!$ interface
subroutine amg_z_ainv_solver_setc(sv,what,val,info) !!$ subroutine amg_z_ainv_solver_setc(sv,what,val,info)
import :: amg_z_ainv_solver_type, psb_ipk_ !!$ import :: amg_z_ainv_solver_type, psb_ipk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_z_ainv_solver_type), intent(inout) :: sv !!$ class(amg_z_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), intent(in) :: what
character(len=*), intent(in) :: val !!$ character(len=*), intent(in) :: val
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
end subroutine amg_z_ainv_solver_setc !!$ end subroutine amg_z_ainv_solver_setc
end interface !!$ end interface
!!$
interface !!$ interface
subroutine amg_z_ainv_solver_seti(sv,what,val,info) !!$ subroutine amg_z_ainv_solver_seti(sv,what,val,info)
import :: amg_z_ainv_solver_type, psb_ipk_ !!$ import :: amg_z_ainv_solver_type, psb_ipk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_z_ainv_solver_type), intent(inout) :: sv !!$ class(amg_z_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val !!$ integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info !!$ integer(psb_ipk_), intent(out) :: info
end subroutine amg_z_ainv_solver_seti !!$ end subroutine amg_z_ainv_solver_seti
end interface !!$ end interface
!!$
interface !!$ interface
subroutine amg_z_ainv_solver_setr(sv,what,val,info) !!$ subroutine amg_z_ainv_solver_setr(sv,what,val,info)
import :: amg_z_ainv_solver_type, psb_ipk_, psb_dpk_ !!$ import :: amg_z_ainv_solver_type, psb_ipk_, psb_dpk_
Implicit none !!$ Implicit none
! Arguments !!$ ! Arguments
class(amg_z_ainv_solver_type), intent(inout) :: sv !!$ class(amg_z_ainv_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what !!$ integer(psb_ipk_), 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
end subroutine amg_z_ainv_solver_setr !!$ end subroutine amg_z_ainv_solver_setr
end interface !!$ end interface
interface interface
subroutine amg_z_ainv_solver_descr(sv,info,iout,coarse) subroutine amg_z_ainv_solver_descr(sv,info,iout,coarse)
-14
View File
@@ -51,8 +51,6 @@ module amg_z_invk_solver
procedure, pass(sv) :: clone => amg_z_invk_solver_clone procedure, pass(sv) :: clone => amg_z_invk_solver_clone
procedure, pass(sv) :: build => amg_z_invk_solver_bld procedure, pass(sv) :: build => amg_z_invk_solver_bld
procedure, pass(sv) :: cseti => amg_z_invk_solver_cseti procedure, pass(sv) :: cseti => amg_z_invk_solver_cseti
procedure, pass(sv) :: seti => amg_z_invk_solver_seti
generic, public :: set => seti
procedure, pass(sv) :: descr => amg_z_invk_solver_descr procedure, pass(sv) :: descr => amg_z_invk_solver_descr
procedure, pass(sv) :: default => z_invk_solver_default procedure, pass(sv) :: default => z_invk_solver_default
end type amg_z_invk_solver_type end type amg_z_invk_solver_type
@@ -136,18 +134,6 @@ module amg_z_invk_solver
end subroutine amg_z_invk_solver_descr end subroutine amg_z_invk_solver_descr
end interface end interface
interface
subroutine amg_z_invk_solver_seti(sv,what,val,info)
import :: amg_z_invk_solver_type, psb_ipk_
Implicit none
! Arguments
class(amg_z_invk_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine amg_z_invk_solver_seti
end interface
contains contains
subroutine z_invk_solver_default(sv) subroutine z_invk_solver_default(sv)
-27
View File
@@ -52,9 +52,6 @@ module amg_z_invt_solver
procedure, pass(sv) :: build => amg_z_invt_solver_bld procedure, pass(sv) :: build => amg_z_invt_solver_bld
procedure, pass(sv) :: cseti => amg_z_invt_solver_cseti procedure, pass(sv) :: cseti => amg_z_invt_solver_cseti
procedure, pass(sv) :: csetr => amg_z_invt_solver_csetr procedure, pass(sv) :: csetr => amg_z_invt_solver_csetr
procedure, pass(sv) :: seti => amg_z_invt_solver_seti
procedure, pass(sv) :: setr => amg_z_invt_solver_setr
generic, public :: set => seti, setr
procedure, pass(sv) :: descr => amg_z_invt_solver_descr procedure, pass(sv) :: descr => amg_z_invt_solver_descr
procedure, pass(sv) :: default => z_invt_solver_default procedure, pass(sv) :: default => z_invt_solver_default
end type amg_z_invt_solver_type end type amg_z_invt_solver_type
@@ -148,30 +145,6 @@ module amg_z_invt_solver
end subroutine amg_z_invt_solver_descr end subroutine amg_z_invt_solver_descr
end interface end interface
interface
subroutine amg_z_invt_solver_setr(sv,what,val,info)
import :: amg_z_invt_solver_type, psb_dpk_, psb_ipk_
Implicit none
! Arguments
class(amg_z_invt_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
real(psb_dpk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine amg_z_invt_solver_setr
end interface
interface
subroutine amg_z_invt_solver_seti(sv,what,val,info)
import :: amg_z_invt_solver_type, psb_ipk_
Implicit none
! Arguments
class(amg_z_invt_solver_type), intent(inout) :: sv
integer(psb_ipk_), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
end subroutine
end interface
contains contains
subroutine z_invt_solver_default(sv) subroutine z_invt_solver_default(sv)
+6 -5
View File
@@ -256,16 +256,17 @@ module amg_z_onelev_mod
end interface end interface
interface interface
subroutine amg_z_base_onelev_descr(lv,il,nl,ilmin,info,iout) subroutine amg_z_base_onelev_descr(lv,il,nl,ilmin,info,iout, verbosity)
import :: psb_zspmat_type, psb_z_vect_type, psb_z_base_vect_type, & import :: psb_zspmat_type, psb_z_vect_type, psb_z_base_vect_type, &
& psb_zlinmap_type, psb_dpk_, amg_z_onelev_type, & & psb_zlinmap_type, psb_dpk_, amg_z_onelev_type, &
& psb_ipk_, psb_epk_, psb_desc_type & psb_ipk_, psb_epk_, psb_desc_type
Implicit None Implicit None
! Arguments ! Arguments
class(amg_z_onelev_type), intent(in) :: lv class(amg_z_onelev_type), intent(in) :: lv
integer(psb_ipk_), intent(in) :: il,nl,ilmin integer(psb_ipk_), intent(in) :: il,nl,ilmin
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: verbosity
end subroutine amg_z_base_onelev_descr end subroutine amg_z_base_onelev_descr
end interface end interface
+1 -63
View File
@@ -55,12 +55,7 @@ module amg_z_prec_mod
use amg_z_ainv_solver use amg_z_ainv_solver
use amg_z_invk_solver use amg_z_invk_solver
use amg_z_invt_solver use amg_z_invt_solver
use amg_z_rkr_solver
interface amg_precset
module procedure amg_z_iprecsetsm, amg_z_iprecsetsv, &
& amg_z_cprecseti, amg_z_cprecsetc, amg_z_cprecsetr, &
& amg_z_iprecsetag
end interface amg_precset
interface amg_extprol_bld interface amg_extprol_bld
subroutine amg_z_extprol_bld(a,desc_a,p,prolv,restrv,info,amold,vmold,imold) subroutine amg_z_extprol_bld(a,desc_a,p,prolv,restrv,info,amold,vmold,imold)
@@ -82,61 +77,4 @@ module amg_z_prec_mod
end subroutine amg_z_extprol_bld end subroutine amg_z_extprol_bld
end interface amg_extprol_bld end interface amg_extprol_bld
contains
subroutine amg_z_iprecsetsm(p,val,info,pos)
type(amg_zprec_type), intent(inout) :: p
class(amg_z_base_smoother_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info,pos=pos)
end subroutine amg_z_iprecsetsm
subroutine amg_z_iprecsetsv(p,val,info,pos)
type(amg_zprec_type), intent(inout) :: p
class(amg_z_base_solver_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info, pos=pos)
end subroutine amg_z_iprecsetsv
subroutine amg_z_iprecsetag(p,val,info,pos)
type(amg_zprec_type), intent(inout) :: p
class(amg_z_base_aggregator_type), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(val,info, pos=pos)
end subroutine amg_z_iprecsetag
subroutine amg_z_cprecseti(p,what,val,info,pos)
type(amg_zprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
integer(psb_ipk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_z_cprecseti
subroutine amg_z_cprecsetr(p,what,val,info,pos)
type(amg_zprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
real(psb_dpk_), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_z_cprecsetr
subroutine amg_z_cprecsetc(p,what,val,info,pos)
type(amg_zprec_type), intent(inout) :: p
character(len=*), intent(in) :: what
character(len=*), intent(in) :: val
integer(psb_ipk_), intent(out) :: info
character(len=*), optional, intent(in) :: pos
call p%set(what,val,info,pos=pos)
end subroutine amg_z_cprecsetc
end module amg_z_prec_mod end module amg_z_prec_mod
+20 -3
View File
@@ -155,13 +155,14 @@ module amg_z_prec_type
interface amg_precdescr interface amg_precdescr
subroutine amg_zfile_prec_descr(prec,iout,root) subroutine amg_zfile_prec_descr(prec,iout,root,verbosity)
import :: amg_zprec_type, psb_ipk_ import :: amg_zprec_type, psb_ipk_
implicit none implicit none
! Arguments ! Arguments
class(amg_zprec_type), intent(in) :: prec class(amg_zprec_type), intent(in) :: prec
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
integer(psb_ipk_), intent(in), optional :: verbosity
end subroutine amg_zfile_prec_descr end subroutine amg_zfile_prec_descr
end interface end interface
@@ -424,11 +425,22 @@ contains
end if end if
end function amg_z_get_nzeros end function amg_z_get_nzeros
function amg_zprec_sizeof(prec) result(val) function amg_zprec_sizeof(prec, global) result(val)
implicit none implicit none
class(amg_zprec_type), intent(in) :: prec class(amg_zprec_type), intent(in) :: prec
integer(psb_epk_) :: val logical, intent(in), optional :: global
integer(psb_epk_) :: val
integer(psb_ipk_) :: i integer(psb_ipk_) :: i
type(psb_ctxt_type) :: ctxt
logical :: global_
if (present(global)) then
global_ = global
else
global_ = .false.
end if
val = 0 val = 0
val = val + psb_sizeof_ip val = val + psb_sizeof_ip
if (allocated(prec%precv)) then if (allocated(prec%precv)) then
@@ -436,6 +448,11 @@ contains
val = val + prec%precv(i)%sizeof() val = val + prec%precv(i)%sizeof()
end do end do
end if end if
if (global_) then
ctxt = prec%ctxt
call psb_sum(ctxt,val)
end if
end function amg_zprec_sizeof end function amg_zprec_sizeof
! !
+39 -35
View File
@@ -72,9 +72,9 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info)
Implicit None Implicit None
! Arguments ! Arguments
type(psb_cspmat_type),intent(in), target :: a type(psb_cspmat_type),intent(in), target :: a
type(psb_desc_type), intent(inout), target :: desc_a type(psb_desc_type), intent(inout), target :: desc_a
class(amg_cprec_type),intent(inout),target :: prec class(amg_cprec_type),intent(inout),target :: prec
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
! Local Variables ! Local Variables
@@ -82,7 +82,7 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info)
integer(psb_ipk_) :: me,np integer(psb_ipk_) :: me,np
integer(psb_ipk_) :: err,i,k, err_act, iszv, newsz,& integer(psb_ipk_) :: err,i,k, err_act, iszv, newsz,&
& nplevs, mxplevs & nplevs, mxplevs
integer(psb_lpk_) :: iaggsize, casize integer(psb_lpk_) :: iaggsize, casize, mncsize, mncszpp
real(psb_spk_) :: mnaggratio, sizeratio, athresh, aomega real(psb_spk_) :: mnaggratio, sizeratio, athresh, aomega
class(amg_c_base_smoother_type), allocatable :: coarse_sm, med_sm, & class(amg_c_base_smoother_type), allocatable :: coarse_sm, med_sm, &
& med_sm2, coarse_sm2 & med_sm2, coarse_sm2
@@ -132,17 +132,24 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info)
newsz = -1 newsz = -1
mxplevs = prec%ag_data%max_levs mxplevs = prec%ag_data%max_levs
mnaggratio = prec%ag_data%min_cr_ratio mnaggratio = prec%ag_data%min_cr_ratio
casize = prec%ag_data%min_coarse_size mncsize = prec%ag_data%min_coarse_size
mncszpp = prec%ag_data%min_coarse_size_per_process
iszv = size(prec%precv) iszv = size(prec%precv)
call psb_bcast(ctxt,iszv) call psb_bcast(ctxt,iszv)
call psb_bcast(ctxt,casize) call psb_bcast(ctxt,mncsize)
call psb_bcast(ctxt,mncszpp)
call psb_bcast(ctxt,mxplevs) call psb_bcast(ctxt,mxplevs)
call psb_bcast(ctxt,mnaggratio) call psb_bcast(ctxt,mnaggratio)
if (casize /= prec%ag_data%min_coarse_size) then if (mncsize /= prec%ag_data%min_coarse_size) then
info=psb_err_internal_error_ info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent min_coarse_size') call psb_errpush(info,name,a_err='Inconsistent min_coarse_size')
goto 9999 goto 9999
end if end if
if (mncszpp /= prec%ag_data%min_coarse_size_per_process) then
info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent min_coarse_size_per_process')
goto 9999
end if
if (mxplevs /= prec%ag_data%max_levs) then if (mxplevs /= prec%ag_data%max_levs) then
info=psb_err_internal_error_ info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent max_levs') call psb_errpush(info,name,a_err='Inconsistent max_levs')
@@ -175,7 +182,7 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info)
! !
prec%precv(1)%base_a => a prec%precv(1)%base_a => a
prec%precv(1)%base_desc => desc_a prec%precv(1)%base_desc => desc_a
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
endif endif
@@ -192,26 +199,23 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info)
! coarse size is hit, or the gain falls below the min_cr_ratio ! coarse size is hit, or the gain falls below the min_cr_ratio
! threshold. ! threshold.
! !
if ((mncszpp < 0).and.(mncsize<0)) then
if (casize < 0) then mncszpp = 200
! prec%ag_data%min_coarse_size_per_process = mncszpp
! Default to the cubic root of the size at base level.
!
casize = desc_a%get_global_rows()
casize = int((sone*casize)**(sone/(sone*3)),psb_lpk_)
casize = max(casize,lone)
casize = casize*40_psb_lpk_
call psb_bcast(ctxt,casize)
if (casize > huge(prec%ag_data%min_coarse_size)) then
!
! computed coarse size does not fit in IPK_.
! This is very unlikely, but make sure to put a positive number
!
prec%ag_data%min_coarse_size = huge(prec%ag_data%min_coarse_size)
else
prec%ag_data%min_coarse_size = casize
end if
end if end if
if (mncszpp > 0) then
casize = mncszpp*np
if (casize > huge(ione)) casize = huge(ione)
else
if (mncsize < np) then
if (me == 0) write(0,*) &
& 'Warning: resetting coarse size to NP (1 variable per process)'
mncsize = np
end if
casize = mncsize
end if
prec%ag_data%target_coarse_size = casize
nplevs = max(itwo,mxplevs) nplevs = max(itwo,mxplevs)
! !
@@ -248,7 +252,7 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info)
end do end do
deallocate(tmp_aggr,stat=info) deallocate(tmp_aggr,stat=info)
end if end if
! Then coarse ! Then coarse
if (info == 0) tprecv(nplevs)%parms = coarseparms if (info == 0) tprecv(nplevs)%parms = coarseparms
if (info == 0) call restore_smoothers(tprecv(nplevs),coarse_sm,coarse_sm2,info) if (info == 0) call restore_smoothers(tprecv(nplevs),coarse_sm,coarse_sm2,info)
@@ -369,7 +373,7 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info)
end if end if
end if end if
call psb_bcast(ctxt,newsz) call psb_bcast(ctxt,newsz)
if (newsz > 0) then if (newsz > 0) then
! !
! This is awkward, we are saving the aggregation parms, for the sake ! This is awkward, we are saving the aggregation parms, for the sake
@@ -380,7 +384,7 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info)
if (info == 0) prec%precv(newsz)%parms = coarseparms if (info == 0) prec%precv(newsz)%parms = coarseparms
prec%precv(newsz)%parms%aggr_thresh = athresh prec%precv(newsz)%parms%aggr_thresh = athresh
prec%precv(newsz)%parms%aggr_omega_val = aomega prec%precv(newsz)%parms%aggr_omega_val = aomega
if (info == 0) call restore_smoothers(prec%precv(newsz),& if (info == 0) call restore_smoothers(prec%precv(newsz),&
& coarse_sm,coarse_sm2,info) & coarse_sm,coarse_sm2,info)
if (newsz < i) then if (newsz < i) then
@@ -476,7 +480,7 @@ subroutine amg_c_hierarchy_bld(a,desc_a,prec,info)
lv%linmap%p_desc_V => rmp%desc_ac_pre_remap lv%linmap%p_desc_V => rmp%desc_ac_pre_remap
lv%base_a => lv%ac lv%base_a => lv%ac
lv%base_desc => lv%desc_ac lv%base_desc => lv%desc_ac
end associate end associate
end if end if
end if end if
@@ -525,7 +529,7 @@ contains
allocate(save2, mold=level%sm2a,stat=info) allocate(save2, mold=level%sm2a,stat=info)
if (info == 0) call level%sm2a%clone_settings(save2,info) if (info == 0) call level%sm2a%clone_settings(save2,info)
end if end if
return return
end subroutine save_smoothers end subroutine save_smoothers
@@ -544,9 +548,9 @@ contains
if (info == 0) allocate(level%sm,mold=save1,stat=info) if (info == 0) allocate(level%sm,mold=save1,stat=info)
if (info == 0) call save1%clone_settings(level%sm,info) if (info == 0) call save1%clone_settings(level%sm,info)
end if end if
if (info /= 0) return if (info /= 0) return
if (allocated(level%sm2a)) then if (allocated(level%sm2a)) then
if (info == 0) call level%sm2a%free(info) if (info == 0) call level%sm2a%free(info)
if (info == 0) deallocate(level%sm2a,stat=info) if (info == 0) deallocate(level%sm2a,stat=info)
@@ -560,6 +564,6 @@ contains
end if end if
return return
end subroutine restore_smoothers end subroutine restore_smoothers
end subroutine amg_c_hierarchy_bld end subroutine amg_c_hierarchy_bld
+20
View File
@@ -152,6 +152,9 @@ subroutine amg_ccprecseti(p,what,val,info,ilev,ilmax,pos,idx)
case ('MIN_COARSE_SIZE') case ('MIN_COARSE_SIZE')
p%ag_data%min_coarse_size = max(val,-1) p%ag_data%min_coarse_size = max(val,-1)
return return
case ('MIN_COARSE_SIZE_PER_PROCESS')
p%ag_data%min_coarse_size_per_process = max(val,-1)
return
case('MAX_LEVS') case('MAX_LEVS')
p%ag_data%max_levs = max(val,1) p%ag_data%max_levs = max(val,1)
return return
@@ -290,6 +293,7 @@ subroutine amg_ccprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
#if defined(HAVE_MUMPS_) #if defined(HAVE_MUMPS_)
use amg_c_mumps_solver use amg_c_mumps_solver
#endif #endif
use amg_c_rkr_solver, only : amg_c_rkr_solver_type
implicit none implicit none
@@ -520,6 +524,14 @@ subroutine amg_ccprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos) call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos)
call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos)
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
case('RKR')
block
type(amg_c_rkr_solver_type) :: rkr_slv
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_bjac_,info,pos=pos)
call p%precv(nlev_)%set(rkr_slv,info)
call p%precv(nlev_)%default()
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
end block
end select end select
end if end if
@@ -662,6 +674,14 @@ subroutine amg_ccprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos) call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos)
call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos)
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
case('RKR')
block
type(amg_c_rkr_solver_type) :: rkr_slv
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_bjac_,info,pos=pos)
call p%precv(nlev_)%set(rkr_slv,info)
call p%precv(nlev_)%default()
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
end block
end select end select
endif endif
+98 -82
View File
@@ -58,17 +58,26 @@
! The id of the process printing the message; -1 acts as a wildcard. ! The id of the process printing the message; -1 acts as a wildcard.
! Default is psb_root_ ! Default is psb_root_
! !
subroutine amg_cfile_prec_descr(prec,iout,root) !
!
! verbosity:
! <0: suppress all messages
! 0: normal
! >1: increased details
!
subroutine amg_cfile_prec_descr(prec,iout,root, verbosity)
use psb_base_mod use psb_base_mod
use amg_c_prec_mod, amg_protect_name => amg_cfile_prec_descr use amg_c_prec_mod, amg_protect_name => amg_cfile_prec_descr
use amg_c_inner_mod use amg_c_inner_mod
use amg_c_gs_solver use amg_c_gs_solver
implicit none implicit none
! Arguments ! Arguments
class(amg_cprec_type), intent(in) :: prec class(amg_cprec_type), intent(in) :: prec
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
integer(psb_ipk_), intent(in), optional :: verbosity
! Local variables ! Local variables
integer(psb_ipk_) :: ilev, nlev, ilmin, info, nswps integer(psb_ipk_) :: ilev, nlev, ilmin, info, nswps
@@ -76,8 +85,7 @@ subroutine amg_cfile_prec_descr(prec,iout,root)
integer(psb_ipk_) :: me, np integer(psb_ipk_) :: me, np
logical :: is_symgs logical :: is_symgs
character(len=20), parameter :: name='amg_file_prec_descr' character(len=20), parameter :: name='amg_file_prec_descr'
integer(psb_ipk_) :: iout_ integer(psb_ipk_) :: iout_, root_, verbosity_
integer(psb_ipk_) :: root_
info = psb_success_ info = psb_success_
if (present(iout)) then if (present(iout)) then
@@ -86,6 +94,12 @@ subroutine amg_cfile_prec_descr(prec,iout,root)
iout_ = psb_out_unit iout_ = psb_out_unit
end if end if
if (iout_ < 0) iout_ = psb_out_unit if (iout_ < 0) iout_ = psb_out_unit
if (present(verbosity)) then
verbosity_ = verbosity
else
verbosity_ = 0
end if
if (verbosity_ < 0) goto 9998
ctxt = prec%ctxt ctxt = prec%ctxt
@@ -99,102 +113,104 @@ subroutine amg_cfile_prec_descr(prec,iout,root)
end if end if
if (root_ == -1) root_ = me if (root_ == -1) root_ = me
! if (verbosity_ >=0) then
! The preconditioner description is printed by processor psb_root_. !
! This agrees with the fact that all the parameters defining the ! The preconditioner description is printed by processor psb_root_.
! preconditioner have the same values on all the procs (this is ! This agrees with the fact that all the parameters defining the
! ensured by amg_precbld). ! preconditioner have the same values on all the procs (this is
! ! ensured by amg_precbld).
if (me == root_) then !
nlev = size(prec%precv) if (me == root_) then
do ilev = 1, nlev nlev = size(prec%precv)
if (.not.allocated(prec%precv(ilev)%sm)) then do ilev = 1, nlev
info = 3111 if (.not.allocated(prec%precv(ilev)%sm)) then
write(iout_,*) ' ',name,& info = 3111
& ': error: inconsistent MLPREC part, should call amg_PRECINIT' write(iout_,*) ' ',name,&
return & ': error: inconsistent MLPREC part, should call amg_PRECINIT'
endif return
end do endif
end do
write(iout_,*) write(iout_,*)
write(iout_,'(a)') 'Preconditioner description' write(iout_,'(a)') 'Preconditioner description'
if (nlev == 1) then if (nlev == 1) then
! !
! Here we have a gigantic kludge just to handle Symmetrized Gauss-Seidel. ! Here we have a gigantic kludge just to handle Symmetrized Gauss-Seidel.
! Will need rethinking... ! Will need rethinking...
! !
if (allocated(prec%precv(1)%sm2a)) then if (allocated(prec%precv(1)%sm2a)) then
is_symgs = .false. is_symgs = .false.
select type(sv2 => prec%precv(1)%sm2a%sv) select type(sv2 => prec%precv(1)%sm2a%sv)
class is (amg_c_bwgs_solver_type) class is (amg_c_bwgs_solver_type)
select type(sv1 => prec%precv(1)%sm%sv) select type(sv1 => prec%precv(1)%sm%sv)
class is (amg_c_gs_solver_type) class is (amg_c_gs_solver_type)
is_symgs = .true. is_symgs = .true.
end select
end select end select
end select if (is_symgs) then
if (is_symgs) then write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel'
write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel' else
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
else else
call prec%precv(1)%sm%descr(info,iout=iout_)
nswps = prec%precv(1)%parms%sweeps_pre
end if
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
else if (nlev > 1) then
!
! Print description of base preconditioner
!
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: ' write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_) call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:' write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_) call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post) !
! Print multilevel details
!
write(iout_,*)
write(iout_,*) 'Multilevel hierarchy: '
write(iout_,*) ' Number of levels : ',nlev
write(iout_,*) ' Operator complexity: ',prec%get_complexity()
write(iout_,*) ' Average coarsening : ',prec%get_avg_cr()
ilmin = 2
if (nlev == 2) ilmin=1
do ilev=ilmin,nlev
call prec%precv(ilev)%descr(ilev,nlev,ilmin,info, &
& iout=iout_,verbosity=verbosity)
end do
write(iout_,*)
else else
call prec%precv(1)%sm%descr(info,iout=iout_) write(iout_,*) trim(name), &
nswps = prec%precv(1)%parms%sweeps_pre & ': invalid preconditioner array size ?',nlev
info = -2
return
end if end if
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
else if (nlev > 1) then
!
! Print description of base preconditioner
!
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if
!
! Print multilevel details
!
write(iout_,*)
write(iout_,*) 'Multilevel hierarchy: '
write(iout_,*) ' Number of levels : ',nlev
write(iout_,*) ' Operator complexity: ',prec%get_complexity()
write(iout_,*) ' Average coarsening : ',prec%get_avg_cr()
ilmin = 2
if (nlev == 2) ilmin=1
do ilev=ilmin,nlev
call prec%precv(ilev)%descr(ilev,nlev,ilmin,info,iout=iout_)
end do
write(iout_,*)
else
write(iout_,*) trim(name), &
& ': invalid preconditioner array size ?',nlev
info = -2
return
end if end if
end if end if
else else
write(iout_,*) trim(name), & write(iout_,*) trim(name), &
& ': Error: no base preconditioner available, something is wrong!' & ': Error: no base preconditioner available, something is wrong!'
info = -2 info = -2
return return
endif endif
9998 continue
end subroutine amg_cfile_prec_descr end subroutine amg_cfile_prec_descr
+2 -1
View File
@@ -124,7 +124,8 @@ subroutine amg_cprecinit(ctxt,prec,ptype,info)
endif endif
endif endif
prec%ctxt = ctxt prec%ctxt = ctxt
prec%ag_data%min_coarse_size = -1 prec%ag_data%min_coarse_size = -1
prec%ag_data%min_coarse_size_per_process = -1
select case(psb_toupper(trim(ptype))) select case(psb_toupper(trim(ptype)))
case ('NOPREC','NONE') case ('NOPREC','NONE')
+39 -35
View File
@@ -72,9 +72,9 @@ subroutine amg_d_hierarchy_bld(a,desc_a,prec,info)
Implicit None Implicit None
! Arguments ! Arguments
type(psb_dspmat_type),intent(in), target :: a type(psb_dspmat_type),intent(in), target :: a
type(psb_desc_type), intent(inout), target :: desc_a type(psb_desc_type), intent(inout), target :: desc_a
class(amg_dprec_type),intent(inout),target :: prec class(amg_dprec_type),intent(inout),target :: prec
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
! Local Variables ! Local Variables
@@ -82,7 +82,7 @@ subroutine amg_d_hierarchy_bld(a,desc_a,prec,info)
integer(psb_ipk_) :: me,np integer(psb_ipk_) :: me,np
integer(psb_ipk_) :: err,i,k, err_act, iszv, newsz,& integer(psb_ipk_) :: err,i,k, err_act, iszv, newsz,&
& nplevs, mxplevs & nplevs, mxplevs
integer(psb_lpk_) :: iaggsize, casize integer(psb_lpk_) :: iaggsize, casize, mncsize, mncszpp
real(psb_dpk_) :: mnaggratio, sizeratio, athresh, aomega real(psb_dpk_) :: mnaggratio, sizeratio, athresh, aomega
class(amg_d_base_smoother_type), allocatable :: coarse_sm, med_sm, & class(amg_d_base_smoother_type), allocatable :: coarse_sm, med_sm, &
& med_sm2, coarse_sm2 & med_sm2, coarse_sm2
@@ -132,17 +132,24 @@ subroutine amg_d_hierarchy_bld(a,desc_a,prec,info)
newsz = -1 newsz = -1
mxplevs = prec%ag_data%max_levs mxplevs = prec%ag_data%max_levs
mnaggratio = prec%ag_data%min_cr_ratio mnaggratio = prec%ag_data%min_cr_ratio
casize = prec%ag_data%min_coarse_size mncsize = prec%ag_data%min_coarse_size
mncszpp = prec%ag_data%min_coarse_size_per_process
iszv = size(prec%precv) iszv = size(prec%precv)
call psb_bcast(ctxt,iszv) call psb_bcast(ctxt,iszv)
call psb_bcast(ctxt,casize) call psb_bcast(ctxt,mncsize)
call psb_bcast(ctxt,mncszpp)
call psb_bcast(ctxt,mxplevs) call psb_bcast(ctxt,mxplevs)
call psb_bcast(ctxt,mnaggratio) call psb_bcast(ctxt,mnaggratio)
if (casize /= prec%ag_data%min_coarse_size) then if (mncsize /= prec%ag_data%min_coarse_size) then
info=psb_err_internal_error_ info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent min_coarse_size') call psb_errpush(info,name,a_err='Inconsistent min_coarse_size')
goto 9999 goto 9999
end if end if
if (mncszpp /= prec%ag_data%min_coarse_size_per_process) then
info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent min_coarse_size_per_process')
goto 9999
end if
if (mxplevs /= prec%ag_data%max_levs) then if (mxplevs /= prec%ag_data%max_levs) then
info=psb_err_internal_error_ info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent max_levs') call psb_errpush(info,name,a_err='Inconsistent max_levs')
@@ -175,7 +182,7 @@ subroutine amg_d_hierarchy_bld(a,desc_a,prec,info)
! !
prec%precv(1)%base_a => a prec%precv(1)%base_a => a
prec%precv(1)%base_desc => desc_a prec%precv(1)%base_desc => desc_a
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
endif endif
@@ -192,26 +199,23 @@ subroutine amg_d_hierarchy_bld(a,desc_a,prec,info)
! coarse size is hit, or the gain falls below the min_cr_ratio ! coarse size is hit, or the gain falls below the min_cr_ratio
! threshold. ! threshold.
! !
if ((mncszpp < 0).and.(mncsize<0)) then
if (casize < 0) then mncszpp = 200
! prec%ag_data%min_coarse_size_per_process = mncszpp
! Default to the cubic root of the size at base level.
!
casize = desc_a%get_global_rows()
casize = int((done*casize)**(done/(done*3)),psb_lpk_)
casize = max(casize,lone)
casize = casize*40_psb_lpk_
call psb_bcast(ctxt,casize)
if (casize > huge(prec%ag_data%min_coarse_size)) then
!
! computed coarse size does not fit in IPK_.
! This is very unlikely, but make sure to put a positive number
!
prec%ag_data%min_coarse_size = huge(prec%ag_data%min_coarse_size)
else
prec%ag_data%min_coarse_size = casize
end if
end if end if
if (mncszpp > 0) then
casize = mncszpp*np
if (casize > huge(ione)) casize = huge(ione)
else
if (mncsize < np) then
if (me == 0) write(0,*) &
& 'Warning: resetting coarse size to NP (1 variable per process)'
mncsize = np
end if
casize = mncsize
end if
prec%ag_data%target_coarse_size = casize
nplevs = max(itwo,mxplevs) nplevs = max(itwo,mxplevs)
! !
@@ -248,7 +252,7 @@ subroutine amg_d_hierarchy_bld(a,desc_a,prec,info)
end do end do
deallocate(tmp_aggr,stat=info) deallocate(tmp_aggr,stat=info)
end if end if
! Then coarse ! Then coarse
if (info == 0) tprecv(nplevs)%parms = coarseparms if (info == 0) tprecv(nplevs)%parms = coarseparms
if (info == 0) call restore_smoothers(tprecv(nplevs),coarse_sm,coarse_sm2,info) if (info == 0) call restore_smoothers(tprecv(nplevs),coarse_sm,coarse_sm2,info)
@@ -369,7 +373,7 @@ subroutine amg_d_hierarchy_bld(a,desc_a,prec,info)
end if end if
end if end if
call psb_bcast(ctxt,newsz) call psb_bcast(ctxt,newsz)
if (newsz > 0) then if (newsz > 0) then
! !
! This is awkward, we are saving the aggregation parms, for the sake ! This is awkward, we are saving the aggregation parms, for the sake
@@ -380,7 +384,7 @@ subroutine amg_d_hierarchy_bld(a,desc_a,prec,info)
if (info == 0) prec%precv(newsz)%parms = coarseparms if (info == 0) prec%precv(newsz)%parms = coarseparms
prec%precv(newsz)%parms%aggr_thresh = athresh prec%precv(newsz)%parms%aggr_thresh = athresh
prec%precv(newsz)%parms%aggr_omega_val = aomega prec%precv(newsz)%parms%aggr_omega_val = aomega
if (info == 0) call restore_smoothers(prec%precv(newsz),& if (info == 0) call restore_smoothers(prec%precv(newsz),&
& coarse_sm,coarse_sm2,info) & coarse_sm,coarse_sm2,info)
if (newsz < i) then if (newsz < i) then
@@ -476,7 +480,7 @@ subroutine amg_d_hierarchy_bld(a,desc_a,prec,info)
lv%linmap%p_desc_V => rmp%desc_ac_pre_remap lv%linmap%p_desc_V => rmp%desc_ac_pre_remap
lv%base_a => lv%ac lv%base_a => lv%ac
lv%base_desc => lv%desc_ac lv%base_desc => lv%desc_ac
end associate end associate
end if end if
end if end if
@@ -525,7 +529,7 @@ contains
allocate(save2, mold=level%sm2a,stat=info) allocate(save2, mold=level%sm2a,stat=info)
if (info == 0) call level%sm2a%clone_settings(save2,info) if (info == 0) call level%sm2a%clone_settings(save2,info)
end if end if
return return
end subroutine save_smoothers end subroutine save_smoothers
@@ -544,9 +548,9 @@ contains
if (info == 0) allocate(level%sm,mold=save1,stat=info) if (info == 0) allocate(level%sm,mold=save1,stat=info)
if (info == 0) call save1%clone_settings(level%sm,info) if (info == 0) call save1%clone_settings(level%sm,info)
end if end if
if (info /= 0) return if (info /= 0) return
if (allocated(level%sm2a)) then if (allocated(level%sm2a)) then
if (info == 0) call level%sm2a%free(info) if (info == 0) call level%sm2a%free(info)
if (info == 0) deallocate(level%sm2a,stat=info) if (info == 0) deallocate(level%sm2a,stat=info)
@@ -560,6 +564,6 @@ contains
end if end if
return return
end subroutine restore_smoothers end subroutine restore_smoothers
end subroutine amg_d_hierarchy_bld end subroutine amg_d_hierarchy_bld
+20
View File
@@ -158,6 +158,9 @@ subroutine amg_dcprecseti(p,what,val,info,ilev,ilmax,pos,idx)
case ('MIN_COARSE_SIZE') case ('MIN_COARSE_SIZE')
p%ag_data%min_coarse_size = max(val,-1) p%ag_data%min_coarse_size = max(val,-1)
return return
case ('MIN_COARSE_SIZE_PER_PROCESS')
p%ag_data%min_coarse_size_per_process = max(val,-1)
return
case('MAX_LEVS') case('MAX_LEVS')
p%ag_data%max_levs = max(val,1) p%ag_data%max_levs = max(val,1)
return return
@@ -302,6 +305,7 @@ subroutine amg_dcprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
#if defined(HAVE_MUMPS_) #if defined(HAVE_MUMPS_)
use amg_d_mumps_solver use amg_d_mumps_solver
#endif #endif
use amg_d_rkr_solver, only : amg_d_rkr_solver_type
implicit none implicit none
@@ -546,6 +550,14 @@ subroutine amg_dcprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos) call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos)
call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos)
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
case('RKR')
block
type(amg_d_rkr_solver_type) :: rkr_slv
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_bjac_,info,pos=pos)
call p%precv(nlev_)%set(rkr_slv,info)
call p%precv(nlev_)%default()
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
end block
end select end select
end if end if
@@ -702,6 +714,14 @@ subroutine amg_dcprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos) call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos)
call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos)
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
case('RKR')
block
type(amg_d_rkr_solver_type) :: rkr_slv
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_bjac_,info,pos=pos)
call p%precv(nlev_)%set(rkr_slv,info)
call p%precv(nlev_)%default()
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
end block
end select end select
endif endif
+98 -82
View File
@@ -58,17 +58,26 @@
! The id of the process printing the message; -1 acts as a wildcard. ! The id of the process printing the message; -1 acts as a wildcard.
! Default is psb_root_ ! Default is psb_root_
! !
subroutine amg_dfile_prec_descr(prec,iout,root) !
!
! verbosity:
! <0: suppress all messages
! 0: normal
! >1: increased details
!
subroutine amg_dfile_prec_descr(prec,iout,root, verbosity)
use psb_base_mod use psb_base_mod
use amg_d_prec_mod, amg_protect_name => amg_dfile_prec_descr use amg_d_prec_mod, amg_protect_name => amg_dfile_prec_descr
use amg_d_inner_mod use amg_d_inner_mod
use amg_d_gs_solver use amg_d_gs_solver
implicit none implicit none
! Arguments ! Arguments
class(amg_dprec_type), intent(in) :: prec class(amg_dprec_type), intent(in) :: prec
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
integer(psb_ipk_), intent(in), optional :: verbosity
! Local variables ! Local variables
integer(psb_ipk_) :: ilev, nlev, ilmin, info, nswps integer(psb_ipk_) :: ilev, nlev, ilmin, info, nswps
@@ -76,8 +85,7 @@ subroutine amg_dfile_prec_descr(prec,iout,root)
integer(psb_ipk_) :: me, np integer(psb_ipk_) :: me, np
logical :: is_symgs logical :: is_symgs
character(len=20), parameter :: name='amg_file_prec_descr' character(len=20), parameter :: name='amg_file_prec_descr'
integer(psb_ipk_) :: iout_ integer(psb_ipk_) :: iout_, root_, verbosity_
integer(psb_ipk_) :: root_
info = psb_success_ info = psb_success_
if (present(iout)) then if (present(iout)) then
@@ -86,6 +94,12 @@ subroutine amg_dfile_prec_descr(prec,iout,root)
iout_ = psb_out_unit iout_ = psb_out_unit
end if end if
if (iout_ < 0) iout_ = psb_out_unit if (iout_ < 0) iout_ = psb_out_unit
if (present(verbosity)) then
verbosity_ = verbosity
else
verbosity_ = 0
end if
if (verbosity_ < 0) goto 9998
ctxt = prec%ctxt ctxt = prec%ctxt
@@ -99,102 +113,104 @@ subroutine amg_dfile_prec_descr(prec,iout,root)
end if end if
if (root_ == -1) root_ = me if (root_ == -1) root_ = me
! if (verbosity_ >=0) then
! The preconditioner description is printed by processor psb_root_. !
! This agrees with the fact that all the parameters defining the ! The preconditioner description is printed by processor psb_root_.
! preconditioner have the same values on all the procs (this is ! This agrees with the fact that all the parameters defining the
! ensured by amg_precbld). ! preconditioner have the same values on all the procs (this is
! ! ensured by amg_precbld).
if (me == root_) then !
nlev = size(prec%precv) if (me == root_) then
do ilev = 1, nlev nlev = size(prec%precv)
if (.not.allocated(prec%precv(ilev)%sm)) then do ilev = 1, nlev
info = 3111 if (.not.allocated(prec%precv(ilev)%sm)) then
write(iout_,*) ' ',name,& info = 3111
& ': error: inconsistent MLPREC part, should call amg_PRECINIT' write(iout_,*) ' ',name,&
return & ': error: inconsistent MLPREC part, should call amg_PRECINIT'
endif return
end do endif
end do
write(iout_,*) write(iout_,*)
write(iout_,'(a)') 'Preconditioner description' write(iout_,'(a)') 'Preconditioner description'
if (nlev == 1) then if (nlev == 1) then
! !
! Here we have a gigantic kludge just to handle Symmetrized Gauss-Seidel. ! Here we have a gigantic kludge just to handle Symmetrized Gauss-Seidel.
! Will need rethinking... ! Will need rethinking...
! !
if (allocated(prec%precv(1)%sm2a)) then if (allocated(prec%precv(1)%sm2a)) then
is_symgs = .false. is_symgs = .false.
select type(sv2 => prec%precv(1)%sm2a%sv) select type(sv2 => prec%precv(1)%sm2a%sv)
class is (amg_d_bwgs_solver_type) class is (amg_d_bwgs_solver_type)
select type(sv1 => prec%precv(1)%sm%sv) select type(sv1 => prec%precv(1)%sm%sv)
class is (amg_d_gs_solver_type) class is (amg_d_gs_solver_type)
is_symgs = .true. is_symgs = .true.
end select
end select end select
end select if (is_symgs) then
if (is_symgs) then write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel'
write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel' else
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
else else
call prec%precv(1)%sm%descr(info,iout=iout_)
nswps = prec%precv(1)%parms%sweeps_pre
end if
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
else if (nlev > 1) then
!
! Print description of base preconditioner
!
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: ' write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_) call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:' write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_) call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post) !
! Print multilevel details
!
write(iout_,*)
write(iout_,*) 'Multilevel hierarchy: '
write(iout_,*) ' Number of levels : ',nlev
write(iout_,*) ' Operator complexity: ',prec%get_complexity()
write(iout_,*) ' Average coarsening : ',prec%get_avg_cr()
ilmin = 2
if (nlev == 2) ilmin=1
do ilev=ilmin,nlev
call prec%precv(ilev)%descr(ilev,nlev,ilmin,info, &
& iout=iout_,verbosity=verbosity)
end do
write(iout_,*)
else else
call prec%precv(1)%sm%descr(info,iout=iout_) write(iout_,*) trim(name), &
nswps = prec%precv(1)%parms%sweeps_pre & ': invalid preconditioner array size ?',nlev
info = -2
return
end if end if
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
else if (nlev > 1) then
!
! Print description of base preconditioner
!
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if
!
! Print multilevel details
!
write(iout_,*)
write(iout_,*) 'Multilevel hierarchy: '
write(iout_,*) ' Number of levels : ',nlev
write(iout_,*) ' Operator complexity: ',prec%get_complexity()
write(iout_,*) ' Average coarsening : ',prec%get_avg_cr()
ilmin = 2
if (nlev == 2) ilmin=1
do ilev=ilmin,nlev
call prec%precv(ilev)%descr(ilev,nlev,ilmin,info,iout=iout_)
end do
write(iout_,*)
else
write(iout_,*) trim(name), &
& ': invalid preconditioner array size ?',nlev
info = -2
return
end if end if
end if end if
else else
write(iout_,*) trim(name), & write(iout_,*) trim(name), &
& ': Error: no base preconditioner available, something is wrong!' & ': Error: no base preconditioner available, something is wrong!'
info = -2 info = -2
return return
endif endif
9998 continue
end subroutine amg_dfile_prec_descr end subroutine amg_dfile_prec_descr
+2 -1
View File
@@ -127,7 +127,8 @@ subroutine amg_dprecinit(ctxt,prec,ptype,info)
endif endif
endif endif
prec%ctxt = ctxt prec%ctxt = ctxt
prec%ag_data%min_coarse_size = -1 prec%ag_data%min_coarse_size = -1
prec%ag_data%min_coarse_size_per_process = -1
select case(psb_toupper(trim(ptype))) select case(psb_toupper(trim(ptype)))
case ('NOPREC','NONE') case ('NOPREC','NONE')
+39 -35
View File
@@ -72,9 +72,9 @@ subroutine amg_s_hierarchy_bld(a,desc_a,prec,info)
Implicit None Implicit None
! Arguments ! Arguments
type(psb_sspmat_type),intent(in), target :: a type(psb_sspmat_type),intent(in), target :: a
type(psb_desc_type), intent(inout), target :: desc_a type(psb_desc_type), intent(inout), target :: desc_a
class(amg_sprec_type),intent(inout),target :: prec class(amg_sprec_type),intent(inout),target :: prec
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
! Local Variables ! Local Variables
@@ -82,7 +82,7 @@ subroutine amg_s_hierarchy_bld(a,desc_a,prec,info)
integer(psb_ipk_) :: me,np integer(psb_ipk_) :: me,np
integer(psb_ipk_) :: err,i,k, err_act, iszv, newsz,& integer(psb_ipk_) :: err,i,k, err_act, iszv, newsz,&
& nplevs, mxplevs & nplevs, mxplevs
integer(psb_lpk_) :: iaggsize, casize integer(psb_lpk_) :: iaggsize, casize, mncsize, mncszpp
real(psb_spk_) :: mnaggratio, sizeratio, athresh, aomega real(psb_spk_) :: mnaggratio, sizeratio, athresh, aomega
class(amg_s_base_smoother_type), allocatable :: coarse_sm, med_sm, & class(amg_s_base_smoother_type), allocatable :: coarse_sm, med_sm, &
& med_sm2, coarse_sm2 & med_sm2, coarse_sm2
@@ -132,17 +132,24 @@ subroutine amg_s_hierarchy_bld(a,desc_a,prec,info)
newsz = -1 newsz = -1
mxplevs = prec%ag_data%max_levs mxplevs = prec%ag_data%max_levs
mnaggratio = prec%ag_data%min_cr_ratio mnaggratio = prec%ag_data%min_cr_ratio
casize = prec%ag_data%min_coarse_size mncsize = prec%ag_data%min_coarse_size
mncszpp = prec%ag_data%min_coarse_size_per_process
iszv = size(prec%precv) iszv = size(prec%precv)
call psb_bcast(ctxt,iszv) call psb_bcast(ctxt,iszv)
call psb_bcast(ctxt,casize) call psb_bcast(ctxt,mncsize)
call psb_bcast(ctxt,mncszpp)
call psb_bcast(ctxt,mxplevs) call psb_bcast(ctxt,mxplevs)
call psb_bcast(ctxt,mnaggratio) call psb_bcast(ctxt,mnaggratio)
if (casize /= prec%ag_data%min_coarse_size) then if (mncsize /= prec%ag_data%min_coarse_size) then
info=psb_err_internal_error_ info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent min_coarse_size') call psb_errpush(info,name,a_err='Inconsistent min_coarse_size')
goto 9999 goto 9999
end if end if
if (mncszpp /= prec%ag_data%min_coarse_size_per_process) then
info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent min_coarse_size_per_process')
goto 9999
end if
if (mxplevs /= prec%ag_data%max_levs) then if (mxplevs /= prec%ag_data%max_levs) then
info=psb_err_internal_error_ info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent max_levs') call psb_errpush(info,name,a_err='Inconsistent max_levs')
@@ -175,7 +182,7 @@ subroutine amg_s_hierarchy_bld(a,desc_a,prec,info)
! !
prec%precv(1)%base_a => a prec%precv(1)%base_a => a
prec%precv(1)%base_desc => desc_a prec%precv(1)%base_desc => desc_a
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
endif endif
@@ -192,26 +199,23 @@ subroutine amg_s_hierarchy_bld(a,desc_a,prec,info)
! coarse size is hit, or the gain falls below the min_cr_ratio ! coarse size is hit, or the gain falls below the min_cr_ratio
! threshold. ! threshold.
! !
if ((mncszpp < 0).and.(mncsize<0)) then
if (casize < 0) then mncszpp = 200
! prec%ag_data%min_coarse_size_per_process = mncszpp
! Default to the cubic root of the size at base level.
!
casize = desc_a%get_global_rows()
casize = int((sone*casize)**(sone/(sone*3)),psb_lpk_)
casize = max(casize,lone)
casize = casize*40_psb_lpk_
call psb_bcast(ctxt,casize)
if (casize > huge(prec%ag_data%min_coarse_size)) then
!
! computed coarse size does not fit in IPK_.
! This is very unlikely, but make sure to put a positive number
!
prec%ag_data%min_coarse_size = huge(prec%ag_data%min_coarse_size)
else
prec%ag_data%min_coarse_size = casize
end if
end if end if
if (mncszpp > 0) then
casize = mncszpp*np
if (casize > huge(ione)) casize = huge(ione)
else
if (mncsize < np) then
if (me == 0) write(0,*) &
& 'Warning: resetting coarse size to NP (1 variable per process)'
mncsize = np
end if
casize = mncsize
end if
prec%ag_data%target_coarse_size = casize
nplevs = max(itwo,mxplevs) nplevs = max(itwo,mxplevs)
! !
@@ -248,7 +252,7 @@ subroutine amg_s_hierarchy_bld(a,desc_a,prec,info)
end do end do
deallocate(tmp_aggr,stat=info) deallocate(tmp_aggr,stat=info)
end if end if
! Then coarse ! Then coarse
if (info == 0) tprecv(nplevs)%parms = coarseparms if (info == 0) tprecv(nplevs)%parms = coarseparms
if (info == 0) call restore_smoothers(tprecv(nplevs),coarse_sm,coarse_sm2,info) if (info == 0) call restore_smoothers(tprecv(nplevs),coarse_sm,coarse_sm2,info)
@@ -369,7 +373,7 @@ subroutine amg_s_hierarchy_bld(a,desc_a,prec,info)
end if end if
end if end if
call psb_bcast(ctxt,newsz) call psb_bcast(ctxt,newsz)
if (newsz > 0) then if (newsz > 0) then
! !
! This is awkward, we are saving the aggregation parms, for the sake ! This is awkward, we are saving the aggregation parms, for the sake
@@ -380,7 +384,7 @@ subroutine amg_s_hierarchy_bld(a,desc_a,prec,info)
if (info == 0) prec%precv(newsz)%parms = coarseparms if (info == 0) prec%precv(newsz)%parms = coarseparms
prec%precv(newsz)%parms%aggr_thresh = athresh prec%precv(newsz)%parms%aggr_thresh = athresh
prec%precv(newsz)%parms%aggr_omega_val = aomega prec%precv(newsz)%parms%aggr_omega_val = aomega
if (info == 0) call restore_smoothers(prec%precv(newsz),& if (info == 0) call restore_smoothers(prec%precv(newsz),&
& coarse_sm,coarse_sm2,info) & coarse_sm,coarse_sm2,info)
if (newsz < i) then if (newsz < i) then
@@ -476,7 +480,7 @@ subroutine amg_s_hierarchy_bld(a,desc_a,prec,info)
lv%linmap%p_desc_V => rmp%desc_ac_pre_remap lv%linmap%p_desc_V => rmp%desc_ac_pre_remap
lv%base_a => lv%ac lv%base_a => lv%ac
lv%base_desc => lv%desc_ac lv%base_desc => lv%desc_ac
end associate end associate
end if end if
end if end if
@@ -525,7 +529,7 @@ contains
allocate(save2, mold=level%sm2a,stat=info) allocate(save2, mold=level%sm2a,stat=info)
if (info == 0) call level%sm2a%clone_settings(save2,info) if (info == 0) call level%sm2a%clone_settings(save2,info)
end if end if
return return
end subroutine save_smoothers end subroutine save_smoothers
@@ -544,9 +548,9 @@ contains
if (info == 0) allocate(level%sm,mold=save1,stat=info) if (info == 0) allocate(level%sm,mold=save1,stat=info)
if (info == 0) call save1%clone_settings(level%sm,info) if (info == 0) call save1%clone_settings(level%sm,info)
end if end if
if (info /= 0) return if (info /= 0) return
if (allocated(level%sm2a)) then if (allocated(level%sm2a)) then
if (info == 0) call level%sm2a%free(info) if (info == 0) call level%sm2a%free(info)
if (info == 0) deallocate(level%sm2a,stat=info) if (info == 0) deallocate(level%sm2a,stat=info)
@@ -560,6 +564,6 @@ contains
end if end if
return return
end subroutine restore_smoothers end subroutine restore_smoothers
end subroutine amg_s_hierarchy_bld end subroutine amg_s_hierarchy_bld
+20
View File
@@ -152,6 +152,9 @@ subroutine amg_scprecseti(p,what,val,info,ilev,ilmax,pos,idx)
case ('MIN_COARSE_SIZE') case ('MIN_COARSE_SIZE')
p%ag_data%min_coarse_size = max(val,-1) p%ag_data%min_coarse_size = max(val,-1)
return return
case ('MIN_COARSE_SIZE_PER_PROCESS')
p%ag_data%min_coarse_size_per_process = max(val,-1)
return
case('MAX_LEVS') case('MAX_LEVS')
p%ag_data%max_levs = max(val,1) p%ag_data%max_levs = max(val,1)
return return
@@ -290,6 +293,7 @@ subroutine amg_scprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
#if defined(HAVE_MUMPS_) #if defined(HAVE_MUMPS_)
use amg_s_mumps_solver use amg_s_mumps_solver
#endif #endif
use amg_s_rkr_solver, only : amg_s_rkr_solver_type
implicit none implicit none
@@ -520,6 +524,14 @@ subroutine amg_scprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos) call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos)
call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos)
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
case('RKR')
block
type(amg_s_rkr_solver_type) :: rkr_slv
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_bjac_,info,pos=pos)
call p%precv(nlev_)%set(rkr_slv,info)
call p%precv(nlev_)%default()
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
end block
end select end select
end if end if
@@ -662,6 +674,14 @@ subroutine amg_scprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos) call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos)
call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos)
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
case('RKR')
block
type(amg_s_rkr_solver_type) :: rkr_slv
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_bjac_,info,pos=pos)
call p%precv(nlev_)%set(rkr_slv,info)
call p%precv(nlev_)%default()
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
end block
end select end select
endif endif
+98 -82
View File
@@ -58,17 +58,26 @@
! The id of the process printing the message; -1 acts as a wildcard. ! The id of the process printing the message; -1 acts as a wildcard.
! Default is psb_root_ ! Default is psb_root_
! !
subroutine amg_sfile_prec_descr(prec,iout,root) !
!
! verbosity:
! <0: suppress all messages
! 0: normal
! >1: increased details
!
subroutine amg_sfile_prec_descr(prec,iout,root, verbosity)
use psb_base_mod use psb_base_mod
use amg_s_prec_mod, amg_protect_name => amg_sfile_prec_descr use amg_s_prec_mod, amg_protect_name => amg_sfile_prec_descr
use amg_s_inner_mod use amg_s_inner_mod
use amg_s_gs_solver use amg_s_gs_solver
implicit none implicit none
! Arguments ! Arguments
class(amg_sprec_type), intent(in) :: prec class(amg_sprec_type), intent(in) :: prec
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
integer(psb_ipk_), intent(in), optional :: verbosity
! Local variables ! Local variables
integer(psb_ipk_) :: ilev, nlev, ilmin, info, nswps integer(psb_ipk_) :: ilev, nlev, ilmin, info, nswps
@@ -76,8 +85,7 @@ subroutine amg_sfile_prec_descr(prec,iout,root)
integer(psb_ipk_) :: me, np integer(psb_ipk_) :: me, np
logical :: is_symgs logical :: is_symgs
character(len=20), parameter :: name='amg_file_prec_descr' character(len=20), parameter :: name='amg_file_prec_descr'
integer(psb_ipk_) :: iout_ integer(psb_ipk_) :: iout_, root_, verbosity_
integer(psb_ipk_) :: root_
info = psb_success_ info = psb_success_
if (present(iout)) then if (present(iout)) then
@@ -86,6 +94,12 @@ subroutine amg_sfile_prec_descr(prec,iout,root)
iout_ = psb_out_unit iout_ = psb_out_unit
end if end if
if (iout_ < 0) iout_ = psb_out_unit if (iout_ < 0) iout_ = psb_out_unit
if (present(verbosity)) then
verbosity_ = verbosity
else
verbosity_ = 0
end if
if (verbosity_ < 0) goto 9998
ctxt = prec%ctxt ctxt = prec%ctxt
@@ -99,102 +113,104 @@ subroutine amg_sfile_prec_descr(prec,iout,root)
end if end if
if (root_ == -1) root_ = me if (root_ == -1) root_ = me
! if (verbosity_ >=0) then
! The preconditioner description is printed by processor psb_root_. !
! This agrees with the fact that all the parameters defining the ! The preconditioner description is printed by processor psb_root_.
! preconditioner have the same values on all the procs (this is ! This agrees with the fact that all the parameters defining the
! ensured by amg_precbld). ! preconditioner have the same values on all the procs (this is
! ! ensured by amg_precbld).
if (me == root_) then !
nlev = size(prec%precv) if (me == root_) then
do ilev = 1, nlev nlev = size(prec%precv)
if (.not.allocated(prec%precv(ilev)%sm)) then do ilev = 1, nlev
info = 3111 if (.not.allocated(prec%precv(ilev)%sm)) then
write(iout_,*) ' ',name,& info = 3111
& ': error: inconsistent MLPREC part, should call amg_PRECINIT' write(iout_,*) ' ',name,&
return & ': error: inconsistent MLPREC part, should call amg_PRECINIT'
endif return
end do endif
end do
write(iout_,*) write(iout_,*)
write(iout_,'(a)') 'Preconditioner description' write(iout_,'(a)') 'Preconditioner description'
if (nlev == 1) then if (nlev == 1) then
! !
! Here we have a gigantic kludge just to handle Symmetrized Gauss-Seidel. ! Here we have a gigantic kludge just to handle Symmetrized Gauss-Seidel.
! Will need rethinking... ! Will need rethinking...
! !
if (allocated(prec%precv(1)%sm2a)) then if (allocated(prec%precv(1)%sm2a)) then
is_symgs = .false. is_symgs = .false.
select type(sv2 => prec%precv(1)%sm2a%sv) select type(sv2 => prec%precv(1)%sm2a%sv)
class is (amg_s_bwgs_solver_type) class is (amg_s_bwgs_solver_type)
select type(sv1 => prec%precv(1)%sm%sv) select type(sv1 => prec%precv(1)%sm%sv)
class is (amg_s_gs_solver_type) class is (amg_s_gs_solver_type)
is_symgs = .true. is_symgs = .true.
end select
end select end select
end select if (is_symgs) then
if (is_symgs) then write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel'
write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel' else
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
else else
call prec%precv(1)%sm%descr(info,iout=iout_)
nswps = prec%precv(1)%parms%sweeps_pre
end if
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
else if (nlev > 1) then
!
! Print description of base preconditioner
!
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: ' write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_) call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:' write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_) call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post) !
! Print multilevel details
!
write(iout_,*)
write(iout_,*) 'Multilevel hierarchy: '
write(iout_,*) ' Number of levels : ',nlev
write(iout_,*) ' Operator complexity: ',prec%get_complexity()
write(iout_,*) ' Average coarsening : ',prec%get_avg_cr()
ilmin = 2
if (nlev == 2) ilmin=1
do ilev=ilmin,nlev
call prec%precv(ilev)%descr(ilev,nlev,ilmin,info, &
& iout=iout_,verbosity=verbosity)
end do
write(iout_,*)
else else
call prec%precv(1)%sm%descr(info,iout=iout_) write(iout_,*) trim(name), &
nswps = prec%precv(1)%parms%sweeps_pre & ': invalid preconditioner array size ?',nlev
info = -2
return
end if end if
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
else if (nlev > 1) then
!
! Print description of base preconditioner
!
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if
!
! Print multilevel details
!
write(iout_,*)
write(iout_,*) 'Multilevel hierarchy: '
write(iout_,*) ' Number of levels : ',nlev
write(iout_,*) ' Operator complexity: ',prec%get_complexity()
write(iout_,*) ' Average coarsening : ',prec%get_avg_cr()
ilmin = 2
if (nlev == 2) ilmin=1
do ilev=ilmin,nlev
call prec%precv(ilev)%descr(ilev,nlev,ilmin,info,iout=iout_)
end do
write(iout_,*)
else
write(iout_,*) trim(name), &
& ': invalid preconditioner array size ?',nlev
info = -2
return
end if end if
end if end if
else else
write(iout_,*) trim(name), & write(iout_,*) trim(name), &
& ': Error: no base preconditioner available, something is wrong!' & ': Error: no base preconditioner available, something is wrong!'
info = -2 info = -2
return return
endif endif
9998 continue
end subroutine amg_sfile_prec_descr end subroutine amg_sfile_prec_descr
+2 -1
View File
@@ -124,7 +124,8 @@ subroutine amg_sprecinit(ctxt,prec,ptype,info)
endif endif
endif endif
prec%ctxt = ctxt prec%ctxt = ctxt
prec%ag_data%min_coarse_size = -1 prec%ag_data%min_coarse_size = -1
prec%ag_data%min_coarse_size_per_process = -1
select case(psb_toupper(trim(ptype))) select case(psb_toupper(trim(ptype)))
case ('NOPREC','NONE') case ('NOPREC','NONE')
+39 -35
View File
@@ -72,9 +72,9 @@ subroutine amg_z_hierarchy_bld(a,desc_a,prec,info)
Implicit None Implicit None
! Arguments ! Arguments
type(psb_zspmat_type),intent(in), target :: a type(psb_zspmat_type),intent(in), target :: a
type(psb_desc_type), intent(inout), target :: desc_a type(psb_desc_type), intent(inout), target :: desc_a
class(amg_zprec_type),intent(inout),target :: prec class(amg_zprec_type),intent(inout),target :: prec
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
! Local Variables ! Local Variables
@@ -82,7 +82,7 @@ subroutine amg_z_hierarchy_bld(a,desc_a,prec,info)
integer(psb_ipk_) :: me,np integer(psb_ipk_) :: me,np
integer(psb_ipk_) :: err,i,k, err_act, iszv, newsz,& integer(psb_ipk_) :: err,i,k, err_act, iszv, newsz,&
& nplevs, mxplevs & nplevs, mxplevs
integer(psb_lpk_) :: iaggsize, casize integer(psb_lpk_) :: iaggsize, casize, mncsize, mncszpp
real(psb_dpk_) :: mnaggratio, sizeratio, athresh, aomega real(psb_dpk_) :: mnaggratio, sizeratio, athresh, aomega
class(amg_z_base_smoother_type), allocatable :: coarse_sm, med_sm, & class(amg_z_base_smoother_type), allocatable :: coarse_sm, med_sm, &
& med_sm2, coarse_sm2 & med_sm2, coarse_sm2
@@ -132,17 +132,24 @@ subroutine amg_z_hierarchy_bld(a,desc_a,prec,info)
newsz = -1 newsz = -1
mxplevs = prec%ag_data%max_levs mxplevs = prec%ag_data%max_levs
mnaggratio = prec%ag_data%min_cr_ratio mnaggratio = prec%ag_data%min_cr_ratio
casize = prec%ag_data%min_coarse_size mncsize = prec%ag_data%min_coarse_size
mncszpp = prec%ag_data%min_coarse_size_per_process
iszv = size(prec%precv) iszv = size(prec%precv)
call psb_bcast(ctxt,iszv) call psb_bcast(ctxt,iszv)
call psb_bcast(ctxt,casize) call psb_bcast(ctxt,mncsize)
call psb_bcast(ctxt,mncszpp)
call psb_bcast(ctxt,mxplevs) call psb_bcast(ctxt,mxplevs)
call psb_bcast(ctxt,mnaggratio) call psb_bcast(ctxt,mnaggratio)
if (casize /= prec%ag_data%min_coarse_size) then if (mncsize /= prec%ag_data%min_coarse_size) then
info=psb_err_internal_error_ info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent min_coarse_size') call psb_errpush(info,name,a_err='Inconsistent min_coarse_size')
goto 9999 goto 9999
end if end if
if (mncszpp /= prec%ag_data%min_coarse_size_per_process) then
info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent min_coarse_size_per_process')
goto 9999
end if
if (mxplevs /= prec%ag_data%max_levs) then if (mxplevs /= prec%ag_data%max_levs) then
info=psb_err_internal_error_ info=psb_err_internal_error_
call psb_errpush(info,name,a_err='Inconsistent max_levs') call psb_errpush(info,name,a_err='Inconsistent max_levs')
@@ -175,7 +182,7 @@ subroutine amg_z_hierarchy_bld(a,desc_a,prec,info)
! !
prec%precv(1)%base_a => a prec%precv(1)%base_a => a
prec%precv(1)%base_desc => desc_a prec%precv(1)%base_desc => desc_a
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
endif endif
@@ -192,26 +199,23 @@ subroutine amg_z_hierarchy_bld(a,desc_a,prec,info)
! coarse size is hit, or the gain falls below the min_cr_ratio ! coarse size is hit, or the gain falls below the min_cr_ratio
! threshold. ! threshold.
! !
if ((mncszpp < 0).and.(mncsize<0)) then
if (casize < 0) then mncszpp = 200
! prec%ag_data%min_coarse_size_per_process = mncszpp
! Default to the cubic root of the size at base level.
!
casize = desc_a%get_global_rows()
casize = int((done*casize)**(done/(done*3)),psb_lpk_)
casize = max(casize,lone)
casize = casize*40_psb_lpk_
call psb_bcast(ctxt,casize)
if (casize > huge(prec%ag_data%min_coarse_size)) then
!
! computed coarse size does not fit in IPK_.
! This is very unlikely, but make sure to put a positive number
!
prec%ag_data%min_coarse_size = huge(prec%ag_data%min_coarse_size)
else
prec%ag_data%min_coarse_size = casize
end if
end if end if
if (mncszpp > 0) then
casize = mncszpp*np
if (casize > huge(ione)) casize = huge(ione)
else
if (mncsize < np) then
if (me == 0) write(0,*) &
& 'Warning: resetting coarse size to NP (1 variable per process)'
mncsize = np
end if
casize = mncsize
end if
prec%ag_data%target_coarse_size = casize
nplevs = max(itwo,mxplevs) nplevs = max(itwo,mxplevs)
! !
@@ -248,7 +252,7 @@ subroutine amg_z_hierarchy_bld(a,desc_a,prec,info)
end do end do
deallocate(tmp_aggr,stat=info) deallocate(tmp_aggr,stat=info)
end if end if
! Then coarse ! Then coarse
if (info == 0) tprecv(nplevs)%parms = coarseparms if (info == 0) tprecv(nplevs)%parms = coarseparms
if (info == 0) call restore_smoothers(tprecv(nplevs),coarse_sm,coarse_sm2,info) if (info == 0) call restore_smoothers(tprecv(nplevs),coarse_sm,coarse_sm2,info)
@@ -369,7 +373,7 @@ subroutine amg_z_hierarchy_bld(a,desc_a,prec,info)
end if end if
end if end if
call psb_bcast(ctxt,newsz) call psb_bcast(ctxt,newsz)
if (newsz > 0) then if (newsz > 0) then
! !
! This is awkward, we are saving the aggregation parms, for the sake ! This is awkward, we are saving the aggregation parms, for the sake
@@ -380,7 +384,7 @@ subroutine amg_z_hierarchy_bld(a,desc_a,prec,info)
if (info == 0) prec%precv(newsz)%parms = coarseparms if (info == 0) prec%precv(newsz)%parms = coarseparms
prec%precv(newsz)%parms%aggr_thresh = athresh prec%precv(newsz)%parms%aggr_thresh = athresh
prec%precv(newsz)%parms%aggr_omega_val = aomega prec%precv(newsz)%parms%aggr_omega_val = aomega
if (info == 0) call restore_smoothers(prec%precv(newsz),& if (info == 0) call restore_smoothers(prec%precv(newsz),&
& coarse_sm,coarse_sm2,info) & coarse_sm,coarse_sm2,info)
if (newsz < i) then if (newsz < i) then
@@ -476,7 +480,7 @@ subroutine amg_z_hierarchy_bld(a,desc_a,prec,info)
lv%linmap%p_desc_V => rmp%desc_ac_pre_remap lv%linmap%p_desc_V => rmp%desc_ac_pre_remap
lv%base_a => lv%ac lv%base_a => lv%ac
lv%base_desc => lv%desc_ac lv%base_desc => lv%desc_ac
end associate end associate
end if end if
end if end if
@@ -525,7 +529,7 @@ contains
allocate(save2, mold=level%sm2a,stat=info) allocate(save2, mold=level%sm2a,stat=info)
if (info == 0) call level%sm2a%clone_settings(save2,info) if (info == 0) call level%sm2a%clone_settings(save2,info)
end if end if
return return
end subroutine save_smoothers end subroutine save_smoothers
@@ -544,9 +548,9 @@ contains
if (info == 0) allocate(level%sm,mold=save1,stat=info) if (info == 0) allocate(level%sm,mold=save1,stat=info)
if (info == 0) call save1%clone_settings(level%sm,info) if (info == 0) call save1%clone_settings(level%sm,info)
end if end if
if (info /= 0) return if (info /= 0) return
if (allocated(level%sm2a)) then if (allocated(level%sm2a)) then
if (info == 0) call level%sm2a%free(info) if (info == 0) call level%sm2a%free(info)
if (info == 0) deallocate(level%sm2a,stat=info) if (info == 0) deallocate(level%sm2a,stat=info)
@@ -560,6 +564,6 @@ contains
end if end if
return return
end subroutine restore_smoothers end subroutine restore_smoothers
end subroutine amg_z_hierarchy_bld end subroutine amg_z_hierarchy_bld
+20
View File
@@ -158,6 +158,9 @@ subroutine amg_zcprecseti(p,what,val,info,ilev,ilmax,pos,idx)
case ('MIN_COARSE_SIZE') case ('MIN_COARSE_SIZE')
p%ag_data%min_coarse_size = max(val,-1) p%ag_data%min_coarse_size = max(val,-1)
return return
case ('MIN_COARSE_SIZE_PER_PROCESS')
p%ag_data%min_coarse_size_per_process = max(val,-1)
return
case('MAX_LEVS') case('MAX_LEVS')
p%ag_data%max_levs = max(val,1) p%ag_data%max_levs = max(val,1)
return return
@@ -302,6 +305,7 @@ subroutine amg_zcprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
#if defined(HAVE_MUMPS_) #if defined(HAVE_MUMPS_)
use amg_z_mumps_solver use amg_z_mumps_solver
#endif #endif
use amg_z_rkr_solver, only : amg_z_rkr_solver_type
implicit none implicit none
@@ -546,6 +550,14 @@ subroutine amg_zcprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos) call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos)
call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos)
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
case('RKR')
block
type(amg_z_rkr_solver_type) :: rkr_slv
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_bjac_,info,pos=pos)
call p%precv(nlev_)%set(rkr_slv,info)
call p%precv(nlev_)%default()
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
end block
end select end select
end if end if
@@ -702,6 +714,14 @@ subroutine amg_zcprecsetc(p,what,string,info,ilev,ilmax,pos,idx)
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos) call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_l1_bjac_,info,pos=pos)
call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',amg_gs_,info,pos=pos)
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
case('RKR')
block
type(amg_z_rkr_solver_type) :: rkr_slv
call p%precv(nlev_)%set('SMOOTHER_TYPE',amg_bjac_,info,pos=pos)
call p%precv(nlev_)%set(rkr_slv,info)
call p%precv(nlev_)%default()
call p%precv(nlev_)%set('COARSE_MAT',amg_distr_mat_,info,pos=pos)
end block
end select end select
endif endif
+98 -82
View File
@@ -58,17 +58,26 @@
! The id of the process printing the message; -1 acts as a wildcard. ! The id of the process printing the message; -1 acts as a wildcard.
! Default is psb_root_ ! Default is psb_root_
! !
subroutine amg_zfile_prec_descr(prec,iout,root) !
!
! verbosity:
! <0: suppress all messages
! 0: normal
! >1: increased details
!
subroutine amg_zfile_prec_descr(prec,iout,root, verbosity)
use psb_base_mod use psb_base_mod
use amg_z_prec_mod, amg_protect_name => amg_zfile_prec_descr use amg_z_prec_mod, amg_protect_name => amg_zfile_prec_descr
use amg_z_inner_mod use amg_z_inner_mod
use amg_z_gs_solver use amg_z_gs_solver
implicit none implicit none
! Arguments ! Arguments
class(amg_zprec_type), intent(in) :: prec class(amg_zprec_type), intent(in) :: prec
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: root integer(psb_ipk_), intent(in), optional :: root
integer(psb_ipk_), intent(in), optional :: verbosity
! Local variables ! Local variables
integer(psb_ipk_) :: ilev, nlev, ilmin, info, nswps integer(psb_ipk_) :: ilev, nlev, ilmin, info, nswps
@@ -76,8 +85,7 @@ subroutine amg_zfile_prec_descr(prec,iout,root)
integer(psb_ipk_) :: me, np integer(psb_ipk_) :: me, np
logical :: is_symgs logical :: is_symgs
character(len=20), parameter :: name='amg_file_prec_descr' character(len=20), parameter :: name='amg_file_prec_descr'
integer(psb_ipk_) :: iout_ integer(psb_ipk_) :: iout_, root_, verbosity_
integer(psb_ipk_) :: root_
info = psb_success_ info = psb_success_
if (present(iout)) then if (present(iout)) then
@@ -86,6 +94,12 @@ subroutine amg_zfile_prec_descr(prec,iout,root)
iout_ = psb_out_unit iout_ = psb_out_unit
end if end if
if (iout_ < 0) iout_ = psb_out_unit if (iout_ < 0) iout_ = psb_out_unit
if (present(verbosity)) then
verbosity_ = verbosity
else
verbosity_ = 0
end if
if (verbosity_ < 0) goto 9998
ctxt = prec%ctxt ctxt = prec%ctxt
@@ -99,102 +113,104 @@ subroutine amg_zfile_prec_descr(prec,iout,root)
end if end if
if (root_ == -1) root_ = me if (root_ == -1) root_ = me
! if (verbosity_ >=0) then
! The preconditioner description is printed by processor psb_root_. !
! This agrees with the fact that all the parameters defining the ! The preconditioner description is printed by processor psb_root_.
! preconditioner have the same values on all the procs (this is ! This agrees with the fact that all the parameters defining the
! ensured by amg_precbld). ! preconditioner have the same values on all the procs (this is
! ! ensured by amg_precbld).
if (me == root_) then !
nlev = size(prec%precv) if (me == root_) then
do ilev = 1, nlev nlev = size(prec%precv)
if (.not.allocated(prec%precv(ilev)%sm)) then do ilev = 1, nlev
info = 3111 if (.not.allocated(prec%precv(ilev)%sm)) then
write(iout_,*) ' ',name,& info = 3111
& ': error: inconsistent MLPREC part, should call amg_PRECINIT' write(iout_,*) ' ',name,&
return & ': error: inconsistent MLPREC part, should call amg_PRECINIT'
endif return
end do endif
end do
write(iout_,*) write(iout_,*)
write(iout_,'(a)') 'Preconditioner description' write(iout_,'(a)') 'Preconditioner description'
if (nlev == 1) then if (nlev == 1) then
! !
! Here we have a gigantic kludge just to handle Symmetrized Gauss-Seidel. ! Here we have a gigantic kludge just to handle Symmetrized Gauss-Seidel.
! Will need rethinking... ! Will need rethinking...
! !
if (allocated(prec%precv(1)%sm2a)) then if (allocated(prec%precv(1)%sm2a)) then
is_symgs = .false. is_symgs = .false.
select type(sv2 => prec%precv(1)%sm2a%sv) select type(sv2 => prec%precv(1)%sm2a%sv)
class is (amg_z_bwgs_solver_type) class is (amg_z_bwgs_solver_type)
select type(sv1 => prec%precv(1)%sm%sv) select type(sv1 => prec%precv(1)%sm%sv)
class is (amg_z_gs_solver_type) class is (amg_z_gs_solver_type)
is_symgs = .true. is_symgs = .true.
end select
end select end select
end select if (is_symgs) then
if (is_symgs) then write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel'
write(iout_,*) ' Forward-Backward (symmetrized) Hybrid Gauss-Seidel' else
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post)
else else
call prec%precv(1)%sm%descr(info,iout=iout_)
nswps = prec%precv(1)%parms%sweeps_pre
end if
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
else if (nlev > 1) then
!
! Print description of base preconditioner
!
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: ' write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_) call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:' write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_) call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if end if
nswps = max(prec%precv(1)%parms%sweeps_pre,prec%precv(1)%parms%sweeps_post) !
! Print multilevel details
!
write(iout_,*)
write(iout_,*) 'Multilevel hierarchy: '
write(iout_,*) ' Number of levels : ',nlev
write(iout_,*) ' Operator complexity: ',prec%get_complexity()
write(iout_,*) ' Average coarsening : ',prec%get_avg_cr()
ilmin = 2
if (nlev == 2) ilmin=1
do ilev=ilmin,nlev
call prec%precv(ilev)%descr(ilev,nlev,ilmin,info, &
& iout=iout_,verbosity=verbosity)
end do
write(iout_,*)
else else
call prec%precv(1)%sm%descr(info,iout=iout_) write(iout_,*) trim(name), &
nswps = prec%precv(1)%parms%sweeps_pre & ': invalid preconditioner array size ?',nlev
info = -2
return
end if end if
if (nswps > 1) write(iout_,*) ' Number of sweeps : ',nswps
write(iout_,*)
else if (nlev > 1) then
!
! Print description of base preconditioner
!
write(iout_,*) 'Multilevel Preconditioner'
write(iout_,*) 'Outer sweeps:',prec%outer_sweeps
write(iout_,*)
if (allocated(prec%precv(1)%sm2a)) then
write(iout_,*) 'Pre Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
write(iout_,*) 'Post smoother:'
call prec%precv(1)%sm2a%descr(info,iout=iout_)
else
write(iout_,*) 'Smoother: '
call prec%precv(1)%sm%descr(info,iout=iout_)
end if
!
! Print multilevel details
!
write(iout_,*)
write(iout_,*) 'Multilevel hierarchy: '
write(iout_,*) ' Number of levels : ',nlev
write(iout_,*) ' Operator complexity: ',prec%get_complexity()
write(iout_,*) ' Average coarsening : ',prec%get_avg_cr()
ilmin = 2
if (nlev == 2) ilmin=1
do ilev=ilmin,nlev
call prec%precv(ilev)%descr(ilev,nlev,ilmin,info,iout=iout_)
end do
write(iout_,*)
else
write(iout_,*) trim(name), &
& ': invalid preconditioner array size ?',nlev
info = -2
return
end if end if
end if end if
else else
write(iout_,*) trim(name), & write(iout_,*) trim(name), &
& ': Error: no base preconditioner available, something is wrong!' & ': Error: no base preconditioner available, something is wrong!'
info = -2 info = -2
return return
endif endif
9998 continue
end subroutine amg_zfile_prec_descr end subroutine amg_zfile_prec_descr
+2 -1
View File
@@ -127,7 +127,8 @@ subroutine amg_zprecinit(ctxt,prec,ptype,info)
endif endif
endif endif
prec%ctxt = ctxt prec%ctxt = ctxt
prec%ag_data%min_coarse_size = -1 prec%ag_data%min_coarse_size = -1
prec%ag_data%min_coarse_size_per_process = -1
select case(psb_toupper(trim(ptype))) select case(psb_toupper(trim(ptype)))
case ('NOPREC','NONE') case ('NOPREC','NONE')
+36 -9
View File
@@ -35,21 +35,30 @@
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
subroutine amg_c_base_onelev_descr(lv,il,nl,ilmin,info,iout) !
!
! verbosity:
! <0: suppress all messages
! 0: normal
! >1: increased details
!
subroutine amg_c_base_onelev_descr(lv,il,nl,ilmin,info,iout,verbosity)
use psb_base_mod use psb_base_mod
use amg_c_onelev_mod, amg_protect_name => amg_c_base_onelev_descr use amg_c_onelev_mod, amg_protect_name => amg_c_base_onelev_descr
Implicit None Implicit None
! Arguments ! Arguments
class(amg_c_onelev_type), intent(in) :: lv class(amg_c_onelev_type), intent(in) :: lv
integer(psb_ipk_), intent(in) :: il,nl,ilmin integer(psb_ipk_), intent(in) :: il,nl,ilmin
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: verbosity
! Local variables ! Local variables
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=20), parameter :: name='amg_c_base_onelev_descr' character(len=20), parameter :: name='amg_c_base_onelev_descr'
integer(psb_ipk_) :: iout_ integer(psb_ipk_) :: iout_, verbosity_
logical :: coarse logical :: coarse
@@ -63,6 +72,13 @@ subroutine amg_c_base_onelev_descr(lv,il,nl,ilmin,info,iout)
else else
iout_ = psb_out_unit iout_ = psb_out_unit
end if end if
if (present(verbosity)) then
verbosity_ = verbosity
else
verbosity_ = 0
end if
if (verbosity_ < 0) goto 9998
write(iout_,*) write(iout_,*)
if (il == ilmin) then if (il == ilmin) then
@@ -91,10 +107,20 @@ subroutine amg_c_base_onelev_descr(lv,il,nl,ilmin,info,iout)
if (nl > 1) then if (nl > 1) then
if (allocated(lv%linmap%naggr)) then if (allocated(lv%linmap%naggr)) then
write(iout_,*) ' Coarse Matrix: Global size: ', & write(iout_,*) ' Coarse Matrix: Global size: ', &
& sum((1_psb_lpk_*lv%linmap%naggr(:))),' Nonzeros: ',lv%ac_nz_tot & lv%linmap%nagtot
write(iout_,*) ' Local matrix sizes: ', & write(iout_,*) ' Nonzeros: ',lv%ac_nz_tot
& lv%linmap%naggr(:) if (verbosity_>0) then
write(iout_,*) ' Aggregation ratio: ', & write(iout_,*) ' Local matrix sizes: ', &
& lv%linmap%naggr(:)
else
write(iout_,'(2(a,1x,i12))') &
& ' Local matrix sizes: min:', &
& lv%linmap%nagmin,' max:', lv%linmap%nagmax
write(iout_,'(a,1x,f14.1)') &
& ' avg:', &
& lv%linmap%nagavg
end if
write(iout_,'(a,1x,f14.2)') ' Aggregation ratio: ', &
& lv%szratio & lv%szratio
end if end if
end if end if
@@ -102,7 +128,8 @@ subroutine amg_c_base_onelev_descr(lv,il,nl,ilmin,info,iout)
if (coarse.and.allocated(lv%sm)) & if (coarse.and.allocated(lv%sm)) &
& call lv%sm%descr(info,iout=iout_,coarse=coarse) & call lv%sm%descr(info,iout=iout_,coarse=coarse)
end if end if
9998 continue
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
+36 -9
View File
@@ -35,21 +35,30 @@
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
subroutine amg_d_base_onelev_descr(lv,il,nl,ilmin,info,iout) !
!
! verbosity:
! <0: suppress all messages
! 0: normal
! >1: increased details
!
subroutine amg_d_base_onelev_descr(lv,il,nl,ilmin,info,iout,verbosity)
use psb_base_mod use psb_base_mod
use amg_d_onelev_mod, amg_protect_name => amg_d_base_onelev_descr use amg_d_onelev_mod, amg_protect_name => amg_d_base_onelev_descr
Implicit None Implicit None
! Arguments ! Arguments
class(amg_d_onelev_type), intent(in) :: lv class(amg_d_onelev_type), intent(in) :: lv
integer(psb_ipk_), intent(in) :: il,nl,ilmin integer(psb_ipk_), intent(in) :: il,nl,ilmin
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: verbosity
! Local variables ! Local variables
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=20), parameter :: name='amg_d_base_onelev_descr' character(len=20), parameter :: name='amg_d_base_onelev_descr'
integer(psb_ipk_) :: iout_ integer(psb_ipk_) :: iout_, verbosity_
logical :: coarse logical :: coarse
@@ -63,6 +72,13 @@ subroutine amg_d_base_onelev_descr(lv,il,nl,ilmin,info,iout)
else else
iout_ = psb_out_unit iout_ = psb_out_unit
end if end if
if (present(verbosity)) then
verbosity_ = verbosity
else
verbosity_ = 0
end if
if (verbosity_ < 0) goto 9998
write(iout_,*) write(iout_,*)
if (il == ilmin) then if (il == ilmin) then
@@ -91,10 +107,20 @@ subroutine amg_d_base_onelev_descr(lv,il,nl,ilmin,info,iout)
if (nl > 1) then if (nl > 1) then
if (allocated(lv%linmap%naggr)) then if (allocated(lv%linmap%naggr)) then
write(iout_,*) ' Coarse Matrix: Global size: ', & write(iout_,*) ' Coarse Matrix: Global size: ', &
& sum((1_psb_lpk_*lv%linmap%naggr(:))),' Nonzeros: ',lv%ac_nz_tot & lv%linmap%nagtot
write(iout_,*) ' Local matrix sizes: ', & write(iout_,*) ' Nonzeros: ',lv%ac_nz_tot
& lv%linmap%naggr(:) if (verbosity_>0) then
write(iout_,*) ' Aggregation ratio: ', & write(iout_,*) ' Local matrix sizes: ', &
& lv%linmap%naggr(:)
else
write(iout_,'(2(a,1x,i12))') &
& ' Local matrix sizes: min:', &
& lv%linmap%nagmin,' max:', lv%linmap%nagmax
write(iout_,'(a,1x,f14.1)') &
& ' avg:', &
& lv%linmap%nagavg
end if
write(iout_,'(a,1x,f14.2)') ' Aggregation ratio: ', &
& lv%szratio & lv%szratio
end if end if
end if end if
@@ -102,7 +128,8 @@ subroutine amg_d_base_onelev_descr(lv,il,nl,ilmin,info,iout)
if (coarse.and.allocated(lv%sm)) & if (coarse.and.allocated(lv%sm)) &
& call lv%sm%descr(info,iout=iout_,coarse=coarse) & call lv%sm%descr(info,iout=iout_,coarse=coarse)
end if end if
9998 continue
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
+36 -9
View File
@@ -35,21 +35,30 @@
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
subroutine amg_s_base_onelev_descr(lv,il,nl,ilmin,info,iout) !
!
! verbosity:
! <0: suppress all messages
! 0: normal
! >1: increased details
!
subroutine amg_s_base_onelev_descr(lv,il,nl,ilmin,info,iout,verbosity)
use psb_base_mod use psb_base_mod
use amg_s_onelev_mod, amg_protect_name => amg_s_base_onelev_descr use amg_s_onelev_mod, amg_protect_name => amg_s_base_onelev_descr
Implicit None Implicit None
! Arguments ! Arguments
class(amg_s_onelev_type), intent(in) :: lv class(amg_s_onelev_type), intent(in) :: lv
integer(psb_ipk_), intent(in) :: il,nl,ilmin integer(psb_ipk_), intent(in) :: il,nl,ilmin
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: verbosity
! Local variables ! Local variables
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=20), parameter :: name='amg_s_base_onelev_descr' character(len=20), parameter :: name='amg_s_base_onelev_descr'
integer(psb_ipk_) :: iout_ integer(psb_ipk_) :: iout_, verbosity_
logical :: coarse logical :: coarse
@@ -63,6 +72,13 @@ subroutine amg_s_base_onelev_descr(lv,il,nl,ilmin,info,iout)
else else
iout_ = psb_out_unit iout_ = psb_out_unit
end if end if
if (present(verbosity)) then
verbosity_ = verbosity
else
verbosity_ = 0
end if
if (verbosity_ < 0) goto 9998
write(iout_,*) write(iout_,*)
if (il == ilmin) then if (il == ilmin) then
@@ -91,10 +107,20 @@ subroutine amg_s_base_onelev_descr(lv,il,nl,ilmin,info,iout)
if (nl > 1) then if (nl > 1) then
if (allocated(lv%linmap%naggr)) then if (allocated(lv%linmap%naggr)) then
write(iout_,*) ' Coarse Matrix: Global size: ', & write(iout_,*) ' Coarse Matrix: Global size: ', &
& sum((1_psb_lpk_*lv%linmap%naggr(:))),' Nonzeros: ',lv%ac_nz_tot & lv%linmap%nagtot
write(iout_,*) ' Local matrix sizes: ', & write(iout_,*) ' Nonzeros: ',lv%ac_nz_tot
& lv%linmap%naggr(:) if (verbosity_>0) then
write(iout_,*) ' Aggregation ratio: ', & write(iout_,*) ' Local matrix sizes: ', &
& lv%linmap%naggr(:)
else
write(iout_,'(2(a,1x,i12))') &
& ' Local matrix sizes: min:', &
& lv%linmap%nagmin,' max:', lv%linmap%nagmax
write(iout_,'(a,1x,f14.1)') &
& ' avg:', &
& lv%linmap%nagavg
end if
write(iout_,'(a,1x,f14.2)') ' Aggregation ratio: ', &
& lv%szratio & lv%szratio
end if end if
end if end if
@@ -102,7 +128,8 @@ subroutine amg_s_base_onelev_descr(lv,il,nl,ilmin,info,iout)
if (coarse.and.allocated(lv%sm)) & if (coarse.and.allocated(lv%sm)) &
& call lv%sm%descr(info,iout=iout_,coarse=coarse) & call lv%sm%descr(info,iout=iout_,coarse=coarse)
end if end if
9998 continue
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
+36 -9
View File
@@ -35,21 +35,30 @@
! POSSIBILITY OF SUCH DAMAGE. ! POSSIBILITY OF SUCH DAMAGE.
! !
! !
subroutine amg_z_base_onelev_descr(lv,il,nl,ilmin,info,iout) !
!
! verbosity:
! <0: suppress all messages
! 0: normal
! >1: increased details
!
subroutine amg_z_base_onelev_descr(lv,il,nl,ilmin,info,iout,verbosity)
use psb_base_mod use psb_base_mod
use amg_z_onelev_mod, amg_protect_name => amg_z_base_onelev_descr use amg_z_onelev_mod, amg_protect_name => amg_z_base_onelev_descr
Implicit None Implicit None
! Arguments ! Arguments
class(amg_z_onelev_type), intent(in) :: lv class(amg_z_onelev_type), intent(in) :: lv
integer(psb_ipk_), intent(in) :: il,nl,ilmin integer(psb_ipk_), intent(in) :: il,nl,ilmin
integer(psb_ipk_), intent(out) :: info integer(psb_ipk_), intent(out) :: info
integer(psb_ipk_), intent(in), optional :: iout integer(psb_ipk_), intent(in), optional :: iout
integer(psb_ipk_), intent(in), optional :: verbosity
! Local variables ! Local variables
integer(psb_ipk_) :: err_act integer(psb_ipk_) :: err_act
character(len=20), parameter :: name='amg_z_base_onelev_descr' character(len=20), parameter :: name='amg_z_base_onelev_descr'
integer(psb_ipk_) :: iout_ integer(psb_ipk_) :: iout_, verbosity_
logical :: coarse logical :: coarse
@@ -63,6 +72,13 @@ subroutine amg_z_base_onelev_descr(lv,il,nl,ilmin,info,iout)
else else
iout_ = psb_out_unit iout_ = psb_out_unit
end if end if
if (present(verbosity)) then
verbosity_ = verbosity
else
verbosity_ = 0
end if
if (verbosity_ < 0) goto 9998
write(iout_,*) write(iout_,*)
if (il == ilmin) then if (il == ilmin) then
@@ -91,10 +107,20 @@ subroutine amg_z_base_onelev_descr(lv,il,nl,ilmin,info,iout)
if (nl > 1) then if (nl > 1) then
if (allocated(lv%linmap%naggr)) then if (allocated(lv%linmap%naggr)) then
write(iout_,*) ' Coarse Matrix: Global size: ', & write(iout_,*) ' Coarse Matrix: Global size: ', &
& sum((1_psb_lpk_*lv%linmap%naggr(:))),' Nonzeros: ',lv%ac_nz_tot & lv%linmap%nagtot
write(iout_,*) ' Local matrix sizes: ', & write(iout_,*) ' Nonzeros: ',lv%ac_nz_tot
& lv%linmap%naggr(:) if (verbosity_>0) then
write(iout_,*) ' Aggregation ratio: ', & write(iout_,*) ' Local matrix sizes: ', &
& lv%linmap%naggr(:)
else
write(iout_,'(2(a,1x,i12))') &
& ' Local matrix sizes: min:', &
& lv%linmap%nagmin,' max:', lv%linmap%nagmax
write(iout_,'(a,1x,f14.1)') &
& ' avg:', &
& lv%linmap%nagavg
end if
write(iout_,'(a,1x,f14.2)') ' Aggregation ratio: ', &
& lv%szratio & lv%szratio
end if end if
end if end if
@@ -102,7 +128,8 @@ subroutine amg_z_base_onelev_descr(lv,il,nl,ilmin,info,iout)
if (coarse.and.allocated(lv%sm)) & if (coarse.and.allocated(lv%sm)) &
& call lv%sm%descr(info,iout=iout_,coarse=coarse) & call lv%sm%descr(info,iout=iout_,coarse=coarse)
end if end if
9998 continue
call psb_erractionrestore(err_act) call psb_erractionrestore(err_act)
return return
+8 -22
View File
@@ -198,9 +198,6 @@ amg_s_ainv_solver_csetc.o \
amg_s_ainv_solver_cseti.o \ amg_s_ainv_solver_cseti.o \
amg_s_ainv_solver_csetr.o \ amg_s_ainv_solver_csetr.o \
amg_s_ainv_solver_descr.o \ amg_s_ainv_solver_descr.o \
amg_s_ainv_solver_setc.o \
amg_s_ainv_solver_seti.o \
amg_s_ainv_solver_setr.o \
amg_d_ainv_solver_bld.o \ amg_d_ainv_solver_bld.o \
amg_d_ainv_solver_check.o \ amg_d_ainv_solver_check.o \
amg_d_ainv_solver_clone.o \ amg_d_ainv_solver_clone.o \
@@ -208,9 +205,6 @@ amg_d_ainv_solver_csetc.o \
amg_d_ainv_solver_cseti.o \ amg_d_ainv_solver_cseti.o \
amg_d_ainv_solver_csetr.o \ amg_d_ainv_solver_csetr.o \
amg_d_ainv_solver_descr.o \ amg_d_ainv_solver_descr.o \
amg_d_ainv_solver_setc.o \
amg_d_ainv_solver_seti.o \
amg_d_ainv_solver_setr.o \
amg_c_ainv_solver_bld.o \ amg_c_ainv_solver_bld.o \
amg_c_ainv_solver_check.o \ amg_c_ainv_solver_check.o \
amg_c_ainv_solver_clone.o \ amg_c_ainv_solver_clone.o \
@@ -218,9 +212,13 @@ amg_c_ainv_solver_csetc.o \
amg_c_ainv_solver_cseti.o \ amg_c_ainv_solver_cseti.o \
amg_c_ainv_solver_csetr.o \ amg_c_ainv_solver_csetr.o \
amg_c_ainv_solver_descr.o \ amg_c_ainv_solver_descr.o \
amg_c_ainv_solver_setc.o \ amg_z_ainv_solver_bld.o \
amg_c_ainv_solver_seti.o \ amg_z_ainv_solver_check.o \
amg_c_ainv_solver_setr.o \ amg_z_ainv_solver_clone.o \
amg_z_ainv_solver_csetc.o \
amg_z_ainv_solver_cseti.o \
amg_z_ainv_solver_csetr.o \
amg_z_ainv_solver_descr.o \
amg_s_base_ainv_solver_apply_vect.o \ amg_s_base_ainv_solver_apply_vect.o \
amg_s_base_ainv_solver_apply.o \ amg_s_base_ainv_solver_apply.o \
amg_s_base_ainv_solver_cnv.o \ amg_s_base_ainv_solver_cnv.o \
@@ -251,56 +249,44 @@ amg_d_invt_solver_clone.o \
amg_d_invt_solver_cseti.o \ amg_d_invt_solver_cseti.o \
amg_d_invt_solver_csetr.o \ amg_d_invt_solver_csetr.o \
amg_d_invt_solver_descr.o \ amg_d_invt_solver_descr.o \
amg_d_invt_solver_seti.o \
amg_d_invt_solver_setr.o \
amg_d_invk_solver_bld.o \ amg_d_invk_solver_bld.o \
amg_d_invk_solver_check.o \ amg_d_invk_solver_check.o \
amg_d_invk_solver_clone.o \ amg_d_invk_solver_clone.o \
amg_d_invk_solver_cseti.o \ amg_d_invk_solver_cseti.o \
amg_d_invk_solver_descr.o \ amg_d_invk_solver_descr.o \
amg_d_invk_solver_seti.o \
amg_s_invt_solver_bld.o \ amg_s_invt_solver_bld.o \
amg_s_invt_solver_check.o \ amg_s_invt_solver_check.o \
amg_s_invt_solver_clone.o \ amg_s_invt_solver_clone.o \
amg_s_invt_solver_cseti.o \ amg_s_invt_solver_cseti.o \
amg_s_invt_solver_csetr.o \ amg_s_invt_solver_csetr.o \
amg_s_invt_solver_descr.o \ amg_s_invt_solver_descr.o \
amg_s_invt_solver_seti.o \
amg_s_invt_solver_setr.o \
amg_s_invk_solver_bld.o \ amg_s_invk_solver_bld.o \
amg_s_invk_solver_check.o \ amg_s_invk_solver_check.o \
amg_s_invk_solver_clone.o \ amg_s_invk_solver_clone.o \
amg_s_invk_solver_cseti.o \ amg_s_invk_solver_cseti.o \
amg_s_invk_solver_descr.o \ amg_s_invk_solver_descr.o \
amg_s_invk_solver_seti.o \
amg_c_invt_solver_bld.o \ amg_c_invt_solver_bld.o \
amg_c_invt_solver_check.o \ amg_c_invt_solver_check.o \
amg_c_invt_solver_clone.o \ amg_c_invt_solver_clone.o \
amg_c_invt_solver_cseti.o \ amg_c_invt_solver_cseti.o \
amg_c_invt_solver_csetr.o \ amg_c_invt_solver_csetr.o \
amg_c_invt_solver_descr.o \ amg_c_invt_solver_descr.o \
amg_c_invt_solver_seti.o \
amg_c_invt_solver_setr.o \
amg_c_invk_solver_bld.o \ amg_c_invk_solver_bld.o \
amg_c_invk_solver_check.o \ amg_c_invk_solver_check.o \
amg_c_invk_solver_clone.o \ amg_c_invk_solver_clone.o \
amg_c_invk_solver_cseti.o \ amg_c_invk_solver_cseti.o \
amg_c_invk_solver_descr.o \ amg_c_invk_solver_descr.o \
amg_c_invk_solver_seti.o \
amg_z_invt_solver_bld.o \ amg_z_invt_solver_bld.o \
amg_z_invt_solver_check.o \ amg_z_invt_solver_check.o \
amg_z_invt_solver_clone.o \ amg_z_invt_solver_clone.o \
amg_z_invt_solver_cseti.o \ amg_z_invt_solver_cseti.o \
amg_z_invt_solver_csetr.o \ amg_z_invt_solver_csetr.o \
amg_z_invt_solver_descr.o \ amg_z_invt_solver_descr.o \
amg_z_invt_solver_seti.o \
amg_z_invt_solver_setr.o \
amg_z_invk_solver_bld.o \ amg_z_invk_solver_bld.o \
amg_z_invk_solver_check.o \ amg_z_invk_solver_check.o \
amg_z_invk_solver_clone.o \ amg_z_invk_solver_clone.o \
amg_z_invk_solver_cseti.o \ amg_z_invk_solver_cseti.o \
amg_z_invk_solver_descr.o \ amg_z_invk_solver_descr.o
amg_z_invk_solver_seti.o
LIBNAME=libamg_prec.a LIBNAME=libamg_prec.a
+4 -4
View File
@@ -6,20 +6,20 @@ LIBDIR=../lib
INCDIR=../include INCDIR=../include
MODDIR=../modules/ MODDIR=../modules/
LIBNAME=$(CBINDLIBNAME) LIBNAME=$(CBINDLIBNAME)
LIBNAME=libmld_cbind.a LIBNAME=libamg_cbind.a
all: lib all: lib
lib: amgprecd lib: amgprecd
/bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR) /bin/cp -p $(CPUPDFLAG) $(HERE)/$(LIBNAME) $(LIBDIR)
/bin/cp -p $(CPUPDFLAG) *.h $(INCDIR) /bin/cp -p $(CPUPDFLAG) *.h $(INCDIR)
/bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR) /bin/cp -p $(CPUPDFLAG) *$(.mod) $(MODDIR)
amgprecd: amgprecd:
$(MAKE) -C amgprec lib LIBNAME=$(LIBNAME) $(MAKE) -C amgprec lib LIBNAME=$(LIBNAME)
clean: clean:
$(MAKE) -C amgprec clean $(MAKE) -C amgprec clean
+3 -3
View File
@@ -14,9 +14,9 @@ OBJS=amg_prec_cbind_mod.o amg_dprec_cbind_mod.o amg_c_dprec.o amg_zprec_cbind_m
CMOD=amg_cbind.h amg_c_dprec.h amg_c_zprec.h amg_const.h CMOD=amg_cbind.h amg_c_dprec.h amg_c_zprec.h amg_const.h
LIBMOD=amg_prec_cbind_mod$(.mod) amg_dprec_cbind_mod$(.mod) amg_zprec_cbind_mod$(.mod) LIBMOD=amg_prec_cbind_mod$(.mod) amg_dprec_cbind_mod$(.mod) amg_zprec_cbind_mod$(.mod)
LOCAL_MODS=$(LIBMOD) LOCAL_MODS=$(LIBMOD)
#LIBNAME=$(CPRECLIBNAME) #LIBNAME=$(CPRECLIBNAME)
lib: $(OBJS) $(CMOD) lib: $(OBJS) $(CMOD)
@@ -25,7 +25,7 @@ lib: $(OBJS) $(CMOD)
/bin/cp -p $(HERE)/$(LIBNAME) $(DEST) /bin/cp -p $(HERE)/$(LIBNAME) $(DEST)
/bin/cp -p $(LIBMOD) $(CMOD) $(DEST) /bin/cp -p $(LIBMOD) $(CMOD) $(DEST)
amg_prec_cbind_mod.o: amg_dprec_cbind_mod.o amg_zprec_cbind_mod.o amg_prec_cbind_mod.o: amg_dprec_cbind_mod.o amg_zprec_cbind_mod.o
#amg_prec_cbind_mod.o: psb_prec_cbind_mod.o #amg_prec_cbind_mod.o: psb_prec_cbind_mod.o
veryclean: clean veryclean: clean
/bin/rm -f $(HERE)/$(LIBNAME) /bin/rm -f $(HERE)/$(LIBNAME)
+8 -8
View File
@@ -77,7 +77,7 @@ contains
call stringc2f(what,fwhat) call stringc2f(what,fwhat)
call amg_precset(precp,fwhat,val,info) call precp%set(fwhat,val,info)
res = MLDC_ERR_FILTER(info) res = MLDC_ERR_FILTER(info)
MLDC_ERR_HANDLE(res) MLDC_ERR_HANDLE(res)
@@ -107,7 +107,7 @@ contains
call stringc2f(what,fwhat) call stringc2f(what,fwhat)
call amg_precset(precp,fwhat,val,info) call precp%set(fwhat,val,info)
res = MLDC_ERR_FILTER(info) res = MLDC_ERR_FILTER(info)
MLDC_ERR_HANDLE(res) MLDC_ERR_HANDLE(res)
@@ -136,7 +136,7 @@ contains
call stringc2f(what,fwhat) call stringc2f(what,fwhat)
call stringc2f(val,fval) call stringc2f(val,fval)
call amg_precset(precp,fwhat,fval,info) call precp%set(fwhat,fval,info)
res = MLDC_ERR_FILTER(info) res = MLDC_ERR_FILTER(info)
MLDC_ERR_HANDLE(res) MLDC_ERR_HANDLE(res)
@@ -381,12 +381,12 @@ contains
use psb_base_mod use psb_base_mod
use amg_prec_mod use amg_prec_mod
implicit none implicit none
integer(psb_c_ipk_) :: res integer(psb_c_ipk_) :: res
type(psb_c_object_type) :: ph type(psb_c_object_type) :: ph
integer :: info integer :: info
type(amg_dprec_type), pointer :: precp type(amg_dprec_type), pointer :: precp
res = -1 res = -1
info = -1 info = -1
if (c_associated(ph%item)) then if (c_associated(ph%item)) then
@@ -394,11 +394,11 @@ contains
else else
return return
end if end if
call precp%descr() call precp%descr()
call flush(psb_out_unit) call flush(psb_out_unit)
info = 0 info = 0
res = MLDC_ERR_FILTER(info) res = MLDC_ERR_FILTER(info)
MLDC_ERR_HANDLE(res) MLDC_ERR_HANDLE(res)
+8 -8
View File
@@ -77,7 +77,7 @@ contains
call stringc2f(what,fwhat) call stringc2f(what,fwhat)
call amg_precset(precp,fwhat,val,info) call precp%set(fwhat,val,info)
res = MLDC_ERR_FILTER(info) res = MLDC_ERR_FILTER(info)
MLDC_ERR_HANDLE(res) MLDC_ERR_HANDLE(res)
@@ -107,7 +107,7 @@ contains
call stringc2f(what,fwhat) call stringc2f(what,fwhat)
call amg_precset(precp,fwhat,val,info) call precp%set(fwhat,val,info)
res = MLDC_ERR_FILTER(info) res = MLDC_ERR_FILTER(info)
MLDC_ERR_HANDLE(res) MLDC_ERR_HANDLE(res)
@@ -136,7 +136,7 @@ contains
call stringc2f(what,fwhat) call stringc2f(what,fwhat)
call stringc2f(val,fval) call stringc2f(val,fval)
call amg_precset(precp,fwhat,fval,info) call precp%set(fwhat,fval,info)
res = MLDC_ERR_FILTER(info) res = MLDC_ERR_FILTER(info)
MLDC_ERR_HANDLE(res) MLDC_ERR_HANDLE(res)
@@ -381,12 +381,12 @@ contains
use psb_base_mod use psb_base_mod
use amg_prec_mod use amg_prec_mod
implicit none implicit none
integer(psb_c_ipk_) :: res integer(psb_c_ipk_) :: res
type(psb_c_object_type) :: ph type(psb_c_object_type) :: ph
integer :: info integer :: info
type(amg_zprec_type), pointer :: precp type(amg_zprec_type), pointer :: precp
res = -1 res = -1
info = -1 info = -1
if (c_associated(ph%item)) then if (c_associated(ph%item)) then
@@ -394,11 +394,11 @@ contains
else else
return return
end if end if
call precp%descr() call precp%descr()
call flush(psb_out_unit) call flush(psb_out_unit)
info = 0 info = 0
res = MLDC_ERR_FILTER(info) res = MLDC_ERR_FILTER(info)
MLDC_ERR_HANDLE(res) MLDC_ERR_HANDLE(res)
+1 -1
View File
@@ -129,7 +129,7 @@ save_FCFLAGS="$FCFLAGS";
AC_PROG_FC([ftn xlf2003_r xlf2003 xlf95_r xlf95 xlf90 xlf pgf95 pgf90 ifort ifc nagfor gfortran]) AC_PROG_FC([ftn xlf2003_r xlf2003 xlf95_r xlf95 xlf90 xlf pgf95 pgf90 ifort ifc nagfor gfortran])
FCFLAGS="$save_FCFLAGS"; FCFLAGS="$save_FCFLAGS";
save_CFLAGS="$CFLAGS"; save_CFLAGS="$CFLAGS";
AC_PROG_CC([xlc pgcc icc gcc cc ]) AC_PROG_CC([cc xlc pgcc icc gcc ])
CFLAGS="$save_CFLAGS"; CFLAGS="$save_CFLAGS";
dnl AC_PROG_CXX dnl AC_PROG_CXX
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

+59 -78
View File
@@ -3,37 +3,35 @@
<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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 93--><p class="noindent" ><span <!--l. 105--><p class="noindent" ><span
class="cmbx-12x-x-144">MLD2P4</span><br class="cmbx-12x-x-144">AMG4PSBLAS</span><br
class="newline" /> <span class="newline" /> <span
class="cmbx-12x-x-144">User&#8217;s and Reference Guide</span><br class="cmbx-12x-x-144">User&#8217;s and Reference Guide</span><br
class="newline" /> <span class="newline" /> <span
class="cmti-12">A guide for the MultiLevel Domain Decomposition Parallel Preconditioners Package</span> class="cmti-12">A guide for the Algebraic MultiGrid Preconditioners Package based on PSBLAS</span><br
<span
class="cmti-12">based on PSBLAS</span><br
class="newline" /> <span class="newline" /> <span
class="cmbx-12">Pasqua D&#8217;Ambra</span><br class="cmbx-12">Pasqua D&#8217;Ambra</span><br
class="newline" /><span class="newline" /><span
class="cmr-12">IAC-CNR, Naples, Italy</span><br class="cmr-12">IAC-CNR, Naples, Italy</span><br
class="newline" /> <span class="newline" /> <span
class="cmbx-12">Daniela di Serafino</span><br class="cmbx-12">Fabio Durastante</span><br
class="newline" /><span class="newline" /><span
class="cmr-12">University of Campania &#8220;Luigi Vanvitelli&#8221;, Caserta, Italy</span><br class="cmr-12">University of Pisa and IAC-CNR</span><br
class="newline" /> <span class="newline" /> <span
class="cmbx-12">Salvatore Filippone </span><br class="cmbx-12">Salvatore Filippone </span><br
class="newline" /><span class="newline" /><span
class="cmr-12">Cranfield University, Cranfield, United Kingdom</span><br class="cmr-12">University of Rome Tor-Vergata and IAC-CNR</span><br
class="newline" /> <span class="newline" /> <span
class="cmr-12">Software version: 2.2</span><br class="cmr-12">Software version: 1.0</span><br
class="newline" /><span class="newline" /><span
class="cmr-12">July 31, 2018</span> class="cmr-12">March 31, 2018</span>
@@ -50,149 +48,132 @@ class="newline" />
<span class="likesectionToc" ><a <span class="likesectionToc" ><a
href="userhtmlli1.html#x2-1000" id="QQ2-2-1"><span href="userhtmlli1.html#x2-1000" id="QQ2-2-1"><span
class="cmr-12">Abstract</span></a></span> class="cmr-12">Abstract</span></a></span>
<br /> <span class="sectionToc" ><a
href="userhtmlli1.html#Q1-2-2"><span
class="cmr-12">Abstract</span></a></span>
<br /> <span class="likesectionToc" ><a <br /> <span class="likesectionToc" ><a
href="userhtmlli2.html#x3-2000" id="QQ2-3-3"><span href="userhtmlli2.html#x3-2000" id="QQ2-3-2"><span
class="cmr-12">Contents</span></a></span> class="cmr-12">Contents</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">1 </span><a class="cmr-12">1 </span><a
href="userhtmlse1.html#x4-30001" id="QQ2-4-4"><span href="userhtmlse1.html#x4-30001" id="QQ2-4-3"><span
class="cmr-12">General Overview</span></a></span> class="cmr-12">General Overview</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">2 </span><a class="cmr-12">2 </span><a
href="userhtmlse2.html#x5-40002" id="QQ2-5-5"><span href="userhtmlse2.html#x5-40002" id="QQ2-5-4"><span
class="cmr-12">Code Distribution</span></a></span> class="cmr-12">Code Distribution</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="likesubsectionToc" ><a class="cmr-12">&#x00A0;</span><span class="likesubsectionToc" ><a
href="userhtmlli3.html#x6-50002" id="QQ2-6-6"><span href="userhtmlli3.html#x6-50002" id="QQ2-6-5"><span
class="cmr-12">Contributors</span></a></span> class="cmr-12">Contributors</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="likesubsectionToc" ><a
href="userhtmlli4.html#x7-60002" id="QQ2-7-6"><span
class="cmr-12">Citing AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">3 </span><a class="cmr-12">3 </span><a
href="userhtmlse3.html#x7-60003" id="QQ2-7-7"><span href="userhtmlse3.html#x8-70003" id="QQ2-8-7"><span
class="cmr-12">Configuring and Building MLD2P4</span></a></span> class="cmr-12">Configuring and Building AMG4PSBLAS</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.1 </span><a class="cmr-12">3.1 </span><a
href="userhtmlsu1.html#x8-70003.1" id="QQ2-8-8"><span href="userhtmlsu1.html#x9-80003.1" id="QQ2-9-8"><span
class="cmr-12">Prerequisites</span></a></span> class="cmr-12">Prerequisites</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.2 </span><a class="cmr-12">3.2 </span><a
href="userhtmlsu2.html#x9-80003.2" id="QQ2-9-9"><span href="userhtmlsu2.html#x10-90003.2" id="QQ2-10-9"><span
class="cmr-12">Optional third party libraries</span></a></span> class="cmr-12">Optional third party libraries</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.3 </span><a class="cmr-12">3.3 </span><a
href="userhtmlsu3.html#x10-90003.3" id="QQ2-10-10"><span href="userhtmlsu3.html#x11-100003.3" id="QQ2-11-10"><span
class="cmr-12">Configuration options</span></a></span> class="cmr-12">Configuration options</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.4 </span><a class="cmr-12">3.4 </span><a
href="userhtmlsu4.html#x11-100003.4" id="QQ2-11-11"><span href="userhtmlsu4.html#x12-110003.4" id="QQ2-12-12"><span
class="cmr-12">Bug reporting</span></a></span> class="cmr-12">Bug reporting</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.5 </span><a class="cmr-12">3.5 </span><a
href="userhtmlsu5.html#x12-110003.5" id="QQ2-12-12"><span href="userhtmlsu5.html#x13-120003.5" id="QQ2-13-13"><span
class="cmr-12">Example and test programs</span></a></span> class="cmr-12">Example and test programs</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">4 </span><a class="cmr-12">4 </span><a
href="userhtmlse4.html#x13-120004" id="QQ2-13-13"><span href="userhtmlse4.html#x14-130004" id="QQ2-14-14"><span
class="cmr-12">Multigrid Background</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.1 </span><a
href="userhtmlsu6.html#x14-130004.1" id="QQ2-14-14"><span
class="cmr-12">AMG preconditioners</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.2 </span><a
href="userhtmlsu7.html#x15-140004.2" id="QQ2-15-16"><span
class="cmr-12">Smoothed Aggregation</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.3 </span><a
href="userhtmlsu8.html#x16-150004.3" id="QQ2-16-17"><span
class="cmr-12">Smoothers and coarsest-level solvers</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">5 </span><a
href="userhtmlse5.html#x17-160005" id="QQ2-17-18"><span
class="cmr-12">Getting Started</span></a></span> class="cmr-12">Getting Started</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.1 </span><a class="cmr-12">4.1 </span><a
href="userhtmlsu9.html#x18-170005.1" id="QQ2-18-20"><span href="userhtmlsu6.html#x15-140004.1" id="QQ2-15-16"><span
class="cmr-12">Examples</span></a></span> class="cmr-12">Examples</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">6 </span><a class="cmr-12">5 </span><a
href="userhtmlse6.html#x19-180006" id="QQ2-19-25"><span href="userhtmlse5.html#x16-150005" id="QQ2-16-21"><span
class="cmr-12">User Interface</span></a></span> class="cmr-12">User Interface</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.1 </span><a class="cmr-12">5.1 </span><a
href="userhtmlsu10.html#x20-190006.1" id="QQ2-20-26"><span href="userhtmlsu7.html#x17-160005.1" id="QQ2-17-22"><span
class="cmr-12">Method init</span></a></span> class="cmr-12">Method init</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.2 </span><a class="cmr-12">5.2 </span><a
href="userhtmlsu11.html#x21-200006.2" id="QQ2-21-27"><span href="userhtmlsu8.html#x18-170005.2" id="QQ2-18-23"><span
class="cmr-12">Method set</span></a></span> class="cmr-12">Method set</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.3 </span><a class="cmr-12">5.3 </span><a
href="userhtmlsu12.html#x22-210006.3" id="QQ2-22-35"><span href="userhtmlsu9.html#x19-180005.3" id="QQ2-19-30"><span
class="cmr-12">Method hierarchy</span><span class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.4 </span><a class="cmr-12">5.4 </span><a
href="userhtmlsu13.html#x23-220006.4" id="QQ2-23-36"><span href="userhtmlsu10.html#x20-190005.4" id="QQ2-20-31"><span
class="cmr-12">Method smoothers</span><span class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.5 </span><a class="cmr-12">5.5 </span><a
href="userhtmlsu14.html#x24-230006.5" id="QQ2-24-37"><span href="userhtmlsu11.html#x21-200005.5" id="QQ2-21-32"><span
class="cmr-12">Method build</span></a></span> class="cmr-12">Method build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.6 </span><a class="cmr-12">5.6 </span><a
href="userhtmlsu15.html#x25-240006.6" id="QQ2-25-38"><span href="userhtmlsu12.html#x22-210005.6" id="QQ2-22-33"><span
class="cmr-12">Method apply</span></a></span> class="cmr-12">Method apply</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.7 </span><a class="cmr-12">5.7 </span><a
href="userhtmlsu16.html#x26-250006.7" id="QQ2-26-39"><span href="userhtmlsu13.html#x23-220005.7" id="QQ2-23-34"><span
class="cmr-12">Method free</span></a></span> class="cmr-12">Method free</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.8 </span><a class="cmr-12">5.8 </span><a
href="userhtmlsu17.html#x27-260006.8" id="QQ2-27-40"><span href="userhtmlsu14.html#x24-230005.8" id="QQ2-24-35"><span
class="cmr-12">Method descr</span></a></span> class="cmr-12">Method descr</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.9 </span><a class="cmr-12">5.9 </span><a
href="userhtmlsu18.html#x28-270006.9" id="QQ2-28-41"><span href="userhtmlsu15.html#x25-240005.9" id="QQ2-25-36"><span
class="cmr-12">Auxiliary Methods</span></a></span> class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">7 </span><a class="cmr-12">6 </span><a
href="userhtmlse7.html#x29-330007" id="QQ2-29-47"><span href="userhtmlse6.html#x26-300006" id="QQ2-26-42"><span
class="cmr-12">Adding new smoother and solver objects to MLD2P4</span></a></span> class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">8 </span><a class="cmr-12">7 </span><a
href="userhtmlse8.html#x30-340008" id="QQ2-30-48"><span href="userhtmlse7.html#x27-310007" id="QQ2-27-43"><span
class="cmr-12">Error Handling</span></a></span> class="cmr-12">Error Handling</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">A </span><a class="cmr-12">A </span><a
href="userhtmlse9.html#x31-35000A" id="QQ2-31-49"><span href="userhtmlse8.html#x28-32000A" id="QQ2-28-44"><span
class="cmr-12">License</span></a></span> class="cmr-12">License</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">B </span><a
href="userhtmlse9.html#x29-33000B" id="QQ2-29-45"><span
class="cmr-12">Contributor Covenant Code of Conduct</span></a></span>
<br /> <span class="likesectionToc" ><a <br /> <span class="likesectionToc" ><a
href="userhtmlli4.html#x32-36000A" id="QQ2-32-50"><span href="userhtmlli5.html#x30-38000B" id="QQ2-30-50"><span
class="cmr-12">References</span></a></span>
<br /> <span class="sectionToc" ><a
href="userhtmlli4.html#Q1-32-51"><span
class="cmr-12">References</span></a></span> class="cmr-12">References</span></a></span>
</div> </div>
+37 -45
View File
@@ -1,5 +1,6 @@
/* start css.sty */ /* start css.sty */
.cmr-7{font-size:63%;}
.cmr-10{font-size:90%;} .cmr-10{font-size:90%;}
.cmmi-10{font-size:90%;font-style: italic;} .cmmi-10{font-size:90%;font-style: italic;}
.cmsy-10{font-size:90%;} .cmsy-10{font-size:90%;}
@@ -7,45 +8,46 @@
.cmbx-12x-x-144{font-size:157%; font-weight: bold;} .cmbx-12x-x-144{font-size:157%; font-weight: bold;}
.cmbx-12x-x-144{ font-weight: bold;} .cmbx-12x-x-144{ font-weight: bold;}
.cmbx-12x-x-144{ font-weight: bold;} .cmbx-12x-x-144{ font-weight: bold;}
.cmti-10x-x-109{ font-style: italic;} .cmbx-12x-x-144{ font-weight: bold;}
.cmti-12{font-size:109%; font-style: italic;} .cmti-12{font-size:109%; font-style: italic;}
.cmr-12{font-size:109%;} .cmr-12{font-size:109%;}
.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;} .cmbx-12{ font-weight: bold;}
.cmtt-12{font-family: monospace;} .cmtt-12{font-size:109%;font-family: monospace,monospace;}
.cmtt-12{font-family: monospace;} .cmtt-12{font-family: monospace,monospace;}
.cmtt-12{font-family: monospace,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%;}
.cmr-6{font-size:54%;}
.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;}
.cmmi-6{font-size:54%;font-style: italic;}
.cmsy-10x-x-120{font-size:109%;}
.cmsy-8{font-size:72%;} .cmsy-8{font-size:72%;}
.cmex-10x-x-120{font-size:109%;} .tctt-1200{font-size:109%;font-family: monospace,monospace;}
.msbm-10x-x-120{font-size:109%;}
.cmmi-10x-x-109{font-style: italic;} .cmmi-10x-x-109{font-style: italic;}
.cmsy-10x-x-109{} .cmsy-10x-x-109{}
.cmex-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;} .cmtt-10{font-size:90%;font-family: monospace,monospace;}
.cmtt-10{font-family: monospace;} .cmtt-10{font-family: monospace,monospace;}
.cmtt-10{font-family: monospace;} .cmtt-10{font-family: monospace,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;} .cmbx-10x-x-109{ font-weight: bold;}
.cmcsc-10{font-size:90%;} .cmcsc-10{font-size:90%;}
.cmti-10{font-size:90%; font-style: italic;} .cmbx-10{font-size:90%; font-weight: bold;}
.cmbx-10{ font-weight: bold;}
.cmbx-10{ font-weight: bold;}
.cmbx-10{ font-weight: bold;}
.small-caps{font-variant: small-caps; } .small-caps{font-variant: small-caps; }
p.noindent { text-indent: 0em } p{margin-top:0;margin-bottom:0}
td p.noindent { text-indent: 0em; margin-top:0em; } p.indent{text-indent:0;}
p.nopar { text-indent: 0em; } p + p{margin-top:1em;}
p.indent{ text-indent: 1.5em } p + div, p + pre {margin-top:1em;}
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; }
@@ -68,7 +70,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;}
div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; } pre.verbatim {font-family: monospace,monospace; 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; }
@@ -101,18 +103,16 @@ 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 : 1px; margin:0px; } .hline hr, .cline hr{ height : 0px; 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 {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} .marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
.marginpar p{margin-top:0.4em; margin-bottom:0.4em;} .marginpar p,.reversemarginpar 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; }
@@ -155,7 +155,11 @@ div.abstract {width:100%;}
.Ovalbox-thick { padding-left:3pt; padding-right:3pt; border:solid thick; } .Ovalbox-thick { padding-left:3pt; padding-right:3pt; border:solid thick; }
.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; }
.figure img.graphics {margin-left:10%;} .rotatebox{display: inline-block;}
.lstlisting .label{margin-right:0.5em; }
div.lstlisting{font-family: monospace,monospace; white-space: nowrap; margin-top:0.5em; margin-bottom:0.5em; }
div.lstinputlisting{ font-family: monospace,monospace; white-space: nowrap; }
.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;}
#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;}
@@ -188,9 +192,9 @@ div.abstract {width:100%;}
#TBL-5{border-collapse:collapse;} #TBL-5{border-collapse:collapse;}
#TBL-5 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-5 colgroup{border-left: 1px solid black;border-right:1px solid black;}
#TBL-5{border-collapse:collapse;} #TBL-5{border-collapse:collapse;}
td#TBL-5-8-5{border-left:solid black 0.4pt;border-right:solid black 0.4pt;}
td#TBL-5-9-5{border-left:solid black 0.4pt;border-right:solid black 0.4pt;}
td#TBL-5-10-5{border-left:solid black 0.4pt;border-right:solid black 0.4pt;} td#TBL-5-10-5{border-left:solid black 0.4pt;border-right:solid black 0.4pt;}
td#TBL-5-11-5{border-left:solid black 0.4pt;border-right:solid black 0.4pt;}
td#TBL-5-12-5{border-left:solid black 0.4pt;border-right:solid black 0.4pt;}
#TBL-6 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-6 colgroup{border-left: 1px solid black;border-right:1px solid black;}
#TBL-6{border-collapse:collapse;} #TBL-6{border-collapse:collapse;}
#TBL-6 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-6 colgroup{border-left: 1px solid black;border-right:1px solid black;}
@@ -244,17 +248,5 @@ td#TBL-7-7-5{border-left:solid black 0.4pt;border-right:solid black 0.4pt;}
#TBL-9{border-collapse:collapse;} #TBL-9{border-collapse:collapse;}
#TBL-9 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-9 colgroup{border-left: 1px solid black;border-right:1px solid black;}
#TBL-9{border-collapse:collapse;} #TBL-9{border-collapse:collapse;}
#TBL-10 colgroup{border-left: 1px solid black;border-right:1px solid black;}
#TBL-10{border-collapse:collapse;}
#TBL-10 colgroup{border-left: 1px solid black;border-right:1px solid black;}
#TBL-10{border-collapse:collapse;}
#TBL-10 colgroup{border-left: 1px solid black;border-right:1px solid black;}
#TBL-10{border-collapse:collapse;}
#TBL-10 colgroup{border-left: 1px solid black;border-right:1px solid black;}
#TBL-10{border-collapse:collapse;}
#TBL-10 colgroup{border-left: 1px solid black;border-right:1px solid black;}
#TBL-10{border-collapse:collapse;}
#TBL-10 colgroup{border-left: 1px solid black;border-right:1px solid black;}
#TBL-10{border-collapse:collapse;}
/* end css.sty */ /* end css.sty */
+59 -78
View File
@@ -3,37 +3,35 @@
<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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 93--><p class="noindent" ><span <!--l. 105--><p class="noindent" ><span
class="cmbx-12x-x-144">MLD2P4</span><br class="cmbx-12x-x-144">AMG4PSBLAS</span><br
class="newline" /> <span class="newline" /> <span
class="cmbx-12x-x-144">User&#8217;s and Reference Guide</span><br class="cmbx-12x-x-144">User&#8217;s and Reference Guide</span><br
class="newline" /> <span class="newline" /> <span
class="cmti-12">A guide for the MultiLevel Domain Decomposition Parallel Preconditioners Package</span> class="cmti-12">A guide for the Algebraic MultiGrid Preconditioners Package based on PSBLAS</span><br
<span
class="cmti-12">based on PSBLAS</span><br
class="newline" /> <span class="newline" /> <span
class="cmbx-12">Pasqua D&#8217;Ambra</span><br class="cmbx-12">Pasqua D&#8217;Ambra</span><br
class="newline" /><span class="newline" /><span
class="cmr-12">IAC-CNR, Naples, Italy</span><br class="cmr-12">IAC-CNR, Naples, Italy</span><br
class="newline" /> <span class="newline" /> <span
class="cmbx-12">Daniela di Serafino</span><br class="cmbx-12">Fabio Durastante</span><br
class="newline" /><span class="newline" /><span
class="cmr-12">University of Campania &#8220;Luigi Vanvitelli&#8221;, Caserta, Italy</span><br class="cmr-12">University of Pisa and IAC-CNR</span><br
class="newline" /> <span class="newline" /> <span
class="cmbx-12">Salvatore Filippone </span><br class="cmbx-12">Salvatore Filippone </span><br
class="newline" /><span class="newline" /><span
class="cmr-12">Cranfield University, Cranfield, United Kingdom</span><br class="cmr-12">University of Rome Tor-Vergata and IAC-CNR</span><br
class="newline" /> <span class="newline" /> <span
class="cmr-12">Software version: 2.2</span><br class="cmr-12">Software version: 1.0</span><br
class="newline" /><span class="newline" /><span
class="cmr-12">July 31, 2018</span> class="cmr-12">March 31, 2018</span>
@@ -50,149 +48,132 @@ class="newline" />
<span class="likesectionToc" ><a <span class="likesectionToc" ><a
href="userhtmlli1.html#x2-1000" id="QQ2-2-1"><span href="userhtmlli1.html#x2-1000" id="QQ2-2-1"><span
class="cmr-12">Abstract</span></a></span> class="cmr-12">Abstract</span></a></span>
<br /> <span class="sectionToc" ><a
href="userhtmlli1.html#Q1-2-2"><span
class="cmr-12">Abstract</span></a></span>
<br /> <span class="likesectionToc" ><a <br /> <span class="likesectionToc" ><a
href="userhtmlli2.html#x3-2000" id="QQ2-3-3"><span href="userhtmlli2.html#x3-2000" id="QQ2-3-2"><span
class="cmr-12">Contents</span></a></span> class="cmr-12">Contents</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">1 </span><a class="cmr-12">1 </span><a
href="userhtmlse1.html#x4-30001" id="QQ2-4-4"><span href="userhtmlse1.html#x4-30001" id="QQ2-4-3"><span
class="cmr-12">General Overview</span></a></span> class="cmr-12">General Overview</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">2 </span><a class="cmr-12">2 </span><a
href="userhtmlse2.html#x5-40002" id="QQ2-5-5"><span href="userhtmlse2.html#x5-40002" id="QQ2-5-4"><span
class="cmr-12">Code Distribution</span></a></span> class="cmr-12">Code Distribution</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="likesubsectionToc" ><a class="cmr-12">&#x00A0;</span><span class="likesubsectionToc" ><a
href="userhtmlli3.html#x6-50002" id="QQ2-6-6"><span href="userhtmlli3.html#x6-50002" id="QQ2-6-5"><span
class="cmr-12">Contributors</span></a></span> class="cmr-12">Contributors</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="likesubsectionToc" ><a
href="userhtmlli4.html#x7-60002" id="QQ2-7-6"><span
class="cmr-12">Citing AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">3 </span><a class="cmr-12">3 </span><a
href="userhtmlse3.html#x7-60003" id="QQ2-7-7"><span href="userhtmlse3.html#x8-70003" id="QQ2-8-7"><span
class="cmr-12">Configuring and Building MLD2P4</span></a></span> class="cmr-12">Configuring and Building AMG4PSBLAS</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.1 </span><a class="cmr-12">3.1 </span><a
href="userhtmlsu1.html#x8-70003.1" id="QQ2-8-8"><span href="userhtmlsu1.html#x9-80003.1" id="QQ2-9-8"><span
class="cmr-12">Prerequisites</span></a></span> class="cmr-12">Prerequisites</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.2 </span><a class="cmr-12">3.2 </span><a
href="userhtmlsu2.html#x9-80003.2" id="QQ2-9-9"><span href="userhtmlsu2.html#x10-90003.2" id="QQ2-10-9"><span
class="cmr-12">Optional third party libraries</span></a></span> class="cmr-12">Optional third party libraries</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.3 </span><a class="cmr-12">3.3 </span><a
href="userhtmlsu3.html#x10-90003.3" id="QQ2-10-10"><span href="userhtmlsu3.html#x11-100003.3" id="QQ2-11-10"><span
class="cmr-12">Configuration options</span></a></span> class="cmr-12">Configuration options</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.4 </span><a class="cmr-12">3.4 </span><a
href="userhtmlsu4.html#x11-100003.4" id="QQ2-11-11"><span href="userhtmlsu4.html#x12-110003.4" id="QQ2-12-12"><span
class="cmr-12">Bug reporting</span></a></span> class="cmr-12">Bug reporting</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.5 </span><a class="cmr-12">3.5 </span><a
href="userhtmlsu5.html#x12-110003.5" id="QQ2-12-12"><span href="userhtmlsu5.html#x13-120003.5" id="QQ2-13-13"><span
class="cmr-12">Example and test programs</span></a></span> class="cmr-12">Example and test programs</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">4 </span><a class="cmr-12">4 </span><a
href="userhtmlse4.html#x13-120004" id="QQ2-13-13"><span href="userhtmlse4.html#x14-130004" id="QQ2-14-14"><span
class="cmr-12">Multigrid Background</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.1 </span><a
href="userhtmlsu6.html#x14-130004.1" id="QQ2-14-14"><span
class="cmr-12">AMG preconditioners</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.2 </span><a
href="userhtmlsu7.html#x15-140004.2" id="QQ2-15-16"><span
class="cmr-12">Smoothed Aggregation</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.3 </span><a
href="userhtmlsu8.html#x16-150004.3" id="QQ2-16-17"><span
class="cmr-12">Smoothers and coarsest-level solvers</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">5 </span><a
href="userhtmlse5.html#x17-160005" id="QQ2-17-18"><span
class="cmr-12">Getting Started</span></a></span> class="cmr-12">Getting Started</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.1 </span><a class="cmr-12">4.1 </span><a
href="userhtmlsu9.html#x18-170005.1" id="QQ2-18-20"><span href="userhtmlsu6.html#x15-140004.1" id="QQ2-15-16"><span
class="cmr-12">Examples</span></a></span> class="cmr-12">Examples</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">6 </span><a class="cmr-12">5 </span><a
href="userhtmlse6.html#x19-180006" id="QQ2-19-25"><span href="userhtmlse5.html#x16-150005" id="QQ2-16-21"><span
class="cmr-12">User Interface</span></a></span> class="cmr-12">User Interface</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.1 </span><a class="cmr-12">5.1 </span><a
href="userhtmlsu10.html#x20-190006.1" id="QQ2-20-26"><span href="userhtmlsu7.html#x17-160005.1" id="QQ2-17-22"><span
class="cmr-12">Method init</span></a></span> class="cmr-12">Method init</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.2 </span><a class="cmr-12">5.2 </span><a
href="userhtmlsu11.html#x21-200006.2" id="QQ2-21-27"><span href="userhtmlsu8.html#x18-170005.2" id="QQ2-18-23"><span
class="cmr-12">Method set</span></a></span> class="cmr-12">Method set</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.3 </span><a class="cmr-12">5.3 </span><a
href="userhtmlsu12.html#x22-210006.3" id="QQ2-22-35"><span href="userhtmlsu9.html#x19-180005.3" id="QQ2-19-30"><span
class="cmr-12">Method hierarchy</span><span class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.4 </span><a class="cmr-12">5.4 </span><a
href="userhtmlsu13.html#x23-220006.4" id="QQ2-23-36"><span href="userhtmlsu10.html#x20-190005.4" id="QQ2-20-31"><span
class="cmr-12">Method smoothers</span><span class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.5 </span><a class="cmr-12">5.5 </span><a
href="userhtmlsu14.html#x24-230006.5" id="QQ2-24-37"><span href="userhtmlsu11.html#x21-200005.5" id="QQ2-21-32"><span
class="cmr-12">Method build</span></a></span> class="cmr-12">Method build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.6 </span><a class="cmr-12">5.6 </span><a
href="userhtmlsu15.html#x25-240006.6" id="QQ2-25-38"><span href="userhtmlsu12.html#x22-210005.6" id="QQ2-22-33"><span
class="cmr-12">Method apply</span></a></span> class="cmr-12">Method apply</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.7 </span><a class="cmr-12">5.7 </span><a
href="userhtmlsu16.html#x26-250006.7" id="QQ2-26-39"><span href="userhtmlsu13.html#x23-220005.7" id="QQ2-23-34"><span
class="cmr-12">Method free</span></a></span> class="cmr-12">Method free</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.8 </span><a class="cmr-12">5.8 </span><a
href="userhtmlsu17.html#x27-260006.8" id="QQ2-27-40"><span href="userhtmlsu14.html#x24-230005.8" id="QQ2-24-35"><span
class="cmr-12">Method descr</span></a></span> class="cmr-12">Method descr</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.9 </span><a class="cmr-12">5.9 </span><a
href="userhtmlsu18.html#x28-270006.9" id="QQ2-28-41"><span href="userhtmlsu15.html#x25-240005.9" id="QQ2-25-36"><span
class="cmr-12">Auxiliary Methods</span></a></span> class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">7 </span><a class="cmr-12">6 </span><a
href="userhtmlse7.html#x29-330007" id="QQ2-29-47"><span href="userhtmlse6.html#x26-300006" id="QQ2-26-42"><span
class="cmr-12">Adding new smoother and solver objects to MLD2P4</span></a></span> class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">8 </span><a class="cmr-12">7 </span><a
href="userhtmlse8.html#x30-340008" id="QQ2-30-48"><span href="userhtmlse7.html#x27-310007" id="QQ2-27-43"><span
class="cmr-12">Error Handling</span></a></span> class="cmr-12">Error Handling</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">A </span><a class="cmr-12">A </span><a
href="userhtmlse9.html#x31-35000A" id="QQ2-31-49"><span href="userhtmlse8.html#x28-32000A" id="QQ2-28-44"><span
class="cmr-12">License</span></a></span> class="cmr-12">License</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">B </span><a
href="userhtmlse9.html#x29-33000B" id="QQ2-29-45"><span
class="cmr-12">Contributor Covenant Code of Conduct</span></a></span>
<br /> <span class="likesectionToc" ><a <br /> <span class="likesectionToc" ><a
href="userhtmlli4.html#x32-36000A" id="QQ2-32-50"><span href="userhtmlli5.html#x30-38000B" id="QQ2-30-50"><span
class="cmr-12">References</span></a></span>
<br /> <span class="sectionToc" ><a
href="userhtmlli4.html#Q1-32-51"><span
class="cmr-12">References</span></a></span> class="cmr-12">References</span></a></span>
</div> </div>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 892 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 800 B

After

Width:  |  Height:  |  Size: 818 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1023 B

After

Width:  |  Height:  |  Size: 1016 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 646 B

After

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

+60 -61
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Abstract</title> <head><title>Abstract</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
@@ -24,45 +24,23 @@ class="cmr-12">] </span></p></div>
<h3 class="likesectionHead"><a <h3 class="likesectionHead"><a
id="x2-1000"></a><span id="x2-1000"></a><span
class="cmr-12">Abstract</span></h3> class="cmr-12">Abstract</span></h3>
<a <!--l. 7--><p class="noindent" ><span
id="Q1-2-2"></a> class="cmcsc-10x-x-120">AMG4PSBLAS (A<span
class="small-caps">l</span><span
class="small-caps">g</span><span
class="small-caps">e</span><span
<!--l. 5--><p class="noindent" ><span class="small-caps">b</span><span
class="cmcsc-10x-x-120">MLD2P4 (M<span class="small-caps">r</span><span
class="small-caps">a</span><span
class="small-caps">i</span><span
class="small-caps">c</span> M<span
class="small-caps">u</span><span class="small-caps">u</span><span
class="small-caps">l</span><span class="small-caps">l</span><span
class="small-caps">t</span><span class="small-caps">t</span><span
class="small-caps">i</span>L<span class="small-caps">i</span>G<span
class="small-caps">e</span><span
class="small-caps">v</span><span
class="small-caps">e</span><span
class="small-caps">l</span> D<span
class="small-caps">o</span><span
class="small-caps">m</span><span
class="small-caps">a</span><span
class="small-caps">i</span><span
class="small-caps">n</span> D<span
class="small-caps">e</span><span
class="small-caps">c</span><span
class="small-caps">o</span><span
class="small-caps">m</span><span
class="small-caps">p</span><span
class="small-caps">o</span><span
class="small-caps">s</span><span
class="small-caps">i</span><span
class="small-caps">t</span><span
class="small-caps">i</span><span
class="small-caps">o</span><span
class="small-caps">n</span> P<span
class="small-caps">a</span><span
class="small-caps">r</span><span class="small-caps">r</span><span
class="small-caps">a</span><span class="small-caps">i</span><span
class="small-caps">l</span><span class="small-caps">d</span> P<span
class="small-caps">l</span><span
class="small-caps">e</span><span
class="small-caps">l</span> P<span
class="small-caps">r</span><span class="small-caps">r</span><span
class="small-caps">e</span><span class="small-caps">e</span><span
class="small-caps">c</span><span class="small-caps">c</span><span
@@ -76,9 +54,7 @@ class="small-caps">o</span><span
class="small-caps">n</span><span class="small-caps">n</span><span
class="small-caps">e</span><span class="small-caps">e</span><span
class="small-caps">r</span><span class="small-caps">r</span><span
class="small-caps">s</span></span> class="small-caps">s</span> P<span
<span
class="cmcsc-10x-x-120">P<span
class="small-caps">a</span><span class="small-caps">a</span><span
class="small-caps">c</span><span class="small-caps">c</span><span
class="small-caps">k</span><span class="small-caps">k</span><span
@@ -91,35 +67,58 @@ class="small-caps">s</span><span
class="small-caps">e</span><span class="small-caps">e</span><span
class="small-caps">d</span> <span class="small-caps">d</span> <span
class="small-caps">o</span><span class="small-caps">o</span><span
class="small-caps">n</span> PSBLAS</span><span class="small-caps">n</span></span>
class="cmr-12">) is a package of parallel algebraic multilevel</span>
<span <span
class="cmr-12">preconditioners. The first release of MLD2P4 made available multilevel additive and</span> class="cmcsc-10x-x-120">PSBLAS</span><span
class="cmr-12">) is a package of parallel algebraic multilevel preconditioners included in the</span>
<span <span
class="cmr-12">hybrid Schwarz preconditioners, as well as one-level additive Schwarz preconditioners.</span> class="cmr-12">PSCToolkit (Parallel Sparse Computation Toolkit) software framework. It is a progress</span>
<span <span
class="cmr-12">The package has been extended to include further multilevel cycles and smoothers</span> class="cmr-12">of a software development project started in 2007, named MLD2P4, which originally</span>
<span <span
class="cmr-12">widely used in multigrid methods. In the multilevel case, a purely algebraic approach is</span> class="cmr-12">implemented a multilevel version of some domain decomposition preconditioners of</span>
<span <span
class="cmr-12">applied to generate coarse-level corrections, so that no geometric background is needed</span> class="cmr-12">additive-Schwarz type and was based on a parallel decoupled version of the well known</span>
<span <span
class="cmr-12">concerning the matrix to be preconditioned. The matrix is assumed to be square, real</span> class="cmr-12">smoothed aggregation method to generate the multilevel hierarchy of coarser</span>
<span <span
class="cmr-12">or complex.</span> class="cmr-12">matrices. In the last years, within the context of the EU-H2020 EoCoE project</span>
<!--l. 14--><p class="indent" > <span
class="cmr-12">MLD2P4 has been designed to provide scalable and easy-to-use preconditioners in</span>
<span <span
class="cmr-12">the context of the PSBLAS (Parallel Sparse Basic Linear Algebra Subprograms)</span> class="cmr-12">(Energy Oriented Center of Excellence), the package was extended for including</span>
<span <span
class="cmr-12">computational framework and can be used in conjuction with the Krylov solvers</span> class="cmr-12">new algorithms and functionalities for the setup and application new AMG</span>
<span <span
class="cmr-12">available in this framework. MLD2P4 enables the user to easily specify different</span> class="cmr-12">preconditioners with the final aims of improving efficiency and scalability when tens of</span>
<span <span
class="cmr-12">features of an algebraic multilevel preconditioner, thus allowing to search for the &#8220;best&#8221;</span> class="cmr-12">thousands cores are used and of boosting reliability in dealing with general</span>
<span <span
class="cmr-12">preconditioner for the problem at hand.</span> class="cmr-12">symmetric positive definite linear systems. Due to the significant number</span>
<!--l. 21--><p class="indent" > <span <span
class="cmr-12">of changes and the increase in scope, we decided to rename the package as</span>
<span
class="cmr-12">AMG4PSBLAS.</span>
<!--l. 16--><p class="indent" > <span
class="cmr-12">AMG4PSBLAS has been designed to provide scalable and easy-to-use</span>
<span
class="cmr-12">preconditioners in the context of the PSBLAS (Parallel Sparse Basic Linear Algebra</span>
<span
class="cmr-12">Subprograms) computational framework and can be used in conjuction with the Krylov</span>
<span
class="cmr-12">solvers available in this framework. Our package is based on a completely</span>
<span
class="cmr-12">algebraic approach; therefore users level interfaces assume that the system matrix</span>
<span
class="cmr-12">and preconditioners are represented as PSBLAS distributed sparse matrices.</span>
<span
class="cmr-12">AMG4PSBLAS enables the user to easily specify different features of an algebraic</span>
<span
class="cmr-12">multilevel preconditioner, thus allowing to experiment with different preconditioners for</span>
<span
class="cmr-12">the problem and parallel computers at hand.</span>
<!--l. 27--><p class="indent" > <span
class="cmr-12">The package employs object-oriented design techniques in Fortran</span><span class="cmr-12">The package employs object-oriented design techniques in Fortran</span><span
class="cmr-12">&#x00A0;2003, with</span> class="cmr-12">&#x00A0;2003, with</span>
<span <span
@@ -133,10 +132,10 @@ class="cmr-12">parallel implementation is based on a Single Program Multiple Dat
class="cmr-12">paradigm; the inter-process communication is based on MPI and is managed mainly</span> class="cmr-12">paradigm; the inter-process communication is based on MPI and is managed mainly</span>
<span <span
class="cmr-12">through PSBLAS.</span> class="cmr-12">through PSBLAS.</span>
<!--l. 29--><p class="indent" > <span <!--l. 35--><p class="indent" > <span
class="cmr-12">This guide provides a brief description of the functionalities and the user interface</span> class="cmr-12">This guide provides a brief description of the functionalities and the user interface</span>
<span <span
class="cmr-12">of MLD2P4.</span> class="cmr-12">of AMG4PSBLAS.</span>
@@ -146,7 +145,7 @@ class="cmr-12">of MLD2P4.</span>
<!--l. 123--><div class="crosslinks"><p class="noindent"><span <!--l. 133--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli2.html" ><span href="userhtmlli2.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -157,6 +156,6 @@ class="cmr-12">] [</span><a
href="userhtml.html#userhtmlli1.html" ><span href="userhtml.html#userhtmlli1.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 123--><p class="indent" > <a <!--l. 133--><p class="indent" > <a
id="tailuserhtmlli1.html"></a> id="tailuserhtmlli1.html"></a>
</body></html> </body></html>
+54 -81
View File
@@ -3,14 +3,14 @@
<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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 123--><div class="crosslinks"><p class="noindent"><span <!--l. 133--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlse1.html" ><span href="userhtmlse1.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -31,10 +31,7 @@ class="cmr-12">] </span></p></div>
id="x3-2000"></a><span id="x3-2000"></a><span
class="cmr-12">Contents</span></h3> class="cmr-12">Contents</span></h3>
<div class="tableofcontents"> <div class="tableofcontents">
<span class="sectionToc" ><a <span class="sectionToc" ><span
href="userhtmlli1.html#Q1-2-2"><span
class="cmr-12">Abstract</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">1 </span><a class="cmr-12">1 </span><a
href="userhtmlse1.html#x4-30001"><span href="userhtmlse1.html#x4-30001"><span
class="cmr-12">General Overview</span></a></span> class="cmr-12">General Overview</span></a></span>
@@ -44,162 +41,141 @@ href="userhtmlse2.html#x5-40002"><span
class="cmr-12">Code Distribution</span></a></span> class="cmr-12">Code Distribution</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">3 </span><a class="cmr-12">3 </span><a
href="userhtmlse3.html#x7-60003"><span href="userhtmlse3.html#x8-70003"><span
class="cmr-12">Configuring and Building MLD2P4</span></a></span> class="cmr-12">Configuring and Building AMG4PSBLAS</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.1 </span><a class="cmr-12">3.1 </span><a
href="userhtmlsu1.html#x8-70003.1"><span href="userhtmlsu1.html#x9-80003.1"><span
class="cmr-12">Prerequisites</span></a></span> class="cmr-12">Prerequisites</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.2 </span><a class="cmr-12">3.2 </span><a
href="userhtmlsu2.html#x9-80003.2"><span href="userhtmlsu2.html#x10-90003.2"><span
class="cmr-12">Optional third party libraries</span></a></span> class="cmr-12">Optional third party libraries</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.3 </span><a class="cmr-12">3.3 </span><a
href="userhtmlsu3.html#x10-90003.3"><span href="userhtmlsu3.html#x11-100003.3"><span
class="cmr-12">Configuration options</span></a></span> class="cmr-12">Configuration options</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.4 </span><a class="cmr-12">3.4 </span><a
href="userhtmlsu4.html#x11-100003.4"><span href="userhtmlsu4.html#x12-110003.4"><span
class="cmr-12">Bug reporting</span></a></span> class="cmr-12">Bug reporting</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.5 </span><a class="cmr-12">3.5 </span><a
href="userhtmlsu5.html#x12-110003.5"><span href="userhtmlsu5.html#x13-120003.5"><span
class="cmr-12">Example and test programs</span></a></span> class="cmr-12">Example and test programs</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">4 </span><a class="cmr-12">4 </span><a
href="userhtmlse4.html#x13-120004"><span href="userhtmlse4.html#x14-130004"><span
class="cmr-12">Multigrid Background</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.1 </span><a
href="userhtmlsu6.html#x14-130004.1"><span
class="cmr-12">AMG preconditioners</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.2 </span><a
href="userhtmlsu7.html#x15-140004.2"><span
class="cmr-12">Smoothed Aggregation</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.3 </span><a
href="userhtmlsu8.html#x16-150004.3"><span
class="cmr-12">Smoothers and coarsest-level solvers</span></a></span>
<br /> <span class="sectionToc" ><span
class="cmr-12">5 </span><a
href="userhtmlse5.html#x17-160005"><span
class="cmr-12">Getting Started</span></a></span> class="cmr-12">Getting Started</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.1 </span><a class="cmr-12">4.1 </span><a
href="userhtmlsu9.html#x18-170005.1"><span href="userhtmlsu6.html#x15-140004.1"><span
class="cmr-12">Examples</span></a></span> class="cmr-12">Examples</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">6 </span><a class="cmr-12">5 </span><a
href="userhtmlse6.html#x19-180006"><span href="userhtmlse5.html#x16-150005"><span
class="cmr-12">User Interface</span></a></span> class="cmr-12">User Interface</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.1 </span><a class="cmr-12">5.1 </span><a
href="userhtmlsu10.html#x20-190006.1"><span href="userhtmlsu7.html#x17-160005.1"><span
class="cmr-12">Method init</span></a></span> class="cmr-12">Method init</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.2 </span><a class="cmr-12">5.2 </span><a
href="userhtmlsu11.html#x21-200006.2"><span href="userhtmlsu8.html#x18-170005.2"><span
class="cmr-12">Method set</span></a></span> class="cmr-12">Method set</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.3 </span><a class="cmr-12">5.3 </span><a
href="userhtmlsu12.html#x22-210006.3"><span href="userhtmlsu9.html#x19-180005.3"><span
class="cmr-12">Method hierarchy</span><span class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.4 </span><a class="cmr-12">5.4 </span><a
href="userhtmlsu13.html#x23-220006.4"><span href="userhtmlsu10.html#x20-190005.4"><span
class="cmr-12">Method smoothers</span><span class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></a></span> class="cmr-12">_build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.5 </span><a class="cmr-12">5.5 </span><a
href="userhtmlsu14.html#x24-230006.5"><span href="userhtmlsu11.html#x21-200005.5"><span
class="cmr-12">Method build</span></a></span> class="cmr-12">Method build</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.6 </span><a class="cmr-12">5.6 </span><a
href="userhtmlsu15.html#x25-240006.6"><span href="userhtmlsu12.html#x22-210005.6"><span
class="cmr-12">Method apply</span></a></span> class="cmr-12">Method apply</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.7 </span><a class="cmr-12">5.7 </span><a
href="userhtmlsu16.html#x26-250006.7"><span href="userhtmlsu13.html#x23-220005.7"><span
class="cmr-12">Method free</span></a></span> class="cmr-12">Method free</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.8 </span><a class="cmr-12">5.8 </span><a
href="userhtmlsu17.html#x27-260006.8"><span href="userhtmlsu14.html#x24-230005.8"><span
class="cmr-12">Method descr</span></a></span> class="cmr-12">Method descr</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.9 </span><a class="cmr-12">5.9 </span><a
href="userhtmlsu18.html#x28-270006.9"><span href="userhtmlsu15.html#x25-240005.9"><span
class="cmr-12">Auxiliary Methods</span></a></span> class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.1 </span><a class="cmr-12">5.9.1 </span><a
href="userhtmlsu18.html#x28-280006.9.1" id="QQ2-28-42"><span href="userhtmlsu15.html#x25-250005.9.1" id="QQ2-25-37"><span
class="cmr-12">Method: dump</span></a></span> class="cmr-12">Method: dump</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.2 </span><a class="cmr-12">5.9.2 </span><a
href="userhtmlsu18.html#x28-290006.9.2" id="QQ2-28-43"><span href="userhtmlsu15.html#x25-260005.9.2" id="QQ2-25-38"><span
class="cmr-12">Method: clone</span></a></span> class="cmr-12">Method: clone</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.3 </span><a class="cmr-12">5.9.3 </span><a
href="userhtmlsu18.html#x28-300006.9.3" id="QQ2-28-44"><span href="userhtmlsu15.html#x25-270005.9.3" id="QQ2-25-39"><span
class="cmr-12">Method: sizeof</span></a></span> class="cmr-12">Method: sizeof</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.4 </span><a class="cmr-12">5.9.4 </span><a
href="userhtmlsu18.html#x28-310006.9.4" id="QQ2-28-45"><span href="userhtmlsu15.html#x25-280005.9.4" id="QQ2-25-40"><span
class="cmr-12">Method: allocate</span><span class="cmr-12">Method: allocate</span><span
class="cmr-12">_wrk</span></a></span> class="cmr-12">_wrk</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.5 </span><a class="cmr-12">5.9.5 </span><a
href="userhtmlsu18.html#x28-320006.9.5" id="QQ2-28-46"><span href="userhtmlsu15.html#x25-290005.9.5" id="QQ2-25-41"><span
class="cmr-12">Method: free</span><span class="cmr-12">Method: free</span><span
class="cmr-12">_wrk</span></a></span> class="cmr-12">_wrk</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">7 </span><a class="cmr-12">6 </span><a
href="userhtmlse7.html#x29-330007"><span href="userhtmlse6.html#x26-300006"><span
class="cmr-12">Adding new smoother and solver objects to MLD2P4</span></a></span> class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">8 </span><a class="cmr-12">7 </span><a
href="userhtmlse8.html#x30-340008"><span href="userhtmlse7.html#x27-310007"><span
class="cmr-12">Error Handling</span></a></span> class="cmr-12">Error Handling</span></a></span>
<br /> <span class="sectionToc" ><span <br /> <span class="sectionToc" ><span
class="cmr-12">A </span><a class="cmr-12">A </span><a
href="userhtmlse9.html#x31-35000A"><span href="userhtmlse8.html#x28-32000A"><span
class="cmr-12">License</span></a></span> class="cmr-12">License</span></a></span>
<br /> <span class="sectionToc" ><a <br /> <span class="sectionToc" ><span
href="userhtmlli4.html#Q1-32-51"><span class="cmr-12">B </span><a
class="cmr-12">References</span></a></span> href="userhtmlse9.html#x29-33000B"><span
class="cmr-12">Contributor Covenant Code of Conduct</span></a></span>
</div> </div>
@@ -210,9 +186,6 @@ class="cmr-12">References</span></a></span>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span <!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlse1.html" ><span href="userhtmlse1.html" ><span
+13 -26
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Contributors</title> <head><title>Contributors</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
@@ -12,6 +12,9 @@
> >
<!--l. 23--><div class="crosslinks"><p class="noindent"><span <!--l. 23--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
href="#tailuserhtmlli3.html"><span href="#tailuserhtmlli3.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
@@ -21,48 +24,32 @@ class="cmr-12">] </span></p></div>
<h4 class="likesubsectionHead"><a <h4 class="likesubsectionHead"><a
id="x6-50002"></a><span id="x6-50002"></a><span
class="cmr-12">Contributors</span></h4> class="cmr-12">Contributors</span></h4>
<!--l. 24--><p class="noindent" ><span
class="cmr-12">Contributors to version 2:</span>
<ul class="itemize1"> <ul class="itemize1">
<li class="itemize"><span <li class="itemize"><span
class="cmr-12">Salvatore Filippone, Cranfield University, UK;</span> class="cmr-12">Pasqua D&#8217;Ambra, IAC-CNR, IT;</span>
</li> </li>
<li class="itemize"><span <li class="itemize"><span
class="cmr-12">Pasqua D&#8217;Ambra, IAC-CNR, Naples, IT;</span> class="cmr-12">Fabio Durastante, University of Pisa and IAC-CNR, IT;</span>
</li> </li>
<li class="itemize"><span <li class="itemize"><span
class="cmr-12">Daniela di Serafino, University of Campania &#8220;L. Vanvitelli&#8221;, Caserta, IT;</span> class="cmr-12">Salvatore Filippone, University of Rome Tor-Vergata and IAC-CNR, IT;</span></li></ul>
</li>
<li class="itemize"><span
class="cmr-12">Ambra Abdullahi Hassan, University of Rome &#8220;Tor Vergata&#8221;, IT.</span></li></ul>
<!--l. 31--><p class="noindent" ><span
class="cmr-12">Contributors to version 1:</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">Salvatore Filippone;</span>
</li>
<li class="itemize"><span
class="cmr-12">Pasqua D&#8217;Ambra;</span>
</li>
<li class="itemize"><span
class="cmr-12">Daniela di Serafino;</span>
</li>
<li class="itemize"><span
class="cmr-12">Alfredo Buttari, CNRS-IRIT, Toulouse, F.</span></li></ul>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span <!--l. 30--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
href="userhtmlli3.html" ><span href="userhtmlli3.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse2.html#userhtmlli3.html" ><span href="userhtmlse2.html#userhtmlli3.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a <!--l. 30--><p class="indent" > <a
id="tailuserhtmlli3.html"></a> id="tailuserhtmlli3.html"></a>
</body></html> </body></html>
+35 -539
View File
@@ -1,579 +1,75 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>References</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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 2--><div class="crosslinks"><p class="noindent"><span <!--l. 30--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlse9.html" ><span href="userhtmlli3.html" ><span
class="cmr-12">prev</span></a><span class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse9.html#tailuserhtmlse9.html" ><span href="userhtmlli3.html#tailuserhtmlli3.html" ><span
class="cmr-12">prev-tail</span></a><span class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="#tailuserhtmlli4.html"><span href="#tailuserhtmlli4.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtml.html#userhtmlli4.html" ><span href="userhtmlse2.html#userhtmlli4.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="likesectionHead"><a <h4 class="likesubsectionHead"><a
id="x32-36000A"></a><span id="x7-60002"></a><span
class="cmr-12">References</span></h3> class="cmr-12">Citing AMG4PSBLAS</span></h4>
<!--l. 2--><p class="noindent" > <!--l. 31--><p class="noindent" ><span
<a class="cmr-12">When use the library, please cite the following:</span>
id="Q1-32-51"></a>
<div class="thebibliography">
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[1]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XMUMPS"></a><span
class="cmr-12">P.</span><span
class="cmr-12">&#x00A0;R.</span><span
class="cmr-12">&#x00A0;Amestoy, C.</span><span
class="cmr-12">&#x00A0;Ashcraft, O.</span><span
class="cmr-12">&#x00A0;Boiteau, A.</span><span
class="cmr-12">&#x00A0;Buttari, J.</span><span
class="cmr-12">&#x00A0;L&#8217;Excellent,</span>
<span
class="cmr-12">C.</span><span
class="cmr-12">&#x00A0;Weisbecker, </span><span
class="cmti-12">Improving multifrontal methods by means of block low-rank</span>
<span
class="cmti-12">representations</span><span
class="cmr-12">, SIAM Journal on Scientific Computing, volume 37 (3), 2015,</span>
<span
class="cmr-12">A1452&#8211;A1474. See also </span><span
class="cmtt-12">http://mumps.enseeiht.fr</span><span
class="cmr-12">.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[2]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XBREZINA_VANEK"></a><span
class="cmr-12">M.</span><span
class="cmr-12">&#x00A0;Brezina, P.</span><span
class="cmr-12">&#x00A0;Van</span><span
class="cmr-12">&#x011B;k, </span><span
class="cmti-12">A Black-Box Iterative Solver Based on a</span>
<span
class="cmti-12">Two-Level Schwarz Method</span><span
class="cmr-12">, Computing, 63, 1999, 233&#8211;263.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[3]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XBriggs2000"></a><span
class="cmr-12">W.</span><span
class="cmr-12">&#x00A0;L.</span><span
class="cmr-12">&#x00A0;Briggs, V.</span><span
class="cmr-12">&#x00A0;E.</span><span
class="cmr-12">&#x00A0;Henson, S.</span><span
class="cmr-12">&#x00A0;F.</span><span
class="cmr-12">&#x00A0;McCormick, </span><span
class="cmti-12">A Multigrid Tutorial,</span>
<span
class="cmti-12">Second Edition</span><span
class="cmr-12">, SIAM, 2000.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[4]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="Xpara_04"></a><span
class="cmr-12">A.</span><span
class="cmr-12">&#x00A0;Buttari, P.</span><span
class="cmr-12">&#x00A0;D&#8217;Ambra, D.</span><span
class="cmr-12">&#x00A0;di Serafino, S.</span><span
class="cmr-12">&#x00A0;Filippone, </span><span
class="cmti-12">Extending</span>
<span
class="cmti-12">PSBLAS to Build Parallel Schwarz Preconditioners</span><span
class="cmr-12">, in J.</span><span
class="cmr-12">&#x00A0;Dongarra,</span>
<span
class="cmr-12">K.</span><span
class="cmr-12">&#x00A0;Madsen, J.</span><span
class="cmr-12">&#x00A0;Wasniewski, editors, Proceedings of PARA</span><span
class="cmr-12">&#x00A0;04 Workshop on</span>
<span
class="cmr-12">State of the Art in Scientific Computing, Lecture Notes in Computer Science,</span>
<span
class="cmr-12">Springer, 2005, 593&#8211;602.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[5]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="Xaaecc_07"></a><span
class="cmr-12">A.</span><span
class="cmr-12">&#x00A0;Buttari, P.</span><span
class="cmr-12">&#x00A0;D&#8217;Ambra, D.</span><span
class="cmr-12">&#x00A0;di</span><span
class="cmr-12">&#x00A0;Serafino, S.</span><span
class="cmr-12">&#x00A0;Filippone, </span><span
class="cmti-12">2LEV-D2P4: a</span>
<span
class="cmti-12">package of high-performance preconditioners for scientific and engineering</span>
<span
class="cmti-12">applications</span><span
class="cmr-12">, Applicable Algebra in Engineering, Communications and</span>
<span
class="cmr-12">Computing, 18 (3) 2007, 223&#8211;239.</span>
</p> <pre class="verbatim" id="verbatim-1">
<p class="bibitem" ><span class="biblabel"> @article{DDF2021,
<span &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;author&#x00A0;=&#x00A0;{D&#8217;Ambra,&#x00A0;Pasqua&#x00A0;and&#x00A0;Durastante,&#x00A0;Fabio&#x00A0;and&#x00A0;Filippone,&#x00A0;Salvatore},
class="cmr-12">[6]</span><span class="bibsp"><span &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;title&#x00A0;=&#x00A0;{{{AMG&#x00A0;Preconditioners&#x00A0;for&#x00A0;Linear&#x00A0;Solvers&#x00A0;towards&#x00A0;Extreme&#x00A0;Scale}},
class="cmr-12">&#x00A0;</span><span &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;journal&#x00A0;=&#x00A0;{arXiv&#x00A0;e-preprints},
class="cmr-12">&#x00A0;</span><span &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;eprint&#x00A0;=&#x00A0;{2006.16147v3},
class="cmr-12">&#x00A0;</span></span></span><a &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;archivePrefix&#x00A0;=&#x00A0;{arXiv},
id="XCAI_SARKIS"></a><span &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;year={2021}
class="cmr-12">X.</span><span &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;}
class="cmr-12">&#x00A0;C.</span><span @Misc{psctoolkit-web-page,
class="cmr-12">&#x00A0;Cai, M.</span><span &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;author&#x00A0;=&#x00A0;{D&#8217;Ambra,&#x00A0;Pasqua&#x00A0;and&#x00A0;Durastante,&#x00A0;Fabio&#x00A0;and&#x00A0;Filippone,&#x00A0;Salvatore},
class="cmr-12">&#x00A0;Sarkis, </span><span &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;title&#x00A0;=&#x00A0;&#x00A0;{{PSCToolkit}&#x00A0;{W}eb&#x00A0;page},
class="cmti-12">A Restricted Additive Schwarz Preconditioner for</span> &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;url&#x00A0;=&#x00A0;&#x00A0;&#x00A0;&#x00A0;{https://psctoolkit.github.io/},
<span &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;howpublished&#x00A0;=&#x00A0;{\url{https://psctoolkit.github.io/}},
class="cmti-12">General Sparse Linear Systems</span><span &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;year&#x00A0;=&#x00A0;{2021}
class="cmr-12">, SIAM Journal on Scientific Computing, 21</span> &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;}
<span </pre>
class="cmr-12">(2), 1999, 792&#8211;797.</span> <!--l. 50--><p class="nopar" >
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[7]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="Xapnum_07"></a><span
class="cmr-12">P.</span><span
class="cmr-12">&#x00A0;D&#8217;Ambra, S.</span><span
class="cmr-12">&#x00A0;Filippone,</span>
<span
class="cmr-12">D.</span><span
class="cmr-12">&#x00A0;di</span><span
class="cmr-12">&#x00A0;Serafino, </span><span
class="cmti-12">On the Development of PSBLAS-based Parallel Two-level</span>
<span
class="cmti-12">Schwarz Preconditioners</span><span
class="cmr-12">, Applied Numerical Mathematics, Elsevier Science,</span>
<span
class="cmr-12">57 (11-12), 2007, 1181-1196.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[8]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XMLD2P4_TOMS"></a><span
class="cmr-12">P.</span><span
class="cmr-12">&#x00A0;D&#8217;Ambra, D.</span><span
class="cmr-12">&#x00A0;di</span><span
class="cmr-12">&#x00A0;Serafino, S.</span><span
class="cmr-12">&#x00A0;Filippone, </span><span
class="cmti-12">MLD2P4: a Package of</span>
<span
class="cmti-12">Parallel Multilevel Algebraic Domain Decomposition Preconditioners in</span>
<span
class="cmti-12">Fortran 95</span><span
class="cmr-12">, ACM Trans. Math. Softw., 37(3), 2010, art. 30.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[9]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XUMFPACK"></a><span
class="cmr-12">T.</span><span
class="cmr-12">&#x00A0;A.</span><span
class="cmr-12">&#x00A0;Davis, </span><span
class="cmti-12">Algorithm 832: UMFPACK</span>
<span
class="cmti-12">- an Unsymmetric-pattern Multifrontal Method with a Column Pre-ordering</span>
<span
class="cmti-12">Strategy</span><span
class="cmr-12">, ACM Transactions on Mathematical Software, 30, 2004, 196&#8211;199.</span>
<span
class="cmr-12">(See also </span><span
class="cmtt-12">http://www.cise.ufl.edu/~davis/</span><span
class="cmr-12">)</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[10]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XSUPERLU"></a><span
class="cmr-12">J.</span><span
class="cmr-12">&#x00A0;W.</span><span
class="cmr-12">&#x00A0;Demmel, S.</span><span
class="cmr-12">&#x00A0;C.</span><span
class="cmr-12">&#x00A0;Eisenstat, J.</span><span
class="cmr-12">&#x00A0;R.</span><span
class="cmr-12">&#x00A0;Gilbert,</span>
<span
class="cmr-12">X.</span><span
class="cmr-12">&#x00A0;S.</span><span
class="cmr-12">&#x00A0;Li, J.</span><span
class="cmr-12">&#x00A0;W.</span><span
class="cmr-12">&#x00A0;H.</span><span
class="cmr-12">&#x00A0;Liu, </span><span
class="cmti-12">A supernodal approach to sparse partial pivoting</span><span
class="cmr-12">,</span>
<span
class="cmr-12">SIAM Journal on Matrix Analysis and Applications, 20 (3), 1999, 720&#8211;755.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[11]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="Xblas3"></a><span
class="cmr-12">J.</span><span
class="cmr-12">&#x00A0;J.</span><span
class="cmr-12">&#x00A0;Dongarra, J.</span><span
class="cmr-12">&#x00A0;Du Croz, I.</span><span
class="cmr-12">&#x00A0;S.</span><span
class="cmr-12">&#x00A0;Duff, S.</span><span
class="cmr-12">&#x00A0;Hammarling, </span><span
class="cmti-12">A set of Level</span>
<span
class="cmti-12">3 Basic Linear Algebra Subprograms</span><span
class="cmr-12">, ACM Transactions on Mathematical</span>
<span
class="cmr-12">Software, 16 (1) 1990, 1&#8211;17.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[12]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="Xblas2"></a><span
class="cmr-12">J.</span><span
class="cmr-12">&#x00A0;J.</span><span
class="cmr-12">&#x00A0;Dongarra, J.</span><span
class="cmr-12">&#x00A0;Du Croz, S.</span><span
class="cmr-12">&#x00A0;Hammarling, R.</span><span
class="cmr-12">&#x00A0;J.</span><span
class="cmr-12">&#x00A0;Hanson, </span><span
class="cmti-12">An</span>
<span
class="cmti-12">extended set of FORTRAN Basic Linear Algebra Subprograms</span><span
class="cmr-12">, ACM</span>
<span
class="cmr-12">Transactions on Mathematical Software, 14 (1) 1988, 1&#8211;17.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[13]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XPSBLASGUIDE"></a><span
class="cmr-12">S.</span><span
class="cmr-12">&#x00A0;Filippone, A.</span><span
class="cmr-12">&#x00A0;Buttari, </span><span
class="cmti-12">PSBLAS 3.5.0 User&#8217;s Guide. A Reference</span>
<span
class="cmti-12">Guide for the Parallel Sparse BLAS Library</span><span
class="cmr-12">, 2012, available from</span>
<span
class="cmtt-12">https://github.com/sfilippone/psblas3/tree/master/docs</span><span
class="cmr-12">.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[14]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XPSBLAS3"></a><span
class="cmr-12">S.</span><span
class="cmr-12">&#x00A0;Filippone, A.</span><span
class="cmr-12">&#x00A0;Buttari, </span><span
class="cmti-12">Object-Oriented Techniques for Sparse Matrix</span>
<span
class="cmti-12">Computations in Fortran 2003</span><span
class="cmr-12">. ACM Transactions on on Mathematical</span>
<span
class="cmr-12">Software, 38 (4), 2012, art.</span><span
class="cmr-12">&#x00A0;23.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[15]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="Xpsblas_00"></a><span
class="cmr-12">S.</span><span
class="cmr-12">&#x00A0;Filippone, M.</span><span
class="cmr-12">&#x00A0;Colajanni, </span><span
class="cmti-12">PSBLAS: A</span>
<span
class="cmti-12">Library for Parallel Linear Algebra Computation on Sparse Matrices</span><span
class="cmr-12">, ACM</span>
<span
class="cmr-12">Transactions on Mathematical Software, 26 (4), 2000, 527&#8211;550.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[16]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XGrHeJi:16"></a><span
class="cmr-12">S. Gratton, P. Henon, P. Jiranek and X. Vasseur, </span><span
class="cmti-12">Reducing complexity of</span>
<span
class="cmti-12">algebraic multigrid by aggregation</span><span
class="cmr-12">, Numerical Lin. Algebra with Applications,</span>
<span
class="cmr-12">2016, 23:501-518</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[17]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XMPI2"></a><span
class="cmr-12">W.</span><span
class="cmr-12">&#x00A0;Gropp, S.</span><span
class="cmr-12">&#x00A0;Huss-Lederman, A.</span><span
class="cmr-12">&#x00A0;Lumsdaine, E.</span><span
class="cmr-12">&#x00A0;Lusk, B.</span><span
class="cmr-12">&#x00A0;Nitzberg,</span>
<span
class="cmr-12">W.</span><span
class="cmr-12">&#x00A0;Saphir, M.</span><span
class="cmr-12">&#x00A0;Snir, </span><span
class="cmti-12">MPI: The Complete Reference. Volume 2 - The MPI-2</span>
<span
class="cmti-12">Extensions</span><span
class="cmr-12">, MIT Press, 1998.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[18]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="Xblas1"></a><span
class="cmr-12">C.</span><span
class="cmr-12">&#x00A0;L.</span><span
class="cmr-12">&#x00A0;Lawson, R.</span><span
class="cmr-12">&#x00A0;J.</span><span
class="cmr-12">&#x00A0;Hanson, D.</span><span
class="cmr-12">&#x00A0;Kincaid, F.</span><span
class="cmr-12">&#x00A0;T.</span><span
class="cmr-12">&#x00A0;Krogh, </span><span
class="cmti-12">Basic Linear</span>
<span
class="cmti-12">Algebra Subprograms for FORTRAN usage</span><span
class="cmr-12">, ACM Transactions on</span>
<span
class="cmr-12">Mathematical Software, 5 (3), 1979, 308&#8211;323.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[19]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XSUPERLUDIST"></a><span
class="cmr-12">X.</span><span
class="cmr-12">&#x00A0;S.</span><span
class="cmr-12">&#x00A0;Li, J.</span><span
class="cmr-12">&#x00A0;W.</span><span
class="cmr-12">&#x00A0;Demmel, </span><span
class="cmti-12">SuperLU</span><span
class="cmti-12">_DIST: A Scalable</span>
<span
class="cmti-12">Distributed-memory Sparse Direct Solver for Unsymmetric Linear Systems</span><span
class="cmr-12">,</span>
<span
class="cmr-12">ACM Transactions on Mathematical Software, 29 (2), 2003, 110&#8211;140.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[20]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XNotay2008"></a><span
class="cmr-12">Y.</span><span
class="cmr-12">&#x00A0;Notay, P.</span><span
class="cmr-12">&#x00A0;S.</span><span
class="cmr-12">&#x00A0;Vassilevski, </span><span
class="cmti-12">Recursive Krylov-based multigrid cycles</span><span
class="cmr-12">,</span>
<span
class="cmr-12">Numerical Linear Algebra with Applications, 15 (5), 2008, 473&#8211;487.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[21]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XSaad_book"></a><span
class="cmr-12">Y.</span><span
class="cmr-12">&#x00A0;Saad, </span><span
class="cmti-12">Iterative methods for sparse linear systems</span><span
class="cmr-12">, 2nd edition, SIAM,</span>
<span
class="cmr-12">2003.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[22]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="Xdd2_96"></a><span
class="cmr-12">B.</span><span
class="cmr-12">&#x00A0;Smith, P.</span><span
class="cmr-12">&#x00A0;Bjorstad, W.</span><span
class="cmr-12">&#x00A0;Gropp, </span><span
class="cmti-12">Domain Decomposition: Parallel</span>
<span
class="cmti-12">Multilevel Methods for Elliptic Partial Differential Equations</span><span
class="cmr-12">, Cambridge</span>
<span
class="cmr-12">University Press, 1996.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[23]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XMPI1"></a><span
class="cmr-12">M.</span><span
class="cmr-12">&#x00A0;Snir, S.</span><span
class="cmr-12">&#x00A0;Otto, S.</span><span
class="cmr-12">&#x00A0;Huss-Lederman, D.</span><span
class="cmr-12">&#x00A0;Walker, J.</span><span
class="cmr-12">&#x00A0;Dongarra, </span><span
class="cmti-12">MPI:</span>
<span
class="cmti-12">The Complete Reference. Volume 1 - The MPI Core</span><span
class="cmr-12">, second edition, MIT</span>
<span
class="cmr-12">Press, 1998.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[24]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XStuben_01"></a><span
class="cmr-12">K.</span><span
class="cmr-12">&#x00A0;St</span><span
class="cmr-12">üben, </span><span
class="cmti-12">An Introduction to Algebraic Multigrid</span><span
class="cmr-12">, in A.</span><span
class="cmr-12">&#x00A0;Sch</span><span
class="cmr-12">üller,</span>
<span
class="cmr-12">U.</span><span
class="cmr-12">&#x00A0;Trottenberg, C.</span><span
class="cmr-12">&#x00A0;Oosterlee, Multigrid, Academic Press, 2001.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[25]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XTUMINARO_TONG"></a><span
class="cmr-12">R.</span><span
class="cmr-12">&#x00A0;S.</span><span
class="cmr-12">&#x00A0;Tuminaro, C.</span><span
class="cmr-12">&#x00A0;Tong, </span><span
class="cmti-12">Parallel Smoothed Aggregation Multigrid:</span>
<span
class="cmti-12">Aggregation Strategies on Massively Parallel Machines</span><span
class="cmr-12">, in J. Donnelley,</span>
<span
class="cmr-12">editor, Proceedings of SuperComputing 2000, Dallas, 2000.</span>
</p>
<p class="bibitem" ><span class="biblabel">
<span
class="cmr-12">[26]</span><span class="bibsp"><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span></span></span><a
id="XVANEK_MANDEL_BREZINA"></a><span
class="cmr-12">P.</span><span
class="cmr-12">&#x00A0;Van</span><span
class="cmr-12">&#x011B;k, J.</span><span
class="cmr-12">&#x00A0;Mandel, M.</span><span
class="cmr-12">&#x00A0;Brezina, </span><span
class="cmti-12">Algebraic Multigrid by Smoothed</span>
<span
class="cmti-12">Aggregation for Second and Fourth Order Elliptic Problems</span><span
class="cmr-12">, Computing, 56</span>
<span
class="cmr-12">(3) 1996, 179&#8211;196.</span>
</p>
</div>
<!--l. 145--><div class="crosslinks"><p class="noindent"><span <!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlse9.html" ><span href="userhtmlli3.html" ><span
class="cmr-12">prev</span></a><span class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse9.html#tailuserhtmlse9.html" ><span href="userhtmlli3.html#tailuserhtmlli3.html" ><span
class="cmr-12">prev-tail</span></a><span class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlli4.html" ><span href="userhtmlli4.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtml.html#userhtmlli4.html" ><span href="userhtmlse2.html#userhtmlli4.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 145--><p class="indent" > <a <!--l. 1--><p class="indent" > <a
id="tailuserhtmlli4.html"></a> id="tailuserhtmlli4.html"></a>
</body></html> </body></html>
+179 -178
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>General Overview</title> <head><title>General Overview</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
@@ -33,39 +33,22 @@ class="cmr-12">1 </span></span> <a
class="cmr-12">General Overview</span></h3> class="cmr-12">General Overview</span></h3>
<!--l. 5--><p class="noindent" ><span <!--l. 5--><p class="noindent" ><span
class="cmr-12">The </span><span class="cmr-12">The </span><span
class="cmcsc-10x-x-120">M<span class="cmcsc-10x-x-120">A<span
class="small-caps">l</span><span
class="small-caps">g</span><span
class="small-caps">e</span><span
class="small-caps">b</span><span
class="small-caps">r</span><span
class="small-caps">a</span><span
class="small-caps">i</span><span
class="small-caps">c</span> M<span
class="small-caps">u</span><span class="small-caps">u</span><span
class="small-caps">l</span><span class="small-caps">l</span><span
class="small-caps">t</span><span class="small-caps">t</span><span
class="small-caps">i</span>L<span class="small-caps">i</span>G<span
class="small-caps">e</span><span
class="small-caps">v</span><span
class="small-caps">e</span><span
class="small-caps">l</span> D<span
class="small-caps">o</span><span
class="small-caps">m</span><span
class="small-caps">a</span><span
class="small-caps">i</span><span
class="small-caps">n</span> D<span
class="small-caps">e</span><span
class="small-caps">c</span><span
class="small-caps">o</span><span
class="small-caps">m</span><span
class="small-caps">p</span><span
class="small-caps">o</span><span
class="small-caps">s</span><span
class="small-caps">i</span><span
class="small-caps">t</span><span
class="small-caps">i</span><span
class="small-caps">o</span><span
class="small-caps">n</span> P<span
class="small-caps">a</span><span
class="small-caps">r</span><span class="small-caps">r</span><span
class="small-caps">a</span><span class="small-caps">i</span><span
class="small-caps">l</span><span class="small-caps">d</span> P<span
class="small-caps">l</span><span
class="small-caps">e</span><span
class="small-caps">l</span> P<span
class="small-caps">r</span><span class="small-caps">r</span><span
class="small-caps">e</span><span class="small-caps">e</span><span
class="small-caps">c</span><span class="small-caps">c</span><span
@@ -79,9 +62,7 @@ class="small-caps">o</span><span
class="small-caps">n</span><span class="small-caps">n</span><span
class="small-caps">e</span><span class="small-caps">e</span><span
class="small-caps">r</span><span class="small-caps">r</span><span
class="small-caps">s</span></span> class="small-caps">s</span> P<span
<span
class="cmcsc-10x-x-120">P<span
class="small-caps">a</span><span class="small-caps">a</span><span
class="small-caps">c</span><span class="small-caps">c</span><span
class="small-caps">k</span><span class="small-caps">k</span><span
@@ -94,25 +75,22 @@ class="small-caps">s</span><span
class="small-caps">e</span><span class="small-caps">e</span><span
class="small-caps">d</span> <span class="small-caps">d</span> <span
class="small-caps">o</span><span class="small-caps">o</span><span
class="small-caps">n</span> PSBLAS (MLD2P4</span><span class="small-caps">n</span> PSBLAS</span>
class="cmr-12">) provides parallel Algebraic MultiGrid</span>
<span <span
class="cmr-12">(AMG) and Domain Decomposition preconditioners (see, e.g., </span><span class="cite"><span class="cmr-12">(</span><span
class="cmcsc-10x-x-120">AMG4PSBLAS</span><span
class="cmr-12">) provides parallel Algebraic MultiGrid (AMG) preconditioners (see,</span>
<span
class="cmr-12">e.g., </span><span class="cite"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html#XBriggs2000"><span href="userhtmlli5.html#XBriggs2000"><span
class="cmr-12">3</span></a><span class="cmr-12">4</span></a><span
class="cmr-12">,</span><span class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XStuben_01"><span href="userhtmlli5.html#XStuben_01"><span
class="cmr-12">24</span></a><span class="cmr-12">28</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xdd2_96"><span
class="cmr-12">22</span></a><span
class="cmr-12">]</span></span><span class="cmr-12">]</span></span><span
class="cmr-12">), to be used</span> class="cmr-12">), to be used in the iterative solution of linear systems,</span>
<span
class="cmr-12">in the iterative solution of linear systems,</span>
<table <table
class="equation"><tr><td> class="equation"><tr><td>
<center class="math-display" > <center class="math-display" >
@@ -121,129 +99,179 @@ src="userhtml0x.png" alt="Ax = b,
" class="math-display" ><a " class="math-display" ><a
id="x4-3001r1"></a></center></td><td class="equation-label"><span id="x4-3001r1"></a></center></td><td class="equation-label"><span
class="cmr-12">(1)</span></td></tr></table> class="cmr-12">(1)</span></td></tr></table>
<!--l. 12--><p class="nopar" > <!--l. 11--><p class="nopar" >
<span <span
class="cmr-12">where </span><span class="cmr-12">where </span><span
class="cmmi-12">A </span><span class="cmmi-12">A </span><span
class="cmr-12">is a square, real or complex, sparse matrix. The name of the package comes</span> class="cmr-12">is a square, real or complex, sparse symmetric positive definite (s.p.d)</span>
<span <span
class="cmr-12">from its original implementation, containing multilevel additive and hybrid Schwarz</span> class="cmr-12">matrix.</span>
<!--l. 19--><p class="indent" > <span
class="cmr-12">The preconditioners implemented in AMG4PSBLAS are obtained by combining 3</span>
<span <span
class="cmr-12">preconditioners, as well as one-level additive Schwarz preconditioners. The current</span> class="cmr-12">different types of AMG cycles with smoothers and coarsest-level solvers. Available</span>
<span <span
class="cmr-12">version extends the original plan by including multilevel cycles and smoothers widely</span> class="cmr-12">multigrid cycles include the V-, W-, and a version of a Krylov-type cycle</span>
<span <span
class="cmr-12">used in multigrid methods.</span> class="cmr-12">(K-cycle)</span><span
<!--l. 24--><p class="indent" > <span
class="cmr-12">The multilevel preconditioners implemented in MLD2P4 are obtained by</span>
<span
class="cmr-12">combining AMG cycles with smoothers and coarsest-level solvers. The V-, W-, and</span>
<span
class="cmr-12">K-cycles</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html#XBriggs2000"><span href="userhtmlli5.html#XBriggs2000"><span
class="cmr-12">4</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli5.html#XNotay2008"><span
class="cmr-12">24</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">; they can be combined with Jacobi hybrid forward/backward</span>
<span
class="cmr-12">Gauss-Seidel, block-Jacobi, and additive Schwarz smoothers. The Jacobi, block-Jacobi</span>
<span
class="cmr-12">and Gauss-Seidel smoothers are also available in the </span><span
class="cmmi-12">&#x2113;</span><sub><span
class="cmr-8">1</span></sub> <span
class="cmr-12">version.</span>
<!--l. 29--><p class="indent" > <span
class="cmr-12">An algebraic approach is used to generate a hierarchy of coarse-level matrices and</span>
<span
class="cmr-12">operators, without explicitly using any information on the geometry of the original</span>
<span
class="cmr-12">problem, e.g., the discretization of a PDE. To this end, two different coarsening</span>
<span
class="cmr-12">strategies, based on aggregation, are available:</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">a decoupled version of the smoothed aggregation procedure proposed in</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli5.html#XBREZINA_VANEK"><span
class="cmr-12">3</span></a><span class="cmr-12">3</span></a><span
class="cmr-12">,</span><span class="cmr-12">,</span>
<span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XNotay2008"><span href="userhtmlli5.html#XVANEK_MANDEL_BREZINA"><span
class="cmr-12">20</span></a><span class="cmr-12">30</span></a><span
class="cmr-12">]</span></span> <span class="cmr-12">]</span></span><span
class="cmr-12">are available, which allow to define almost all the preconditioners in</span> class="cmr-12">, and already included in the previous versions of the package</span><span
<span
class="cmr-12">the package, including the multilevel hybrid Schwarz ones; a specific cycle is</span>
<span
class="cmr-12">implemented to obtain multilevel additive Schwarz preconditioners. The Jacobi,</span>
<span
class="cmr-12">hybrid forward/backward Gauss-Seidel, block-Jacobi, and additive Schwarz</span>
<span
class="cmr-12">methods are available as smoothers. An algebraic approach is used to generate a</span>
<span
class="cmr-12">hierarchy of coarse-level matrices and operators, without explicitly using any</span>
<span
class="cmr-12">information on the geometry of the original problem, e.g., the discretization of a</span>
<span
class="cmr-12">PDE. To this end, the smoothed aggregation technique</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html#XBREZINA_VANEK"><span href="userhtmlli5.html#XBDDF2007"><span
class="cmr-12">2</span></a><span class="cmr-12">11</span></a><span
class="cmr-12">,</span><span class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XVANEK_MANDEL_BREZINA"><span href="userhtmlli5.html#XMLD2P4_TOMS"><span
class="cmr-12">26</span></a><span class="cmr-12">10</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">;</span>
</li>
<li class="itemize"><span
class="cmr-12">a coupled, parallel implementation of the Coarsening based on Compatible</span>
<span
class="cmr-12">Weighted Matching introduced in</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli5.html#XDV2013"><span
class="cmr-12">31</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli5.html#XDFV2018"><span
class="cmr-12">32</span></a><span
class="cmr-12">]</span></span> <span class="cmr-12">]</span></span> <span
class="cmr-12">is applied.</span> class="cmr-12">and described in detail in</span><span
<span class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">Either exact or approximate solvers can be used on the coarsest-level system.</span> class="cmr-12">[</span><a
<span href="userhtmlli5.html#XDDF2020"><span
class="cmr-12">Specifically, different sparse LU factorizations from external packages, and</span> class="cmr-12">12</span></a><span
<span class="cmr-12">]</span></span><span
class="cmr-12">native incomplete LU factorizations and Jacobi, hybrid Gauss-Seidel, and</span> class="cmr-12">;</span></li></ul>
<!--l. 42--><p class="noindent" ><span
class="cmr-12">Either exact or approximate solvers can be used on the coarsest-level system. We provide</span>
<span <span
class="cmr-12">block-Jacobi solvers are available. All smoothers can be also exploited as one-level</span> class="cmr-12">interfaces to various sparse LU factorizations from external packages, native incomplete</span>
<span <span
class="cmr-12">preconditioners.</span> class="cmr-12">LU and approximate inverse factorizations, weighted Jacobi, hybrid Gauss-Seidel,</span>
<!--l. 42--><p class="indent" > <span <span
class="cmr-12">MLD2P4 is written in Fortran</span><span class="cmr-12">block-Jacobi solvers and a recursive call to preconditioned Krylov methods; all</span>
<span
class="cmr-12">smoothers can be also exploited as one-level preconditioners.</span>
<!--l. 49--><p class="indent" > <span
class="cmr-12">AMG4PSBLAS is written in Fortran</span><span
class="cmr-12">&#x00A0;2003, following an object-oriented design</span> class="cmr-12">&#x00A0;2003, following an object-oriented design</span>
<span <span
class="cmr-12">through the exploitation of features such as abstract data type creation, type</span> class="cmr-12">through the exploitation of features such as abstract data type creation, type</span>
<span <span
class="cmr-12">extension, functional overloading, and dynamic memory management. The</span> class="cmr-12">extension, functional overloading, and dynamic memory management. The parallel</span>
<span <span
class="cmr-12">parallel implementation is based on a Single Program Multiple Data (SPMD)</span> class="cmr-12">implementation is based on a Single Program Multiple Data (SPMD) paradigm.</span>
<span <span
class="cmr-12">paradigm. Single and double precision implementations of MLD2P4 are available</span> class="cmr-12">Single and double precision implementations of AMG4PSBLAS are available</span>
<span <span
class="cmr-12">for both the real and the complex case, which can be used through a single</span> class="cmr-12">for both the real and the complex case, which can be used through a single</span>
<span <span
class="cmr-12">interface.</span> class="cmr-12">interface.</span>
<!--l. 53--><p class="indent" > <span <!--l. 59--><p class="indent" > <span
class="cmr-12">MLD2P4 has been designed to implement scalable and easy-to-use multilevel</span> class="cmr-12">AMG4PSBLAS has been designed to implement scalable and easy-to-use</span>
<span <span
class="cmr-12">preconditioners in the context of the PSBLAS (Parallel Sparse BLAS) computational</span> class="cmr-12">multilevel preconditioners in the context of the PSBLAS (Parallel Sparse BLAS)</span>
<span <span
class="cmr-12">framework</span><span class="cmr-12">computational framework</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html#Xpsblas_00"><span href="userhtmlli5.html#Xpsblas_00"><span
class="cmr-12">15</span></a><span class="cmr-12">19</span></a><span
class="cmr-12">,</span><span class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XPSBLAS3"><span href="userhtmlli5.html#XPSBLAS3"><span
class="cmr-12">14</span></a><span class="cmr-12">18</span></a><span
class="cmr-12">]</span></span><span class="cmr-12">]</span></span><span
class="cmr-12">. PSBLAS provides basic linear algebra operators and data</span> class="cmr-12">. PSBLAS provides basic linear algebra operators</span>
<span <span
class="cmr-12">management facilities for distributed sparse matrices, as well as parallel Krylov solvers</span> class="cmr-12">and data management facilities for distributed sparse matrices, kernels for</span>
<span <span
class="cmr-12">which can be used with the MLD2P4 preconditioners. The choice of PSBLAS has been</span> class="cmr-12">sequential incomplete factorizations needed for the parallel block-Jacobi and</span>
<span <span
class="cmr-12">mainly motivated by the need of having a portable and efficient software infrastructure</span> class="cmr-12">additive Schwarz smoothers, and parallel Krylov solvers which can be used with</span>
<span <span
class="cmr-12">implementing &#8220;de facto&#8221; standard parallel sparse linear algebra kernels, to pursue goals</span> class="cmr-12">the AMG4PSBLAS preconditioners. The choice of PSBLAS has been mainly</span>
<span <span
class="cmr-12">such as performance, portability, modularity ed extensibility in the development of the</span> class="cmr-12">motivated by the need of having a portable and efficient software infrastructure</span>
<span <span
class="cmr-12">preconditioner package. On the other hand, the implementation of MLD2P4 has led to</span> class="cmr-12">implementing &#8220;de facto&#8221; standard parallel sparse linear algebra kernels, to</span>
<span <span
class="cmr-12">some revisions and extentions of the original PSBLAS kernels. The inter-process</span> class="cmr-12">pursue goals such as performance, portability, modularity ed extensibility</span>
<span <span
class="cmr-12">comunication required by MLD2P4 is encapsulated in the PSBLAS routines; therefore,</span> class="cmr-12">in the development of the preconditioner package. On the other hand, the</span>
<span <span
class="cmr-12">MLD2P4 can be run on any parallel machine where PSBLAS implementations are</span> class="cmr-12">implementation of AMG4PSBLAS, which was driven by the need to face the exascale</span>
<span <span
class="cmr-12">available.</span> class="cmr-12">challenge, has led to some important revisions and extentions of the PSBLAS</span>
<!--l. 70--><p class="indent" > <span
class="cmr-12">MLD2P4 has a layered and modular software architecture where three main layers</span>
<span <span
class="cmr-12">can be identified. The lower layer consists of the PSBLAS kernels, the middle one</span> class="cmr-12">infrastructure. The inter-process comunication required by AMG4PSBLAS</span>
<span <span
class="cmr-12">implements the construction and application phases of the preconditioners, and the</span> class="cmr-12">is encapsulated in the PSBLAS routines; therefore, AMG4PSBLAS can be</span>
<span
class="cmr-12">run on any parallel machine where PSBLAS implementations are available.</span>
<span
class="cmr-12">In the most recent version of PSBLAS (release 3.7), a plug-in for GPU is</span>
<span
class="cmr-12">included; it includes CUDA versions of main vector operations and of sparse</span>
<span
class="cmr-12">matrix-vector multiplication, so that Krylov methods coupled with AMG4PBLAS</span>
<span
class="cmr-12">preconditioners relying on Jacobi and block-Jacobi smoothers with sparse</span>
<span
class="cmr-12">approximate inverses on the blocks can be efficiently executed on cluster of</span>
<span
class="cmr-12">GPUs.</span>
<!--l. 84--><p class="indent" > <span
class="cmr-12">AMG4PSBLAS has a layered and modular software architecture where three main</span>
<span
class="cmr-12">layers can be identified. The lower layer consists of the PSBLAS kernels, the middle</span>
<span
class="cmr-12">one implements the construction and application phases of the preconditioners, and the</span>
<span <span
class="cmr-12">upper one provides a uniform interface to all the preconditioners. This architecture</span> class="cmr-12">upper one provides a uniform interface to all the preconditioners. This architecture</span>
<span <span
@@ -251,37 +279,19 @@ class="cmr-12">allows for different levels of use of the package: few black-box
<span <span
class="cmr-12">layer allow all users to easily build and apply any preconditioner available in</span> class="cmr-12">layer allow all users to easily build and apply any preconditioner available in</span>
<span <span
class="cmr-12">MLD2P4; facilities are also available allowing expert users to extend the set of</span> class="cmr-12">AMG4PSBLAS; facilities are also available allowing expert users to extend the set of</span>
<span <span
class="cmr-12">smoothers and solvers for building new versions of the preconditioners (see</span> class="cmr-12">smoothers and solvers for building new versions of the preconditioners (see</span>
<span <span
class="cmr-12">Section</span><span class="cmr-12">Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x29-330007"><span href="userhtmlse6.html#x26-300006"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:adding --></a><span class="cmr-12">6</span><!--tex4ht:ref: sec:adding --></a><span
class="cmr-12">).</span> class="cmr-12">).</span>
<!--l. 81--><p class="indent" > <span <!--l. 95--><p class="indent" > <span
class="cmr-12">We note that the user interface of MLD2P4 2.1 has been extended with respect to</span>
<span
class="cmr-12">the previous versions in order to separate the construction of the multilevel</span>
<span
class="cmr-12">hierarchy from the construction of the smoothers and solvers, and to allow for</span>
<span
class="cmr-12">more flexibility at each level. The software architecture described in</span><span
class="cmr-12">&#x00A0;</span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XMLD2P4_TOMS"><span
class="cmr-12">8</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">has</span>
<span
class="cmr-12">significantly evolved too, in order to fully exploit the Fortran</span><span
class="cmr-12">&#x00A0;2003 features</span>
<span
class="cmr-12">implemented in PSBLAS 3. However, compatibility with previous versions has been</span>
<span
class="cmr-12">preserved.</span>
<!--l. 88--><p class="indent" > <span
class="cmr-12">This guide is organized as follows. General information on the distribution of the</span> class="cmr-12">This guide is organized as follows. General information on the distribution of the</span>
<span <span
class="cmr-12">source code is reported in Section</span><span class="cmr-12">source code is reported in Section</span><span
@@ -292,53 +302,44 @@ class="cmr-12">, while details on the configuration and installation</span>
<span <span
class="cmr-12">of the package are given in Section</span><span class="cmr-12">of the package are given in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse3.html#x7-60003"><span href="userhtmlse3.html#x8-70003"><span
class="cmr-12">3</span><!--tex4ht:ref: sec:building --></a><span class="cmr-12">3</span><!--tex4ht:ref: sec:building --></a><span
class="cmr-12">. A short description of the preconditioners</span> class="cmr-12">. The basics for building and applying the</span>
<span <span
class="cmr-12">implemented in MLD2P4 is provided in Section</span><span class="cmr-12">preconditioners with the Krylov solvers implemented in PSBLAS are reported</span>
class="cmr-12">&#x00A0;</span><a
href="userhtmlse4.html#x13-120004"><span
class="cmr-12">4</span><!--tex4ht:ref: sec:background --></a><span
class="cmr-12">, to help the users in choosing among</span>
<span <span
class="cmr-12">them. The basics for building and applying the preconditioners with the Krylov solvers</span> class="cmr-12">in</span><span
<span
class="cmr-12">implemented in PSBLAS are reported in</span><span
class="cmr-12">&#x00A0;Section</span><span class="cmr-12">&#x00A0;Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse5.html#x17-160005"><span href="userhtmlse4.html#x14-130004"><span
class="cmr-12">5</span><!--tex4ht:ref: sec:started --></a><span class="cmr-12">4</span><!--tex4ht:ref: sec:started --></a><span
class="cmr-12">, where the Fortran codes of a few</span> class="cmr-12">, where the Fortran codes of a few sample programs are also shown.</span>
<span <span
class="cmr-12">sample programs are also shown. A reference guide for the user interface routines is</span> class="cmr-12">A reference guide for the user interface routines is provided in Section</span><span
<span
class="cmr-12">provided in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse6.html#x19-180006"><span href="userhtmlse5.html#x16-150005"><span
class="cmr-12">6</span><!--tex4ht:ref: sec:userinterface --></a><span class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">. Information on the extension of the package through the</span> class="cmr-12">.</span>
<span <span
class="cmr-12">addition of new smoothers and solvers is reported in Section</span><span class="cmr-12">Information on the extension of the package through the addition of new</span>
<span
class="cmr-12">smoothers and solvers is reported in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x29-330007"><span href="userhtmlse6.html#x26-300006"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:adding --></a><span class="cmr-12">6</span><!--tex4ht:ref: sec:adding --></a><span
class="cmr-12">. The error handling</span> class="cmr-12">. The error handling mechanism</span>
<span <span
class="cmr-12">mechanism used by the package is briefly described in Section</span><span class="cmr-12">used by the package is briefly described in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span href="userhtmlse7.html#x27-310007"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a><span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a><span
class="cmr-12">. The copyright</span> class="cmr-12">. The copyright terms</span>
<span <span
class="cmr-12">terms concerning the distribution and modification of MLD2P4 are reported in</span> class="cmr-12">concerning the distribution and modification of AMG4PSBLAS are reported in</span>
<span <span
class="cmr-12">Appendix</span><span class="cmr-12">Appendix</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse9.html#x31-35000A"><span href="userhtmlse8.html#x28-32000A"><span
class="cmr-12">A</span><!--tex4ht:ref: sec:license --></a><span class="cmr-12">A</span><!--tex4ht:ref: sec:license --></a><span
class="cmr-12">.</span> class="cmr-12">.</span>
+19 -9
View File
@@ -3,8 +3,8 @@
<html > <html >
<head><title>Code Distribution</title> <head><title>Code Distribution</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
@@ -32,16 +32,17 @@ class="cmr-12">2 </span></span> <a
id="x5-40002"></a><span id="x5-40002"></a><span
class="cmr-12">Code Distribution</span></h3> class="cmr-12">Code Distribution</span></h3>
<!--l. 5--><p class="noindent" ><span <!--l. 5--><p class="noindent" ><span
class="cmr-12">MLD2P4 is available from the web site</span> class="cmr-12">AMG4PSBLAS is available from the web site</span>
<div class="quotation"> <div class="quotation">
<!--l. 8--><p class="indent" > <span <!--l. 8--><p class="indent" > <a
class="cmtt-12">https://github.com/sfilippone/mld2p4-2</span></div> href="https://psctoolkit.github.io/products/amg4psblas/" ><span
class="cmr-12">https://psctoolkit.github.io/products/amg4psblas/</span></a></div>
<!--l. 10--><p class="noindent" ><span <!--l. 10--><p class="noindent" ><span
class="cmr-12">where contact points for further information can be also found.</span> class="cmr-12">where contact points for further information can be also found.</span>
<!--l. 12--><p class="indent" > <span <!--l. 12--><p class="indent" > <span
class="cmr-12">The software is available under a modified BSD license, as specified in Appendix</span><span class="cmr-12">The software is available under a modified BSD license, as specified in Appendix</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse9.html#x31-35000A"><span href="userhtmlse8.html#x28-32000A"><span
class="cmr-12">A</span><!--tex4ht:ref: sec:license --></a><span class="cmr-12">A</span><!--tex4ht:ref: sec:license --></a><span
class="cmr-12">;</span> class="cmr-12">;</span>
<span <span
@@ -54,11 +55,11 @@ class="cmr-12">into account when treating derived works.</span>
class="cmr-12">The library defines a version string with the constant</span> class="cmr-12">The library defines a version string with the constant</span>
<center class="math-display" > <center class="math-display" >
<img <img
src="userhtml1x.png" alt="mld_version_string_ src="userhtml1x.png" alt="amg_version_string_
" class="math-display" ></center> " class="math-display" ></center>
<!--l. 20--><p class="nopar" > <span <!--l. 20--><p class="nopar" > <span
class="cmr-12">whose current value is </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">whose current value is </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">2.1.0</span></span></span><span class="cmtt-12">1.0</span></span></span><span
class="cmr-12">.</span> class="cmr-12">.</span>
<!--l. 23--><p class="noindent" > <!--l. 23--><p class="noindent" >
<div class="likesubsectionTOCS"> <div class="likesubsectionTOCS">
@@ -66,7 +67,16 @@ class="cmr-12">.</span>
class="cmr-12">&#x00A0;</span><span class="likesubsectionToc" ><a class="cmr-12">&#x00A0;</span><span class="likesubsectionToc" ><a
href="userhtmlli3.html#x6-50002"><span href="userhtmlli3.html#x6-50002"><span
class="cmr-12">Contributors</span></a></span> class="cmr-12">Contributors</span></a></span>
</div><!--l. 1--><div class="crosslinks"><p class="noindent"><span <br /> <span
class="cmr-12">&#x00A0;</span><span class="likesubsectionToc" ><a
href="userhtmlli4.html#x7-60002"><span
class="cmr-12">Citing AMG4PSBLAS</span></a></span>
</div>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlse3.html" ><span href="userhtmlse3.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
+35 -33
View File
@@ -1,10 +1,10 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Configuring and Building MLD2P4</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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
@@ -29,10 +29,10 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">3 </span></span> <a class="cmr-12">3 </span></span> <a
id="x7-60003"></a><span id="x8-70003"></a><span
class="cmr-12">Configuring and Building MLD2P4</span></h3> class="cmr-12">Configuring and Building AMG4PSBLAS</span></h3>
<!--l. 4--><p class="noindent" ><span <!--l. 4--><p class="noindent" ><span
class="cmr-12">In order to build MLD2P4 it is necessary to set up a Makefile with appropriate</span> class="cmr-12">In order to build AMG4PSBLAS it is necessary to set up a Makefile with appropriate</span>
<span <span
class="cmr-12">system-dependent variables; this is done by means of the </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">system-dependent variables; this is done by means of the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">configure</span></span></span> <span class="cmtt-12">configure</span></span></span> <span
@@ -42,73 +42,75 @@ class="cmr-12">distribution also includes the autoconf and automake sources empl
<span <span
class="cmr-12">script, but usually this is not needed to build the software.</span> class="cmr-12">script, but usually this is not needed to build the software.</span>
<!--l. 10--><p class="indent" > <span <!--l. 10--><p class="indent" > <span
class="cmr-12">MLD2P4 is implemented almost entirely in Fortran</span><span class="cmr-12">AMG4PSBLAS is implemented almost entirely in Fortran</span><span
class="cmr-12">&#x00A0;2003, with some interfaces to</span> class="cmr-12">&#x00A0;2003, with some</span>
<span <span
class="cmr-12">external libraries in C; the Fortran compiler must support the Fortran</span><span class="cmr-12">interfaces to external libraries in C; the Fortran compiler must support the</span>
class="cmr-12">&#x00A0;2003 standard</span>
<span <span
class="cmr-12">plus the extension </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">Fortran</span><span
class="cmr-12">&#x00A0;2003 standard plus the extension </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">MOLD=</span></span></span> <span class="cmtt-12">MOLD=</span></span></span> <span
class="cmr-12">feature, which enhances the usability of </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">feature, which enhances the usability</span>
<span
class="cmr-12">of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">ALLOCATE</span></span></span><span class="cmtt-12">ALLOCATE</span></span></span><span
class="cmr-12">. Many</span> class="cmr-12">. Most Fortran compilers provide this feature; in particular, this is</span>
<span <span
class="cmr-12">compilers do this; in particular, this is supported by the GNU Fortran compiler, for</span> class="cmr-12">supported by the GNU Fortran compiler, for which we recommend to use at least</span>
<span <span
class="cmr-12">which we recommend to use at least version 4.8. The software defines data</span> class="cmr-12">version 4.8. The software defines data types and interfaces for real and complex data,</span>
<span <span
class="cmr-12">types and interfaces for real and complex data, in both single and double</span> class="cmr-12">in both single and double precision.</span>
<span
class="cmr-12">precision.</span>
<!--l. 20--><p class="indent" > <span <!--l. 20--><p class="indent" > <span
class="cmr-12">Building MLD2P4 requires some base libraries (see Section</span><span class="cmr-12">Building AMG4PSBLAS requires some base libraries (see Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlsu1.html#x8-70003.1"><span href="userhtmlsu1.html#x9-80003.1"><span
class="cmr-12">3.1</span><!--tex4ht:ref: sec:prerequisites --></a><span class="cmr-12">3.1</span><!--tex4ht:ref: sec:prerequisites --></a><span
class="cmr-12">); interfaces to</span> class="cmr-12">); interfaces to</span>
<span <span
class="cmr-12">optional third-party libraries, which extend the functionalities of MLD2P4 (see</span> class="cmr-12">optional third-party libraries, which extend the functionalities of AMG4PSBLAS (see</span>
<span <span
class="cmr-12">Section</span><span class="cmr-12">Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlsu2.html#x9-80003.2"><span href="userhtmlsu2.html#x10-90003.2"><span
class="cmr-12">3.2</span><!--tex4ht:ref: sec:third-party --></a><span class="cmr-12">3.2</span><!--tex4ht:ref: sec:third-party --></a><span
class="cmr-12">), are also available. Many Linux distributions (e.g., Ubuntu, Fedora,</span> class="cmr-12">), are also available. A number of Linux distributions (e.g., Ubuntu,</span>
<span <span
class="cmr-12">CentOS) provide precompiled packages for the prerequisite and optional software. In</span> class="cmr-12">Fedora, CentOS) provide precompiled packages for the prerequisite and optional</span>
<span <span
class="cmr-12">many cases these packages are split between a runtime part and a &#8220;developer&#8221; part; in</span> class="cmr-12">software. In many cases these packages are split between a runtime part and a</span>
<span <span
class="cmr-12">order to build MLD2P4 you need both. A description of the base and optional software</span> class="cmr-12">&#8220;developer&#8221; part; in order to build AMG4PSBLAS you need both. A description of</span>
<span <span
class="cmr-12">used by MLD2P4 is given in the next sections.</span> class="cmr-12">the base and optional software used by AMG4PSBLAS is given in the next</span>
<!--l. 28--><p class="noindent" > <span
class="cmr-12">sections.</span>
<!--l. 30--><p class="noindent" >
<div class="subsectionTOCS"> <div class="subsectionTOCS">
<span <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.1 </span><a class="cmr-12">3.1 </span><a
href="userhtmlsu1.html#x8-70003.1"><span href="userhtmlsu1.html#x9-80003.1"><span
class="cmr-12">Prerequisites</span></a></span> class="cmr-12">Prerequisites</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.2 </span><a class="cmr-12">3.2 </span><a
href="userhtmlsu2.html#x9-80003.2"><span href="userhtmlsu2.html#x10-90003.2"><span
class="cmr-12">Optional third party libraries</span></a></span> class="cmr-12">Optional third party libraries</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.3 </span><a class="cmr-12">3.3 </span><a
href="userhtmlsu3.html#x10-90003.3"><span href="userhtmlsu3.html#x11-100003.3"><span
class="cmr-12">Configuration options</span></a></span> class="cmr-12">Configuration options</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.4 </span><a class="cmr-12">3.4 </span><a
href="userhtmlsu4.html#x11-100003.4"><span href="userhtmlsu4.html#x12-110003.4"><span
class="cmr-12">Bug reporting</span></a></span> class="cmr-12">Bug reporting</span></a></span>
<br /> <span <br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">3.5 </span><a class="cmr-12">3.5 </span><a
href="userhtmlsu5.html#x12-110003.5"><span href="userhtmlsu5.html#x13-120003.5"><span
class="cmr-12">Example and test programs</span></a></span> class="cmr-12">Example and test programs</span></a></span>
</div> </div>
+393 -149
View File
@@ -1,10 +1,10 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Multigrid Background</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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
@@ -29,173 +29,417 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">4 </span></span> <a class="cmr-12">4 </span></span> <a
id="x13-120004"></a><span id="x14-130004"></a><span
class="cmr-12">Multigrid Background</span></h3> class="cmr-12">Getting Started</span></h3>
<!--l. 5--><p class="noindent" ><span <!--l. 5--><p class="noindent" ><span
class="cmr-12">Multigrid preconditioners, coupled with Krylov iterative solvers, are widely used in the</span> class="cmr-12">This section describes the basics for building and applying AMG4PSBLAS one-level</span>
<span <span
class="cmr-12">parallel solution of large and sparse linear systems, because of their optimality in the</span> class="cmr-12">and multilevel (i.e., AMG) preconditioners with the Krylov solvers included in</span>
<span <span
class="cmr-12">solution of linear systems arising from the discretization of scalar elliptic Partial</span> class="cmr-12">PSBLAS </span><span class="cite"><span
<span
class="cmr-12">Differential Equations (PDEs) on regular grids. Optimality, also known as algorithmic</span>
<span
class="cmr-12">scalability, is the property of having a computational cost per iteration that depends</span>
<span
class="cmr-12">linearly on the problem size, and a convergence rate that is independent of the problem</span>
<span
class="cmr-12">size.</span>
<!--l. 13--><p class="indent" > <span
class="cmr-12">Multigrid preconditioners are based on a recursive application of a two-grid process</span>
<span
class="cmr-12">consisting of smoother iterations and a coarse-space (or coarse-level) correction. The</span>
<span
class="cmr-12">smoothers may be either basic iterative methods, such as the Jacobi and Gauss-Seidel</span>
<span
class="cmr-12">ones, or more complex subspace-correction methods, such as the Schwarz ones. The</span>
<span
class="cmr-12">coarse-space correction consists of solving, in an appropriately chosen coarse space, the</span>
<span
class="cmr-12">residual equation associated with the approximate solution computed by the</span>
<span
class="cmr-12">smoother, and of using the solution of this equation to correct the previous</span>
<span
class="cmr-12">approximation. The transfer of information between the original (fine) space and</span>
<span
class="cmr-12">the coarse one is performed by using suitable restriction and prolongation</span>
<span
class="cmr-12">operators. The construction of the coarse space and the corresponding transfer</span>
<span
class="cmr-12">operators is carried out by applying a so-called coarsening algorithm to the</span>
<span
class="cmr-12">system matrix. Two main approaches can be used to perform coarsening:</span>
<span
class="cmr-12">the geometric approach, which exploits the knowledge of some physical grid</span>
<span
class="cmr-12">associated with the matrix and requires the user to define transfer operators</span>
<span
class="cmr-12">from the fine to the coarse level and vice versa, and the algebraic approach,</span>
<span
class="cmr-12">which builds the coarse-space correction and the associate transfer operators</span>
<span
class="cmr-12">using only matrix information. The first approach may be difficult when the</span>
<span
class="cmr-12">system comes from discretizations on complex geometries; furthermore, ad hoc</span>
<span
class="cmr-12">one-level smoothers may be required to get an efficient interplay between</span>
<span
class="cmr-12">fine and coarse levels, e.g., when matrices with highly varying coefficients are</span>
<span
class="cmr-12">considered. The second approach performs a fully automatic coarsening and</span>
<span
class="cmr-12">enforces the interplay between fine and coarse level by suitably choosing the</span>
<span
class="cmr-12">coarse space and the coarse-to-fine interpolation (see, e.g., </span><span class="cite"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html#XBriggs2000"><span href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">3</span></a><span class="cmr-12">17</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XStuben_01"><span
class="cmr-12">24</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xdd2_96"><span
class="cmr-12">22</span></a><span
class="cmr-12">]</span></span> <span
class="cmr-12">for</span>
<span
class="cmr-12">details.)</span>
<!--l. 37--><p class="indent" > <span
class="cmr-12">MLD2P4 uses a pure algebraic approach, based on the smoothed aggregation</span>
<span
class="cmr-12">algorithm </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XBREZINA_VANEK"><span
class="cmr-12">2</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XVANEK_MANDEL_BREZINA"><span
class="cmr-12">26</span></a><span
class="cmr-12">]</span></span><span class="cmr-12">]</span></span><span
class="cmr-12">, for building the sequence of coarse matrices and transfer</span> class="cmr-12">.</span>
<span <!--l. 9--><p class="indent" > <span
class="cmr-12">operators, starting from the original one. A decoupled version of this algorithm</span> class="cmr-12">The following steps are required:</span>
<ol class="enumerate1" >
<li
class="enumerate" id="x14-13002x1"><span
class="cmti-12">Declare the preconditioner data structure</span><span
class="cmr-12">. It is a derived data type,</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">prec_</span></span></span> <span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type</span></span></span><span
class="cmr-12">, where </span><span
class="cmti-12">x </span><span
class="cmr-12">may be </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span> <span
class="cmr-12">or </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span><span
class="cmr-12">, according to the basic data</span>
<span
class="cmr-12">type of the sparse matrix (</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span> <span
class="cmr-12">= real single precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span> <span
class="cmr-12">= real double precision;</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span> <span
class="cmr-12">= complex single precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span> <span
class="cmr-12">= complex double precision). This data</span>
<span
class="cmr-12">structure is accessed by the user only through the AMG4PSBLAS routines,</span>
<span
class="cmr-12">following an object-oriented approach.</span>
</li>
<li
class="enumerate" id="x14-13004x2"><span
class="cmti-12">Allocate and initialize the preconditioner data structure, according to a</span>
<span
class="cmti-12">preconditioner type chosen by the user</span><span
class="cmr-12">. This is performed by the routine</span>
<span class="lstinline"></span><span
class="cmtt-12">init</span><span
class="cmr-12">, which also sets defaults for each preconditioner type selected by</span>
<span
class="cmr-12">the user. The preconditioner types and the defaults associated with them</span>
<span
class="cmr-12">are given in Table</span><span
class="cmr-12">&#x00A0;</span><a
href="#x14-13015r1"><span
class="cmr-12">1</span><!--tex4ht:ref: tab:precinit --></a><span
class="cmr-12">, where the strings used by </span><span class="lstinline"></span><span
class="cmtt-12">init</span> <span
class="cmr-12">to identify the</span>
<span
class="cmr-12">preconditioner types are also given. Note that these strings are valid also if</span>
<span
class="cmr-12">uppercase letters are substituted by corresponding lowercase ones.</span>
</li>
<li
class="enumerate" id="x14-13006x3"><span
class="cmti-12">Modify the selected preconditioner type, by properly setting preconditioner</span>
<span
class="cmti-12">parameters. </span><span
class="cmr-12">This is performed by the routine </span><span class="lstinline"></span><span
class="cmtt-12">set</span><span
class="cmr-12">. This routine must be</span>
<span
class="cmr-12">called if the user wants to modify the default values of the parameters</span>
<span
class="cmr-12">associated with the selected preconditioner type, to obtain a variant of that</span>
<span
class="cmr-12">preconditioner. Examples of use of </span><span class="lstinline"></span><span
class="cmtt-12">set</span> <span
class="cmr-12">are given in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu6.html#x15-140004.1"><span
class="cmr-12">4.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmr-12">; a complete</span>
<span
class="cmr-12">list of all the preconditioner parameters and their allowed and default values</span>
<span
class="cmr-12">is provided in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse5.html#x16-150005"><span
class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">, Tables</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu8.html#x18-17009r2"><span
class="cmr-12">2</span><!--tex4ht:ref: tab:p_cycle --></a><span
class="cmr-12">-</span><a
href="userhtmlsu8.html#x18-17014r7"><span
class="cmr-12">7</span><!--tex4ht:ref: tab:p_smoother_1 --></a><span
class="cmr-12">.</span>
</li>
<li
class="enumerate" id="x14-13008x4"><span
class="cmti-12">Build the preconditioner for a given matrix</span><span
class="cmr-12">. If the selected preconditioner is</span>
<span
class="cmr-12">multilevel, then two steps must be performed, as specified next.</span>
<span <ol class="enumerate2" >
class="cmr-12">is implemented, where the smoothed aggregation is applied locally to each</span> <li
<span class="enumerate" id="x14-13009x0"><span
class="cmr-12">submatrix </span><span class="cite"><span class="cmti-12">Build the AMG hierarchy for a given matrix. </span><span
class="cmr-12">[</span><a class="cmr-12">This is performed by the</span>
href="userhtmlli4.html#XTUMINARO_TONG"><span <span
class="cmr-12">25</span></a><span class="cmr-12">routine </span><span class="lstinline"></span><span
class="cmr-12">]</span></span><span class="cmtt-12">hierarchy_build</span><span
class="cmr-12">. A brief description of the AMG preconditioners implemented in</span>
<span
class="cmr-12">MLD2P4 is given in Sections</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu6.html#x14-130004.1"><span
class="cmr-12">4.1</span><!--tex4ht:ref: sec:multilevel --></a><span
class="cmr-12">-</span><a
href="userhtmlsu8.html#x16-150004.3"><span
class="cmr-12">4.3</span><!--tex4ht:ref: sec:smoothers --></a><span
class="cmr-12">. For further details the reader is referred to</span>
<span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#Xpara_04"><span
class="cmr-12">4</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xaaecc_07"><span
class="cmr-12">5</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xapnum_07"><span
class="cmr-12">7</span></a><span
class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XMLD2P4_TOMS"><span
class="cmr-12">8</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> class="cmr-12">.</span>
<!--l. 47--><p class="indent" > <span </li>
class="cmr-12">We note that optimal multigrid preconditioners do not necessarily correspond to</span> <li
class="enumerate" id="x14-13010x0"><span
class="cmti-12">Build the preconditioner for a given matrix. </span><span
class="cmr-12">This is performed by the</span>
<span
class="cmr-12">routine </span><span class="lstinline"></span><span
class="cmtt-12">smoothers_build</span><span
class="cmr-12">.</span></li></ol>
<!--l. 48--><p class="noindent" ><span
class="cmr-12">If the selected preconditioner is one-level, it is built in a single step, performed by</span>
<span
class="cmr-12">the routine </span><span class="lstinline"></span><span
class="cmtt-12">bld</span><span
class="cmr-12">.</span>
</li>
<li
class="enumerate" id="x14-13012x5"><span
class="cmti-12">Apply the preconditioner at each iteration of a Krylov solver. </span><span
class="cmr-12">This is performed by</span>
<span
class="cmr-12">the method </span><span class="lstinline"></span><span
class="cmtt-12">apply</span><span
class="cmr-12">. When using the PSBLAS Krylov solvers, this step is</span>
<span
class="cmr-12">completely transparent to the user, since </span><span class="lstinline"></span><span
class="cmtt-12">apply</span> <span
class="cmr-12">is called by the PSBLAS routine</span>
<span
class="cmr-12">implementing the Krylov solver (</span><span class="lstinline"></span><span
class="cmtt-12">psb_krylov</span><span
class="cmr-12">).</span>
</li>
<li
class="enumerate" id="x14-13014x6"><span
class="cmti-12">Free the preconditioner data structure</span><span
class="cmr-12">. This is performed by the routine </span><span class="lstinline"></span><span
class="cmtt-12">free</span><span
class="cmr-12">.</span>
<span
class="cmr-12">This step is complementary to step 1 and should be performed when the</span>
<span
class="cmr-12">preconditioner is no more used.</span></li></ol>
<!--l. 59--><p class="indent" > <span
class="cmr-12">All the previous routines are available as methods of the preconditioner object. A</span>
<span <span
class="cmr-12">minimum execution times in a parallel setting. Indeed, to obtain effective parallel</span> class="cmr-12">detailed description of them is given in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse5.html#x16-150005"><span
class="cmr-12">5</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">. Examples showing the basic use of</span>
<span <span
class="cmr-12">multigrid preconditioners, a tradeoff between the optimality and the cost of</span> class="cmr-12">AMG4PSBLAS are reported in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu6.html#x15-140004.1"><span
class="cmr-12">4.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmr-12">.</span>
<div class="table">
<!--l. 63--><p class="indent" > <a
id="x14-13015r1"></a><hr class="float"><div class="float"
>
<div class="center"
>
<!--l. 64--><p class="noindent" >
<div class="tabular"> <table id="TBL-1" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-1-1g"><col
id="TBL-1-1"></colgroup><colgroup id="TBL-1-2g"><col
id="TBL-1-2"></colgroup><colgroup id="TBL-1-3g"><col
id="TBL-1-3"></colgroup><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-1-1"
class="td11"><span
class="cmcsc-10x-x-109"><span
class="small-caps">t</span><span
class="small-caps">y</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="td11"><!--l. 68--><p class="noindent" ><span
class="cmcsc-10x-x-109"><span
class="small-caps">s</span><span
class="small-caps">t</span><span
class="small-caps">r</span><span
class="small-caps">i</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="td11"><!--l. 68--><p class="noindent" ><span
class="cmcsc-10x-x-109"><span
class="small-caps">d</span><span
class="small-caps">e</span><span
class="small-caps">f</span><span
class="small-caps">a</span><span
class="small-caps">u</span><span
class="small-caps">l</span><span
class="small-caps">t</span> <span
class="small-caps">p</span><span
class="small-caps">r</span><span
class="small-caps">e</span><span
class="small-caps">c</span><span
class="small-caps">o</span><span
class="small-caps">n</span><span
class="small-caps">d</span><span
class="small-caps">i</span><span
class="small-caps">t</span><span
class="small-caps">i</span><span
class="small-caps">o</span><span
class="small-caps">n</span><span
class="small-caps">e</span><span
class="small-caps">r</span></span> </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"
class="td11">No preconditioner </td><td style="white-space:normal; text-align:left;" id="TBL-1-2-2"
class="td11"><!--l. 69--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">NONE</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-2-3"
class="td11"><!--l. 69--><p class="noindent" >Considered to use the PSBLAS Krylov
solvers with no preconditioner. </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"
class="td11">Diagonal </td><td style="white-space:normal; text-align:left;" id="TBL-1-3-2"
class="td11"><!--l. 71--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">DIAG</span><span
class="cmtt-10x-x-109">&#8217;</span>,
<span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">JACOBI</span><span
class="cmtt-10x-x-109">&#8217;</span>,
<span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">L1</span><span
class="cmtt-10x-x-109">-</span><span
class="cmtt-10x-x-109">JACOBI</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-3-3"
class="td11"><!--l. 71--><p class="noindent" >Diagonal preconditioner. For any zero
diagonal entry of the matrix to be
preconditioned, the corresponding entry
of the preconditioner is set to&#x00A0;1. </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"
class="td11">Gauss-Seidel </td><td style="white-space:normal; text-align:left;" id="TBL-1-4-2"
class="td11"><!--l. 74--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">GS</span><span
class="cmtt-10x-x-109">&#8217;</span>,
<span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">L1</span><span
class="cmtt-10x-x-109">-</span><span
class="cmtt-10x-x-109">GS</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-4-3"
class="td11"><!--l. 74--><p class="noindent" >Hybrid Gauss-Seidel (forward), that is,
global block Jacobi with Gauss-Seidel as
local solver. </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"
class="td11">Symmetrized Gauss-Seidel</td><td style="white-space:normal; text-align:left;" id="TBL-1-5-2"
class="td11"><!--l. 77--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">FBGS</span><span
class="cmtt-10x-x-109">&#8217;</span>,
<span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">L1</span><span
class="cmtt-10x-x-109">-</span><span
class="cmtt-10x-x-109">FBGS</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-5-3"
class="td11"><!--l. 77--><p class="noindent" >Symmetrized hybrid Gauss-Seidel, that
is, forward Gauss-Seidel followed by
backward Gauss-Seidel. </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"
class="td11">Block Jacobi </td><td style="white-space:normal; text-align:left;" id="TBL-1-6-2"
class="td11"><!--l. 80--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">BJAC</span><span
class="cmtt-10x-x-109">&#8217;</span>,
<span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">L1</span><span
class="cmtt-10x-x-109">-</span><span
class="cmtt-10x-x-109">BJAC</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-6-3"
class="td11"><!--l. 80--><p class="noindent" >Block-Jacobi with ILU(0) on the local
blocks. </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"
class="td11">Additive Schwarz </td><td style="white-space:normal; text-align:left;" id="TBL-1-7-2"
class="td11"><!--l. 81--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">AS</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-7-3"
class="td11"><!--l. 81--><p class="noindent" >Additive Schwarz (AS), with overlap&#x00A0;1
and ILU(0) on the local blocks. </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"
class="td11">Multilevel </td><td style="white-space:normal; text-align:left;" id="TBL-1-8-2"
class="td11"><!--l. 83--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-10x-x-109">&#8217;</span><span
class="cmtt-10x-x-109">ML</span><span
class="cmtt-10x-x-109">&#8217;</span> </td><td style="white-space:normal; text-align:left;" id="TBL-1-8-3"
class="td11"><!--l. 83--><p class="noindent" >V-cycle with one hybrid
forward Gauss-Seidel (GS) sweep as
pre-smoother and one hybrid backward
GS sweep as post-smoother, decoupled
smoothed aggregation as coarsening
algorithm, and LU (plus triangular solve)
as coarsest-level solver. See the default
values in Tables&#x00A0;<a
href="userhtmlsu8.html#x18-17009r2">2<!--tex4ht:ref: tab:p_cycle --></a>-<a
href="userhtmlsu8.html#x18-17014r7">7<!--tex4ht:ref: tab:p_smoother_1 --></a> for further details of
the preconditioner. </td>
</tr><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-9-1"
class="td11"> </td></tr></table></div>
<br /> <div class="caption"
><span class="id">Table&#x00A0;1: </span><span
class="content">Preconditioner types, corresponding strings and default choices. </span></div><!--tex4ht:label?: x14-13015r1 -->
</div>
</div><hr class="endfloat" />
</div>
<!--l. 98--><p class="indent" > <span
class="cmr-12">Note that the module </span><span class="lstinline"></span><span
class="cmtt-12">amg_prec_mod</span><span
class="cmr-12">, containing the definition of the preconditioner</span>
<span <span
class="cmr-12">building and applying the smoothers and the coarse-space corrections must be</span> class="cmr-12">data type and the interfaces to the routines of AMG4PSBLAS, must be used</span>
<span <span
class="cmr-12">achieved. Effective parallel preconditioners require algorithmic scalability to</span> class="cmr-12">in any program calling such routines. The modules </span><span class="lstinline"></span><span
class="cmtt-12">psb_base_mod</span><span
class="cmr-12">, for the</span>
<span <span
class="cmr-12">be coupled with implementation scalability, i.e., a computational cost per</span> class="cmr-12">sparse matrix and communication descriptor data types, and </span><span class="lstinline"></span><span
class="cmtt-12">psb_krylov_mod</span><span
class="cmr-12">,</span>
<span <span
class="cmr-12">iteration which remains (almost) constant as the number of parallel processors</span> class="cmr-12">for interfacing with the Krylov solvers, must be also used (see Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu6.html#x15-140004.1"><span
class="cmr-12">4.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmr-12">).</span>
<br
class="newline" />
<!--l. 105--><p class="indent" > <span
class="cmbx-12">Remark 1. </span><span
class="cmr-12">Coarsest-level solvers based on the LU factorization, such as those</span>
<span <span
class="cmr-12">increases.</span> class="cmr-12">implemented in UMFPACK, MUMPS, SuperLU, and SuperLU</span><span
<!--l. 56--><p class="noindent" > class="cmr-12">_Dist, usually lead to</span>
<span
class="cmr-12">smaller numbers of preconditioned Krylov iterations than inexact solvers, when the</span>
<span
class="cmr-12">linear system comes from a standard discretization of basic scalar elliptic PDE</span>
<span
class="cmr-12">problems. However, this does not necessarily correspond to the shortest execution time</span>
<span
class="cmr-12">on parallel computers.</span>
<div class="subsectionTOCS"> <div class="subsectionTOCS">
<span <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.1 </span><a class="cmr-12">4.1 </span><a
href="userhtmlsu6.html#x14-130004.1"><span href="userhtmlsu6.html#x15-140004.1"><span
class="cmr-12">AMG preconditioners</span></a></span> class="cmr-12">Examples</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.2 </span><a
href="userhtmlsu7.html#x15-140004.2"><span
class="cmr-12">Smoothed Aggregation</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">4.3 </span><a
href="userhtmlsu8.html#x16-150004.3"><span
class="cmr-12">Smoothers and coarsest-level solvers</span></a></span>
</div> </div>
+199 -345
View File
@@ -1,10 +1,10 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Getting Started</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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
@@ -29,375 +29,229 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">5 </span></span> <a class="cmr-12">5 </span></span> <a
id="x17-160005"></a><span id="x16-150005"></a><span
class="cmr-12">Getting Started</span></h3> class="cmr-12">User Interface</span></h3>
<!--l. 5--><p class="noindent" ><span <!--l. 5--><p class="noindent" ><span
class="cmr-12">We describe the basics for building and applying MLD2P4 one-level and multilevel</span> class="cmr-12">The basic user interface of AMG4PBLAS consists of eight methods. The six methods</span>
<span class="lstinline"></span><span
class="cmtt-12">init</span><span
class="cmr-12">, </span><span class="lstinline"></span><span
class="cmtt-12">set</span><span
class="cmr-12">, </span><span class="lstinline"></span><span
class="cmtt-12">build</span><span
class="cmr-12">, </span><span class="lstinline"></span><span
class="cmtt-12">hierarchy_build</span><span
class="cmr-12">, </span><span class="lstinline"></span><span
class="cmtt-12">smoothers_build</span> <span
class="cmr-12">and </span><span class="lstinline"></span><span
class="cmtt-12">apply</span> <span
class="cmr-12">encapsulate all the</span>
<span <span
class="cmr-12">(i.e., AMG) preconditioners with the Krylov solvers included in PSBLAS </span><span class="cite"><span class="cmr-12">functionalities for the setup and the application of any multilevel and one-level</span>
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">. The</span>
<span <span
class="cmr-12">following steps are required:</span> class="cmr-12">preconditioner implemented in the package. The method </span><span class="lstinline"></span><span
<ol class="enumerate1" > class="cmtt-12">free</span> <span
<li class="cmr-12">deallocates the</span>
class="enumerate" id="x17-16002x1"><span <span
class="cmti-12">Declare the preconditioner data structure</span><span class="cmr-12">preconditioner data structure, while </span><span class="lstinline"></span><span
class="cmr-12">. It is a derived data type,</span> class="cmtt-12">descr</span> <span
<span class="obeylines-h"><span class="verb"><span class="cmr-12">prints a description of the preconditioner</span>
class="cmtt-12">mld_</span></span></span><span <span
class="cmr-12">setup by the user. For backward compatibility, methods are also accessible as</span>
<span
class="cmr-12">stand-alone subroutines.</span>
<!--l. 16--><p class="indent" > <span
class="cmr-12">For each method, the same user interface is overloaded with respect to the</span>
<span
class="cmr-12">real/complex and single/double precision data; arguments with appropriate data types</span>
<span
class="cmr-12">must be passed to the method, i.e.,</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">the sparse matrix data structure, containing the matrix to be preconditioned,</span>
<span
class="cmr-12">must be of type </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">prec_</span></span></span> <span class="obeylines-h"><span class="verb"><span class="cmtt-12">spmat_type</span></span></span> <span
class="cmtt-12">type</span></span></span><span class="cmr-12">with </span><span
class="cmr-12">, where </span><span
class="cmti-12">x </span><span class="cmti-12">x </span><span
class="cmr-12">may be </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span> <span
class="cmr-12">for real single precision, </span><span
class="cmti-12">x</span>
<span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span> <span
class="cmr-12">for real double precision, </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span> <span
class="cmr-12">for complex single precision, </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span> <span
class="cmr-12">for</span>
<span
class="cmr-12">complex double precision;</span>
</li>
<li class="itemize"><span
class="cmr-12">the preconditioner data structure must be of type </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">prec_type</span></span></span><span
class="cmr-12">, with </span><span
class="cmti-12">x</span>
<span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span><span class="cmtt-12">s</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span><span class="cmtt-12">d</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span> <span class="cmtt-12">c</span></span></span><span
class="cmr-12">or </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span><span class="cmtt-12">z</span></span></span><span
class="cmr-12">, according to the basic</span> class="cmr-12">, according to the sparse matrix data structure;</span>
<span
class="cmr-12">data type of the sparse matrix (</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span> <span
class="cmr-12">= real single precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span> <span
class="cmr-12">= real double</span>
<span
class="cmr-12">precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span> <span
class="cmr-12">= complex single precision; </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span> <span
class="cmr-12">= complex double precision). This</span>
<span
class="cmr-12">data structure is accessed by the user only through the MLD2P4 routines,</span>
<span
class="cmr-12">following an object-oriented approach.</span>
</li> </li>
<li <li class="itemize"><span
class="enumerate" id="x17-16004x2"><span class="cmr-12">the arrays containing the vectors </span><span
class="cmti-12">Allocate and initialize the preconditioner data structure, according to a</span> class="cmmi-12">v </span><span
class="cmr-12">and </span><span
class="cmmi-12">w </span><span
class="cmr-12">involved in the preconditioner</span>
<span <span
class="cmti-12">preconditioner type chosen by the user</span><span class="cmr-12">application </span><span
class="cmr-12">. This is performed by the routine</span> class="cmmi-12">w </span><span
class="cmr-12">= </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmmi-12">v </span><span
class="cmr-12">must be of type </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">vect_type</span></span></span> <span
class="cmr-12">with </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span><span
class="cmr-12">,</span>
<span class="obeylines-h"><span class="verb"><span <span class="obeylines-h"><span class="verb"><span
class="cmtt-12">init</span></span></span><span class="cmtt-12">z</span></span></span><span
class="cmr-12">, which also sets defaults for each preconditioner type selected by</span> class="cmr-12">, in a manner completely analogous to the sparse matrix type;</span>
<span
class="cmr-12">the user. The preconditioner types and the defaults associated with them</span>
<span
class="cmr-12">are given in Table</span><span
class="cmr-12">&#x00A0;</span><a
href="#x17-160151"><span
class="cmr-12">1</span><!--tex4ht:ref: tab:precinit --></a><span
class="cmr-12">, where the strings used by </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">init</span></span></span> <span
class="cmr-12">to identify the</span>
<span
class="cmr-12">preconditioner types are also given. Note that these strings are valid also if</span>
<span
class="cmr-12">uppercase letters are substituted by corresponding lowercase ones.</span>
</li> </li>
<li <li class="itemize"><span
class="enumerate" id="x17-16006x3"><span class="cmr-12">real parameters defining the preconditioner must be declared according to</span>
class="cmti-12">Modify the selected preconditioner type, by properly setting preconditioner</span>
<span <span
class="cmti-12">parameters. </span><span class="cmr-12">the precision of the sparse matrix and preconditioner data structures (see</span>
class="cmr-12">This is performed by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span><span
class="cmr-12">. This routine must be</span>
<span <span
class="cmr-12">called only if the user wants to modify the default values of the parameters</span> class="cmr-12">Section</span><span
<span
class="cmr-12">associated with the selected preconditioner type, to obtain a variant of that</span>
<span
class="cmr-12">preconditioner. Examples of use of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span> <span
class="cmr-12">are given in Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlsu9.html#x18-170005.1"><span href="userhtmlsu8.html#x18-170005.2"><span
class="cmr-12">5.1</span><!--tex4ht:ref: sec:examples --></a><span class="cmr-12">5.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">; a complete</span> class="cmr-12">).</span></li></ul>
<span <!--l. 38--><p class="noindent" ><span
class="cmr-12">list of all the preconditioner parameters and their allowed and default values</span> class="cmr-12">A description of each method is given in the remainder of this section.</span>
<span
class="cmr-12">is provided in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse6.html#x19-180006"><span
class="cmr-12">6</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">, Tables</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu11.html#x21-200092"><span
class="cmr-12">2</span><!--tex4ht:ref: tab:p_cycle --></a><span
class="cmr-12">-</span><a
href="userhtmlsu11.html#x21-200158"><span
class="cmr-12">8</span><!--tex4ht:ref: tab:p_smoother_1 --></a><span
class="cmr-12">.</span>
</li>
<li
class="enumerate" id="x17-16008x4"><span
class="cmti-12">Build the preconditioner for a given matrix</span><span
class="cmr-12">. If the selected preconditioner is</span>
<span
class="cmr-12">multilevel, then two steps must be performed, as specified next.</span>
<ol class="enumerate2" >
<li
class="enumerate" id="x17-16009x0"><span
class="cmti-12">Build the aggregation hierarchy for a given matrix. </span><span
class="cmr-12">This is performed</span>
<span
class="cmr-12">by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">hierarchy_build</span></span></span><span
class="cmr-12">.</span>
</li>
<li
class="enumerate" id="x17-16010x0"><span
class="cmti-12">Build the preconditioner for a given matrix. </span><span
class="cmr-12">This is performed by the</span>
<span
class="cmr-12">routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">smoothers_build</span></span></span><span
class="cmr-12">.</span></li></ol>
<!--l. 48--><p class="noindent" ><span
class="cmr-12">If the selected preconditioner is one-level, it is built in a single step, performed by</span>
<span
class="cmr-12">the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">bld</span></span></span><span
class="cmr-12">.</span>
</li>
<li
class="enumerate" id="x17-16012x5"><span
class="cmti-12">Apply the preconditioner at each iteration of a Krylov solver. </span><span
class="cmr-12">This is performed by</span>
<span
class="cmr-12">the method </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">apply</span></span></span><span
class="cmr-12">. When using the PSBLAS Krylov solvers, this step is</span>
<span
class="cmr-12">completely transparent to the user, since </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">apply</span></span></span> <span
class="cmr-12">is called by the PSBLAS routine</span>
<span
class="cmr-12">implementing the Krylov solver (</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_krylov</span></span></span><span
class="cmr-12">).</span>
</li>
<li
class="enumerate" id="x17-16014x6"><span
class="cmti-12">Free the preconditioner data structure</span><span
class="cmr-12">. This is performed by the routine </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">free</span></span></span><span
class="cmr-12">.</span>
<span
class="cmr-12">This step is complementary to step 1 and should be performed when the</span>
<span
class="cmr-12">preconditioner is no more used.</span></li></ol>
<!--l. 59--><p class="indent" > <span
class="cmr-12">All the previous routines are available as methods of the preconditioner object. A</span>
<span
class="cmr-12">detailed description of them is given in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse6.html#x19-180006"><span
class="cmr-12">6</span><!--tex4ht:ref: sec:userinterface --></a><span
class="cmr-12">. Examples showing the basic use of</span>
<span
class="cmr-12">MLD2P4 are reported in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu9.html#x18-170005.1"><span
class="cmr-12">5.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmr-12">.</span>
<div class="table">
<!--l. 63--><p class="indent" > <a
id="x17-160151"></a><hr class="float"><div class="float"
>
<div class="center"
>
<!--l. 64--><p class="noindent" >
<div class="tabular"> <table id="TBL-1" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-1-1g"><col
id="TBL-1-1"></colgroup><colgroup id="TBL-1-2g"><col
id="TBL-1-2"></colgroup><colgroup id="TBL-1-3g"><col
id="TBL-1-3"></colgroup><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-1-1"
class="td11"><span
class="cmcsc-10x-x-109"><span
class="small-caps">t</span><span
class="small-caps">y</span><span
class="small-caps">p</span><span
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="cmcsc-10x-x-109"><span
class="small-caps">s</span><span
class="small-caps">t</span><span
class="small-caps">r</span><span
class="small-caps">i</span><span
class="small-caps">n</span><span
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="cmcsc-10x-x-109"><span
class="small-caps">d</span><span
class="small-caps">e</span><span
class="small-caps">f</span><span
class="small-caps">a</span><span
class="small-caps">u</span><span
class="small-caps">l</span><span
class="small-caps">t</span> <span
class="small-caps">p</span><span
class="small-caps">r</span><span
class="small-caps">e</span><span
class="small-caps">c</span><span
class="small-caps">o</span><span
class="small-caps">n</span><span
class="small-caps">d</span><span
class="small-caps">i</span><span
class="small-caps">t</span><span
class="small-caps">i</span><span
class="small-caps">o</span><span
class="small-caps">n</span><span
class="small-caps">e</span><span
class="small-caps">r</span></span> </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"
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="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;NONE&#8217;</span></span></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 solvers
with no preconditioner. </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"
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="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;DIAG&#8217;</span></span></span> or
<span class="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;JACOBI&#8217;</span></span></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 diagonal
entry of the matrix to be preconditioned, the
corresponding entry of the preconditioner is set
to&#x00A0;1. </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"
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="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;GS&#8217;</span></span></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, global
block Jacobi with Gauss-Seidel as local solver. </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"
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="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;FBGS&#8217;</span></span></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 is, forward Gauss-Seidel
followed by backward Gauss-Seidel. </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"
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="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;BJAC&#8217;</span></span></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 blocks. </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"
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="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;AS&#8217;</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-1-7-3"
class="td11"><!--l. 81--><p class="noindent" >Additive Schwarz (AS), with overlap&#x00A0;1 and
ILU(0) on the local blocks. </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"
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="obeylines-h"><span class="verb"><span
class="cmtt-10x-x-109">&#8217;ML&#8217;</span></span></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 forward Gauss-Seidel
(GS) sweep as pre-smoother and one hybrid
backward GS sweep as post-smoother, basic
smoothed aggregation as coarsening algorithm,
and LU (plus triangular solve) as coarsest-level
solver. See the default values in Tables&#x00A0;<a
href="userhtmlsu11.html#x21-200092">2<!--tex4ht:ref: tab:p_cycle --></a>-<a
href="userhtmlsu11.html#x21-200158">8<!--tex4ht:ref: tab:p_smoother_1 --></a> for
further details of the preconditioner. </td>
</tr><tr
class="hline"><td><hr></td><td><hr></td><td><hr></td></tr><tr
style="vertical-align:baseline;" id="TBL-1-9-"><td style="white-space:nowrap; text-align:left;" id="TBL-1-9-1"
class="td11"> </td></tr></table></div>
<br /> <div class="caption"
><span class="id">Table&#x00A0;1: </span><span
class="content">Preconditioner types, corresponding strings and default choices. </span></div><!--tex4ht:label?: x17-160151 -->
</div>
</div><hr class="endfloat" />
</div>
<!--l. 98--><p class="indent" > <span
class="cmr-12">Note that the module </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_prec_mod</span></span></span><span
class="cmr-12">, containing the definition of the preconditioner</span>
<span
class="cmr-12">data type and the interfaces to the routines of MLD2P4, must be used in any program</span>
<span
class="cmr-12">calling such routines. The modules </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_base_mod</span></span></span><span
class="cmr-12">, for the sparse matrix and</span>
<span
class="cmr-12">communication descriptor data types, and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_krylov_mod</span></span></span><span
class="cmr-12">, for interfacing with the</span>
<span
class="cmr-12">Krylov solvers, must be also used (see Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu9.html#x18-170005.1"><span
class="cmr-12">5.1</span><!--tex4ht:ref: sec:examples --></a><span
class="cmr-12">). </span><br
class="newline" />
<!--l. 105--><p class="indent" > <span
class="cmbx-12">Remark 1. </span><span
class="cmr-12">Coarsest-level solvers based on the LU factorization, such as those</span>
<span
class="cmr-12">implemented in UMFPACK, MUMPS, SuperLU, and SuperLU</span><span
class="cmr-12">_Dist, usually lead to</span>
<span
class="cmr-12">smaller numbers of preconditioned Krylov iterations than inexact solvers, when the</span>
<span
class="cmr-12">linear system comes from a standard discretization of basic scalar elliptic PDE</span>
<span
class="cmr-12">problems. However, this does not necessarily correspond to the smallest execution time</span>
<span
class="cmr-12">on parallel computers.</span>
<div class="subsectionTOCS"> <div class="subsectionTOCS">
<span <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.1 </span><a class="cmr-12">5.1 </span><a
href="userhtmlsu9.html#x18-170005.1"><span href="userhtmlsu7.html#x17-160005.1"><span
class="cmr-12">Examples</span></a></span> class="cmr-12">Method init</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.2 </span><a
href="userhtmlsu8.html#x18-170005.2"><span
class="cmr-12">Method set</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.3 </span><a
href="userhtmlsu9.html#x19-180005.3"><span
class="cmr-12">Method hierarchy</span><span
class="cmr-12">_build</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.4 </span><a
href="userhtmlsu10.html#x20-190005.4"><span
class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.5 </span><a
href="userhtmlsu11.html#x21-200005.5"><span
class="cmr-12">Method build</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.6 </span><a
href="userhtmlsu12.html#x22-210005.6"><span
class="cmr-12">Method apply</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.7 </span><a
href="userhtmlsu13.html#x23-220005.7"><span
class="cmr-12">Method free</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.8 </span><a
href="userhtmlsu14.html#x24-230005.8"><span
class="cmr-12">Method descr</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">5.9 </span><a
href="userhtmlsu15.html#x25-240005.9"><span
class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.1 </span><a
href="userhtmlsu15.html#x25-250005.9.1"><span
class="cmr-12">Method: dump</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.2 </span><a
href="userhtmlsu15.html#x25-260005.9.2"><span
class="cmr-12">Method: clone</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.3 </span><a
href="userhtmlsu15.html#x25-270005.9.3"><span
class="cmr-12">Method: sizeof</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.4 </span><a
href="userhtmlsu15.html#x25-280005.9.4"><span
class="cmr-12">Method: allocate</span><span
class="cmr-12">_wrk</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">5.9.5 </span><a
href="userhtmlsu15.html#x25-290005.9.5"><span
class="cmr-12">Method: free</span><span
class="cmr-12">_wrk</span></a></span>
</div> </div>
<!--l. 1--><div class="crosslinks"><p class="noindent"><span <!--l. 4--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlse6.html" ><span href="userhtmlse6.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -414,6 +268,6 @@ class="cmr-12">] [</span><a
href="userhtml.html#userhtmlse5.html" ><span href="userhtml.html#userhtmlse5.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 1--><p class="indent" > <a <!--l. 4--><p class="indent" > <a
id="tailuserhtmlse5.html"></a> id="tailuserhtmlse5.html"></a>
</body></html> </body></html>
+197 -207
View File
@@ -1,16 +1,16 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>User Interface</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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 1--><div class="crosslinks"><p class="noindent"><span <!--l. 4--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlse7.html" ><span href="userhtmlse7.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -29,229 +29,219 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">6 </span></span> <a class="cmr-12">6 </span></span> <a
id="x19-180006"></a><span id="x26-300006"></a><span
class="cmr-12">User Interface</span></h3> class="cmr-12">Adding new smoother and solver objects to AMG4PSBLAS</span></h3>
<!--l. 5--><p class="noindent" ><span <!--l. 6--><p class="noindent" ><span
class="cmr-12">The basic user interface of MLD2P4 consists of eight methods. The six methods </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">Developers can add completely new smoother and/or solver classes derived from the</span>
class="cmtt-12">init</span></span></span><span
class="cmr-12">,</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">build</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">hierarchy_build</span></span></span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">smoothers_build</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">apply</span></span></span> <span
class="cmr-12">encapsulate all the</span>
<span <span
class="cmr-12">functionalities for the setup and the application of any multilevel and one-level</span> class="cmr-12">base objects in the library (see Remark</span><span
class="cmr-12">&#x00A0;2 in Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu8.html#x18-170005.2"><span
class="cmr-12">5.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">), without recompiling the</span>
<span <span
class="cmr-12">preconditioner implemented in the package. The method </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">library itself.</span>
class="cmtt-12">free</span></span></span> <span <!--l. 10--><p class="indent" > <span
class="cmr-12">deallocates the</span> class="cmr-12">To do so, it is necessary first to select the base type to be extended. In our</span>
<span <span
class="cmr-12">preconditioner data structure, while </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">experience, it is quite likely that the new application needs only the definition of a</span>
class="cmtt-12">descr</span></span></span> <span
class="cmr-12">prints a description of the preconditioner</span>
<span <span
class="cmr-12">setup by the user. For backward compatibility, methods are also accessible as</span> class="cmr-12">&#8220;solver&#8221; object, which is almost always acting only on the local part of the distributed</span>
<span <span
class="cmr-12">stand-alone subroutines.</span> class="cmr-12">matrix. The parallel actions required to connect the various solver objects are most</span>
<!--l. 16--><p class="indent" > <span
class="cmr-12">For each method, the same user interface is overloaded with respect to the real/</span>
<span <span
class="cmr-12">complex case and the single/double precision; arguments with appropriate data types</span> class="cmr-12">often already provided by the block-Jacobi or the additive Schwarz smoothers. To</span>
<span <span
class="cmr-12">must be passed to the method, i.e.,</span> class="cmr-12">define a new solver, the developer will then have to define its components and</span>
<span
class="cmr-12">methods, perhaps taking one of the predefined solvers as a starting point, if</span>
<span
class="cmr-12">possible.</span>
<!--l. 20--><p class="indent" > <span
class="cmr-12">Once the new smoother/solver class has been developed, to use it in the context of</span>
<span
class="cmr-12">the multilevel preconditioners it is necessary to:</span>
<ul class="itemize1"> <ul class="itemize1">
<li class="itemize"><span <li class="itemize"><span
class="cmr-12">the sparse matrix data structure, containing the matrix to be preconditioned,</span> class="cmr-12">declare in the application program a variable of the new type;</span>
<span
class="cmr-12">must be of type </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">spmat_type</span></span></span> <span
class="cmr-12">with </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span> <span
class="cmr-12">for real single precision, </span><span
class="cmti-12">x</span>
<span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span> <span
class="cmr-12">for real double precision, </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span> <span
class="cmr-12">for complex single precision, </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">z</span></span></span> <span
class="cmr-12">for</span>
<span
class="cmr-12">complex double precision;</span>
</li> </li>
<li class="itemize"><span <li class="itemize"><span
class="cmr-12">the preconditioner data structure must be of type </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">pass that variable as the argument to the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_</span></span></span><span class="cmtt-12">set</span></span></span> <span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span class="cmr-12">routine as in the following:</span>
class="cmtt-12">prec_type</span></span></span><span <div class="center"
class="cmr-12">, with </span><span >
class="cmti-12">x</span> <!--l. 26--><p class="noindent" >
<span <!--l. 27--><p class="noindent" ><span class="lstinline"></span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">call</span><span
class="cmtt-12">s</span></span></span><span class="cmtt-12">&#x00A0;</span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">p</span><span
class="cmtt-12">d</span></span></span><span class="cmtt-12">%</span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">set</span><span
class="cmtt-12">c</span></span></span><span class="cmtt-12">(</span><span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">smoother</span><span
class="cmtt-12">z</span></span></span><span class="cmtt-12">,</span><span
class="cmr-12">, according to the sparse matrix data structure;</span> class="cmtt-12">info</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">[,</span><span
class="cmtt-12">ilev</span><span
class="cmtt-12">,</span><span
class="cmtt-12">ilmax</span><span
class="cmtt-12">,</span><span
class="cmtt-12">pos</span><span
class="cmtt-12">])</span><br />
<span class="lstinline"></span><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">set</span><span
class="cmtt-12">(</span><span
class="cmtt-12">solver</span><span
class="cmtt-12">,</span><span
class="cmtt-12">info</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">[,</span><span
class="cmtt-12">ilev</span><span
class="cmtt-12">,</span><span
class="cmtt-12">ilmax</span><span
class="cmtt-12">,</span><span
class="cmtt-12">pos</span><span
class="cmtt-12">])</span></div>
</li> </li>
<li class="itemize"><span <li class="itemize"><span
class="cmr-12">the arrays containing the vectors </span><span class="cmr-12">link the code implementing the various methods into the application</span>
class="cmmi-12">v </span><span
class="cmr-12">and </span><span
class="cmmi-12">w </span><span
class="cmr-12">involved in the preconditioner</span>
<span <span
class="cmr-12">application </span><span class="cmr-12">executable.</span></li></ul>
class="cmmi-12">w </span><span <!--l. 32--><p class="noindent" ><span
class="cmr-12">= </span><span class="cmr-12">The new solver object is then dynamically included in the preconditioner structure,</span>
class="cmmi-12">B</span><sup><span <span
class="cmsy-8">-</span><span class="cmr-12">and acts as a </span><span
class="cmr-8">1</span></sup><span class="cmti-12">mold </span><span
class="cmmi-12">v </span><span class="cmr-12">to which the preconditioner will conform, even though</span>
class="cmr-12">must be of type </span><span class="obeylines-h"><span class="verb"><span <span
class="cmtt-12">psb_</span></span></span><span class="cmr-12">the AMG4PSBLAS library has not been modified to account for this new</span>
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span <span
class="cmtt-12">vect_type</span></span></span> <span class="cmr-12">development.</span>
class="cmr-12">with </span><span
class="cmti-12">x </span><span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">s</span></span></span><span <!--l. 37--><p class="indent" > <span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">It is possible to define new values for the keyword </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">d</span></span></span><span class="cmtt-12">WHAT</span></span></span> <span
class="cmr-12">, </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">in the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">c</span></span></span><span class="cmtt-12">set</span></span></span> <span
class="cmr-12">,</span> class="cmr-12">routine; if the</span>
<span class="obeylines-h"><span class="verb"><span <span
class="cmtt-12">z</span></span></span><span class="cmr-12">library code does not recognize a keyword, it passes it down the composition hierarchy</span>
class="cmr-12">, in a manner completely analogous to the sparse matrix type;</span> <span
</li> class="cmr-12">(levels containing smoothers containing in turn solvers), so that it can be eventually</span>
<li class="itemize"><span <span
class="cmr-12">real parameters defining the preconditioner must be declared according to</span> class="cmr-12">caught by the new solver. By the same token, any keyword/value pair that does not</span>
<span <span
class="cmr-12">the precision of the sparse matrix and preconditioner data structures (see</span> class="cmr-12">pertain to a given smoother should be passed down to the contained solver, and</span>
<span <span
class="cmr-12">Section</span><span class="cmr-12">any keyword/value pair that does not pertain to a given solver is by default</span>
<span
class="cmr-12">ignored.</span>
<!--l. 46--><p class="indent" > <span
class="cmr-12">An example is provided in the source code distribution under the folder</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">tests/newslv</span></span></span><span
class="cmr-12">. In this example we are implementing a new incomplete factorization</span>
<span
class="cmr-12">variant (which is simply the ILU(0) factorization under a new name). Because of the</span>
<span
class="cmr-12">specifics of this case, it is possible to reuse the basic structure of the ILU solver, with</span>
<span
class="cmr-12">its L/D/U components and the methods needed to apply the solver; only a few</span>
<span
class="cmr-12">methods, such as the description and most importantly the build, need to be</span>
<span
class="cmr-12">ovverridden (rewritten).</span>
<!--l. 55--><p class="indent" > <span
class="cmr-12">The interfaces for the calls shown above are defined using</span>
<div class="center"
>
<!--l. 56--><p class="noindent" >
<div class="tabular"> <table id="TBL-21" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-21-1g"><col
id="TBL-21-1"><col
id="TBL-21-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-21-1-"><td style="white-space:normal; text-align:left;" id="TBL-21-1-1"
class="td11"><!--l. 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-21-1-2"
class="td11"><!--l. 58--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span
class="cmtt-12">(</span><span
class="cmtt-12">amg_x_base_smoother_type</span><span
class="cmtt-12">)</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-2-"><td style="white-space:normal; text-align:left;" id="TBL-21-2-1"
class="td11"><!--l. 59--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-21-2-2"
class="td11"><!--l. 59--><p class="noindent" ><span
class="cmr-12">The user-defined new smoother to be employed in the</span>
<span
class="cmr-12">preconditioner.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-3-"><td style="white-space:normal; text-align:left;" id="TBL-21-3-1"
class="td11"><!--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-21-3-2"
class="td11"><!--l. 61--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span
class="cmtt-12">(</span><span
class="cmtt-12">amg_x_base_solver_type</span><span
class="cmtt-12">)</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-4-"><td style="white-space:normal; text-align:left;" id="TBL-21-4-1"
class="td11"><!--l. 62--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-21-4-2"
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>
<!--l. 66--><p class="noindent" ><span
class="cmr-12">The other arguments are defined in the way described in Sec.</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlsu11.html#x21-200006.2"><span href="userhtmlsu8.html#x18-170005.2"><span
class="cmr-12">6.2</span><!--tex4ht:ref: sec:precset --></a><span class="cmr-12">5.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">).</span></li></ul> class="cmr-12">. As an example, in the</span>
<!--l. 39--><p class="noindent" ><span <span class="obeylines-h"><span class="verb"><span
class="cmr-12">A description of each method is given in the remainder of this section.</span> class="cmtt-12">tests/newslv</span></span></span> <span
class="cmr-12">code we define a new object of type </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg_d_tlu_solver_type</span></span></span><span
class="cmr-12">, and we</span>
<span
class="cmr-12">pass it as follows:</span>
<div class="subsectionTOCS"> <pre class="verbatim" id="verbatim-10">
<span &#x00A0;&#x00A0;!&#x00A0;sparse&#x00A0;matrix&#x00A0;and&#x00A0;preconditioner
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span &#x00A0;&#x00A0;type(psb_dspmat_type)&#x00A0;::&#x00A0;a
class="cmr-12">6.1 </span><a &#x00A0;&#x00A0;type(amg_dprec_type)&#x00A0;&#x00A0;::&#x00A0;prec
href="userhtmlsu10.html#x20-190006.1"><span &#x00A0;&#x00A0;type(amg_d_tlu_solver_type)&#x00A0;::&#x00A0;tlusv
class="cmr-12">Method init</span></a></span> ......
<br /> <span &#x00A0;&#x00A0;!
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span &#x00A0;&#x00A0;!&#x00A0;&#x00A0;prepare&#x00A0;the&#x00A0;preconditioner:&#x00A0;an&#x00A0;ML&#x00A0;with&#x00A0;defaults,&#x00A0;but&#x00A0;with&#x00A0;TLU&#x00A0;solver&#x00A0;at
class="cmr-12">6.2 </span><a &#x00A0;&#x00A0;!&#x00A0;&#x00A0;intermediate&#x00A0;levels.&#x00A0;All&#x00A0;other&#x00A0;parameters&#x00A0;are&#x00A0;at&#x00A0;default&#x00A0;values.
href="userhtmlsu11.html#x21-200006.2"><span &#x00A0;&#x00A0;!
class="cmr-12">Method set</span></a></span> &#x00A0;&#x00A0;call&#x00A0;prec%init(&#8217;ML&#8217;,&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;info)
<br /> <span &#x00A0;&#x00A0;call&#x00A0;prec%hierarchy_build(a,desc_a,info)
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span &#x00A0;&#x00A0;nlv&#x00A0;=&#x00A0;prec%get_nlevs()
class="cmr-12">6.3 </span><a &#x00A0;&#x00A0;call&#x00A0;prec%set(tlusv,&#x00A0;&#x00A0;&#x00A0;info,ilev=1,ilmax=max(1,nlv-1))
href="userhtmlsu12.html#x22-210006.3"><span &#x00A0;&#x00A0;call&#x00A0;prec%smoothers_build(a,desc_a,info)
class="cmr-12">Method hierarchy</span><span </pre>
class="cmr-12">_build</span></a></span> <!--l. 107--><p class="nopar" >
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.4 </span><a
href="userhtmlsu13.html#x23-220006.4"><span
class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.5 </span><a
href="userhtmlsu14.html#x24-230006.5"><span
class="cmr-12">Method build</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.6 </span><a
href="userhtmlsu15.html#x25-240006.6"><span
class="cmr-12">Method apply</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.7 </span><a
href="userhtmlsu16.html#x26-250006.7"><span
class="cmr-12">Method free</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.8 </span><a
href="userhtmlsu17.html#x27-260006.8"><span
class="cmr-12">Method descr</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span class="subsectionToc" ><span
class="cmr-12">6.9 </span><a
href="userhtmlsu18.html#x28-270006.9"><span
class="cmr-12">Auxiliary Methods</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.1 </span><a
href="userhtmlsu18.html#x28-280006.9.1"><span
class="cmr-12">Method: dump</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.2 </span><a
href="userhtmlsu18.html#x28-290006.9.2"><span
class="cmr-12">Method: clone</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.3 </span><a
href="userhtmlsu18.html#x28-300006.9.3"><span
class="cmr-12">Method: sizeof</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.4 </span><a
href="userhtmlsu18.html#x28-310006.9.4"><span
class="cmr-12">Method: allocate</span><span
class="cmr-12">_wrk</span></a></span>
<br /> <span
class="cmr-12">&#x00A0;</span><span
class="cmr-12">&#x00A0;</span><span class="subsubsectionToc" ><span
class="cmr-12">6.9.5 </span><a
href="userhtmlsu18.html#x28-320006.9.5"><span
class="cmr-12">Method: free</span><span
class="cmr-12">_wrk</span></a></span>
</div>
<!--l. 4--><div class="crosslinks"><p class="noindent"><span
<!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlse7.html" ><span href="userhtmlse7.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -268,6 +258,6 @@ class="cmr-12">] [</span><a
href="userhtml.html#userhtmlse6.html" ><span href="userhtml.html#userhtmlse6.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 4--><p class="indent" > <a <!--l. 1--><p class="indent" > <a
id="tailuserhtmlse6.html"></a> id="tailuserhtmlse6.html"></a>
</body></html> </body></html>
+24 -160
View File
@@ -1,16 +1,16 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Adding new smoother and solver objects to MLD2P4</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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 4--><div class="crosslinks"><p class="noindent"><span <!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlse8.html" ><span href="userhtmlse8.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -29,175 +29,39 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">7 </span></span> <a class="cmr-12">7 </span></span> <a
id="x29-330007"></a><span id="x27-310007"></a><span
class="cmr-12">Adding new smoother and solver objects to MLD2P4</span></h3> class="cmr-12">Error Handling</span></h3>
<!--l. 6--><p class="noindent" ><span <!--l. 5--><p class="noindent" ><span
class="cmr-12">Developers can add completely new smoother and/or solver classes derived from the</span> class="cmr-12">The error handling in AMG4PSBLAS is based on the PSBLAS error handling. Error</span>
<span <span
class="cmr-12">base objects in the library (see Remark</span><span class="cmr-12">conditions are signaled via an integer argument </span><span class="obeylines-h"><span class="verb"><span
class="cmr-12">&#x00A0;2 in Section</span><span class="cmtt-12">info</span></span></span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">; whenever an error condition is</span>
href="userhtmlsu11.html#x21-200006.2"><span
class="cmr-12">6.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">), without recompiling the</span>
<span <span
class="cmr-12">library itself.</span> class="cmr-12">detected, an error trace stack is built by the library up to the top-level, user-callable</span>
<!--l. 10--><p class="indent" > <span
class="cmr-12">To do so, it is necessary first to select the base type to be extended. In our</span>
<span <span
class="cmr-12">experience, it is quite likely that the new application needs only the definition of a</span> class="cmr-12">routine. This routine will then decide, according to the user preferences, whether</span>
<span <span
class="cmr-12">&#8220;solver&#8221; object, which is almost always acting only on the local part of the distributed</span> class="cmr-12">the error should be handled by terminating the program or by returning the</span>
<span <span
class="cmr-12">matrix. The parallel actions required to connect the various solver objects are most</span> class="cmr-12">error condition to the user code, which will then take action, and whether</span>
<span <span
class="cmr-12">often already provided by the block-Jacobi or the additive Schwarz smoothers. To</span> class="cmr-12">an error message should be printed. These options may be set by using the</span>
<span <span
class="cmr-12">define a new solver, the developer will then have to define its components and</span> class="cmr-12">PSBLAS error handling routines; for further details see the PSBLAS User&#8217;s Guide</span>
<span <span class="cite"><span
class="cmr-12">methods, perhaps taking one of the predefined solvers as a starting point, if</span> class="cmr-12">[</span><a
<span href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">possible.</span> class="cmr-12">17</span></a><span
<!--l. 20--><p class="indent" > <span class="cmr-12">]</span></span><span
class="cmr-12">Once the new smoother/solver class has been developed, to use it in the context of</span> class="cmr-12">.</span>
<span
class="cmr-12">the multilevel preconditioners it is necessary to:</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">declare in the application program a variable of the new type;</span>
</li>
<li class="itemize"><span
class="cmr-12">pass that variable as the argument to the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span> <span
class="cmr-12">routine as in the following:</span>
<div class="center"
>
<!--l. 26--><p class="noindent" >
<!--l. 27--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%set(smoother,info</span><span
class="cmtt-12">&#x00A0;[,ilev,ilmax,pos])</span></span></span><br />
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%set(solver,info</span><span
class="cmtt-12">&#x00A0;[,ilev,ilmax,pos])</span></span></span></div>
</li>
<li class="itemize"><span
class="cmr-12">link the code implementing the various methods into the application</span>
<span
class="cmr-12">executable.</span></li></ul>
<!--l. 32--><p class="noindent" ><span
class="cmr-12">The new solver object is then dynamically included in the preconditioner structure, and</span>
<span
class="cmr-12">acts as a </span><span
class="cmti-12">mold </span><span
class="cmr-12">to which the preconditioner will conform, even though the MLD2P4</span>
<span
class="cmr-12">library has not been modified to account for this new development.</span>
<!--l. 37--><p class="indent" > <span
class="cmr-12">It is possible to define new values for the keyword </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">WHAT</span></span></span> <span
class="cmr-12">in the </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span> <span
class="cmr-12">routine; if the</span>
<span
class="cmr-12">library code does not recognize a keyword, it passes it down the composition hierarchy</span>
<span
class="cmr-12">(levels containing smoothers containing in turn solvers), so that it can be eventually</span>
<span
class="cmr-12">caught by the new solver. By the same token, any keyword/value pair that does not</span>
<span
class="cmr-12">pertain to a given smoother should be passed down to the contained solver, and</span>
<span
class="cmr-12">any keyword/value pair that does not pertain to a given solver is by default</span>
<span
class="cmr-12">ignored.</span>
<!--l. 46--><p class="indent" > <span
class="cmr-12">An example is provided in the source code distribution under the folder</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">tests/newslv</span></span></span><span
class="cmr-12">. In this example we are implementing a new incomplete factorization</span>
<span
class="cmr-12">variant (which is simply the ILU(0) factorization under a new name). Because of the</span>
<span
class="cmr-12">specifics of this case, it is possible to reuse the basic structure of the ILU solver, with</span>
<span
class="cmr-12">its L/D/U components and the methods needed to apply the solver; only a few</span>
<span
class="cmr-12">methods, such as the description and most importantly the build, need to be</span>
<span
class="cmr-12">ovverridden (rewritten).</span>
<!--l. 55--><p class="indent" > <span
class="cmr-12">The interfaces for the calls shown above are defined using</span>
<div class="center"
>
<!--l. 56--><p class="noindent" >
<div class="tabular"> <table id="TBL-21" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-21-1g"><col
id="TBL-21-1"><col
id="TBL-21-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-21-1-"><td style="white-space:wrap; text-align:left;" id="TBL-21-1-1"
class="td11"><!--l. 58--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">smoother</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-21-1-2"
class="td11"><!--l. 58--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(mld_x_base_smoother_type)</span></span></span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-2-"><td style="white-space:wrap; text-align:left;" id="TBL-21-2-1"
class="td11"><!--l. 59--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-21-2-2"
class="td11"><!--l. 59--><p class="noindent" ><span
class="cmr-12">The user-defined new smoother to be employed in the</span>
<span
class="cmr-12">preconditioner.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-3-"><td style="white-space:wrap; text-align:left;" id="TBL-21-3-1"
class="td11"><!--l. 61--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">solver</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-21-3-2"
class="td11"><!--l. 61--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(mld_x_base_solver_type)</span></span></span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-21-4-"><td style="white-space:wrap; text-align:left;" id="TBL-21-4-1"
class="td11"><!--l. 62--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-21-4-2"
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>
<!--l. 66--><p class="noindent" ><span
class="cmr-12">The other arguments are defined in the way described in Sec.</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu11.html#x21-200006.2"><span
class="cmr-12">6.2</span><!--tex4ht:ref: sec:precset --></a><span
class="cmr-12">. As an example, in the</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">tests/newslv</span></span></span> <span
class="cmr-12">code we define a new object of type </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">mld_d_tlu_solver_type</span></span></span><span
class="cmr-12">, and we</span>
<span
class="cmr-12">pass it as follows:</span>
<div class="verbatim" id="verbatim-10"> <!--l. 148--><p class="indent" >
&#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;sparse&#x00A0;matrix&#x00A0;and&#x00A0;preconditioner
&#x00A0;<br />&#x00A0;&#x00A0;type(psb_dspmat_type)&#x00A0;::&#x00A0;a
&#x00A0;<br />&#x00A0;&#x00A0;type(mld_dprec_type)&#x00A0;&#x00A0;::&#x00A0;prec
&#x00A0;<br />&#x00A0;&#x00A0;type(mld_d_tlu_solver_type)&#x00A0;::&#x00A0;tlusv
&#x00A0;<br />
&#x00A0;<br />......
&#x00A0;<br />&#x00A0;&#x00A0;!
&#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;&#x00A0;prepare&#x00A0;the&#x00A0;preconditioner:&#x00A0;an&#x00A0;ML&#x00A0;with&#x00A0;defaults,&#x00A0;but&#x00A0;with&#x00A0;TLU&#x00A0;solver&#x00A0;at
&#x00A0;<br />&#x00A0;&#x00A0;!&#x00A0;&#x00A0;intermediate&#x00A0;levels.&#x00A0;All&#x00A0;other&#x00A0;parameters&#x00A0;are&#x00A0;at&#x00A0;default&#x00A0;values.
&#x00A0;<br />&#x00A0;&#x00A0;!
&#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%init(&#8217;ML&#8217;,&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;info)
&#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%hierarchy_build(a,desc_a,info)
&#x00A0;<br />&#x00A0;&#x00A0;nlv&#x00A0;=&#x00A0;prec%get_nlevs()
&#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%set(tlusv,&#x00A0;&#x00A0;&#x00A0;info,ilev=1,ilmax=max(1,nlv-1))
&#x00A0;<br />&#x00A0;&#x00A0;call&#x00A0;prec%smoothers_build(a,desc_a,info)
&#x00A0;<br />
</div>
<!--l. 88--><p class="nopar" >
+82 -30
View File
@@ -1,10 +1,10 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Error Handling</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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
@@ -28,36 +28,88 @@ href="userhtml.html#userhtmlse8.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">8 </span></span> <a class="cmr-12">A </span></span> <a
id="x30-340008"></a><span id="x28-32000A"></a><span
class="cmr-12">Error Handling</span></h3> class="cmr-12">License</span></h3>
<!--l. 5--><p class="noindent" ><span <!--l. 6--><p class="noindent" ><span
class="cmr-12">The error handling in MLD2P4 is based on the PSBLAS error handling. Error</span> class="cmr-12">AMG4PSBLAS is freely distributable under the following copyright terms:</span>
<span
class="cmr-12">conditions are signaled via an integer argument </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span><span
class="cmr-12">; whenever an error condition is</span>
<span
class="cmr-12">detected, an error trace stack is built by the library up to the top-level, user-callable</span>
<span
class="cmr-12">routine. This routine will then decide, according to the user preferences, whether</span>
<span
class="cmr-12">the error should be handled by terminating the program or by returning the</span>
<span
class="cmr-12">error condition to the user code, which will then take action, and whether</span>
<span
class="cmr-12">an error message should be printed. These options may be set by using the</span>
<span
class="cmr-12">PSBLAS error handling routines; for further details see the PSBLAS User&#8217;s Guide</span>
<span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span>
<pre class="verbatim" id="verbatim-11">
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;AMG4PSBLAS&#x00A0;&#x00A0;version&#x00A0;1.0
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Algebraic&#x00A0;MultiGrid&#x00A0;Preconditioners&#x00A0;Package
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;based&#x00A0;on&#x00A0;PSBLAS&#x00A0;(Parallel&#x00A0;Sparse&#x00A0;BLAS&#x00A0;version&#x00A0;3.7)
&#x00A0;&#x00A0;(C)&#x00A0;Copyright&#x00A0;2021
&#x00A0;&#x00A0;Pasqua&#x00A0;D&#8217;Ambra&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;IAC-CNR,&#x00A0;IT
&#x00A0;&#x00A0;Fabio&#x00A0;Durastante&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;University&#x00A0;of&#x00A0;Pisa&#x00A0;and&#x00A0;IAC-CNR,&#x00A0;IT
&#x00A0;&#x00A0;Salvatore&#x00A0;Filippone&#x00A0;&#x00A0;&#x00A0;&#x00A0;University&#x00A0;of&#x00A0;Rome&#x00A0;Tor-Vergata&#x00A0;and&#x00A0;IAC-CNR,&#x00A0;IT
&#x00A0;&#x00A0;Redistribution&#x00A0;and&#x00A0;use&#x00A0;in&#x00A0;source&#x00A0;and&#x00A0;binary&#x00A0;forms,&#x00A0;with&#x00A0;or&#x00A0;without
&#x00A0;&#x00A0;modification,&#x00A0;are&#x00A0;permitted&#x00A0;provided&#x00A0;that&#x00A0;the&#x00A0;following&#x00A0;conditions
&#x00A0;&#x00A0;are&#x00A0;met:
&#x00A0;&#x00A0;&#x00A0;&#x00A0;1.&#x00A0;Redistributions&#x00A0;of&#x00A0;source&#x00A0;code&#x00A0;must&#x00A0;retain&#x00A0;the&#x00A0;above&#x00A0;copyright
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer.
&#x00A0;&#x00A0;&#x00A0;&#x00A0;2.&#x00A0;Redistributions&#x00A0;in&#x00A0;binary&#x00A0;form&#x00A0;must&#x00A0;reproduce&#x00A0;the&#x00A0;above&#x00A0;copyright
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions,&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer&#x00A0;in&#x00A0;the
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;documentation&#x00A0;and/or&#x00A0;other&#x00A0;materials&#x00A0;provided&#x00A0;with&#x00A0;the&#x00A0;distribution.
&#x00A0;&#x00A0;&#x00A0;&#x00A0;3.&#x00A0;The&#x00A0;name&#x00A0;of&#x00A0;the&#x00A0;MLD2P4&#x00A0;group&#x00A0;or&#x00A0;the&#x00A0;names&#x00A0;of&#x00A0;its&#x00A0;contributors&#x00A0;may
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;not&#x00A0;be&#x00A0;used&#x00A0;to&#x00A0;endorse&#x00A0;or&#x00A0;promote&#x00A0;products&#x00A0;derived&#x00A0;from&#x00A0;this
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;software&#x00A0;without&#x00A0;specific&#x00A0;written&#x00A0;permission.
&#x00A0;&#x00A0;THIS&#x00A0;SOFTWARE&#x00A0;IS&#x00A0;PROVIDED&#x00A0;BY&#x00A0;THE&#x00A0;COPYRIGHT&#x00A0;HOLDERS&#x00A0;AND&#x00A0;CONTRIBUTORS
&#x00A0;&#x00A0;&#8216;&#8216;AS&#x00A0;IS&#8217;&#8217;&#x00A0;AND&#x00A0;ANY&#x00A0;EXPRESS&#x00A0;OR&#x00A0;IMPLIED&#x00A0;WARRANTIES,&#x00A0;INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED
&#x00A0;&#x00A0;TO,&#x00A0;THE&#x00A0;IMPLIED&#x00A0;WARRANTIES&#x00A0;OF&#x00A0;MERCHANTABILITY&#x00A0;AND&#x00A0;FITNESS&#x00A0;FOR&#x00A0;A&#x00A0;PARTICULAR
&#x00A0;&#x00A0;PURPOSE&#x00A0;ARE&#x00A0;DISCLAIMED.&#x00A0;IN&#x00A0;NO&#x00A0;EVENT&#x00A0;SHALL&#x00A0;THE&#x00A0;MLD2P4&#x00A0;GROUP&#x00A0;OR&#x00A0;ITS&#x00A0;CONTRIBUTORS
&#x00A0;&#x00A0;BE&#x00A0;LIABLE&#x00A0;FOR&#x00A0;ANY&#x00A0;DIRECT,&#x00A0;INDIRECT,&#x00A0;INCIDENTAL,&#x00A0;SPECIAL,&#x00A0;EXEMPLARY,&#x00A0;OR
&#x00A0;&#x00A0;CONSEQUENTIAL&#x00A0;DAMAGES&#x00A0;(INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED&#x00A0;TO,&#x00A0;PROCUREMENT&#x00A0;OF
&#x00A0;&#x00A0;SUBSTITUTE&#x00A0;GOODS&#x00A0;OR&#x00A0;SERVICES;&#x00A0;LOSS&#x00A0;OF&#x00A0;USE,&#x00A0;DATA,&#x00A0;OR&#x00A0;PROFITS;&#x00A0;OR&#x00A0;BUSINESS
&#x00A0;&#x00A0;INTERRUPTION)&#x00A0;HOWEVER&#x00A0;CAUSED&#x00A0;AND&#x00A0;ON&#x00A0;ANY&#x00A0;THEORY&#x00A0;OF&#x00A0;LIABILITY,&#x00A0;WHETHER&#x00A0;IN
&#x00A0;&#x00A0;CONTRACT,&#x00A0;STRICT&#x00A0;LIABILITY,&#x00A0;OR&#x00A0;TORT&#x00A0;(INCLUDING&#x00A0;NEGLIGENCE&#x00A0;OR&#x00A0;OTHERWISE)
&#x00A0;&#x00A0;ARISING&#x00A0;IN&#x00A0;ANY&#x00A0;WAY&#x00A0;OUT&#x00A0;OF&#x00A0;THE&#x00A0;USE&#x00A0;OF&#x00A0;THIS&#x00A0;SOFTWARE,&#x00A0;EVEN&#x00A0;IF&#x00A0;ADVISED&#x00A0;OF&#x00A0;THE
&#x00A0;&#x00A0;POSSIBILITY&#x00A0;OF&#x00A0;SUCH&#x00A0;DAMAGE.
</pre>
<!--l. 44--><p class="nopar" >
<!--l. 47--><p class="indent" > <span
class="cmr-12">AMG4PSBLAS is an evolution of MLD2P4, whose license we reproduce here to</span>
<span
class="cmr-12">abide by its terms:</span>
<pre class="verbatim" id="verbatim-12">
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MLD2P4&#x00A0;&#x00A0;version&#x00A0;2.2
&#x00A0;&#x00A0;MultiLevel&#x00A0;Domain&#x00A0;Decomposition&#x00A0;Parallel&#x00A0;Preconditioners&#x00A0;Package
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;based&#x00A0;on&#x00A0;PSBLAS&#x00A0;(Parallel&#x00A0;Sparse&#x00A0;BLAS&#x00A0;version&#x00A0;3.5)
&#x00A0;&#x00A0;(C)&#x00A0;Copyright&#x00A0;2008-2018
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Salvatore&#x00A0;Filippone
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Pasqua&#x00A0;D&#8217;Ambra
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Daniela&#x00A0;di&#x00A0;Serafino
&#x00A0;&#x00A0;Redistribution&#x00A0;and&#x00A0;use&#x00A0;in&#x00A0;source&#x00A0;and&#x00A0;binary&#x00A0;forms,&#x00A0;with&#x00A0;or&#x00A0;without
&#x00A0;&#x00A0;modification,&#x00A0;are&#x00A0;permitted&#x00A0;provided&#x00A0;that&#x00A0;the&#x00A0;following&#x00A0;conditions
&#x00A0;&#x00A0;are&#x00A0;met:
&#x00A0;&#x00A0;&#x00A0;&#x00A0;1.&#x00A0;Redistributions&#x00A0;of&#x00A0;source&#x00A0;code&#x00A0;must&#x00A0;retain&#x00A0;the&#x00A0;above&#x00A0;copyright
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer.
&#x00A0;&#x00A0;&#x00A0;&#x00A0;2.&#x00A0;Redistributions&#x00A0;in&#x00A0;binary&#x00A0;form&#x00A0;must&#x00A0;reproduce&#x00A0;the&#x00A0;above&#x00A0;copyright
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions,&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer&#x00A0;in&#x00A0;the
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;documentation&#x00A0;and/or&#x00A0;other&#x00A0;materials&#x00A0;provided&#x00A0;with&#x00A0;the&#x00A0;distribution.
&#x00A0;&#x00A0;&#x00A0;&#x00A0;3.&#x00A0;The&#x00A0;name&#x00A0;of&#x00A0;the&#x00A0;MLD2P4&#x00A0;group&#x00A0;or&#x00A0;the&#x00A0;names&#x00A0;of&#x00A0;its&#x00A0;contributors&#x00A0;may
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;not&#x00A0;be&#x00A0;used&#x00A0;to&#x00A0;endorse&#x00A0;or&#x00A0;promote&#x00A0;products&#x00A0;derived&#x00A0;from&#x00A0;this
&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;software&#x00A0;without&#x00A0;specific&#x00A0;written&#x00A0;permission.
&#x00A0;&#x00A0;THIS&#x00A0;SOFTWARE&#x00A0;IS&#x00A0;PROVIDED&#x00A0;BY&#x00A0;THE&#x00A0;COPYRIGHT&#x00A0;HOLDERS&#x00A0;AND&#x00A0;CONTRIBUTORS
&#x00A0;&#x00A0;&#8216;&#8216;AS&#x00A0;IS&#8217;&#8217;&#x00A0;AND&#x00A0;ANY&#x00A0;EXPRESS&#x00A0;OR&#x00A0;IMPLIED&#x00A0;WARRANTIES,&#x00A0;INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED
&#x00A0;&#x00A0;TO,&#x00A0;THE&#x00A0;IMPLIED&#x00A0;WARRANTIES&#x00A0;OF&#x00A0;MERCHANTABILITY&#x00A0;AND&#x00A0;FITNESS&#x00A0;FOR&#x00A0;A&#x00A0;PARTICULAR
&#x00A0;&#x00A0;PURPOSE&#x00A0;ARE&#x00A0;DISCLAIMED.&#x00A0;IN&#x00A0;NO&#x00A0;EVENT&#x00A0;SHALL&#x00A0;THE&#x00A0;MLD2P4&#x00A0;GROUP&#x00A0;OR&#x00A0;ITS&#x00A0;CONTRIBUTORS
&#x00A0;&#x00A0;BE&#x00A0;LIABLE&#x00A0;FOR&#x00A0;ANY&#x00A0;DIRECT,&#x00A0;INDIRECT,&#x00A0;INCIDENTAL,&#x00A0;SPECIAL,&#x00A0;EXEMPLARY,&#x00A0;OR
&#x00A0;&#x00A0;CONSEQUENTIAL&#x00A0;DAMAGES&#x00A0;(INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED&#x00A0;TO,&#x00A0;PROCUREMENT&#x00A0;OF
&#x00A0;&#x00A0;SUBSTITUTE&#x00A0;GOODS&#x00A0;OR&#x00A0;SERVICES;&#x00A0;LOSS&#x00A0;OF&#x00A0;USE,&#x00A0;DATA,&#x00A0;OR&#x00A0;PROFITS;&#x00A0;OR&#x00A0;BUSINESS
&#x00A0;&#x00A0;INTERRUPTION)&#x00A0;HOWEVER&#x00A0;CAUSED&#x00A0;AND&#x00A0;ON&#x00A0;ANY&#x00A0;THEORY&#x00A0;OF&#x00A0;LIABILITY,&#x00A0;WHETHER&#x00A0;IN
&#x00A0;&#x00A0;CONTRACT,&#x00A0;STRICT&#x00A0;LIABILITY,&#x00A0;OR&#x00A0;TORT&#x00A0;(INCLUDING&#x00A0;NEGLIGENCE&#x00A0;OR&#x00A0;OTHERWISE)
&#x00A0;&#x00A0;ARISING&#x00A0;IN&#x00A0;ANY&#x00A0;WAY&#x00A0;OUT&#x00A0;OF&#x00A0;THE&#x00A0;USE&#x00A0;OF&#x00A0;THIS&#x00A0;SOFTWARE,&#x00A0;EVEN&#x00A0;IF&#x00A0;ADVISED&#x00A0;OF&#x00A0;THE
&#x00A0;&#x00A0;POSSIBILITY&#x00A0;OF&#x00A0;SUCH&#x00A0;DAMAGE.
</pre>
<!--l. 87--><p class="nopar" >
+218 -49
View File
@@ -1,10 +1,10 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>License</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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
@@ -12,7 +12,7 @@
> >
<!--l. 1--><div class="crosslinks"><p class="noindent"><span <!--l. 1--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html" ><span href="userhtmlli5.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse8.html" ><span href="userhtmlse8.html" ><span
@@ -28,58 +28,227 @@ href="userhtml.html#userhtmlse9.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h3 class="sectionHead"><span class="titlemark"><span <h3 class="sectionHead"><span class="titlemark"><span
class="cmr-12">A </span></span> <a class="cmr-12">B </span></span> <a
id="x31-35000A"></a><span id="x29-33000B"></a><span
class="cmr-12">License</span></h3> class="cmr-12">Contributor Covenant Code of Conduct</span></h3>
<!--l. 5--><p class="noindent" ><span <div class="paragraphTOCS">
class="cmr-12">The MLD2P4 is freely distributable under the following copyright terms:</span> </div>
<!--l. 5--><p class="noindent" ><span class="paragraphHead"><a
id="x29-34000B"></a><span
class="cmbx-12">Our Pledge</span></span>
<span
class="cmr-12">We as members, contributors, and leaders pledge to make participation in</span>
<span
class="cmr-12">our community a harassment-free experience for everyone, regardless of age,</span>
<span
class="cmr-12">body size, visible or invisible disability, ethnicity, sex characteristics, gender</span>
<span
class="cmr-12">identity and expression, level of experience, education, socio-economic status,</span>
<span
class="cmr-12">nationality, personal appearance, race, caste, color, religion, or sexual identity and</span>
<span
class="cmr-12">orientation. We pledge to act and interact in ways that contribute to an open,</span>
<span
class="cmr-12">welcoming, diverse, inclusive, and healthy community. Our Standards Examples</span>
<span
class="cmr-12">of behavior that contributes to a positive environment for our community</span>
<span
class="cmr-12">include:</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">Demonstrating empathy and kindness toward other people</span>
</li>
<li class="itemize"><span
class="cmr-12">Being respectful of differing opinions, viewpoints, and experiences</span>
</li>
<li class="itemize"><span
class="cmr-12">Giving and gracefully accepting constructive feedback</span>
</li>
<li class="itemize"><span
class="cmr-12">Accepting responsibility and apologizing to those affected by our mistakes,</span>
<span
class="cmr-12">and learning from the experience</span>
</li>
<li class="itemize"><span
class="cmr-12">Focusing on what is best not just for us as individuals, but for the overall</span>
<span
class="cmr-12">community</span></li></ul>
<!--l. 26--><p class="noindent" ><span
class="cmr-12">Examples of unacceptable behavior include:</span>
<ul class="itemize1">
<li class="itemize"><span
class="cmr-12">The use of sexualized language or imagery, and sexual attention or advances</span>
<span
class="cmr-12">of any kind</span>
<div class="verbatim" id="verbatim-11"> </li>
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;MLD2P4&#x00A0;&#x00A0;version&#x00A0;2.1 <li class="itemize"><span
&#x00A0;<br />&#x00A0;&#x00A0;MultiLevel&#x00A0;Domain&#x00A0;Decomposition&#x00A0;Parallel&#x00A0;Preconditioners&#x00A0;Package class="cmr-12">Trolling, insulting or derogatory comments, and personal or political attacks</span>
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;based&#x00A0;on&#x00A0;PSBLAS&#x00A0;(Parallel&#x00A0;Sparse&#x00A0;BLAS&#x00A0;version&#x00A0;3.5) </li>
&#x00A0;<br /> <li class="itemize"><span
&#x00A0;<br />&#x00A0;&#x00A0;(C)&#x00A0;Copyright&#x00A0;2008,&#x00A0;2010,&#x00A0;2012,&#x00A0;2015,&#x00A0;2017 class="cmr-12">Public or private harassment</span>
&#x00A0;<br /> </li>
&#x00A0;<br />&#x00A0;&#x00A0;Salvatore&#x00A0;Filippone&#x00A0;&#x00A0;&#x00A0;&#x00A0;Cranfield&#x00A0;University,&#x00A0;Cranfield,&#x00A0;UK <li class="itemize"><span
&#x00A0;<br />&#x00A0;&#x00A0;Pasqua&#x00A0;D&#8217;Ambra&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;IAC-CNR,&#x00A0;Naples,&#x00A0;IT class="cmr-12">Publishing others&#8217; private information, such as a physical or email address,</span>
&#x00A0;<br />&#x00A0;&#x00A0;Daniela&#x00A0;di&#x00A0;Serafino&#x00A0;&#x00A0;&#x00A0;&#x00A0;University&#x00A0;of&#x00A0;Campania&#x00A0;L.&#x00A0;Vanvitelli,&#x00A0;Caserta,&#x00A0;IT <span
&#x00A0;<br /> class="cmr-12">without their explicit permission</span>
&#x00A0;<br />&#x00A0;&#x00A0;Redistribution&#x00A0;and&#x00A0;use&#x00A0;in&#x00A0;source&#x00A0;and&#x00A0;binary&#x00A0;forms,&#x00A0;with&#x00A0;or&#x00A0;without </li>
&#x00A0;<br />&#x00A0;&#x00A0;modification,&#x00A0;are&#x00A0;permitted&#x00A0;provided&#x00A0;that&#x00A0;the&#x00A0;following&#x00A0;conditions <li class="itemize"><span
&#x00A0;<br />&#x00A0;&#x00A0;are&#x00A0;met: class="cmr-12">Other conduct which could reasonably be considered inappropriate in a</span>
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;1.&#x00A0;Redistributions&#x00A0;of&#x00A0;source&#x00A0;code&#x00A0;must&#x00A0;retain&#x00A0;the&#x00A0;above&#x00A0;copyright <span
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer. class="cmr-12">professional setting</span></li></ul>
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;2.&#x00A0;Redistributions&#x00A0;in&#x00A0;binary&#x00A0;form&#x00A0;must&#x00A0;reproduce&#x00A0;the&#x00A0;above&#x00A0;copyright <!--l. 38--><p class="noindent" ><span class="paragraphHead"><a
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;notice,&#x00A0;this&#x00A0;list&#x00A0;of&#x00A0;conditions,&#x00A0;and&#x00A0;the&#x00A0;following&#x00A0;disclaimer&#x00A0;in&#x00A0;the id="x29-35000B"></a><span
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;documentation&#x00A0;and/or&#x00A0;other&#x00A0;materials&#x00A0;provided&#x00A0;with&#x00A0;the&#x00A0;distribution. class="cmbx-12">Enforcement Responsibilities</span></span>
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;3.&#x00A0;The&#x00A0;name&#x00A0;of&#x00A0;the&#x00A0;MLD2P4&#x00A0;group&#x00A0;or&#x00A0;the&#x00A0;names&#x00A0;of&#x00A0;its&#x00A0;contributors&#x00A0;may <span
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;not&#x00A0;be&#x00A0;used&#x00A0;to&#x00A0;endorse&#x00A0;or&#x00A0;promote&#x00A0;products&#x00A0;derived&#x00A0;from&#x00A0;this class="cmr-12">Community leaders are responsible for clarifying and enforcing our standards of</span>
&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;software&#x00A0;without&#x00A0;specific&#x00A0;written&#x00A0;permission. <span
&#x00A0;<br /> class="cmr-12">acceptable behavior and will take appropriate and fair corrective action in response to</span>
&#x00A0;<br />&#x00A0;&#x00A0;THIS&#x00A0;SOFTWARE&#x00A0;IS&#x00A0;PROVIDED&#x00A0;BY&#x00A0;THE&#x00A0;COPYRIGHT&#x00A0;HOLDERS&#x00A0;AND&#x00A0;CONTRIBUTORS <span
&#x00A0;<br />&#x00A0;&#x00A0;&#8216;&#8216;AS&#x00A0;IS&#8217;&#8217;&#x00A0;AND&#x00A0;ANY&#x00A0;EXPRESS&#x00A0;OR&#x00A0;IMPLIED&#x00A0;WARRANTIES,&#x00A0;INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED class="cmr-12">any behavior that they deem inappropriate, threatening, offensive, or harmful.</span>
&#x00A0;<br />&#x00A0;&#x00A0;TO,&#x00A0;THE&#x00A0;IMPLIED&#x00A0;WARRANTIES&#x00A0;OF&#x00A0;MERCHANTABILITY&#x00A0;AND&#x00A0;FITNESS&#x00A0;FOR&#x00A0;A&#x00A0;PARTICULAR <span
&#x00A0;<br />&#x00A0;&#x00A0;PURPOSE&#x00A0;ARE&#x00A0;DISCLAIMED.&#x00A0;IN&#x00A0;NO&#x00A0;EVENT&#x00A0;SHALL&#x00A0;THE&#x00A0;MLD2P4&#x00A0;GROUP&#x00A0;OR&#x00A0;ITS&#x00A0;CONTRIBUTORS class="cmr-12">Community leaders have the right and responsibility to remove, edit, or reject</span>
&#x00A0;<br />&#x00A0;&#x00A0;BE&#x00A0;LIABLE&#x00A0;FOR&#x00A0;ANY&#x00A0;DIRECT,&#x00A0;INDIRECT,&#x00A0;INCIDENTAL,&#x00A0;SPECIAL,&#x00A0;EXEMPLARY,&#x00A0;OR <span
&#x00A0;<br />&#x00A0;&#x00A0;CONSEQUENTIAL&#x00A0;DAMAGES&#x00A0;(INCLUDING,&#x00A0;BUT&#x00A0;NOT&#x00A0;LIMITED&#x00A0;TO,&#x00A0;PROCUREMENT&#x00A0;OF class="cmr-12">comments, commits, code, wiki edits, issues, and other contributions that are not</span>
&#x00A0;<br />&#x00A0;&#x00A0;SUBSTITUTE&#x00A0;GOODS&#x00A0;OR&#x00A0;SERVICES;&#x00A0;LOSS&#x00A0;OF&#x00A0;USE,&#x00A0;DATA,&#x00A0;OR&#x00A0;PROFITS;&#x00A0;OR&#x00A0;BUSINESS <span
&#x00A0;<br />&#x00A0;&#x00A0;INTERRUPTION)&#x00A0;HOWEVER&#x00A0;CAUSED&#x00A0;AND&#x00A0;ON&#x00A0;ANY&#x00A0;THEORY&#x00A0;OF&#x00A0;LIABILITY,&#x00A0;WHETHER&#x00A0;IN class="cmr-12">aligned to this Code of Conduct, and will communicate reasons for moderation</span>
&#x00A0;<br />&#x00A0;&#x00A0;CONTRACT,&#x00A0;STRICT&#x00A0;LIABILITY,&#x00A0;OR&#x00A0;TORT&#x00A0;(INCLUDING&#x00A0;NEGLIGENCE&#x00A0;OR&#x00A0;OTHERWISE) <span
&#x00A0;<br />&#x00A0;&#x00A0;ARISING&#x00A0;IN&#x00A0;ANY&#x00A0;WAY&#x00A0;OUT&#x00A0;OF&#x00A0;THE&#x00A0;USE&#x00A0;OF&#x00A0;THIS&#x00A0;SOFTWARE,&#x00A0;EVEN&#x00A0;IF&#x00A0;ADVISED&#x00A0;OF&#x00A0;THE class="cmr-12">decisions when appropriate. Scope This Code of Conduct applies within all community</span>
&#x00A0;<br />&#x00A0;&#x00A0;POSSIBILITY&#x00A0;OF&#x00A0;SUCH&#x00A0;DAMAGE. <span
&#x00A0;<br /> class="cmr-12">spaces, and also applies when an individual is officially representing the community in</span>
</div> <span
<!--l. 43--><p class="nopar" > class="cmr-12">public spaces. Examples of representing our community include using an official</span>
<span
class="cmr-12">e-mail address, posting via an official social media account, or acting as an</span>
<span
class="cmr-12">appointed representative at an online or offline event. Enforcement Instances of</span>
<span
class="cmr-12">abusive, harassing, or otherwise unacceptable behavior may be reported to the</span>
<span
class="cmr-12">community leaders responsible for enforcement at </span><a
href="mailto:eocoe@na.iac.cnr.it" ><span
class="cmr-12">eocoe@na.iac.cnr.it</span></a><span
class="cmr-12">. All</span>
<span
class="cmr-12">complaints will be reviewed and investigated promptly and fairly. All community</span>
<span
class="cmr-12">leaders are obligated to respect the privacy and security of the reporter of any</span>
<span
class="cmr-12">incident.</span>
<!--l. 61--><p class="noindent" ><span class="paragraphHead"><a
id="x29-36000B"></a><span
class="cmbx-12">Enforcement Guidelines</span></span>
<span
class="cmr-12">Community leaders will follow these Community Impact Guidelines in</span>
<span
class="cmr-12">determining the consequences for any action they deem in violation of this Code of</span>
<span
class="cmr-12">Conduct:</span>
<ol class="enumerate1" >
<li
class="enumerate" id="x29-36002x1"><span
class="cmr-12">Correction</span>
<!--l. 67--><p class="noindent" ><span
class="cmti-12">Community Impact: </span><span
class="cmr-12">Use of inappropriate language or other behavior deemed</span>
<span
class="cmr-12">unprofessional or unwelcome in the community.</span>
<!--l. 70--><p class="noindent" ><span
class="cmti-12">Consequence: </span><span
class="cmr-12">A private, written warning from community leaders, providing</span>
<span
class="cmr-12">clarity around the nature of the violation and an explanation of why the</span>
<span
class="cmr-12">behavior was inappropriate. A public apology may be requested.</span>
</li>
<li
class="enumerate" id="x29-36004x2"><span
class="cmr-12">Warning</span>
<!--l. 75--><p class="noindent" ><span
class="cmti-12">Community Impact: </span><span
class="cmr-12">A violation through a single incident or series of actions.</span>
<!--l. 78--><p class="noindent" ><span
class="cmti-12">Consequence: </span><span
class="cmr-12">A warning with consequences for continued behavior. No</span>
<span
class="cmr-12">interaction with the people involved, including unsolicited interaction with</span>
<span
class="cmr-12">those enforcing the Code of Conduct, for a specified period of time. This</span>
<span
class="cmr-12">includes avoiding interactions in community spaces as well as external</span>
<span
class="cmr-12">channels like social media. Violating these terms may lead to a temporary</span>
<span
class="cmr-12">or permanent ban.</span>
</li>
<li
class="enumerate" id="x29-36006x3"><span
class="cmr-12">Temporary Ban</span>
<!--l. 86--><p class="noindent" ><span
class="cmti-12">Community Impact: </span><span
class="cmr-12">A serious violation of community standards, including</span>
<span
class="cmr-12">sustained inappropriate behavior.</span>
<!--l. 89--><p class="noindent" ><span
class="cmti-12">Consequence: </span><span
class="cmr-12">A temporary ban from any sort of interaction or public</span>
<span
class="cmr-12">communication with the community for a specified period of time. No</span>
<span
class="cmr-12">public or private interaction with the people involved, including unsolicited</span>
<span
class="cmr-12">interaction with those enforcing the Code of Conduct, is allowed during this</span>
<span
class="cmr-12">period. Violating these terms may lead to a permanent ban.</span>
</li>
<li
class="enumerate" id="x29-36008x4"><span
class="cmr-12">Permanent Ban</span>
<!--l. 96--><p class="noindent" ><span
class="cmti-12">Community Impact: </span><span
class="cmr-12">Demonstrating a pattern of violation of community</span>
<span
class="cmr-12">standards, including sustained inappropriate behavior, harassment of an</span>
<span
class="cmr-12">individual, or aggression toward or disparagement of classes of individuals.</span>
<!--l. 100--><p class="noindent" ><span
class="cmti-12">Consequence: </span><span
class="cmr-12">A permanent ban from any sort of public interaction within</span>
<span
class="cmr-12">the community.</span></li></ol>
<!--l. 104--><p class="noindent" ><span class="paragraphHead"><a
id="x29-37000B"></a><span
class="cmbx-12">Attribution</span></span>
<span
class="cmr-12">This Code of Conduct is adapted from the Contributor Covenant, version 2.0,</span>
<span
class="cmr-12">available at </span><a
href="https://www.contributor-covenant.org/version/2/0/code_of_conduct.html" ><span
class="cmr-12">https://www.contributor-covenant.org/version/2/0/code</span><span
class="cmr-12">_of</span><span
class="cmr-12">_conduct</span>
<span
class="cmr-12">.html</span></a><span
class="cmr-12">. Community Impact Guidelines were inspired by Mozilla&#8217;s code of conduct</span>
<span
class="cmr-12">enforcement ladder. For answers to common questions about this code of conduct, see</span>
<span
class="cmr-12">the FAQ at </span><a
href="https://www.contributor-covenant.org/faq" ><span
class="cmr-12">https://www.contributor-covenant.org/faq</span></a><span
class="cmr-12">. Translations are available at</span>
<a
href="https://www.contributor-covenant.org/translations" ><span
class="cmr-12">https://www.contributor-covenant.org/translations</span></a><span
class="cmr-12">.</span>
<!--l. 141--><p class="indent" >
@@ -91,7 +260,7 @@ class="cmr-12">The MLD2P4 is freely distributable under the following copyright
<!--l. 2--><div class="crosslinks"><p class="noindent"><span <!--l. 2--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html" ><span href="userhtmlli5.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse8.html" ><span href="userhtmlse8.html" ><span
@@ -107,5 +276,5 @@ href="userhtml.html#userhtmlse9.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 2--><p class="indent" > <a <!--l. 2--><p class="indent" > <a
id="tailuserhtmlse9.html"></a> id="tailuserhtmlse9.html"></a>
</body></html> </body></html>
+49 -48
View File
@@ -3,14 +3,14 @@
<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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 28--><div class="crosslinks"><p class="noindent"><span <!--l. 30--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu2.html" ><span href="userhtmlsu2.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -23,9 +23,9 @@ class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">3.1 </span></span> <a class="cmr-12">3.1 </span></span> <a
id="x8-70003.1"></a><span id="x9-80003.1"></a><span
class="cmr-12">Prerequisites</span></h4> class="cmr-12">Prerequisites</span></h4>
<!--l. 30--><p class="noindent" ><span <!--l. 32--><p class="noindent" ><span
class="cmr-12">The following base libraries are needed:</span> class="cmr-12">The following base libraries are needed:</span>
@@ -35,65 +35,66 @@ class="cmr-12">The following base libraries are needed:</span>
class="cmbx-12">BLAS</span> </dt><dd class="cmbx-12">BLAS</span> </dt><dd
class="description"><span class="cite"><span class="description"><span class="cite"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html#Xblas3"><span href="userhtmlli5.html#Xblas3"><span
class="cmr-12">11</span></a><span class="cmr-12">15</span></a><span
class="cmr-12">,</span><span class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xblas2"><span href="userhtmlli5.html#Xblas2"><span
class="cmr-12">12</span></a><span class="cmr-12">16</span></a><span
class="cmr-12">,</span><span class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xblas1"><span href="userhtmlli5.html#Xblas1"><span
class="cmr-12">18</span></a><span class="cmr-12">22</span></a><span
class="cmr-12">]</span></span> <span class="cmr-12">]</span></span> <span
class="cmr-12">Many vendors provide optimized versions of BLAS; if no</span> class="cmr-12">Many vendors provide optimized versions of BLAS; if no</span>
<span <span
class="cmr-12">vendor version is available for a given platform, the ATLAS software</span> class="cmr-12">vendor version is available for a given platform, the ATLAS software</span>
<span <span
class="cmr-12">(</span><a class="cmr-12">(</span><a
href="math-atlas.sourceforge.net" class="url" ><span href="http://math-atlas.sourceforge.net" ><span
class="cmtt-12">math-atlas.sourceforge.net</span></a><span class="cmr-12">math-atlas.sourceforge .net</span></a><span
class="cmr-12">) may be employed. The reference BLAS</span> class="cmr-12">) may be employed. The reference BLAS from</span>
<span <span
class="cmr-12">from Netlib (</span><a class="cmr-12">Netlib (</span><a
href="www.netlib.org/blas" class="url" ><span href="http://www.netlib.org/blas" ><span
class="cmtt-12">www.netlib.org/blas</span></a><span class="cmr-12">www.netlib.org/blas</span></a><span
class="cmr-12">) are meant to define the standard</span> class="cmr-12">) are meant to define the standard behaviour of</span>
<span <span
class="cmr-12">behaviour of the BLAS interface, so they are not optimized for any</span> class="cmr-12">the BLAS interface, so they are not optimized for any particular platform,</span>
<span <span
class="cmr-12">particular plaftorm, and should only be used as a last resort. Note that</span> class="cmr-12">and should only be used as a last resort. Note that BLAS computations form</span>
<span <span
class="cmr-12">BLAS computations form a relatively small part of the MLD2P4/PSBLAS</span> class="cmr-12">a relatively small part of the AMG4PSBLAS/PSBLAS; however they are</span>
<span <span
class="cmr-12">computations; they are however critical when using preconditioners based</span> class="cmr-12">critical when using preconditioners based on the MUMPS, UMFPACK or</span>
<span <span
class="cmr-12">on MUMPS, UMFPACK or SuperLU third party libraries. Note that</span> class="cmr-12">SuperLU third party libraries. UMFPACK requires a full LAPACK library;</span>
<span <span
class="cmr-12">UMFPACK requires a full LAPACK library; our experience is that</span> class="cmr-12">our experience is that configuring ATLAS for building full LAPACK does</span>
<span <span
class="cmr-12">configuring ATLAS for building full LAPACK does not work in the</span> class="cmr-12">not always work in the expected way. Our advice is first to download the</span>
<span <span
class="cmr-12">correct way. Our advice is first to download the LAPACK tarfile from</span> class="cmr-12">LAPACK tarfile from </span><a
<a href="http://www.netlib.org/lapack" ><span
href="www.netlib.org/lapack" class="url" ><span class="cmr-12">www.netlib.org/lapack</span></a> <span
class="cmtt-12">www.netlib.org/lapack</span></a> <span class="cmr-12">and install it independently of</span>
class="cmr-12">and install it independently of ATLAS. In this</span>
<span <span
class="cmr-12">case, you need to modify the OPTS and NOOPT definitions for including</span> class="cmr-12">ATLAS. In this case, you need to modify the OPTS and NOOPT definitions</span>
<span <span
class="cmr-12">-fPIC compilation option in the make.inc file of the LAPACK library.</span> class="cmr-12">for including -fPIC compilation option in the make.inc file of the LAPACK</span>
<span
class="cmr-12">library.</span>
</dd><dt class="description"> </dd><dt class="description">
<span <span
class="cmbx-12">MPI</span> </dt><dd class="cmbx-12">MPI</span> </dt><dd
class="description"><span class="cite"><span class="description"><span class="cite"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html#XMPI2"><span href="userhtmlli5.html#XMPI2"><span
class="cmr-12">17</span></a><span class="cmr-12">21</span></a><span
class="cmr-12">,</span><span class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#XMPI1"><span href="userhtmlli5.html#XMPI1"><span
class="cmr-12">23</span></a><span class="cmr-12">27</span></a><span
class="cmr-12">]</span></span> <span class="cmr-12">]</span></span> <span
class="cmr-12">A version of MPI is available on most high-performance computing</span> class="cmr-12">A version of MPI is available on most high-performance computing</span>
<span <span
@@ -103,30 +104,30 @@ class="cmr-12">systems.</span>
class="cmbx-12">PSBLAS</span> </dt><dd class="cmbx-12">PSBLAS</span> </dt><dd
class="description"><span class="cite"><span class="description"><span class="cite"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span class="cmr-12">17</span></a><span
class="cmr-12">,</span><span class="cmr-12">,</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlli4.html#Xpsblas_00"><span href="userhtmlli5.html#Xpsblas_00"><span
class="cmr-12">15</span></a><span class="cmr-12">19</span></a><span
class="cmr-12">]</span></span> <span class="cmr-12">]</span></span> <span
class="cmr-12">Parallel Sparse BLAS (PSBLAS) is available from</span> class="cmr-12">Parallel Sparse BLAS (PSBLAS) is available from</span>
<a <a
href="github.com/sfilippone/psblas3" class="url" ><span href="https://psctoolkit.github.io/products/psblas/" ><span
class="cmtt-12">github.com/sfilippone/psblas3</span></a><span class="cmr-12">psctoolkit.github.io/ products/psblas/</span></a><span
class="cmr-12">; version 3.5.0 (or later) is required.</span> class="cmr-12">; version 3.7.0 (or later) is required.</span>
<span <span
class="cmr-12">Indeed, all the prerequisites listed so far are also prerequisites of PSBLAS.</span></dd></dl> class="cmr-12">Indeed, all the prerequisites listed so far are also prerequisites of PSBLAS.</span></dd></dl>
<!--l. 56--><p class="noindent" ><span <!--l. 60--><p class="noindent" ><span
class="cmr-12">Please note that the four previous libraries must have Fortran interfaces compatible with</span> class="cmr-12">Please note that the four previous libraries must have Fortran interfaces compatible with</span>
<span <span
class="cmr-12">MLD2P4; usually this means that they should all be built with the same compiler as</span> class="cmr-12">AMG4PSBLAS; usually this means that they should all be built with the same</span>
<span <span
class="cmr-12">MLD2P4.</span> class="cmr-12">compiler being used for AMG4PSBLAS.</span>
<!--l. 61--><div class="crosslinks"><p class="noindent"><span <!--l. 64--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu2.html" ><span href="userhtmlsu2.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -137,6 +138,6 @@ class="cmr-12">] [</span><a
href="userhtmlse3.html#userhtmlsu1.html" ><span href="userhtmlse3.html#userhtmlsu1.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 61--><p class="indent" > <a <!--l. 64--><p class="indent" > <a
id="tailuserhtmlsu1.html"></a> id="tailuserhtmlsu1.html"></a>
</body></html> </body></html>
+234 -82
View File
@@ -1,132 +1,284 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method init</title> <head><title>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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 43--><div class="crosslinks"><p class="noindent"><span <!--l. 640--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu11.html" ><span href="userhtmlsu11.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlsu9.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu9.html#tailuserhtmlsu9.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
href="#tailuserhtmlsu10.html"><span href="#tailuserhtmlsu10.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu10.html" ><span href="userhtmlse5.html#userhtmlsu10.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.1 </span></span> <a class="cmr-12">5.4 </span></span> <a
id="x20-190006.1"></a><span id="x20-190005.4"></a><span
class="cmr-12">Method init</span></h4> class="cmr-12">Method smoothers</span><span
class="cmr-12">_build</span></h4>
<div class="center" <div class="center"
> >
<!--l. 45--><p class="noindent" > <!--l. 643--><p class="noindent" >
<!--l. 46--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span <!--l. 644--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%init(icontx,ptype,info)</span></span></span></div> class="cmtt-12">&#x00A0;</span><span
<!--l. 49--><p class="noindent" ><span class="cmtt-12">p</span><span
class="cmr-12">This method allocates and initializes the preconditioner </span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">%</span><span
class="cmtt-12">p</span></span></span><span class="cmtt-12">smoothers_build</span><span
class="cmr-12">, according to the</span> class="cmtt-12">(</span><span
class="cmtt-12">a</span><span
class="cmtt-12">,</span><span
class="cmtt-12">desc_a</span><span
class="cmtt-12">,</span><span
class="cmtt-12">p</span><span
class="cmtt-12">,</span><span
class="cmtt-12">info</span><span
class="cmtt-12">[,</span><span
class="cmtt-12">amold</span><span
class="cmtt-12">,</span><span
class="cmtt-12">vmold</span><span
class="cmtt-12">,</span><span
class="cmtt-12">imold</span><span
class="cmtt-12">])</span><br />
</div>
<!--l. 647--><p class="noindent" ><span
class="cmr-12">This method builds the smoothers and the coarsest-level solvers for the multilevel</span>
<span <span
class="cmr-12">preconditioner type chosen by the user.</span> class="cmr-12">preconditioner </span><span class="lstinline"></span><span
<!--l. 53--><p class="noindent" ><span class="cmtt-12">p</span><span
class="cmbx-12">Arguments</span> class="cmr-12">, according to the requirements made by the user through the methods</span>
<div class="tabular"> <table id="TBL-2" class="tabular" <span class="lstinline"></span><span
cellspacing="0" cellpadding="0" class="cmtt-12">init</span> <span
><colgroup id="TBL-2-1g"><col class="cmr-12">and </span><span class="lstinline"></span><span
id="TBL-2-1"><col class="cmtt-12">set</span><span
id="TBL-2-2"></colgroup><tr class="cmr-12">, and based on the aggregation hierarchy produced by a previous call to</span>
style="vertical-align:baseline;" id="TBL-2-1-"><td style="white-space:wrap; text-align:left;" id="TBL-2-1-1" <span class="lstinline"></span><span
class="td11"><!--l. 60--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="cmtt-12">hierarchy_build</span> <span
class="cmtt-12">icontxt</span></span></span> </td> <td style="white-space:wrap; text-align:left;" id="TBL-2-1-2" class="cmr-12">(see Section</span><span
class="td11"><!--l. 60--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-2-"><td style="white-space:wrap; text-align:left;" id="TBL-2-2-1"
class="td11"><!--l. 61--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-2-2"
class="td11"><!--l. 61--><p class="noindent" ><span
class="cmr-12">The communication context.</span> </td></tr><tr
style="vertical-align:baseline;" id="TBL-2-3-"><td style="white-space:wrap; text-align:left;" id="TBL-2-3-1"
class="td11"><!--l. 62--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">ptype</span></span></span> </td> <td style="white-space:wrap; text-align:left;" id="TBL-2-3-2"
class="td11"><!--l. 62--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">character(len=*),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span></td>
</tr><tr
style="vertical-align:baseline;" id="TBL-2-4-"><td style="white-space:wrap; text-align:left;" id="TBL-2-4-1"
class="td11"><!--l. 63--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-4-2"
class="td11"><!--l. 63--><p class="noindent" ><span
class="cmr-12">The type of preconditioner. Its values are specified in Table</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse5.html#x17-160151"><span href="userhtmlsu9.html#x19-180005.3"><span
class="cmr-12">1</span><!--tex4ht:ref: tab:precinit --></a><span class="cmr-12">5.3</span><!--tex4ht:ref: sec:hier_bld --></a><span
class="cmr-12">.</span> </td> class="cmr-12">).</span>
<!--l. 654--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-11" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-11-1g"><col
id="TBL-11-1"><col
id="TBL-11-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-11-1-"><td style="white-space:normal; text-align:left;" id="TBL-11-1-1"
class="td11"><!--l. 657--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">a</span> </td><td style="white-space:normal; text-align:left;" id="TBL-11-1-2"
class="td11"><!--l. 657--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">spmat_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-2-5-"><td style="white-space:wrap; text-align:left;" id="TBL-2-5-1" style="vertical-align:baseline;" id="TBL-11-2-"><td style="white-space:normal; text-align:left;" id="TBL-11-2-1"
class="td11"><!--l. 65--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-5-2" class="td11"><!--l. 658--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-2-2"
class="td11"><!--l. 65--><p class="noindent" ><span class="td11"><!--l. 658--><p class="noindent" ><span
class="cmr-12">Note that the strings are case insensitive.</span> </td> class="cmr-12">The sparse matrix structure containing the local part of the matrix</span>
<span
class="cmr-12">to be preconditioned. Note that </span><span
class="cmti-12">x </span><span
class="cmr-12">must be chosen according to the</span>
<span class="lstinline"></span><span
class="cmtt-12">real</span><span
class="cmr-12">/</span><span class="lstinline"></span><span
class="cmtt-12">complex</span><span
class="cmr-12">, single/double precision version of AMG4PSBLAS</span>
<span
class="cmr-12">under use. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">17</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-2-6-"><td style="white-space:wrap; text-align:left;" id="TBL-2-6-1" style="vertical-align:baseline;" id="TBL-11-3-"><td style="white-space:normal; text-align:left;" id="TBL-11-3-1"
class="td11"><!--l. 66--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 662--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-2-6-2" class="cmtt-12">desc_a</span></td><td style="white-space:normal; text-align:left;" id="TBL-11-3-2"
class="td11"><!--l. 66--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 662--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer,</span><span class="cmtt-12">type</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span class="cmtt-12">(</span><span
class="cmtt-12">psb_desc_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-4-"><td style="white-space:normal; text-align:left;" id="TBL-11-4-1"
class="td11"><!--l. 663--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-4-2"
class="td11"><!--l. 663--><p class="noindent" ><span
class="cmr-12">The communication descriptor of </span><span class="lstinline"></span><span
class="cmtt-12">a</span><span
class="cmr-12">. See the PSBLAS User&#8217;s Guide</span>
<span
class="cmr-12">for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">17</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-5-"><td style="white-space:normal; text-align:left;" id="TBL-11-5-1"
class="td11"><!--l. 665--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-11-5-2"
class="td11"><!--l. 665--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-2-7-"><td style="white-space:wrap; text-align:left;" id="TBL-2-7-1" style="vertical-align:baseline;" id="TBL-11-6-"><td style="white-space:normal; text-align:left;" id="TBL-11-6-1"
class="td11"><!--l. 67--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-2-7-2" class="td11"><!--l. 666--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-6-2"
class="td11"><!--l. 67--><p class="noindent" ><span class="td11"><!--l. 666--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span href="userhtmlse7.html#x27-310007"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for 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:wrap; text-align:left;" id="TBL-2-8-1" style="vertical-align:baseline;" id="TBL-11-7-"><td style="white-space:normal; text-align:left;" id="TBL-11-7-1"
class="td11"> </td> </tr></table></div> class="td11"><!--l. 667--><p class="noindent" ><span class="lstinline"></span><span
<!--l. 77--><p class="indent" > <span class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-11-7-2"
class="cmr-12">For compatibility with the previous versions of MLD2P4, this method can be also</span> class="td11"><!--l. 667--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">_base_sparse_mat</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-8-"><td style="white-space:normal; text-align:left;" id="TBL-11-8-1"
class="td11"><!--l. 668--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-8-2"
class="td11"><!--l. 668--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal matrix components; this</span>
<span <span
class="cmr-12">invoked as follows:</span> class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span>
<span
class="cmr-12">processes. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
<div class="center" href="userhtmlli5.html#XPSBLASGUIDE"><span
> class="cmr-12">17</span></a><span
<!--l. 80--><p class="noindent" > class="cmr-12">]</span></span><span
<!--l. 81--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="cmr-12">.</span> </td>
class="cmtt-12">call</span><span </tr><tr
class="cmtt-12">&#x00A0;mld_precinit(p,ptype,info)</span></span></span></div> style="vertical-align:baseline;" id="TBL-11-9-"><td style="white-space:normal; text-align:left;" id="TBL-11-9-1"
class="td11"><!--l. 672--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">vmold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-11-9-2"
class="td11"><!--l. 672--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">_base_vect_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-10-"><td style="white-space:normal; text-align:left;" id="TBL-11-10-1"
class="td11"><!--l. 673--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-10-2"
class="td11"><!--l. 673--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal vector components; this</span>
<span
class="cmr-12">allows e.g. running on GPUs.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-11-"><td style="white-space:normal; text-align:left;" id="TBL-11-11-1"
class="td11"><!--l. 675--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">imold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-11-11-2"
class="td11"><!--l. 675--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_i_base_vect_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-12-"><td style="white-space:normal; text-align:left;" id="TBL-11-12-1"
class="td11"><!--l. 676--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-11-12-2"
class="td11"><!--l. 676--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal integer vector components;</span>
<span
class="cmr-12">this allows e.g. running on GPUs.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-11-13-"><td style="white-space:normal; text-align:left;" id="TBL-11-13-1"
class="td11"> </td> </tr></table></div>
<!--l. 87--><div class="crosslinks"><p class="noindent"><span <!--l. 682--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu11.html" ><span href="userhtmlsu11.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlsu9.html" ><span
class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu9.html#tailuserhtmlsu9.html" ><span
class="cmr-12">prev-tail</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu10.html" ><span href="userhtmlsu10.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu10.html" ><span href="userhtmlse5.html#userhtmlsu10.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 87--><p class="indent" > <a <!--l. 682--><p class="indent" > <a
id="tailuserhtmlsu10.html"></a> id="tailuserhtmlsu10.html"></a>
</body></html> </body></html>
+220 -1604
View File
File diff suppressed because it is too large Load Diff
+290 -84
View File
@@ -1,16 +1,16 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method hierarchy_build</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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 662--><div class="crosslinks"><p class="noindent"><span <!--l. 730--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu13.html" ><span href="userhtmlsu13.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -24,108 +24,311 @@ class="cmr-12">] [</span><a
href="#tailuserhtmlsu12.html"><span href="#tailuserhtmlsu12.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu12.html" ><span href="userhtmlse5.html#userhtmlsu12.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.3 </span></span> <a class="cmr-12">5.6 </span></span> <a
id="x22-210006.3"></a><span id="x22-210005.6"></a><span
class="cmr-12">Method hierarchy</span><span class="cmr-12">Method apply</span></h4>
class="cmr-12">_build</span></h4>
<div class="center" <div class="center"
> >
<!--l. 664--><p class="noindent" > <!--l. 732--><p class="noindent" >
<!--l. 665--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span <!--l. 733--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%hierarchy_build(a,desc_a,info)</span></span></span><br /> class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">apply</span><span
class="cmtt-12">(</span><span
class="cmtt-12">x</span><span
class="cmtt-12">,</span><span
class="cmtt-12">y</span><span
class="cmtt-12">,</span><span
class="cmtt-12">desc_a</span><span
class="cmtt-12">,</span><span
class="cmtt-12">info</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">[,</span><span
class="cmtt-12">trans</span><span
class="cmtt-12">,</span><span
class="cmtt-12">work</span><span
class="cmtt-12">])</span><br />
</div> </div>
<!--l. 668--><p class="noindent" ><span <!--l. 736--><p class="noindent" ><span
class="cmr-12">This method builds the hierarchy of matrices and restriction/prolongation operators for</span> class="cmr-12">This method computes </span><span
class="cmmi-12">y </span><span
class="cmr-12">= </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) </span><span
class="cmmi-12">x</span><span
class="cmr-12">, where </span><span
class="cmmi-12">B </span><span
class="cmr-12">is a previously built preconditioner,</span>
<span <span
class="cmr-12">the multilevel preconditioner </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">stored into </span><span class="lstinline"></span><span
class="cmtt-12">p</span></span></span><span class="cmtt-12">p</span><span
class="cmr-12">, according to the requirements made by the user</span> class="cmr-12">, and </span><span
class="cmmi-12">op </span><span
class="cmr-12">denotes the preconditioner itself or its transpose, according to the</span>
<span <span
class="cmr-12">through the methods </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">value of </span><span class="lstinline"></span><span
class="cmtt-12">init</span></span></span> <span class="cmtt-12">trans</span><span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">. Note that, when AMG4PSBLAS is used with a Krylov solver from</span>
class="cmtt-12">set</span></span></span><span <span
class="cmr-12">.</span> class="cmr-12">PSBLAS, </span><span class="lstinline"></span><span
<!--l. 673--><p class="noindent" ><span class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">apply</span> <span
class="cmr-12">is called within the PSBLAS method </span><span class="lstinline"></span><span
class="cmtt-12">psb_krylov</span> <span
class="cmr-12">and hence it is</span>
<span
class="cmr-12">completely transparent to the user.</span>
<!--l. 745--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-11" class="tabular" <div class="tabular"> <table id="TBL-13" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
><colgroup id="TBL-11-1g"><col ><colgroup id="TBL-13-1g"><col
id="TBL-11-1"><col id="TBL-13-1"><col
id="TBL-11-2"></colgroup><tr id="TBL-13-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-11-1-"><td style="white-space:wrap; text-align:left;" id="TBL-11-1-1" style="vertical-align:baseline;" id="TBL-13-1-"><td style="white-space:normal; text-align:left;" id="TBL-13-1-1"
class="td11"><!--l. 676--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 748--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">a</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-11-1-2" class="cmtt-12">x</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-1-2"
class="td11"><!--l. 676--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 748--><p class="noindent" ><span
class="cmtt-12">type(psb_</span></span></span><span class="cmti-12">type</span><span class="lstinline"></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">(</span><span
class="cmtt-12">spmat_type),</span><span class="cmtt-12">kind_parameter</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">, dimension(:), intent(in)&#8212;.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-11-2-"><td style="white-space:wrap; text-align:left;" id="TBL-11-2-1" style="vertical-align:baseline;" id="TBL-13-2-"><td style="white-space:normal; text-align:left;" id="TBL-13-2-1"
class="td11"><!--l. 677--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-2-2" class="td11"><!--l. 749--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-2-2"
class="td11"><!--l. 677--><p class="noindent" ><span class="td11"><!--l. 749--><p class="noindent" ><span
class="cmr-12">The sparse matrix structure containing the local part of the matrix</span> class="cmr-12">The local part of the vector </span><span
class="cmmi-12">x</span><span
class="cmr-12">. Note that </span><span
class="cmti-12">type </span><span
class="cmr-12">and </span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span>
<span <span
class="cmr-12">to be preconditioned. Note that </span><span class="cmr-12">must be chosen according to the </span><span class="lstinline"></span><span
class="cmti-12">x </span><span class="cmtt-12">real</span><span
class="cmr-12">must be chosen according to</span> class="cmr-12">/</span><span class="lstinline"></span><span
class="cmtt-12">complex</span><span
class="cmr-12">, single/double</span>
<span <span
class="cmr-12">the real/complex, single/double precision version of MLD2P4 under</span> class="cmr-12">precision version of AMG4PSBLAS under use.</span> </td>
<span
class="cmr-12">use. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-11-3-"><td style="white-space:wrap; text-align:left;" id="TBL-11-3-1" style="vertical-align:baseline;" id="TBL-13-3-"><td style="white-space:normal; text-align:left;" id="TBL-13-3-1"
class="td11"><!--l. 682--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 752--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">desc_a</span></span></span></td><td style="white-space:wrap; text-align:left;" id="TBL-11-3-2" class="cmtt-12">y</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-3-2"
class="td11"><!--l. 682--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 752--><p class="noindent" ><span
class="cmtt-12">type(psb_desc_type),</span><span class="cmti-12">type</span><span class="lstinline"></span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span class="cmtt-12">(</span><span
class="cmtt-12">kind_parameter</span><span
class="cmtt-12">)</span><span
class="cmr-12">, dimension(:), intent(out)&#8212;.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-4-"><td style="white-space:normal; text-align:left;" id="TBL-13-4-1"
class="td11"><!--l. 753--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-4-2"
class="td11"><!--l. 753--><p class="noindent" ><span
class="cmr-12">The local part of the vector </span><span
class="cmmi-12">y</span><span
class="cmr-12">. Note that </span><span
class="cmti-12">type </span><span
class="cmr-12">and </span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span>
<span
class="cmr-12">must be chosen according to the </span><span class="lstinline"></span><span
class="cmtt-12">real</span><span
class="cmr-12">/</span><span class="lstinline"></span><span
class="cmtt-12">complex</span><span
class="cmr-12">, single/double</span>
<span
class="cmr-12">precision version of AMG4PSBLAS under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-5-"><td style="white-space:normal; text-align:left;" id="TBL-13-5-1"
class="td11"><!--l. 756--><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-5-2"
class="td11"><!--l. 756--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_desc_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-11-4-"><td style="white-space:wrap; text-align:left;" id="TBL-11-4-1" style="vertical-align:baseline;" id="TBL-13-6-"><td style="white-space:normal; text-align:left;" id="TBL-13-6-1"
class="td11"><!--l. 683--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-4-2" class="td11"><!--l. 757--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-6-2"
class="td11"><!--l. 683--><p class="noindent" ><span class="td11"><!--l. 757--><p class="noindent" ><span
class="cmr-12">The communication descriptor of </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">The communication descriptor associated to the matrix to be</span>
class="cmtt-12">a</span></span></span><span
class="cmr-12">. See the PSBLAS User&#8217;s Guide</span>
<span <span
class="cmr-12">for details </span><span class="cite"><span class="cmr-12">preconditioned.</span> </td>
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-11-5-"><td style="white-space:wrap; text-align:left;" id="TBL-11-5-1" style="vertical-align:baseline;" id="TBL-13-7-"><td style="white-space:normal; text-align:left;" id="TBL-13-7-1"
class="td11"><!--l. 688--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 759--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-11-5-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-7-2"
class="td11"><!--l. 688--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 759--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer,</span><span class="cmtt-12">integer</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-11-6-"><td style="white-space:wrap; text-align:left;" id="TBL-11-6-1" style="vertical-align:baseline;" id="TBL-13-8-"><td style="white-space:normal; text-align:left;" id="TBL-13-8-1"
class="td11"><!--l. 689--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-11-6-2" class="td11"><!--l. 760--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-8-2"
class="td11"><!--l. 689--><p class="noindent" ><span class="td11"><!--l. 760--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span href="userhtmlse7.html#x27-310007"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for 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:wrap; text-align:left;" id="TBL-11-7-1" style="vertical-align:baseline;" id="TBL-13-9-"><td style="white-space:normal; text-align:left;" id="TBL-13-9-1"
class="td11"><!--l. 761--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">trans</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-9-2"
class="td11"><!--l. 761--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">character</span><span
class="cmtt-12">(</span><span
class="cmtt-12">len</span><span
class="cmtt-12">=1),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">).</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-10-"><td style="white-space:normal; text-align:left;" id="TBL-13-10-1"
class="td11"><!--l. 762--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-10-2"
class="td11"><!--l. 762--><p class="noindent" ><span
class="cmr-12">If </span><span class="lstinline"></span><span
class="cmtt-12">trans</span> <span
class="cmr-12">= </span><span class="lstinline"></span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">N</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">n</span><span
class="cmtt-12">&#8217;</span> <span
class="cmr-12">then </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">; if </span><span class="lstinline"></span><span
class="cmtt-12">trans</span> <span
class="cmr-12">= </span><span class="lstinline"></span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">T</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">t</span><span
class="cmtt-12">&#8217;</span>
<span
class="cmr-12">then </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmmi-8">T</span> </sup> <span
class="cmr-12">(transpose of </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">); if </span><span class="lstinline"></span><span
class="cmtt-12">trans</span> <span
class="cmr-12">= </span><span class="lstinline"></span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">C</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#8217;</span><span
class="cmtt-12">c</span><span
class="cmtt-12">&#8217;</span> <span
class="cmr-12">then</span>
<span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmmi-8">C</span></sup> <span
class="cmr-12">(conjugate transpose of </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">).</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-11-"><td style="white-space:normal; text-align:left;" id="TBL-13-11-1"
class="td11"><!--l. 766--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">work</span> </td><td style="white-space:normal; text-align:left;" id="TBL-13-11-2"
class="td11"><!--l. 766--><p class="noindent" ><span
class="cmti-12">type</span><span class="lstinline"></span><span
class="cmtt-12">(</span><span
class="cmtt-12">kind_parameter</span><span
class="cmtt-12">)</span><span
class="cmr-12">, dimension(:), optional, target&#8212;.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-12-"><td style="white-space:normal; text-align:left;" id="TBL-13-12-1"
class="td11"><!--l. 767--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-13-12-2"
class="td11"><!--l. 767--><p class="noindent" ><span
class="cmr-12">Workspace. Its size should be at least </span><span class="lstinline"></span><span
class="cmtt-12">4</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">*</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">psb_cd_get_local_</span>
<span class="lstinline"></span><span
class="cmtt-12">cols</span><span
class="cmtt-12">(</span><span
class="cmtt-12">desc_a</span><span
class="cmtt-12">)</span> <span
class="cmr-12">(see the PSBLAS User&#8217;s Guide). Note that </span><span
class="cmti-12">type </span><span
class="cmr-12">and</span>
<span
class="cmti-12">kind</span><span
class="cmti-12">_parameter </span><span
class="cmr-12">must be chosen according to the </span><span class="lstinline"></span><span
class="cmtt-12">real</span><span
class="cmr-12">/</span><span class="lstinline"></span><span
class="cmtt-12">complex</span><span
class="cmr-12">,</span>
<span
class="cmr-12">single/double precision version of AMG4PSBLAS under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-13-"><td style="white-space:normal; text-align:left;" id="TBL-13-13-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
@@ -133,7 +336,10 @@ class="td11"> </td> </tr></table></div>
<!--l. 695--><div class="crosslinks"><p class="noindent"><span
<!--l. 776--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu13.html" ><span href="userhtmlsu13.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -147,9 +353,9 @@ class="cmr-12">] [</span><a
href="userhtmlsu12.html" ><span href="userhtmlsu12.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu12.html" ><span href="userhtmlse5.html#userhtmlsu12.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 695--><p class="indent" > <a <!--l. 776--><p class="indent" > <a
id="tailuserhtmlsu12.html"></a> id="tailuserhtmlsu12.html"></a>
</body></html> </body></html>
+51 -160
View File
@@ -1,16 +1,16 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method smoothers_build</title> <head><title>Method 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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 695--><div class="crosslinks"><p class="noindent"><span <!--l. 776--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu14.html" ><span href="userhtmlsu14.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -24,173 +24,64 @@ class="cmr-12">] [</span><a
href="#tailuserhtmlsu13.html"><span href="#tailuserhtmlsu13.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu13.html" ><span href="userhtmlse5.html#userhtmlsu13.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.4 </span></span> <a class="cmr-12">5.7 </span></span> <a
id="x23-220006.4"></a><span id="x23-220005.7"></a><span
class="cmr-12">Method smoothers</span><span class="cmr-12">Method free</span></h4>
class="cmr-12">_build</span></h4>
<div class="center" <div class="center"
> >
<!--l. 698--><p class="noindent" > <!--l. 778--><p class="noindent" >
<!--l. 699--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span <!--l. 779--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%smoothers_build(a,desc_a,p,info[,amold,vmold,imold])</span></span></span><br /> class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">free</span><span
class="cmtt-12">(</span><span
class="cmtt-12">p</span><span
class="cmtt-12">,</span><span
class="cmtt-12">info</span><span
class="cmtt-12">)</span><br />
</div> </div>
<!--l. 702--><p class="noindent" ><span <!--l. 782--><p class="noindent" ><span
class="cmr-12">This method builds the smoothers and the coarsest-level solvers for the multilevel</span> class="cmr-12">This method deallocates the preconditioner data structure </span><span class="lstinline"></span><span
<span class="cmtt-12">p</span><span
class="cmr-12">preconditioner </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">.</span>
class="cmtt-12">p</span></span></span><span <!--l. 785--><p class="noindent" ><span
class="cmr-12">, according to the requirements made by the user through the methods</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">init</span></span></span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">set</span></span></span><span
class="cmr-12">, and based on the aggregation hierarchy produced by a previous call to</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">hierarchy_build</span></span></span> <span
class="cmr-12">(see Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu12.html#x22-210006.3"><span
class="cmr-12">6.3</span><!--tex4ht:ref: sec:hier_bld --></a><span
class="cmr-12">).</span>
<!--l. 709--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-12" class="tabular" <div class="tabular"> <table id="TBL-14" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
><colgroup id="TBL-12-1g"><col ><colgroup id="TBL-14-1g"><col
id="TBL-12-1"><col id="TBL-14-1"><col
id="TBL-12-2"></colgroup><tr id="TBL-14-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-12-1-"><td style="white-space:wrap; text-align:left;" id="TBL-12-1-1" style="vertical-align:baseline;" id="TBL-14-1-"><td style="white-space:normal; text-align:left;" id="TBL-14-1-1"
class="td11"><!--l. 712--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 788--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">a</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-1-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-14-1-2"
class="td11"><!--l. 712--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 788--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type(psb_</span></span></span><span class="cmtt-12">integer</span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">,</span><span
class="cmtt-12">spmat_type),</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span class="cmtt-12">intent</span><span
class="cmr-12">.</span> </td> class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-12-2-"><td style="white-space:wrap; text-align:left;" id="TBL-12-2-1" style="vertical-align:baseline;" id="TBL-14-2-"><td style="white-space:normal; text-align:left;" id="TBL-14-2-1"
class="td11"><!--l. 713--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-2-2" class="td11"><!--l. 789--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-14-2-2"
class="td11"><!--l. 713--><p class="noindent" ><span class="td11"><!--l. 789--><p class="noindent" ><span
class="cmr-12">The sparse matrix structure containing the local part of the matrix</span>
<span
class="cmr-12">to be preconditioned. Note that </span><span
class="cmti-12">x </span><span
class="cmr-12">must be chosen according to</span>
<span
class="cmr-12">the real/complex, single/double precision version of MLD2P4 under</span>
<span
class="cmr-12">use. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-3-"><td style="white-space:wrap; text-align:left;" id="TBL-12-3-1"
class="td11"><!--l. 717--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">desc_a</span></span></span></td><td style="white-space:wrap; text-align:left;" id="TBL-12-3-2"
class="td11"><!--l. 717--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(psb_desc_type),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-4-"><td style="white-space:wrap; text-align:left;" id="TBL-12-4-1"
class="td11"><!--l. 718--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-4-2"
class="td11"><!--l. 718--><p class="noindent" ><span
class="cmr-12">The communication descriptor of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">a</span></span></span><span
class="cmr-12">. See the PSBLAS User&#8217;s Guide</span>
<span
class="cmr-12">for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-5-"><td style="white-space:wrap; text-align:left;" id="TBL-12-5-1"
class="td11"><!--l. 723--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-5-2"
class="td11"><!--l. 723--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-6-"><td style="white-space:wrap; text-align:left;" id="TBL-12-6-1"
class="td11"><!--l. 724--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-6-2"
class="td11"><!--l. 724--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span href="userhtmlse7.html#x27-310007"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td> class="cmr-12">for</span>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-7-"><td style="white-space:wrap; text-align:left;" id="TBL-12-7-1"
class="td11"><!--l. 725--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-7-2"
class="td11"><!--l. 725--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">_base_sparse_mat),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-8-"><td style="white-space:wrap; text-align:left;" id="TBL-12-8-1"
class="td11"><!--l. 726--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-8-2"
class="td11"><!--l. 726--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal matrix components; this</span>
<span <span
class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span> class="cmr-12">details.</span> </td>
<span
class="cmr-12">processes. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-12-9-"><td style="white-space:wrap; text-align:left;" id="TBL-12-9-1" style="vertical-align:baseline;" id="TBL-14-3-"><td style="white-space:normal; text-align:left;" id="TBL-14-3-1"
class="td11"><!--l. 730--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">vmold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-9-2"
class="td11"><!--l. 730--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_</span></span></span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">_base_vect_type),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-10-"><td style="white-space:wrap; text-align:left;" id="TBL-12-10-1"
class="td11"><!--l. 731--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-10-2"
class="td11"><!--l. 731--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal vector components; this</span>
<span
class="cmr-12">allows e.g. running on GPUs.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-11-"><td style="white-space:wrap; text-align:left;" id="TBL-12-11-1"
class="td11"><!--l. 733--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">imold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-12-11-2"
class="td11"><!--l. 733--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_i_base_vect_type),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-12-12-"><td style="white-space:wrap; text-align:left;" id="TBL-12-12-1"
class="td11"><!--l. 734--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-12-12-2"
class="td11"><!--l. 734--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal integer vector components;</span>
<span
class="cmr-12">this allows e.g. running on GPUs.</span> </td>
</tr><tr
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>
@@ -198,7 +89,7 @@ class="td11"> </td> </tr></table></div>
<!--l. 740--><div class="crosslinks"><p class="noindent"><span <!--l. 795--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu14.html" ><span href="userhtmlsu14.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -212,9 +103,9 @@ class="cmr-12">] [</span><a
href="userhtmlsu13.html" ><span href="userhtmlsu13.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu13.html" ><span href="userhtmlse5.html#userhtmlsu13.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 740--><p class="indent" > <a <!--l. 795--><p class="indent" > <a
id="tailuserhtmlsu13.html"></a> id="tailuserhtmlsu13.html"></a>
</body></html> </body></html>
+131 -180
View File
@@ -1,16 +1,16 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method build</title> <head><title>Method 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 (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 740--><div class="crosslinks"><p class="noindent"><span <!--l. 795--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu15.html" ><span href="userhtmlsu15.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -24,206 +24,157 @@ class="cmr-12">] [</span><a
href="#tailuserhtmlsu14.html"><span href="#tailuserhtmlsu14.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu14.html" ><span href="userhtmlse5.html#userhtmlsu14.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.5 </span></span> <a class="cmr-12">5.8 </span></span> <a
id="x24-230006.5"></a><span id="x24-230005.8"></a><span
class="cmr-12">Method build</span></h4> class="cmr-12">Method descr</span></h4>
<div class="center" <div class="center"
> >
<!--l. 742--><p class="noindent" > <!--l. 797--><p class="noindent" >
<!--l. 743--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span <!--l. 798--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%build(a,desc_a,info[,amold,vmold,imold])</span></span></span><br /> class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">descr</span><span
class="cmtt-12">(</span><span
class="cmtt-12">info</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">[</span><span
class="cmtt-12">iout</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">root</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">verbosity</span><span
class="cmtt-12">])</span><br />
</div> </div>
<!--l. 746--><p class="noindent" ><span <!--l. 801--><p class="noindent" ><span
class="cmr-12">This method builds the preconditioner </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">This method prints a description of the preconditioner </span><span class="lstinline"></span><span
class="cmtt-12">p</span></span></span> <span class="cmtt-12">p</span> <span
class="cmr-12">according to the requirements made by the</span> class="cmr-12">to the standard output or to a</span>
<span <span
class="cmr-12">user through the methods </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">file. It must be called after </span><span class="lstinline"></span><span
class="cmtt-12">init</span></span></span> <span class="cmtt-12">hierachy_build</span> <span
class="cmr-12">and </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">and </span><span class="lstinline"></span><span
class="cmtt-12">set</span></span></span> <span class="cmtt-12">smoothers_build</span><span
class="cmr-12">(see Sections</span><span class="cmr-12">, or </span><span class="lstinline"></span><span
class="cmr-12">&#x00A0;</span><a class="cmtt-12">build</span><span
href="userhtmlsu12.html#x22-210006.3"><span class="cmr-12">, have</span>
class="cmr-12">6.3</span><!--tex4ht:ref: sec:hier_bld --></a> <span
class="cmr-12">and</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlsu13.html#x23-220006.4"><span
class="cmr-12">6.4</span><!--tex4ht:ref: sec:smooth_bld --></a> <span
class="cmr-12">for multilevel</span>
<span <span
class="cmr-12">preconditioners). It is mostly provided for backward compatibility; indeed, it is</span> class="cmr-12">been called.</span>
<span <!--l. 806--><p class="noindent" ><span
class="cmr-12">internally implemented by invoking the two previous methods </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">hierarchy_build</span></span></span> <span
class="cmr-12">and</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">smoothers_build</span></span></span><span
class="cmr-12">, whose nomenclature would however be somewhat unnatural when</span>
<span
class="cmr-12">dealing with simple one-level preconditioners.</span>
<!--l. 756--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-13" class="tabular" <div class="tabular"> <table id="TBL-15" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
><colgroup id="TBL-13-1g"><col ><colgroup id="TBL-15-1g"><col
id="TBL-13-1"><col id="TBL-15-1"><col
id="TBL-13-2"></colgroup><tr id="TBL-15-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-13-1-"><td style="white-space:wrap; text-align:left;" id="TBL-13-1-1" style="vertical-align:baseline;" id="TBL-15-1-"><td style="white-space:normal; text-align:left;" id="TBL-15-1-1"
class="td11"><!--l. 759--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 809--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">a</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-13-1-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-15-1-2"
class="td11"><!--l. 759--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 809--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type(psb_</span></span></span><span class="cmtt-12">integer</span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">,</span><span
class="cmtt-12">spmat_type),</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span class="cmtt-12">intent</span><span
class="cmr-12">.</span> </td> class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-13-2-"><td style="white-space:wrap; text-align:left;" id="TBL-13-2-1" style="vertical-align:baseline;" id="TBL-15-2-"><td style="white-space:normal; text-align:left;" id="TBL-15-2-1"
class="td11"><!--l. 760--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-2-2" class="td11"><!--l. 810--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-15-2-2"
class="td11"><!--l. 760--><p class="noindent" ><span class="td11"><!--l. 810--><p class="noindent" ><span
class="cmr-12">The sparse matrix structure containing the local part of the matrix</span>
<span
class="cmr-12">to be preconditioned. Note that </span><span
class="cmti-12">x </span><span
class="cmr-12">must be chosen according to</span>
<span
class="cmr-12">the real/complex, single/double precision version of MLD2P4 under</span>
<span
class="cmr-12">use. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-3-"><td style="white-space:wrap; text-align:left;" id="TBL-13-3-1"
class="td11"><!--l. 764--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">desc_a</span></span></span></td><td style="white-space:wrap; text-align:left;" id="TBL-13-3-2"
class="td11"><!--l. 764--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(psb_desc_type),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-4-"><td style="white-space:wrap; text-align:left;" id="TBL-13-4-1"
class="td11"><!--l. 765--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-4-2"
class="td11"><!--l. 765--><p class="noindent" ><span
class="cmr-12">The communication descriptor of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">a</span></span></span><span
class="cmr-12">. See the PSBLAS User&#8217;s Guide</span>
<span
class="cmr-12">for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli4.html#XPSBLASGUIDE"><span
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-5-"><td style="white-space:wrap; text-align:left;" id="TBL-13-5-1"
class="td11"><!--l. 770--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-13-5-2"
class="td11"><!--l. 770--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-6-"><td style="white-space:wrap; text-align:left;" id="TBL-13-6-1"
class="td11"><!--l. 771--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-6-2"
class="td11"><!--l. 771--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span href="userhtmlse7.html#x27-310007"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for 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:wrap; text-align:left;" id="TBL-13-7-1" style="vertical-align:baseline;" id="TBL-15-3-"><td style="white-space:normal; text-align:left;" id="TBL-15-3-1"
class="td11"><!--l. 772--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 811--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">amold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-13-7-2" class="cmtt-12">iout</span> </td><td style="white-space:normal; text-align:left;" id="TBL-15-3-2"
class="td11"><!--l. 772--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 811--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class(psb_</span></span></span><span class="cmtt-12">integer</span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">,</span><span
class="cmtt-12">_base_sparse_mat),</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span class="cmtt-12">intent</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span class="cmtt-12">(</span><span
class="cmr-12">.</span> </td> class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-13-8-"><td style="white-space:wrap; text-align:left;" id="TBL-13-8-1" style="vertical-align:baseline;" id="TBL-15-4-"><td style="white-space:normal; text-align:left;" id="TBL-15-4-1"
class="td11"><!--l. 773--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-8-2" class="td11"><!--l. 812--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-15-4-2"
class="td11"><!--l. 773--><p class="noindent" ><span class="td11"><!--l. 812--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal matrix components; this</span> class="cmr-12">The id of the file where the preconditioner description will be</span>
<span <span
class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span> class="cmr-12">printed; the default is the standard output.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-15-5-"><td style="white-space:normal; text-align:left;" id="TBL-15-5-1"
class="td11"><!--l. 814--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">root</span> </td><td style="white-space:normal; text-align:left;" id="TBL-15-5-2"
class="td11"><!--l. 814--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-15-6-"><td style="white-space:normal; text-align:left;" id="TBL-15-6-1"
class="td11"><!--l. 815--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-15-6-2"
class="td11"><!--l. 815--><p class="noindent" ><span
class="cmr-12">The id of the process where the preconditioner description</span>
<span <span
class="cmr-12">processes. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span class="cmr-12">will be printed; the default is </span><span class="lstinline"></span><span
class="cmr-12">[</span><a class="cmtt-12">psb_root_</span><span
href="userhtmlli4.html#XPSBLASGUIDE"><span class="cmr-12">.</span> </td>
class="cmr-12">13</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-13-9-"><td style="white-space:wrap; text-align:left;" id="TBL-13-9-1" style="vertical-align:baseline;" id="TBL-15-7-"><td style="white-space:normal; text-align:left;" id="TBL-15-7-1"
class="td11"><!--l. 777--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 817--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">vmold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-13-9-2" class="cmtt-12">verbosity</span> </td><td style="white-space:normal; text-align:left;" id="TBL-15-7-2"
class="td11"><!--l. 777--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 817--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class(psb_</span></span></span><span class="cmtt-12">integer</span><span
class="cmti-12">x</span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">,</span><span
class="cmtt-12">_base_vect_type),</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span class="cmtt-12">intent</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span class="cmtt-12">(</span><span
class="cmr-12">.</span> </td> class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-13-10-"><td style="white-space:wrap; text-align:left;" id="TBL-13-10-1" style="vertical-align:baseline;" id="TBL-15-8-"><td style="white-space:normal; text-align:left;" id="TBL-15-8-1"
class="td11"><!--l. 778--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-10-2" class="td11"><!--l. 818--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-15-8-2"
class="td11"><!--l. 778--><p class="noindent" ><span class="td11"><!--l. 818--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal vector components; this</span> class="cmr-12">The verbosity level of the description. Default value is 0. For</span>
<span <span
class="cmr-12">allows e.g. running on GPUs.</span> </td> class="cmr-12">values higher than 0, it prints out further information, e.g., for</span>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-11-"><td style="white-space:wrap; text-align:left;" id="TBL-13-11-1"
class="td11"><!--l. 780--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">imold</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-13-11-2"
class="td11"><!--l. 780--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">class(psb_i_base_vect_type),</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-13-12-"><td style="white-space:wrap; text-align:left;" id="TBL-13-12-1"
class="td11"><!--l. 781--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-13-12-2"
class="td11"><!--l. 781--><p class="noindent" ><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">a distributed multilevel preconditioner the size of the coarse</span>
<span
class="cmr-12">matrices on every process.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-13-13-"><td style="white-space:wrap; text-align:left;" id="TBL-13-13-1" style="vertical-align:baseline;" id="TBL-15-9-"><td style="white-space:normal; text-align:left;" id="TBL-15-9-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 786--><p class="indent" > <span <!--l. 825--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">For compatibility with the previous versions of MLD2P4, this method can be also</span>
<span
class="cmr-12">invoked as follows:</span>
<div class="center"
>
<!--l. 789--><p class="noindent" >
<!--l. 790--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;mld_precbld(p,what,val,info[,amold,vmold,imold])</span></span></span></div>
<!--l. 793--><p class="noindent" ><span
class="cmr-12">The method can be used to build multilevel preconditioners too.</span>
<!--l. 798--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu15.html" ><span href="userhtmlsu15.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -237,9 +188,9 @@ class="cmr-12">] [</span><a
href="userhtmlsu14.html" ><span href="userhtmlsu14.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu14.html" ><span href="userhtmlse5.html#userhtmlsu14.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 798--><p class="indent" > <a <!--l. 825--><p class="indent" > <a
id="tailuserhtmlsu14.html"></a> id="tailuserhtmlsu14.html"></a>
</body></html> </body></html>
+400 -243
View File
@@ -1,20 +1,17 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> "http://www.w3.org/TR/html4/loose.dtd">
<html > <html >
<head><title>Method apply</title> <head><title>Auxiliary Methods</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="generator" content="TeX4ht (https://tug.org/tex4ht/)">
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)"> <meta name="originator" content="TeX4ht (https://tug.org/tex4ht/)">
<!-- html,3 --> <!-- html,3 -->
<meta name="src" content="userhtml.tex"> <meta name="src" content="userhtml.tex">
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 798--><div class="crosslinks"><p class="noindent"><span <!--l. 825--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu16.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu14.html" ><span href="userhtmlsu14.html" ><span
class="cmr-12">prev</span></a><span class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
@@ -24,271 +21,431 @@ class="cmr-12">] [</span><a
href="#tailuserhtmlsu15.html"><span href="#tailuserhtmlsu15.html"><span
class="cmr-12">tail</span></a><span class="cmr-12">tail</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu15.html" ><span href="userhtmlse5.html#userhtmlsu15.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<h4 class="subsectionHead"><span class="titlemark"><span <h4 class="subsectionHead"><span class="titlemark"><span
class="cmr-12">6.6 </span></span> <a class="cmr-12">5.9 </span></span> <a
id="x25-240006.6"></a><span id="x25-240005.9"></a><span
class="cmr-12">Method apply</span></h4> class="cmr-12">Auxiliary Methods</span></h4>
<!--l. 826--><p class="noindent" ><span
class="cmr-12">Various functionalities are implemented as additional methods of the preconditioner</span>
<span
class="cmr-12">object.</span>
<!--l. 829--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.1 </span></span> <a
id="x25-250005.9.1"></a><span
class="cmr-12">Method: dump</span></h5>
<div class="center" <div class="center"
> >
<!--l. 800--><p class="noindent" > <!--l. 831--><p class="noindent" >
<!--l. 801--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span <!--l. 832--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%apply(x,y,desc_a,info</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">&#x00A0;[,trans,work])</span></span></span><br /> class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">dump</span><span
class="cmtt-12">(</span><span
class="cmtt-12">info</span><span
class="cmtt-12">[,</span><span
class="cmtt-12">istart</span><span
class="cmtt-12">,</span><span
class="cmtt-12">iend</span><span
class="cmtt-12">,</span><span
class="cmtt-12">prefix</span><span
class="cmtt-12">,</span><span
class="cmtt-12">head</span><span
class="cmtt-12">,</span><span
class="cmtt-12">ac</span><span
class="cmtt-12">,</span><span
class="cmtt-12">rp</span><span
class="cmtt-12">,</span><span
class="cmtt-12">smoother</span><span
class="cmtt-12">,</span><span
class="cmtt-12">solver</span><span
class="cmtt-12">,</span><span
class="cmtt-12">global_num</span><span
class="cmtt-12">])</span><br />
</div> </div>
<!--l. 804--><p class="noindent" ><span <!--l. 835--><p class="noindent" ><span
class="cmr-12">This method computes </span><span class="cmr-12">Dump on file.</span>
class="cmmi-12">y </span><span <!--l. 838--><p class="noindent" ><span
class="cmr-12">= </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) </span><span
class="cmmi-12">x</span><span
class="cmr-12">, where </span><span
class="cmmi-12">B </span><span
class="cmr-12">is a previously built preconditioner,</span>
<span
class="cmr-12">stored into </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p</span></span></span><span
class="cmr-12">, and </span><span
class="cmmi-12">op </span><span
class="cmr-12">denotes the preconditioner itself or its transpose, according to the</span>
<span
class="cmr-12">value of </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">trans</span></span></span><span
class="cmr-12">. Note that, when MLD2P4 is used with a Krylov solver from PSBLAS,</span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p%apply</span></span></span> <span
class="cmr-12">is called within the PSBLAS method </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">psb_krylov</span></span></span> <span
class="cmr-12">and hence it is completely</span>
<span
class="cmr-12">transparent to the user.</span>
<!--l. 813--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-14" class="tabular" <div class="tabular"> <table id="TBL-16" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
><colgroup id="TBL-14-1g"><col ><colgroup id="TBL-16-1g"><col
id="TBL-14-1"><col id="TBL-16-1"><col
id="TBL-14-2"></colgroup><tr id="TBL-16-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-14-1-"><td style="white-space:wrap; text-align:left;" id="TBL-14-1-1" style="vertical-align:baseline;" id="TBL-16-1-"><td style="white-space:normal; text-align:left;" id="TBL-16-1-1"
class="td11"><!--l. 820--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 841--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">x</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-1-2" class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-16-1-2"
class="td11"><!--l. 820--><p class="noindent" ><span class="td11"><!--l. 841--><p class="noindent" ><span class="lstinline"></span><span
class="cmti-12">type</span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">integer</span><span
class="cmtt-12">(</span></span></span><span class="cmtt-12">,</span><span
class="cmti-12">kind</span><span class="cmtt-12">&#x00A0;</span><span
class="cmti-12">_parameter</span><span class="obeylines-h"><span class="verb"><span class="cmtt-12">intent</span><span
class="cmtt-12">),</span><span class="cmtt-12">(</span><span
class="cmtt-12">&#x00A0;dimension(:),</span><span class="cmtt-12">out</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-2-"><td style="white-space:wrap; text-align:left;" id="TBL-14-2-1"
class="td11"><!--l. 821--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-2-2"
class="td11"><!--l. 821--><p class="noindent" ><span
class="cmr-12">The local part of the vector </span><span
class="cmmi-12">x</span><span
class="cmr-12">. Note that </span><span
class="cmti-12">type </span><span
class="cmr-12">and </span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span>
<span
class="cmr-12">must be chosen according to the real/complex, single/double</span>
<span
class="cmr-12">precision version of MLD2P4 under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-3-"><td style="white-space:wrap; text-align:left;" id="TBL-14-3-1"
class="td11"><!--l. 824--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">y</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-3-2"
class="td11"><!--l. 824--><p class="noindent" ><span
class="cmti-12">type</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">(</span></span></span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;dimension(:),</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-4-"><td style="white-space:wrap; text-align:left;" id="TBL-14-4-1"
class="td11"><!--l. 825--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-4-2"
class="td11"><!--l. 825--><p class="noindent" ><span
class="cmr-12">The local part of the vector </span><span
class="cmmi-12">y</span><span
class="cmr-12">. Note that </span><span
class="cmti-12">type </span><span
class="cmr-12">and </span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span>
<span
class="cmr-12">must be chosen according to the real/complex, single/double</span>
<span
class="cmr-12">precision version of MLD2P4 under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-5-"><td style="white-space:wrap; text-align:left;" id="TBL-14-5-1"
class="td11"><!--l. 828--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">desc_a</span></span></span></td><td style="white-space:wrap; text-align:left;" id="TBL-14-5-2"
class="td11"><!--l. 828--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">type(psb_desc_type),</span><span
class="cmtt-12">&#x00A0;intent(in)</span></span></span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-6-"><td style="white-space:wrap; text-align:left;" id="TBL-14-6-1"
class="td11"><!--l. 829--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-6-2"
class="td11"><!--l. 829--><p class="noindent" ><span
class="cmr-12">The communication descriptor associated to the matrix to be</span>
<span
class="cmr-12">preconditioned.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-7-"><td style="white-space:wrap; text-align:left;" id="TBL-14-7-1"
class="td11"><!--l. 831--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-7-2"
class="td11"><!--l. 831--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></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:wrap; text-align:left;" id="TBL-14-8-1" style="vertical-align:baseline;" id="TBL-16-2-"><td style="white-space:normal; text-align:left;" id="TBL-16-2-1"
class="td11"><!--l. 832--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-8-2" class="td11"><!--l. 842--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-2-2"
class="td11"><!--l. 832--><p class="noindent" ><span class="td11"><!--l. 842--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span href="userhtmlse7.html#x27-310007"><span
class="cmr-12">8</span><!--tex4ht:ref: sec:errors --></a> <span class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for 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:wrap; text-align:left;" id="TBL-14-9-1" style="vertical-align:baseline;" id="TBL-16-3-"><td style="white-space:normal; text-align:left;" id="TBL-16-3-1"
class="td11"><!--l. 833--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 843--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">trans</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-9-2" class="cmtt-12">amold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-16-3-2"
class="td11"><!--l. 833--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 843--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">character(len=1),</span><span class="cmtt-12">class</span><span
class="cmtt-12">&#x00A0;optional,</span><span class="cmtt-12">(</span><span
class="cmtt-12">&#x00A0;intent(in).</span></span></span> </td> class="cmtt-12">psb_</span><span
</tr><tr class="cmti-12">x</span><span class="lstinline"></span><span
style="vertical-align:baseline;" id="TBL-14-10-"><td style="white-space:wrap; text-align:left;" id="TBL-14-10-1" class="cmtt-12">_base_sparse_mat</span><span
class="td11"><!--l. 834--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-10-2"
class="td11"><!--l. 834--><p class="noindent" ><span
class="cmr-12">If </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">trans</span></span></span> <span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">&#8217;N&#8217;,&#8217;n&#8217;</span></span></span> <span
class="cmr-12">then </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">; if </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">trans</span></span></span> <span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">&#8217;T&#8217;,&#8217;t&#8217;</span></span></span>
<span
class="cmr-12">then </span><span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmmi-8">T</span> </sup> <span
class="cmr-12">(transpose of </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">); if </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">trans</span></span></span> <span
class="cmr-12">= </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">&#8217;C&#8217;,&#8217;c&#8217;</span></span></span> <span
class="cmr-12">then</span>
<span
class="cmmi-12">op</span><span
class="cmr-12">(</span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">) = </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmmi-8">C</span></sup> <span
class="cmr-12">(conjugate transpose of </span><span
class="cmmi-12">B</span><sup><span
class="cmsy-8">-</span><span
class="cmr-8">1</span></sup><span
class="cmr-12">).</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-14-11-"><td style="white-space:wrap; text-align:left;" id="TBL-14-11-1"
class="td11"><!--l. 838--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">work</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-14-11-2"
class="td11"><!--l. 838--><p class="noindent" ><span
class="cmti-12">type</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">(</span></span></span><span
class="cmti-12">kind</span><span
class="cmti-12">_parameter</span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">),</span><span class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;dimension(:),</span><span class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">&#x00A0;optional,</span><span class="cmtt-12">intent</span><span
class="cmtt-12">&#x00A0;target</span></span></span><span class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td> class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-14-12-"><td style="white-space:wrap; text-align:left;" id="TBL-14-12-1" style="vertical-align:baseline;" id="TBL-16-4-"><td style="white-space:normal; text-align:left;" id="TBL-16-4-1"
class="td11"><!--l. 839--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-14-12-2" class="td11"><!--l. 844--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-16-4-2"
class="td11"><!--l. 839--><p class="noindent" ><span class="td11"><!--l. 844--><p class="noindent" ><span
class="cmr-12">Workspace. Its size should be at least </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">The desired dynamic type for internal matrix components; this</span>
class="cmtt-12">4</span><span
class="cmtt-12">&#x00A0;*</span><span
class="cmtt-12">&#x00A0;psb_cd_get_local_</span></span></span>
<span class="obeylines-h"><span class="verb"><span
class="cmtt-12">cols(desc_a)</span></span></span> <span
class="cmr-12">(see the PSBLAS User&#8217;s Guide). Note that </span><span
class="cmti-12">type</span>
<span <span
class="cmr-12">and </span><span class="cmr-12">allows e.g. running on GPUs; it needs not be the same on all</span>
class="cmti-12">kind</span><span
class="cmti-12">_parameter </span><span
class="cmr-12">must be chosen according to the real/complex,</span>
<span <span
class="cmr-12">single/double precision version of MLD2P4 under use.</span> </td> class="cmr-12">processes. See the PSBLAS User&#8217;s Guide for details </span><span class="cite"><span
class="cmr-12">[</span><a
href="userhtmlli5.html#XPSBLASGUIDE"><span
class="cmr-12">17</span></a><span
class="cmr-12">]</span></span><span
class="cmr-12">.</span> </td>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-14-13-"><td style="white-space:wrap; text-align:left;" id="TBL-14-13-1" style="vertical-align:baseline;" id="TBL-16-5-"><td style="white-space:normal; text-align:left;" id="TBL-16-5-1"
class="td11"> </td> </tr></table></div>
<!--l. 851--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.2 </span></span> <a
id="x25-260005.9.2"></a><span
class="cmr-12">Method: clone</span></h5>
<div class="center"
>
<!--l. 853--><p class="noindent" >
<!--l. 854--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">clone</span><span
class="cmtt-12">(</span><span
class="cmtt-12">pout</span><span
class="cmtt-12">,</span><span
class="cmtt-12">info</span><span
class="cmtt-12">)</span><br />
</div>
<!--l. 857--><p class="noindent" ><span
class="cmr-12">Create a (deep) copy of the preconditioner object.</span>
<!--l. 860--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-17" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-17-1g"><col
id="TBL-17-1"><col
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"
class="td11"><!--l. 863--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">pout</span> </td><td style="white-space:normal; text-align:left;" id="TBL-17-1-2"
class="td11"><!--l. 863--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">type</span><span
class="cmtt-12">(</span><span
class="cmtt-12">amg_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">prec_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-2-"><td style="white-space:normal; text-align:left;" id="TBL-17-2-1"
class="td11"><!--l. 864--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-17-2-2"
class="td11"><!--l. 864--><p class="noindent" ><span
class="cmr-12">The copy of the preconditioner data structure. Note that </span><span
class="cmti-12">x </span><span
class="cmr-12">must</span>
<span
class="cmr-12">be chosen according to the </span><span class="lstinline"></span><span
class="cmtt-12">real</span><span
class="cmr-12">/</span><span class="lstinline"></span><span
class="cmtt-12">complex</span><span
class="cmr-12">, single/double precision</span>
<span
class="cmr-12">version of AMG4PSBLAS under use.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-3-"><td style="white-space:normal; text-align:left;" id="TBL-17-3-1"
class="td11"><!--l. 867--><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-3-2"
class="td11"><!--l. 867--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-4-"><td style="white-space:normal; text-align:left;" id="TBL-17-4-1"
class="td11"><!--l. 868--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-17-4-2"
class="td11"><!--l. 868--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x27-310007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-17-5-"><td style="white-space:normal; text-align:left;" id="TBL-17-5-1"
class="td11"> </td> </tr></table></div>
<!--l. 873--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.3 </span></span> <a
id="x25-270005.9.3"></a><span
class="cmr-12">Method: sizeof</span></h5>
<div class="center"
>
<!--l. 875--><p class="noindent" >
<!--l. 876--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">sz</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">=</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">sizeof</span><span
class="cmtt-12">([</span><span
class="cmtt-12">global</span><span
class="cmtt-12">])</span><br />
</div>
<div class="tabular"> <table id="TBL-18" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-18-1g"><col
id="TBL-18-1"><col
id="TBL-18-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-18-1-"><td style="white-space:normal; text-align:left;" id="TBL-18-1-1"
class="td11"><!--l. 880--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">global</span> </td> <td style="white-space:normal; text-align:left;" id="TBL-18-1-2"
class="td11"><!--l. 880--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">logical</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-18-2-"><td style="white-space:normal; text-align:left;" id="TBL-18-2-1"
class="td11"><!--l. 881--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-18-2-2"
class="td11"><!--l. 881--><p class="noindent" ><span
class="cmr-12">Whether the global or local preconditioner memory occupatio is</span>
<span
class="cmr-12">desired. Default: </span><span class="lstinline"></span><span
class="cmtt-12">.</span><span
class="cmtt-12">false</span><span
class="cmtt-12">.</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-18-3-"><td style="white-space:normal; text-align:left;" id="TBL-18-3-1"
class="td11"> </td> </tr></table>
</div> <span
class="cmr-12">Return memory footprint in bytes.</span>
<!--l. 888--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.4 </span></span> <a
id="x25-280005.9.4"></a><span
class="cmr-12">Method: allocate</span><span
class="cmr-12">_wrk</span></h5>
<div class="center"
>
<!--l. 890--><p class="noindent" >
<!--l. 891--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">allocate_wrk</span><span
class="cmtt-12">(</span><span
class="cmtt-12">info</span><span
class="cmtt-12">[,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">vmold</span><span
class="cmtt-12">])</span><br />
</div>
<!--l. 893--><p class="noindent" ><span
class="cmr-12">n Allocate internal work vectors. Each application of the preconditioner uses a number of</span>
<span
class="cmr-12">work vectors which are allocated internally as necessary; therefore allocation and</span>
<span
class="cmr-12">deallocation of memory occurs multiple times during the execution of a Krylov method.</span>
<span
class="cmr-12">In most cases this strategy is perfectly acceptable, but on some platforms, most</span>
<span
class="cmr-12">notably GPUs, memory allocation is a slow operation, and the default behaviour would</span>
<span
class="cmr-12">lead to a slowdown. This method allows to trade space for time by preallocating</span>
<span
class="cmr-12">the internal workspace outside of the invocation of a Krylov method. When</span>
<span
class="cmr-12">using GPUs or other specialized devices, the </span><span class="lstinline"></span><span
class="cmtt-12">vmold</span> <span
class="cmr-12">argument is also necessary</span>
<span
class="cmr-12">to ensure the internal work vectors are of the appropriate dynamic type to</span>
<span
class="cmr-12">exploit the accelerator hardware; when allocation occurs internally this is</span>
<span
class="cmr-12">taken care of based on the dynamic type of the </span><span class="lstinline"></span><span
class="cmtt-12">x</span> <span
class="cmr-12">argument to the </span><span class="lstinline"></span><span
class="cmtt-12">apply</span>
<span
class="cmr-12">method.</span>
<!--l. 910--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-19" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-19-1g"><col
id="TBL-19-1"><col
id="TBL-19-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-19-1-"><td style="white-space:normal; text-align:left;" id="TBL-19-1-1"
class="td11"><!--l. 913--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-19-1-2"
class="td11"><!--l. 913--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-19-2-"><td style="white-space:normal; text-align:left;" id="TBL-19-2-1"
class="td11"><!--l. 914--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-19-2-2"
class="td11"><!--l. 914--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x27-310007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-19-3-"><td style="white-space:normal; text-align:left;" id="TBL-19-3-1"
class="td11"><!--l. 915--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">vmold</span> </td><td style="white-space:normal; text-align:left;" id="TBL-19-3-2"
class="td11"><!--l. 915--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">class</span><span
class="cmtt-12">(</span><span
class="cmtt-12">psb_</span><span
class="cmti-12">x</span><span class="lstinline"></span><span
class="cmtt-12">_base_vect_type</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">in</span><span
class="cmtt-12">),</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">optional</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-19-4-"><td style="white-space:normal; text-align:left;" id="TBL-19-4-1"
class="td11"><!--l. 916--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-19-4-2"
class="td11"><!--l. 916--><p class="noindent" ><span
class="cmr-12">The desired dynamic type for internal vector components; this</span>
<span
class="cmr-12">allows e.g. running on GPUs.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-19-5-"><td style="white-space:normal; text-align:left;" id="TBL-19-5-1"
class="td11"> </td> </tr></table></div>
<!--l. 922--><p class="noindent" >
<h5 class="subsubsectionHead"><span class="titlemark"><span
class="cmr-12">5.9.5 </span></span> <a
id="x25-290005.9.5"></a><span
class="cmr-12">Method: free</span><span
class="cmr-12">_wrk</span></h5>
<div class="center"
>
<!--l. 924--><p class="noindent" >
<!--l. 925--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">p</span><span
class="cmtt-12">%</span><span
class="cmtt-12">free_wrk</span><span
class="cmtt-12">(</span><span
class="cmtt-12">info</span><span
class="cmtt-12">)</span><br />
</div>
<!--l. 928--><p class="noindent" ><span
class="cmr-12">Deallocate internal work vectors.</span>
<!--l. 931--><p class="noindent" ><span
class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-20" class="tabular"
cellspacing="0" cellpadding="0"
><colgroup id="TBL-20-1g"><col
id="TBL-20-1"><col
id="TBL-20-2"></colgroup><tr
style="vertical-align:baseline;" id="TBL-20-1-"><td style="white-space:normal; text-align:left;" id="TBL-20-1-1"
class="td11"><!--l. 934--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">info</span> </td><td style="white-space:normal; text-align:left;" id="TBL-20-1-2"
class="td11"><!--l. 934--><p class="noindent" ><span class="lstinline"></span><span
class="cmtt-12">integer</span><span
class="cmtt-12">,</span><span
class="cmtt-12">&#x00A0;</span><span
class="cmtt-12">intent</span><span
class="cmtt-12">(</span><span
class="cmtt-12">out</span><span
class="cmtt-12">)</span><span
class="cmr-12">.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-20-2-"><td style="white-space:normal; text-align:left;" id="TBL-20-2-1"
class="td11"><!--l. 935--><p class="noindent" > </td><td style="white-space:normal; text-align:left;" id="TBL-20-2-2"
class="td11"><!--l. 935--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a
href="userhtmlse7.html#x27-310007"><span
class="cmr-12">7</span><!--tex4ht:ref: sec:errors --></a> <span
class="cmr-12">for details.</span> </td>
</tr><tr
style="vertical-align:baseline;" id="TBL-20-3-"><td style="white-space:normal; text-align:left;" id="TBL-20-3-1"
class="td11"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 846--><p class="indent" > <span
class="cmr-12">For compatibility with the previous versions of MLD2P4, this method can be also</span>
<span
class="cmr-12">invoked as follows:</span>
<div class="center"
>
<!--l. 849--><p class="noindent" >
<!--l. 850--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;mld_precaply(p,what,val,info)</span></span></span></div>
<!--l. 855--><div class="crosslinks"><p class="noindent"><span <!--l. 4--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu16.html" ><span
class="cmr-12">next</span></a><span
class="cmr-12">] [</span><a
href="userhtmlsu14.html" ><span href="userhtmlsu14.html" ><span
class="cmr-12">prev</span></a><span class="cmr-12">prev</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
@@ -298,9 +455,9 @@ class="cmr-12">] [</span><a
href="userhtmlsu15.html" ><span href="userhtmlsu15.html" ><span
class="cmr-12">front</span></a><span class="cmr-12">front</span></a><span
class="cmr-12">] [</span><a class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu15.html" ><span href="userhtmlse5.html#userhtmlsu15.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 855--><p class="indent" > <a <!--l. 4--><p class="indent" > <a
id="tailuserhtmlsu15.html"></a> id="tailuserhtmlsu15.html"></a>
</body></html> </body></html>
+11 -21
View File
@@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 855--><div class="crosslinks"><p class="noindent"><span <!--l. 739--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu17.html" ><span href="userhtmlsu17.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -33,16 +33,16 @@ class="cmr-12">6.7 </span></span> <a
class="cmr-12">Method free</span></h4> class="cmr-12">Method free</span></h4>
<div class="center" <div class="center"
> >
<!--l. 857--><p class="noindent" > <!--l. 741--><p class="noindent" >
<!--l. 858--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span <!--l. 742--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%free(p,info)</span></span></span><br /> class="cmtt-12">&#x00A0;p%free(p,info)</span></span></span><br />
</div> </div>
<!--l. 861--><p class="noindent" ><span <!--l. 745--><p class="noindent" ><span
class="cmr-12">This method deallocates the preconditioner data structure </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">This method deallocates the preconditioner data structure </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p</span></span></span><span class="cmtt-12">p</span></span></span><span
class="cmr-12">.</span> class="cmr-12">.</span>
<!--l. 864--><p class="noindent" ><span <!--l. 748--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-15" class="tabular" <div class="tabular"> <table id="TBL-15" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
@@ -50,16 +50,16 @@ cellspacing="0" cellpadding="0"
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:wrap; 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. 870--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 751--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-15-1-2" class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-15-1-2"
class="td11"><!--l. 870--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 751--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span class="cmtt-12">&#x00A0;intent(out)</span></span></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:wrap; 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. 871--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-15-2-2" class="td11"><!--l. 752--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-15-2-2"
class="td11"><!--l. 871--><p class="noindent" ><span class="td11"><!--l. 752--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span href="userhtmlse8.html#x30-340008"><span
@@ -70,23 +70,13 @@ class="cmr-12">details.</span>
</tr><tr </tr><tr
style="vertical-align:baseline;" id="TBL-15-3-"><td style="white-space:wrap; text-align:left;" id="TBL-15-3-1" style="vertical-align:baseline;" id="TBL-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>
<!--l. 875--><p class="indent" > <span
class="cmr-12">For compatibility with the previous versions of MLD2P4, this method can be also</span>
<span
class="cmr-12">invoked as follows:</span>
<div class="center"
>
<!--l. 878--><p class="noindent" >
<!--l. 879--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;mld_precfree(p,info)</span></span></span></div>
<!--l. 885--><div class="crosslinks"><p class="noindent"><span <!--l. 758--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu17.html" ><span href="userhtmlsu17.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -103,6 +93,6 @@ class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu16.html" ><span href="userhtmlse6.html#userhtmlsu16.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 885--><p class="indent" > <a <!--l. 758--><p class="indent" > <a
id="tailuserhtmlsu16.html"></a> id="tailuserhtmlsu16.html"></a>
</body></html> </body></html>
+15 -26
View File
@@ -10,7 +10,7 @@
<link rel="stylesheet" type="text/css" href="userhtml.css"> <link rel="stylesheet" type="text/css" href="userhtml.css">
</head><body </head><body
> >
<!--l. 885--><div class="crosslinks"><p class="noindent"><span <!--l. 758--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu18.html" ><span href="userhtmlsu18.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -33,13 +33,13 @@ class="cmr-12">6.8 </span></span> <a
class="cmr-12">Method descr</span></h4> class="cmr-12">Method descr</span></h4>
<div class="center" <div class="center"
> >
<!--l. 887--><p class="noindent" > <!--l. 760--><p class="noindent" >
<!--l. 888--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span <!--l. 761--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;p%descr(info,</span><span class="cmtt-12">&#x00A0;p%descr(info,</span><span
class="cmtt-12">&#x00A0;[iout])</span></span></span><br /> class="cmtt-12">&#x00A0;[iout])</span></span></span><br />
</div> </div>
<!--l. 891--><p class="noindent" ><span <!--l. 764--><p class="noindent" ><span
class="cmr-12">This method prints a description of the preconditioner </span><span class="obeylines-h"><span class="verb"><span class="cmr-12">This method prints a description of the preconditioner </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">p</span></span></span> <span class="cmtt-12">p</span></span></span> <span
class="cmr-12">to the standard output or to a</span> class="cmr-12">to the standard output or to a</span>
@@ -53,7 +53,7 @@ class="cmtt-12">build</span></span></span><span
class="cmr-12">, have</span> class="cmr-12">, have</span>
<span <span
class="cmr-12">been called.</span> class="cmr-12">been called.</span>
<!--l. 896--><p class="noindent" ><span <!--l. 769--><p class="noindent" ><span
class="cmbx-12">Arguments</span> class="cmbx-12">Arguments</span>
<div class="tabular"> <table id="TBL-16" class="tabular" <div class="tabular"> <table id="TBL-16" class="tabular"
cellspacing="0" cellpadding="0" cellspacing="0" cellpadding="0"
@@ -61,16 +61,16 @@ cellspacing="0" cellpadding="0"
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:wrap; 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. 902--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 772--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-16-1-2" class="cmtt-12">info</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-16-1-2"
class="td11"><!--l. 902--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 772--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(out)</span></span></span><span class="cmtt-12">&#x00A0;intent(out)</span></span></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:wrap; 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. 903--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-2-2" class="td11"><!--l. 773--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-2-2"
class="td11"><!--l. 903--><p class="noindent" ><span class="td11"><!--l. 773--><p class="noindent" ><span
class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span class="cmr-12">Error code. If no error, 0 is returned. See Section</span><span
class="cmr-12">&#x00A0;</span><a class="cmr-12">&#x00A0;</span><a
href="userhtmlse8.html#x30-340008"><span href="userhtmlse8.html#x30-340008"><span
@@ -78,38 +78,27 @@ class="cmr-12">8</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:wrap; 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. 904--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 774--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">iout</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-16-3-2" class="cmtt-12">iout</span></span></span> </td><td style="white-space:wrap; text-align:left;" id="TBL-16-3-2"
class="td11"><!--l. 904--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span class="td11"><!--l. 774--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">integer,</span><span class="cmtt-12">integer,</span><span
class="cmtt-12">&#x00A0;intent(in),</span><span class="cmtt-12">&#x00A0;intent(in),</span><span
class="cmtt-12">&#x00A0;optional</span></span></span><span class="cmtt-12">&#x00A0;optional</span></span></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:wrap; 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. 905--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-4-2" class="td11"><!--l. 775--><p class="noindent" > </td><td style="white-space:wrap; text-align:left;" id="TBL-16-4-2"
class="td11"><!--l. 905--><p class="noindent" ><span class="td11"><!--l. 775--><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:wrap; 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"> </td> </tr></table></div> class="td11"> </td> </tr></table></div>
<!--l. 910--><p class="indent" > <span
class="cmr-12">For compatibility with the previous versions of MLD2P4, this method can be also</span>
<span
class="cmr-12">invoked as follows:</span>
<div class="center"
>
<!--l. 913--><p class="noindent" >
<!--l. 914--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">call</span><span
class="cmtt-12">&#x00A0;mld_precdescr(p,info</span><span
class="cmtt-12">&#x00A0;[,iout])</span></span></span></div>
<!--l. 918--><div class="crosslinks"><p class="noindent"><span <!--l. 780--><div class="crosslinks"><p class="noindent"><span
class="cmr-12">[</span><a class="cmr-12">[</span><a
href="userhtmlsu18.html" ><span href="userhtmlsu18.html" ><span
class="cmr-12">next</span></a><span class="cmr-12">next</span></a><span
@@ -126,6 +115,6 @@ class="cmr-12">] [</span><a
href="userhtmlse6.html#userhtmlsu17.html" ><span href="userhtmlse6.html#userhtmlsu17.html" ><span
class="cmr-12">up</span></a><span class="cmr-12">up</span></a><span
class="cmr-12">] </span></p></div> class="cmr-12">] </span></p></div>
<!--l. 918--><p class="indent" > <a <!--l. 780--><p class="indent" > <a
id="tailuserhtmlsu17.html"></a> id="tailuserhtmlsu17.html"></a>
</body></html> </body></html>

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