diff --git a/mlprec/impl/aggregator/mld_c_dec_aggregator_mat_asb.f90 b/mlprec/impl/aggregator/mld_c_dec_aggregator_mat_asb.f90 index 7194c993..f6f0717f 100644 --- a/mlprec/impl/aggregator/mld_c_dec_aggregator_mat_asb.f90 +++ b/mlprec/impl/aggregator/mld_c_dec_aggregator_mat_asb.f90 @@ -83,6 +83,9 @@ ! For more details see ! M. Brezina and P. Vanek, A black-box iterative solver based on a two-level ! Schwarz method, Computing, 63 (1999), 233-263. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! P. D'Ambra, D. di Serafino and S. Filippone, On the development of PSBLAS-based ! parallel two-level Schwarz preconditioners, Appl. Num. Math., 57 (2007), ! 1181-1196. diff --git a/mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 index d51ed8d6..7a62c5eb 100644 --- a/mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 @@ -47,10 +47,10 @@ ! ! ! Arguments: -! p - type(mld_c_onelev_type), input/output. -! The 'one-level' data structure containing the control -! parameters and (eventually) coarse matrix and prolongator/restrictors. -! +! ag - type(mld_c_dec_aggregator_type), input/output. +! The aggregator object, carrying with itself the mapping algorithm. +! parms - The auxiliary parameters object +! ! a - type(psb_cspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. diff --git a/mlprec/impl/aggregator/mld_c_map_to_tprol.f90 b/mlprec/impl/aggregator/mld_c_map_to_tprol.f90 index 39899903..e7464638 100644 --- a/mlprec/impl/aggregator/mld_c_map_to_tprol.f90 +++ b/mlprec/impl/aggregator/mld_c_map_to_tprol.f90 @@ -60,13 +60,6 @@ ! ! ! Arguments: -! aggr_type - integer, input. -! The scalar used to identify the aggregation algorithm. -! theta - real, input. -! The aggregation threshold used in the aggregation algorithm. -! a - type(psb_cspmat_type), input. -! The sparse matrix structure containing the local part of -! the fine-level matrix. ! desc_a - type(psb_desc_type), input. ! The communication descriptor of the fine-level matrix. ! ilaggr - integer, dimension(:), allocatable. diff --git a/mlprec/impl/aggregator/mld_c_soc1_map_bld.f90 b/mlprec/impl/aggregator/mld_c_soc1_map_bld.f90 index 2a1da3a3..2262bb7e 100644 --- a/mlprec/impl/aggregator/mld_c_soc1_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_c_soc1_map_bld.f90 @@ -46,9 +46,9 @@ ! ! M. Brezina and P. Vanek, A black-box iterative solver based on a ! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! ! Note: upon exit ! @@ -71,7 +71,7 @@ subroutine mld_c_soc1_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info) use psb_base_mod use mld_base_prec_type - use mld_c_inner_mod!, mld_protect_name => mld_c_soc1_map_bld + use mld_c_inner_mod implicit none diff --git a/mlprec/impl/aggregator/mld_c_soc2_map_bld.f90 b/mlprec/impl/aggregator/mld_c_soc2_map_bld.f90 index 8617af87..43caf38f 100644 --- a/mlprec/impl/aggregator/mld_c_soc2_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_c_soc2_map_bld.f90 @@ -70,7 +70,7 @@ subroutine mld_c_soc2_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info) use psb_base_mod use mld_base_prec_type - use mld_c_inner_mod!, mld_protect_name => mld_c_soc2_map_bld + use mld_c_inner_mod implicit none diff --git a/mlprec/impl/aggregator/mld_c_symdec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_c_symdec_aggregator_tprol.f90 index 19a115fc..256223f6 100644 --- a/mlprec/impl/aggregator/mld_c_symdec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_c_symdec_aggregator_tprol.f90 @@ -44,15 +44,16 @@ ! This routine is mainly an interface to map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple -! integer mapping. +! integer mapping. It also symmetrizes the pattern of the local matrix A. ! ! ! ! Arguments: -! p - type(mld_c_onelev_type), input/output. -! The 'one-level' data structure containing the control -! parameters and (eventually) coarse matrix and prolongator/restrictors. -! +! Arguments: +! ag - type(mld_c_dec_aggregator_type), input/output. +! The aggregator object, carrying with itself the mapping algorithm. +! parms - The auxiliary parameters object +! ! a - type(psb_cspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. diff --git a/mlprec/impl/aggregator/mld_caggrmat_biz_asb.f90 b/mlprec/impl/aggregator/mld_caggrmat_biz_asb.f90 index 70dab0a8..3d27c449 100644 --- a/mlprec/impl/aggregator/mld_caggrmat_biz_asb.f90 +++ b/mlprec/impl/aggregator/mld_caggrmat_biz_asb.f90 @@ -49,7 +49,7 @@ ! ! This routine builds A_C according to a "bizarre" aggregation algorithm, ! using a "naive" prolongator proposed by the authors of MLD2P4. However, this -! prolongator still requires a deep analysis and testing and its use is not +! prolongator still requires additional analysis and testing and its use is not ! recommended. ! ! The coarse-level matrix A_C is distributed among the parallel processes or diff --git a/mlprec/impl/aggregator/mld_caggrmat_minnrg_asb.f90 b/mlprec/impl/aggregator/mld_caggrmat_minnrg_asb.f90 index 99653e76..09e8298b 100644 --- a/mlprec/impl/aggregator/mld_caggrmat_minnrg_asb.f90 +++ b/mlprec/impl/aggregator/mld_caggrmat_minnrg_asb.f90 @@ -59,18 +59,13 @@ ! radius of D^(-1)A, to be used in the computation of omega, is provided, ! according to the value of p%parms%aggr_omega_alg, specified by the user ! through mld_cprecinit and mld_cprecset. -! 4. Minimum energy aggregation: ADD REFERENCE. +! 4. Minimum energy aggregation: +! M. Sala, R. Tuminaro: A new Petrov-Galerkin smoothed aggregation preconditioner +! for nonsymmetric linear systems, SIAM J. Sci. Comput., 31(1):143-166 (2008) +! ! On output from this routine the entries of AC, op_prol, op_restr ! are still in "global numbering" mode; this is fixed in the calling routine -! mld_c_lev_aggrmat_asb. -! -! For more details see -! M. Brezina and P. Vanek, A black-box iterative solver based on a two-level -! Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of PSBLAS-based -! parallel two-level Schwarz preconditioners, Appl. Num. Math., 57 (2007), -! 1181-1196. -! +! aggregator%mat_asb. ! ! ! Arguments: @@ -102,7 +97,8 @@ ! The tentative prolongator on input, the computed prolongator on output ! ! op_restr - type(psb_cspmat_type), output -! The restrictor operator; normally, it is the transpose of the prolongator. +! The restrictor operator; in this particular case, it is different +! from the transpose of the prolongator. ! ! info - integer, output. ! Error code. diff --git a/mlprec/impl/aggregator/mld_caggrmat_nosmth_asb.f90 b/mlprec/impl/aggregator/mld_caggrmat_nosmth_asb.f90 index 587e844f..4224e209 100644 --- a/mlprec/impl/aggregator/mld_caggrmat_nosmth_asb.f90 +++ b/mlprec/impl/aggregator/mld_caggrmat_nosmth_asb.f90 @@ -53,7 +53,7 @@ ! specified by the user through mld_cprecinit and mld_zprecset. ! On output from this routine the entries of AC, op_prol, op_restr ! are still in "global numbering" mode; this is fixed in the calling routine -! mld_c_lev_aggrmat_asb. +! aggregator%mat_asb. ! ! For details see ! P. D'Ambra, D. di Serafino and S. Filippone, On the development of diff --git a/mlprec/impl/aggregator/mld_d_dec_aggregator_mat_asb.f90 b/mlprec/impl/aggregator/mld_d_dec_aggregator_mat_asb.f90 index 925dccde..4004c189 100644 --- a/mlprec/impl/aggregator/mld_d_dec_aggregator_mat_asb.f90 +++ b/mlprec/impl/aggregator/mld_d_dec_aggregator_mat_asb.f90 @@ -83,6 +83,9 @@ ! For more details see ! M. Brezina and P. Vanek, A black-box iterative solver based on a two-level ! Schwarz method, Computing, 63 (1999), 233-263. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! P. D'Ambra, D. di Serafino and S. Filippone, On the development of PSBLAS-based ! parallel two-level Schwarz preconditioners, Appl. Num. Math., 57 (2007), ! 1181-1196. diff --git a/mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 index 1d85eceb..d38e021d 100644 --- a/mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 @@ -47,10 +47,10 @@ ! ! ! Arguments: -! p - type(mld_d_onelev_type), input/output. -! The 'one-level' data structure containing the control -! parameters and (eventually) coarse matrix and prolongator/restrictors. -! +! ag - type(mld_d_dec_aggregator_type), input/output. +! The aggregator object, carrying with itself the mapping algorithm. +! parms - The auxiliary parameters object +! ! a - type(psb_dspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. diff --git a/mlprec/impl/aggregator/mld_d_map_to_tprol.f90 b/mlprec/impl/aggregator/mld_d_map_to_tprol.f90 index 8e213e5a..dd8b1447 100644 --- a/mlprec/impl/aggregator/mld_d_map_to_tprol.f90 +++ b/mlprec/impl/aggregator/mld_d_map_to_tprol.f90 @@ -60,13 +60,6 @@ ! ! ! Arguments: -! aggr_type - integer, input. -! The scalar used to identify the aggregation algorithm. -! theta - real, input. -! The aggregation threshold used in the aggregation algorithm. -! a - type(psb_dspmat_type), input. -! The sparse matrix structure containing the local part of -! the fine-level matrix. ! desc_a - type(psb_desc_type), input. ! The communication descriptor of the fine-level matrix. ! ilaggr - integer, dimension(:), allocatable. diff --git a/mlprec/impl/aggregator/mld_d_soc1_map_bld.f90 b/mlprec/impl/aggregator/mld_d_soc1_map_bld.f90 index e092eb31..a8b8f72f 100644 --- a/mlprec/impl/aggregator/mld_d_soc1_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_d_soc1_map_bld.f90 @@ -46,9 +46,9 @@ ! ! M. Brezina and P. Vanek, A black-box iterative solver based on a ! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! ! Note: upon exit ! @@ -71,7 +71,7 @@ subroutine mld_d_soc1_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info) use psb_base_mod use mld_base_prec_type - use mld_d_inner_mod!, mld_protect_name => mld_d_soc1_map_bld + use mld_d_inner_mod implicit none diff --git a/mlprec/impl/aggregator/mld_d_soc2_map_bld.f90 b/mlprec/impl/aggregator/mld_d_soc2_map_bld.f90 index 1a26222c..307426bf 100644 --- a/mlprec/impl/aggregator/mld_d_soc2_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_d_soc2_map_bld.f90 @@ -70,7 +70,7 @@ subroutine mld_d_soc2_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info) use psb_base_mod use mld_base_prec_type - use mld_d_inner_mod!, mld_protect_name => mld_d_soc2_map_bld + use mld_d_inner_mod implicit none diff --git a/mlprec/impl/aggregator/mld_d_symdec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_d_symdec_aggregator_tprol.f90 index 10a6d14f..12466c00 100644 --- a/mlprec/impl/aggregator/mld_d_symdec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_d_symdec_aggregator_tprol.f90 @@ -44,15 +44,16 @@ ! This routine is mainly an interface to map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple -! integer mapping. +! integer mapping. It also symmetrizes the pattern of the local matrix A. ! ! ! ! Arguments: -! p - type(mld_d_onelev_type), input/output. -! The 'one-level' data structure containing the control -! parameters and (eventually) coarse matrix and prolongator/restrictors. -! +! Arguments: +! ag - type(mld_d_dec_aggregator_type), input/output. +! The aggregator object, carrying with itself the mapping algorithm. +! parms - The auxiliary parameters object +! ! a - type(psb_dspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. diff --git a/mlprec/impl/aggregator/mld_daggrmat_biz_asb.f90 b/mlprec/impl/aggregator/mld_daggrmat_biz_asb.f90 index bd71ae90..d1bb1233 100644 --- a/mlprec/impl/aggregator/mld_daggrmat_biz_asb.f90 +++ b/mlprec/impl/aggregator/mld_daggrmat_biz_asb.f90 @@ -49,7 +49,7 @@ ! ! This routine builds A_C according to a "bizarre" aggregation algorithm, ! using a "naive" prolongator proposed by the authors of MLD2P4. However, this -! prolongator still requires a deep analysis and testing and its use is not +! prolongator still requires additional analysis and testing and its use is not ! recommended. ! ! The coarse-level matrix A_C is distributed among the parallel processes or diff --git a/mlprec/impl/aggregator/mld_daggrmat_minnrg_asb.f90 b/mlprec/impl/aggregator/mld_daggrmat_minnrg_asb.f90 index 5c379417..1b33ae3b 100644 --- a/mlprec/impl/aggregator/mld_daggrmat_minnrg_asb.f90 +++ b/mlprec/impl/aggregator/mld_daggrmat_minnrg_asb.f90 @@ -59,18 +59,13 @@ ! radius of D^(-1)A, to be used in the computation of omega, is provided, ! according to the value of p%parms%aggr_omega_alg, specified by the user ! through mld_dprecinit and mld_dprecset. -! 4. Minimum energy aggregation: ADD REFERENCE. +! 4. Minimum energy aggregation: +! M. Sala, R. Tuminaro: A new Petrov-Galerkin smoothed aggregation preconditioner +! for nonsymmetric linear systems, SIAM J. Sci. Comput., 31(1):143-166 (2008) +! ! On output from this routine the entries of AC, op_prol, op_restr ! are still in "global numbering" mode; this is fixed in the calling routine -! mld_d_lev_aggrmat_asb. -! -! For more details see -! M. Brezina and P. Vanek, A black-box iterative solver based on a two-level -! Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of PSBLAS-based -! parallel two-level Schwarz preconditioners, Appl. Num. Math., 57 (2007), -! 1181-1196. -! +! aggregator%mat_asb. ! ! ! Arguments: @@ -102,7 +97,8 @@ ! The tentative prolongator on input, the computed prolongator on output ! ! op_restr - type(psb_dspmat_type), output -! The restrictor operator; normally, it is the transpose of the prolongator. +! The restrictor operator; in this particular case, it is different +! from the transpose of the prolongator. ! ! info - integer, output. ! Error code. diff --git a/mlprec/impl/aggregator/mld_daggrmat_nosmth_asb.f90 b/mlprec/impl/aggregator/mld_daggrmat_nosmth_asb.f90 index 0ac0a4b8..15bbb30a 100644 --- a/mlprec/impl/aggregator/mld_daggrmat_nosmth_asb.f90 +++ b/mlprec/impl/aggregator/mld_daggrmat_nosmth_asb.f90 @@ -53,7 +53,7 @@ ! specified by the user through mld_dprecinit and mld_zprecset. ! On output from this routine the entries of AC, op_prol, op_restr ! are still in "global numbering" mode; this is fixed in the calling routine -! mld_d_lev_aggrmat_asb. +! aggregator%mat_asb. ! ! For details see ! P. D'Ambra, D. di Serafino and S. Filippone, On the development of diff --git a/mlprec/impl/aggregator/mld_s_dec_aggregator_mat_asb.f90 b/mlprec/impl/aggregator/mld_s_dec_aggregator_mat_asb.f90 index 7f9fb61e..38160c08 100644 --- a/mlprec/impl/aggregator/mld_s_dec_aggregator_mat_asb.f90 +++ b/mlprec/impl/aggregator/mld_s_dec_aggregator_mat_asb.f90 @@ -83,6 +83,9 @@ ! For more details see ! M. Brezina and P. Vanek, A black-box iterative solver based on a two-level ! Schwarz method, Computing, 63 (1999), 233-263. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! P. D'Ambra, D. di Serafino and S. Filippone, On the development of PSBLAS-based ! parallel two-level Schwarz preconditioners, Appl. Num. Math., 57 (2007), ! 1181-1196. diff --git a/mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 index 074d5ac5..8ab80eb3 100644 --- a/mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 @@ -47,10 +47,10 @@ ! ! ! Arguments: -! p - type(mld_s_onelev_type), input/output. -! The 'one-level' data structure containing the control -! parameters and (eventually) coarse matrix and prolongator/restrictors. -! +! ag - type(mld_s_dec_aggregator_type), input/output. +! The aggregator object, carrying with itself the mapping algorithm. +! parms - The auxiliary parameters object +! ! a - type(psb_sspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. diff --git a/mlprec/impl/aggregator/mld_s_map_to_tprol.f90 b/mlprec/impl/aggregator/mld_s_map_to_tprol.f90 index 72076f35..ee1bc70e 100644 --- a/mlprec/impl/aggregator/mld_s_map_to_tprol.f90 +++ b/mlprec/impl/aggregator/mld_s_map_to_tprol.f90 @@ -60,13 +60,6 @@ ! ! ! Arguments: -! aggr_type - integer, input. -! The scalar used to identify the aggregation algorithm. -! theta - real, input. -! The aggregation threshold used in the aggregation algorithm. -! a - type(psb_sspmat_type), input. -! The sparse matrix structure containing the local part of -! the fine-level matrix. ! desc_a - type(psb_desc_type), input. ! The communication descriptor of the fine-level matrix. ! ilaggr - integer, dimension(:), allocatable. diff --git a/mlprec/impl/aggregator/mld_s_soc1_map_bld.f90 b/mlprec/impl/aggregator/mld_s_soc1_map_bld.f90 index 9b41e81f..32522ee4 100644 --- a/mlprec/impl/aggregator/mld_s_soc1_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_s_soc1_map_bld.f90 @@ -46,9 +46,9 @@ ! ! M. Brezina and P. Vanek, A black-box iterative solver based on a ! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! ! Note: upon exit ! @@ -71,7 +71,7 @@ subroutine mld_s_soc1_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info) use psb_base_mod use mld_base_prec_type - use mld_s_inner_mod!, mld_protect_name => mld_s_soc1_map_bld + use mld_s_inner_mod implicit none diff --git a/mlprec/impl/aggregator/mld_s_soc2_map_bld.f90 b/mlprec/impl/aggregator/mld_s_soc2_map_bld.f90 index 58268e10..2629e3c5 100644 --- a/mlprec/impl/aggregator/mld_s_soc2_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_s_soc2_map_bld.f90 @@ -70,7 +70,7 @@ subroutine mld_s_soc2_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info) use psb_base_mod use mld_base_prec_type - use mld_s_inner_mod!, mld_protect_name => mld_s_soc2_map_bld + use mld_s_inner_mod implicit none diff --git a/mlprec/impl/aggregator/mld_s_symdec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_s_symdec_aggregator_tprol.f90 index b4d2b7b0..7f493c55 100644 --- a/mlprec/impl/aggregator/mld_s_symdec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_s_symdec_aggregator_tprol.f90 @@ -44,15 +44,16 @@ ! This routine is mainly an interface to map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple -! integer mapping. +! integer mapping. It also symmetrizes the pattern of the local matrix A. ! ! ! ! Arguments: -! p - type(mld_s_onelev_type), input/output. -! The 'one-level' data structure containing the control -! parameters and (eventually) coarse matrix and prolongator/restrictors. -! +! Arguments: +! ag - type(mld_s_dec_aggregator_type), input/output. +! The aggregator object, carrying with itself the mapping algorithm. +! parms - The auxiliary parameters object +! ! a - type(psb_sspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. diff --git a/mlprec/impl/aggregator/mld_saggrmat_biz_asb.f90 b/mlprec/impl/aggregator/mld_saggrmat_biz_asb.f90 index 4bab263a..d7027abf 100644 --- a/mlprec/impl/aggregator/mld_saggrmat_biz_asb.f90 +++ b/mlprec/impl/aggregator/mld_saggrmat_biz_asb.f90 @@ -49,7 +49,7 @@ ! ! This routine builds A_C according to a "bizarre" aggregation algorithm, ! using a "naive" prolongator proposed by the authors of MLD2P4. However, this -! prolongator still requires a deep analysis and testing and its use is not +! prolongator still requires additional analysis and testing and its use is not ! recommended. ! ! The coarse-level matrix A_C is distributed among the parallel processes or diff --git a/mlprec/impl/aggregator/mld_saggrmat_minnrg_asb.f90 b/mlprec/impl/aggregator/mld_saggrmat_minnrg_asb.f90 index fb1476f2..0f293e00 100644 --- a/mlprec/impl/aggregator/mld_saggrmat_minnrg_asb.f90 +++ b/mlprec/impl/aggregator/mld_saggrmat_minnrg_asb.f90 @@ -59,18 +59,13 @@ ! radius of D^(-1)A, to be used in the computation of omega, is provided, ! according to the value of p%parms%aggr_omega_alg, specified by the user ! through mld_sprecinit and mld_sprecset. -! 4. Minimum energy aggregation: ADD REFERENCE. +! 4. Minimum energy aggregation: +! M. Sala, R. Tuminaro: A new Petrov-Galerkin smoothed aggregation preconditioner +! for nonsymmetric linear systems, SIAM J. Sci. Comput., 31(1):143-166 (2008) +! ! On output from this routine the entries of AC, op_prol, op_restr ! are still in "global numbering" mode; this is fixed in the calling routine -! mld_s_lev_aggrmat_asb. -! -! For more details see -! M. Brezina and P. Vanek, A black-box iterative solver based on a two-level -! Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of PSBLAS-based -! parallel two-level Schwarz preconditioners, Appl. Num. Math., 57 (2007), -! 1181-1196. -! +! aggregator%mat_asb. ! ! ! Arguments: @@ -102,7 +97,8 @@ ! The tentative prolongator on input, the computed prolongator on output ! ! op_restr - type(psb_sspmat_type), output -! The restrictor operator; normally, it is the transpose of the prolongator. +! The restrictor operator; in this particular case, it is different +! from the transpose of the prolongator. ! ! info - integer, output. ! Error code. diff --git a/mlprec/impl/aggregator/mld_saggrmat_nosmth_asb.f90 b/mlprec/impl/aggregator/mld_saggrmat_nosmth_asb.f90 index 4400bbda..e588982c 100644 --- a/mlprec/impl/aggregator/mld_saggrmat_nosmth_asb.f90 +++ b/mlprec/impl/aggregator/mld_saggrmat_nosmth_asb.f90 @@ -53,7 +53,7 @@ ! specified by the user through mld_sprecinit and mld_zprecset. ! On output from this routine the entries of AC, op_prol, op_restr ! are still in "global numbering" mode; this is fixed in the calling routine -! mld_s_lev_aggrmat_asb. +! aggregator%mat_asb. ! ! For details see ! P. D'Ambra, D. di Serafino and S. Filippone, On the development of diff --git a/mlprec/impl/aggregator/mld_z_dec_aggregator_mat_asb.f90 b/mlprec/impl/aggregator/mld_z_dec_aggregator_mat_asb.f90 index 3dc53964..a709179d 100644 --- a/mlprec/impl/aggregator/mld_z_dec_aggregator_mat_asb.f90 +++ b/mlprec/impl/aggregator/mld_z_dec_aggregator_mat_asb.f90 @@ -83,6 +83,9 @@ ! For more details see ! M. Brezina and P. Vanek, A black-box iterative solver based on a two-level ! Schwarz method, Computing, 63 (1999), 233-263. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! P. D'Ambra, D. di Serafino and S. Filippone, On the development of PSBLAS-based ! parallel two-level Schwarz preconditioners, Appl. Num. Math., 57 (2007), ! 1181-1196. diff --git a/mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 index 446f6c1c..ccd0dcbc 100644 --- a/mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 @@ -47,10 +47,10 @@ ! ! ! Arguments: -! p - type(mld_z_onelev_type), input/output. -! The 'one-level' data structure containing the control -! parameters and (eventually) coarse matrix and prolongator/restrictors. -! +! ag - type(mld_z_dec_aggregator_type), input/output. +! The aggregator object, carrying with itself the mapping algorithm. +! parms - The auxiliary parameters object +! ! a - type(psb_zspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. diff --git a/mlprec/impl/aggregator/mld_z_map_to_tprol.f90 b/mlprec/impl/aggregator/mld_z_map_to_tprol.f90 index a56a3286..0a757ea1 100644 --- a/mlprec/impl/aggregator/mld_z_map_to_tprol.f90 +++ b/mlprec/impl/aggregator/mld_z_map_to_tprol.f90 @@ -60,13 +60,6 @@ ! ! ! Arguments: -! aggr_type - integer, input. -! The scalar used to identify the aggregation algorithm. -! theta - real, input. -! The aggregation threshold used in the aggregation algorithm. -! a - type(psb_zspmat_type), input. -! The sparse matrix structure containing the local part of -! the fine-level matrix. ! desc_a - type(psb_desc_type), input. ! The communication descriptor of the fine-level matrix. ! ilaggr - integer, dimension(:), allocatable. diff --git a/mlprec/impl/aggregator/mld_z_soc1_map_bld.f90 b/mlprec/impl/aggregator/mld_z_soc1_map_bld.f90 index e6243f36..9019c640 100644 --- a/mlprec/impl/aggregator/mld_z_soc1_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_z_soc1_map_bld.f90 @@ -46,9 +46,9 @@ ! ! M. Brezina and P. Vanek, A black-box iterative solver based on a ! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! ! Note: upon exit ! @@ -71,7 +71,7 @@ subroutine mld_z_soc1_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info) use psb_base_mod use mld_base_prec_type - use mld_z_inner_mod!, mld_protect_name => mld_z_soc1_map_bld + use mld_z_inner_mod implicit none diff --git a/mlprec/impl/aggregator/mld_z_soc2_map_bld.f90 b/mlprec/impl/aggregator/mld_z_soc2_map_bld.f90 index 9bcec3be..c87e4fee 100644 --- a/mlprec/impl/aggregator/mld_z_soc2_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_z_soc2_map_bld.f90 @@ -70,7 +70,7 @@ subroutine mld_z_soc2_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info) use psb_base_mod use mld_base_prec_type - use mld_z_inner_mod!, mld_protect_name => mld_z_soc2_map_bld + use mld_z_inner_mod implicit none diff --git a/mlprec/impl/aggregator/mld_z_symdec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_z_symdec_aggregator_tprol.f90 index 3f15ea3b..17c5c962 100644 --- a/mlprec/impl/aggregator/mld_z_symdec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_z_symdec_aggregator_tprol.f90 @@ -44,15 +44,16 @@ ! This routine is mainly an interface to map_bld where the real work is performed. ! It takes care of some consistency checking, and calls map_to_tprol, which is ! refactored and shared among all the aggregation methods that produce a simple -! integer mapping. +! integer mapping. It also symmetrizes the pattern of the local matrix A. ! ! ! ! Arguments: -! p - type(mld_z_onelev_type), input/output. -! The 'one-level' data structure containing the control -! parameters and (eventually) coarse matrix and prolongator/restrictors. -! +! Arguments: +! ag - type(mld_z_dec_aggregator_type), input/output. +! The aggregator object, carrying with itself the mapping algorithm. +! parms - The auxiliary parameters object +! ! a - type(psb_zspmat_type). ! The sparse matrix structure containing the local part of the ! fine-level matrix. diff --git a/mlprec/impl/aggregator/mld_zaggrmat_biz_asb.f90 b/mlprec/impl/aggregator/mld_zaggrmat_biz_asb.f90 index e5afeb84..d39b9c26 100644 --- a/mlprec/impl/aggregator/mld_zaggrmat_biz_asb.f90 +++ b/mlprec/impl/aggregator/mld_zaggrmat_biz_asb.f90 @@ -49,7 +49,7 @@ ! ! This routine builds A_C according to a "bizarre" aggregation algorithm, ! using a "naive" prolongator proposed by the authors of MLD2P4. However, this -! prolongator still requires a deep analysis and testing and its use is not +! prolongator still requires additional analysis and testing and its use is not ! recommended. ! ! The coarse-level matrix A_C is distributed among the parallel processes or diff --git a/mlprec/impl/aggregator/mld_zaggrmat_minnrg_asb.f90 b/mlprec/impl/aggregator/mld_zaggrmat_minnrg_asb.f90 index 42b25005..8f121c6a 100644 --- a/mlprec/impl/aggregator/mld_zaggrmat_minnrg_asb.f90 +++ b/mlprec/impl/aggregator/mld_zaggrmat_minnrg_asb.f90 @@ -59,18 +59,13 @@ ! radius of D^(-1)A, to be used in the computation of omega, is provided, ! according to the value of p%parms%aggr_omega_alg, specified by the user ! through mld_zprecinit and mld_zprecset. -! 4. Minimum energy aggregation: ADD REFERENCE. +! 4. Minimum energy aggregation: +! M. Sala, R. Tuminaro: A new Petrov-Galerkin smoothed aggregation preconditioner +! for nonsymmetric linear systems, SIAM J. Sci. Comput., 31(1):143-166 (2008) +! ! On output from this routine the entries of AC, op_prol, op_restr ! are still in "global numbering" mode; this is fixed in the calling routine -! mld_z_lev_aggrmat_asb. -! -! For more details see -! M. Brezina and P. Vanek, A black-box iterative solver based on a two-level -! Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of PSBLAS-based -! parallel two-level Schwarz preconditioners, Appl. Num. Math., 57 (2007), -! 1181-1196. -! +! aggregator%mat_asb. ! ! ! Arguments: @@ -102,7 +97,8 @@ ! The tentative prolongator on input, the computed prolongator on output ! ! op_restr - type(psb_zspmat_type), output -! The restrictor operator; normally, it is the transpose of the prolongator. +! The restrictor operator; in this particular case, it is different +! from the transpose of the prolongator. ! ! info - integer, output. ! Error code. diff --git a/mlprec/impl/aggregator/mld_zaggrmat_nosmth_asb.f90 b/mlprec/impl/aggregator/mld_zaggrmat_nosmth_asb.f90 index 6d3eca1a..30a8502b 100644 --- a/mlprec/impl/aggregator/mld_zaggrmat_nosmth_asb.f90 +++ b/mlprec/impl/aggregator/mld_zaggrmat_nosmth_asb.f90 @@ -53,7 +53,7 @@ ! specified by the user through mld_zprecinit and mld_zprecset. ! On output from this routine the entries of AC, op_prol, op_restr ! are still in "global numbering" mode; this is fixed in the calling routine -! mld_z_lev_aggrmat_asb. +! aggregator%mat_asb. ! ! For details see ! P. D'Ambra, D. di Serafino and S. Filippone, On the development of diff --git a/mlprec/mld_c_base_aggregator_mod.f90 b/mlprec/mld_c_base_aggregator_mod.f90 index bd738f68..b089cccb 100644 --- a/mlprec/mld_c_base_aggregator_mod.f90 +++ b/mlprec/mld_c_base_aggregator_mod.f90 @@ -226,7 +226,7 @@ contains !! The mapping is store in ILAGGR; for each local row index I, !! ILAGGR(I) contains the index of the aggregate to which index I !! will contribute, in global numbering. - !! Many aggregation produce a binary tentative prolongators, but some + !! Many aggregation produce a binary tentative prolongator, but some !! do not, hence we also need the OP_PROL output. !! !! \param ag The input aggregator object diff --git a/mlprec/mld_c_dec_aggregator_mod.f90 b/mlprec/mld_c_dec_aggregator_mod.f90 index c0085c7d..3d21c09c 100644 --- a/mlprec/mld_c_dec_aggregator_mod.f90 +++ b/mlprec/mld_c_dec_aggregator_mod.f90 @@ -34,59 +34,45 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! -! -! -! -! The aggregator object hosts the aggregation method for building -! the multilevel hierarchy. -! +! Basic (decoupled) aggregation algorithm. Based on the ideas in ! M. Brezina and P. Vanek, A black-box iterative solver based on a ! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! module mld_c_dec_aggregator_mod use mld_c_base_aggregator_mod - ! - ! sm - class(mld_T_base_smoother_type), allocatable - ! The current level preconditioner (aka smoother). - ! parms - type(mld_RTml_parms) - ! The parameters defining the multilevel strategy. - ! ac - The local part of the current-level matrix, built by - ! coarsening the previous-level matrix. - ! desc_ac - type(psb_desc_type). - ! The communication descriptor associated to the matrix - ! stored in ac. - ! base_a - type(psb_Tspmat_type), pointer. - ! Pointer (really a pointer!) to the local part of the current - ! matrix (so we have a unified treatment of residuals). - ! We need this to avoid passing explicitly the current matrix - ! to the routine which applies the preconditioner. - ! base_desc - type(psb_desc_type), pointer. - ! Pointer to the communication descriptor associated to the - ! matrix pointed by base_a. - ! map - Stores the maps (restriction and prolongation) between the - ! vector spaces associated to the index spaces of the previous - ! and current levels. - ! - ! Methods: - ! Most methods follow the encapsulation hierarchy: they take whatever action - ! is appropriate for the current object, then call the corresponding method for - ! the contained object. - ! As an example: the descr() method prints out a description of the - ! level. It starts by invoking the descr() method of the parms object, - ! then calls the descr() method of the smoother object. - ! - ! descr - Prints a description of the object. - ! default - Set default values - ! dump - Dump to file object contents - ! set - Sets various parameters; when a request is unknown - ! it is passed to the smoother object for further processing. - ! check - Sanity checks. - ! sizeof - Total memory occupation in bytes - ! get_nzeros - Number of nonzeros + !> \namespace mld_c_dec_aggregator_mod \class mld_c_dec_aggregator_type + !! \extends mld_c_base_aggregator_mod::mld_c_base_aggregator_type + !! + !! type, extends(mld_c_base_aggregator_type) :: mld_c_dec_aggregator_type + !! procedure(mld_c_map_bld), nopass, pointer :: map_bld => null() + !! end type + !! + !! This is the simplest aggregation method: starting from the + !! strength-of-connection measure for defining the aggregation + !! presented in + !! + !! M. Brezina and P. Vanek, A black-box iterative solver based on a + !! two-level Schwarz method, Computing, 63 (1999), 233-263. + !! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed + !! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 + !! (1996), 179-196. + !! + !! it achieves parallelization by simply acting on the local matrix, + !! i.e. by "decoupling" the subdomains. + !! The data structure hosts a "map_bld" function pointer which allows to + !! choose other ways to measure "strength-of-connection", of which the + !! Vanek-Brezina-Mandel is the default. More details are available in + !! + !! P. D'Ambra, D. di Serafino and S. Filippone, On the development of + !! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. + !! 57 (2007), 1181-1196. + !! + !! The map_bld method is used inside the implementation of build_tprol + !! ! ! type, extends(mld_c_base_aggregator_type) :: mld_c_dec_aggregator_type diff --git a/mlprec/mld_c_symdec_aggregator_mod.f90 b/mlprec/mld_c_symdec_aggregator_mod.f90 index 00e9c497..f9436ddf 100644 --- a/mlprec/mld_c_symdec_aggregator_mod.f90 +++ b/mlprec/mld_c_symdec_aggregator_mod.f90 @@ -37,59 +37,20 @@ ! ! ! -! The aggregator object hosts the aggregation method for building -! the multilevel hierarchy. This version only differs from the -! basic decoupled aggregation algorithm because it works on (the -! pattern of) A+A^T instead of A. +! Locally symmetrized (decoupled) aggregation algorithm. +! This version differs from the basic decoupled aggregation algorithm +! only because it works on (the pattern of) A+A^T instead of A. ! -! M. Brezina and P. Vanek, A black-box iterative solver based on a -! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. ! module mld_c_symdec_aggregator_mod use mld_c_dec_aggregator_mod - ! - ! sm - class(mld_T_base_smoother_type), allocatable - ! The current level preconditioner (aka smoother). - ! parms - type(mld_RTml_parms) - ! The parameters defining the multilevel strategy. - ! ac - The local part of the current-level matrix, built by - ! coarsening the previous-level matrix. - ! desc_ac - type(psb_desc_type). - ! The communication descriptor associated to the matrix - ! stored in ac. - ! base_a - type(psb_Tspmat_type), pointer. - ! Pointer (really a pointer!) to the local part of the current - ! matrix (so we have a unified treatment of residuals). - ! We need this to avoid passing explicitly the current matrix - ! to the routine which applies the preconditioner. - ! base_desc - type(psb_desc_type), pointer. - ! Pointer to the communication descriptor associated to the - ! matrix pointed by base_a. - ! map - Stores the maps (restriction and prolongation) between the - ! vector spaces associated to the index spaces of the previous - ! and current levels. - ! - ! Methods: - ! Most methods follow the encapsulation hierarchy: they take whatever action - ! is appropriate for the current object, then call the corresponding method for - ! the contained object. - ! As an example: the descr() method prints out a description of the - ! level. It starts by invoking the descr() method of the parms object, - ! then calls the descr() method of the smoother object. - ! - ! descr - Prints a description of the object. - ! default - Set default values - ! dump - Dump to file object contents - ! set - Sets various parameters; when a request is unknown - ! it is passed to the smoother object for further processing. - ! check - Sanity checks. - ! sizeof - Total memory occupation in bytes - ! get_nzeros - Number of nonzeros - ! + !> \namespace mld_c_symdec_aggregator_mod \class mld_c_symdec_aggregator_type + !! \extends mld_c_dec_aggregator_mod::mld_c_dec_aggregator_type + !! + !! This version differs from the basic decoupled aggregation algorithm + !! only because it works on (the pattern of) A+A^T instead of A. + !! ! type, extends(mld_c_dec_aggregator_type) :: mld_c_symdec_aggregator_type diff --git a/mlprec/mld_d_base_aggregator_mod.f90 b/mlprec/mld_d_base_aggregator_mod.f90 index 7f55f6bb..5e154f80 100644 --- a/mlprec/mld_d_base_aggregator_mod.f90 +++ b/mlprec/mld_d_base_aggregator_mod.f90 @@ -226,7 +226,7 @@ contains !! The mapping is store in ILAGGR; for each local row index I, !! ILAGGR(I) contains the index of the aggregate to which index I !! will contribute, in global numbering. - !! Many aggregation produce a binary tentative prolongators, but some + !! Many aggregation produce a binary tentative prolongator, but some !! do not, hence we also need the OP_PROL output. !! !! \param ag The input aggregator object diff --git a/mlprec/mld_d_dec_aggregator_mod.f90 b/mlprec/mld_d_dec_aggregator_mod.f90 index 9e3780f6..5d9b63b7 100644 --- a/mlprec/mld_d_dec_aggregator_mod.f90 +++ b/mlprec/mld_d_dec_aggregator_mod.f90 @@ -34,59 +34,45 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! -! -! -! -! The aggregator object hosts the aggregation method for building -! the multilevel hierarchy. -! +! Basic (decoupled) aggregation algorithm. Based on the ideas in ! M. Brezina and P. Vanek, A black-box iterative solver based on a ! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! module mld_d_dec_aggregator_mod use mld_d_base_aggregator_mod - ! - ! sm - class(mld_T_base_smoother_type), allocatable - ! The current level preconditioner (aka smoother). - ! parms - type(mld_RTml_parms) - ! The parameters defining the multilevel strategy. - ! ac - The local part of the current-level matrix, built by - ! coarsening the previous-level matrix. - ! desc_ac - type(psb_desc_type). - ! The communication descriptor associated to the matrix - ! stored in ac. - ! base_a - type(psb_Tspmat_type), pointer. - ! Pointer (really a pointer!) to the local part of the current - ! matrix (so we have a unified treatment of residuals). - ! We need this to avoid passing explicitly the current matrix - ! to the routine which applies the preconditioner. - ! base_desc - type(psb_desc_type), pointer. - ! Pointer to the communication descriptor associated to the - ! matrix pointed by base_a. - ! map - Stores the maps (restriction and prolongation) between the - ! vector spaces associated to the index spaces of the previous - ! and current levels. - ! - ! Methods: - ! Most methods follow the encapsulation hierarchy: they take whatever action - ! is appropriate for the current object, then call the corresponding method for - ! the contained object. - ! As an example: the descr() method prints out a description of the - ! level. It starts by invoking the descr() method of the parms object, - ! then calls the descr() method of the smoother object. - ! - ! descr - Prints a description of the object. - ! default - Set default values - ! dump - Dump to file object contents - ! set - Sets various parameters; when a request is unknown - ! it is passed to the smoother object for further processing. - ! check - Sanity checks. - ! sizeof - Total memory occupation in bytes - ! get_nzeros - Number of nonzeros + !> \namespace mld_d_dec_aggregator_mod \class mld_d_dec_aggregator_type + !! \extends mld_d_base_aggregator_mod::mld_d_base_aggregator_type + !! + !! type, extends(mld_d_base_aggregator_type) :: mld_d_dec_aggregator_type + !! procedure(mld_d_map_bld), nopass, pointer :: map_bld => null() + !! end type + !! + !! This is the simplest aggregation method: starting from the + !! strength-of-connection measure for defining the aggregation + !! presented in + !! + !! M. Brezina and P. Vanek, A black-box iterative solver based on a + !! two-level Schwarz method, Computing, 63 (1999), 233-263. + !! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed + !! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 + !! (1996), 179-196. + !! + !! it achieves parallelization by simply acting on the local matrix, + !! i.e. by "decoupling" the subdomains. + !! The data structure hosts a "map_bld" function pointer which allows to + !! choose other ways to measure "strength-of-connection", of which the + !! Vanek-Brezina-Mandel is the default. More details are available in + !! + !! P. D'Ambra, D. di Serafino and S. Filippone, On the development of + !! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. + !! 57 (2007), 1181-1196. + !! + !! The map_bld method is used inside the implementation of build_tprol + !! ! ! type, extends(mld_d_base_aggregator_type) :: mld_d_dec_aggregator_type diff --git a/mlprec/mld_d_symdec_aggregator_mod.f90 b/mlprec/mld_d_symdec_aggregator_mod.f90 index 234342ec..2ec8f933 100644 --- a/mlprec/mld_d_symdec_aggregator_mod.f90 +++ b/mlprec/mld_d_symdec_aggregator_mod.f90 @@ -37,59 +37,20 @@ ! ! ! -! The aggregator object hosts the aggregation method for building -! the multilevel hierarchy. This version only differs from the -! basic decoupled aggregation algorithm because it works on (the -! pattern of) A+A^T instead of A. +! Locally symmetrized (decoupled) aggregation algorithm. +! This version differs from the basic decoupled aggregation algorithm +! only because it works on (the pattern of) A+A^T instead of A. ! -! M. Brezina and P. Vanek, A black-box iterative solver based on a -! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. ! module mld_d_symdec_aggregator_mod use mld_d_dec_aggregator_mod - ! - ! sm - class(mld_T_base_smoother_type), allocatable - ! The current level preconditioner (aka smoother). - ! parms - type(mld_RTml_parms) - ! The parameters defining the multilevel strategy. - ! ac - The local part of the current-level matrix, built by - ! coarsening the previous-level matrix. - ! desc_ac - type(psb_desc_type). - ! The communication descriptor associated to the matrix - ! stored in ac. - ! base_a - type(psb_Tspmat_type), pointer. - ! Pointer (really a pointer!) to the local part of the current - ! matrix (so we have a unified treatment of residuals). - ! We need this to avoid passing explicitly the current matrix - ! to the routine which applies the preconditioner. - ! base_desc - type(psb_desc_type), pointer. - ! Pointer to the communication descriptor associated to the - ! matrix pointed by base_a. - ! map - Stores the maps (restriction and prolongation) between the - ! vector spaces associated to the index spaces of the previous - ! and current levels. - ! - ! Methods: - ! Most methods follow the encapsulation hierarchy: they take whatever action - ! is appropriate for the current object, then call the corresponding method for - ! the contained object. - ! As an example: the descr() method prints out a description of the - ! level. It starts by invoking the descr() method of the parms object, - ! then calls the descr() method of the smoother object. - ! - ! descr - Prints a description of the object. - ! default - Set default values - ! dump - Dump to file object contents - ! set - Sets various parameters; when a request is unknown - ! it is passed to the smoother object for further processing. - ! check - Sanity checks. - ! sizeof - Total memory occupation in bytes - ! get_nzeros - Number of nonzeros - ! + !> \namespace mld_d_symdec_aggregator_mod \class mld_d_symdec_aggregator_type + !! \extends mld_d_dec_aggregator_mod::mld_d_dec_aggregator_type + !! + !! This version differs from the basic decoupled aggregation algorithm + !! only because it works on (the pattern of) A+A^T instead of A. + !! ! type, extends(mld_d_dec_aggregator_type) :: mld_d_symdec_aggregator_type diff --git a/mlprec/mld_s_base_aggregator_mod.f90 b/mlprec/mld_s_base_aggregator_mod.f90 index 35e38b13..27aafd3d 100644 --- a/mlprec/mld_s_base_aggregator_mod.f90 +++ b/mlprec/mld_s_base_aggregator_mod.f90 @@ -226,7 +226,7 @@ contains !! The mapping is store in ILAGGR; for each local row index I, !! ILAGGR(I) contains the index of the aggregate to which index I !! will contribute, in global numbering. - !! Many aggregation produce a binary tentative prolongators, but some + !! Many aggregation produce a binary tentative prolongator, but some !! do not, hence we also need the OP_PROL output. !! !! \param ag The input aggregator object diff --git a/mlprec/mld_s_dec_aggregator_mod.f90 b/mlprec/mld_s_dec_aggregator_mod.f90 index c440e029..a3944890 100644 --- a/mlprec/mld_s_dec_aggregator_mod.f90 +++ b/mlprec/mld_s_dec_aggregator_mod.f90 @@ -34,59 +34,45 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! -! -! -! -! The aggregator object hosts the aggregation method for building -! the multilevel hierarchy. -! +! Basic (decoupled) aggregation algorithm. Based on the ideas in ! M. Brezina and P. Vanek, A black-box iterative solver based on a ! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! module mld_s_dec_aggregator_mod use mld_s_base_aggregator_mod - ! - ! sm - class(mld_T_base_smoother_type), allocatable - ! The current level preconditioner (aka smoother). - ! parms - type(mld_RTml_parms) - ! The parameters defining the multilevel strategy. - ! ac - The local part of the current-level matrix, built by - ! coarsening the previous-level matrix. - ! desc_ac - type(psb_desc_type). - ! The communication descriptor associated to the matrix - ! stored in ac. - ! base_a - type(psb_Tspmat_type), pointer. - ! Pointer (really a pointer!) to the local part of the current - ! matrix (so we have a unified treatment of residuals). - ! We need this to avoid passing explicitly the current matrix - ! to the routine which applies the preconditioner. - ! base_desc - type(psb_desc_type), pointer. - ! Pointer to the communication descriptor associated to the - ! matrix pointed by base_a. - ! map - Stores the maps (restriction and prolongation) between the - ! vector spaces associated to the index spaces of the previous - ! and current levels. - ! - ! Methods: - ! Most methods follow the encapsulation hierarchy: they take whatever action - ! is appropriate for the current object, then call the corresponding method for - ! the contained object. - ! As an example: the descr() method prints out a description of the - ! level. It starts by invoking the descr() method of the parms object, - ! then calls the descr() method of the smoother object. - ! - ! descr - Prints a description of the object. - ! default - Set default values - ! dump - Dump to file object contents - ! set - Sets various parameters; when a request is unknown - ! it is passed to the smoother object for further processing. - ! check - Sanity checks. - ! sizeof - Total memory occupation in bytes - ! get_nzeros - Number of nonzeros + !> \namespace mld_s_dec_aggregator_mod \class mld_s_dec_aggregator_type + !! \extends mld_s_base_aggregator_mod::mld_s_base_aggregator_type + !! + !! type, extends(mld_s_base_aggregator_type) :: mld_s_dec_aggregator_type + !! procedure(mld_s_map_bld), nopass, pointer :: map_bld => null() + !! end type + !! + !! This is the simplest aggregation method: starting from the + !! strength-of-connection measure for defining the aggregation + !! presented in + !! + !! M. Brezina and P. Vanek, A black-box iterative solver based on a + !! two-level Schwarz method, Computing, 63 (1999), 233-263. + !! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed + !! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 + !! (1996), 179-196. + !! + !! it achieves parallelization by simply acting on the local matrix, + !! i.e. by "decoupling" the subdomains. + !! The data structure hosts a "map_bld" function pointer which allows to + !! choose other ways to measure "strength-of-connection", of which the + !! Vanek-Brezina-Mandel is the default. More details are available in + !! + !! P. D'Ambra, D. di Serafino and S. Filippone, On the development of + !! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. + !! 57 (2007), 1181-1196. + !! + !! The map_bld method is used inside the implementation of build_tprol + !! ! ! type, extends(mld_s_base_aggregator_type) :: mld_s_dec_aggregator_type diff --git a/mlprec/mld_s_symdec_aggregator_mod.f90 b/mlprec/mld_s_symdec_aggregator_mod.f90 index 8e15e1e5..0a750908 100644 --- a/mlprec/mld_s_symdec_aggregator_mod.f90 +++ b/mlprec/mld_s_symdec_aggregator_mod.f90 @@ -37,59 +37,20 @@ ! ! ! -! The aggregator object hosts the aggregation method for building -! the multilevel hierarchy. This version only differs from the -! basic decoupled aggregation algorithm because it works on (the -! pattern of) A+A^T instead of A. +! Locally symmetrized (decoupled) aggregation algorithm. +! This version differs from the basic decoupled aggregation algorithm +! only because it works on (the pattern of) A+A^T instead of A. ! -! M. Brezina and P. Vanek, A black-box iterative solver based on a -! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. ! module mld_s_symdec_aggregator_mod use mld_s_dec_aggregator_mod - ! - ! sm - class(mld_T_base_smoother_type), allocatable - ! The current level preconditioner (aka smoother). - ! parms - type(mld_RTml_parms) - ! The parameters defining the multilevel strategy. - ! ac - The local part of the current-level matrix, built by - ! coarsening the previous-level matrix. - ! desc_ac - type(psb_desc_type). - ! The communication descriptor associated to the matrix - ! stored in ac. - ! base_a - type(psb_Tspmat_type), pointer. - ! Pointer (really a pointer!) to the local part of the current - ! matrix (so we have a unified treatment of residuals). - ! We need this to avoid passing explicitly the current matrix - ! to the routine which applies the preconditioner. - ! base_desc - type(psb_desc_type), pointer. - ! Pointer to the communication descriptor associated to the - ! matrix pointed by base_a. - ! map - Stores the maps (restriction and prolongation) between the - ! vector spaces associated to the index spaces of the previous - ! and current levels. - ! - ! Methods: - ! Most methods follow the encapsulation hierarchy: they take whatever action - ! is appropriate for the current object, then call the corresponding method for - ! the contained object. - ! As an example: the descr() method prints out a description of the - ! level. It starts by invoking the descr() method of the parms object, - ! then calls the descr() method of the smoother object. - ! - ! descr - Prints a description of the object. - ! default - Set default values - ! dump - Dump to file object contents - ! set - Sets various parameters; when a request is unknown - ! it is passed to the smoother object for further processing. - ! check - Sanity checks. - ! sizeof - Total memory occupation in bytes - ! get_nzeros - Number of nonzeros - ! + !> \namespace mld_s_symdec_aggregator_mod \class mld_s_symdec_aggregator_type + !! \extends mld_s_dec_aggregator_mod::mld_s_dec_aggregator_type + !! + !! This version differs from the basic decoupled aggregation algorithm + !! only because it works on (the pattern of) A+A^T instead of A. + !! ! type, extends(mld_s_dec_aggregator_type) :: mld_s_symdec_aggregator_type diff --git a/mlprec/mld_z_base_aggregator_mod.f90 b/mlprec/mld_z_base_aggregator_mod.f90 index d66ed983..9e407514 100644 --- a/mlprec/mld_z_base_aggregator_mod.f90 +++ b/mlprec/mld_z_base_aggregator_mod.f90 @@ -226,7 +226,7 @@ contains !! The mapping is store in ILAGGR; for each local row index I, !! ILAGGR(I) contains the index of the aggregate to which index I !! will contribute, in global numbering. - !! Many aggregation produce a binary tentative prolongators, but some + !! Many aggregation produce a binary tentative prolongator, but some !! do not, hence we also need the OP_PROL output. !! !! \param ag The input aggregator object diff --git a/mlprec/mld_z_dec_aggregator_mod.f90 b/mlprec/mld_z_dec_aggregator_mod.f90 index 68bf7012..d76345d2 100644 --- a/mlprec/mld_z_dec_aggregator_mod.f90 +++ b/mlprec/mld_z_dec_aggregator_mod.f90 @@ -34,59 +34,45 @@ ! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! POSSIBILITY OF SUCH DAMAGE. ! -! -! -! -! The aggregator object hosts the aggregation method for building -! the multilevel hierarchy. -! +! Basic (decoupled) aggregation algorithm. Based on the ideas in ! M. Brezina and P. Vanek, A black-box iterative solver based on a ! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. +! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed +! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 +! (1996), 179-196. ! module mld_z_dec_aggregator_mod use mld_z_base_aggregator_mod - ! - ! sm - class(mld_T_base_smoother_type), allocatable - ! The current level preconditioner (aka smoother). - ! parms - type(mld_RTml_parms) - ! The parameters defining the multilevel strategy. - ! ac - The local part of the current-level matrix, built by - ! coarsening the previous-level matrix. - ! desc_ac - type(psb_desc_type). - ! The communication descriptor associated to the matrix - ! stored in ac. - ! base_a - type(psb_Tspmat_type), pointer. - ! Pointer (really a pointer!) to the local part of the current - ! matrix (so we have a unified treatment of residuals). - ! We need this to avoid passing explicitly the current matrix - ! to the routine which applies the preconditioner. - ! base_desc - type(psb_desc_type), pointer. - ! Pointer to the communication descriptor associated to the - ! matrix pointed by base_a. - ! map - Stores the maps (restriction and prolongation) between the - ! vector spaces associated to the index spaces of the previous - ! and current levels. - ! - ! Methods: - ! Most methods follow the encapsulation hierarchy: they take whatever action - ! is appropriate for the current object, then call the corresponding method for - ! the contained object. - ! As an example: the descr() method prints out a description of the - ! level. It starts by invoking the descr() method of the parms object, - ! then calls the descr() method of the smoother object. - ! - ! descr - Prints a description of the object. - ! default - Set default values - ! dump - Dump to file object contents - ! set - Sets various parameters; when a request is unknown - ! it is passed to the smoother object for further processing. - ! check - Sanity checks. - ! sizeof - Total memory occupation in bytes - ! get_nzeros - Number of nonzeros + !> \namespace mld_z_dec_aggregator_mod \class mld_z_dec_aggregator_type + !! \extends mld_z_base_aggregator_mod::mld_z_base_aggregator_type + !! + !! type, extends(mld_z_base_aggregator_type) :: mld_z_dec_aggregator_type + !! procedure(mld_z_map_bld), nopass, pointer :: map_bld => null() + !! end type + !! + !! This is the simplest aggregation method: starting from the + !! strength-of-connection measure for defining the aggregation + !! presented in + !! + !! M. Brezina and P. Vanek, A black-box iterative solver based on a + !! two-level Schwarz method, Computing, 63 (1999), 233-263. + !! P. Vanek, J. Mandel and M. Brezina, Algebraic Multigrid by Smoothed + !! Aggregation for Second and Fourth Order Elliptic Problems, Computing, 56 + !! (1996), 179-196. + !! + !! it achieves parallelization by simply acting on the local matrix, + !! i.e. by "decoupling" the subdomains. + !! The data structure hosts a "map_bld" function pointer which allows to + !! choose other ways to measure "strength-of-connection", of which the + !! Vanek-Brezina-Mandel is the default. More details are available in + !! + !! P. D'Ambra, D. di Serafino and S. Filippone, On the development of + !! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. + !! 57 (2007), 1181-1196. + !! + !! The map_bld method is used inside the implementation of build_tprol + !! ! ! type, extends(mld_z_base_aggregator_type) :: mld_z_dec_aggregator_type diff --git a/mlprec/mld_z_symdec_aggregator_mod.f90 b/mlprec/mld_z_symdec_aggregator_mod.f90 index e2ef5078..4da6fe6f 100644 --- a/mlprec/mld_z_symdec_aggregator_mod.f90 +++ b/mlprec/mld_z_symdec_aggregator_mod.f90 @@ -37,59 +37,20 @@ ! ! ! -! The aggregator object hosts the aggregation method for building -! the multilevel hierarchy. This version only differs from the -! basic decoupled aggregation algorithm because it works on (the -! pattern of) A+A^T instead of A. +! Locally symmetrized (decoupled) aggregation algorithm. +! This version differs from the basic decoupled aggregation algorithm +! only because it works on (the pattern of) A+A^T instead of A. ! -! M. Brezina and P. Vanek, A black-box iterative solver based on a -! two-level Schwarz method, Computing, 63 (1999), 233-263. -! P. D'Ambra, D. di Serafino and S. Filippone, On the development of -! PSBLAS-based parallel two-level Schwarz preconditioners, Appl. Num. Math. -! 57 (2007), 1181-1196. ! module mld_z_symdec_aggregator_mod use mld_z_dec_aggregator_mod - ! - ! sm - class(mld_T_base_smoother_type), allocatable - ! The current level preconditioner (aka smoother). - ! parms - type(mld_RTml_parms) - ! The parameters defining the multilevel strategy. - ! ac - The local part of the current-level matrix, built by - ! coarsening the previous-level matrix. - ! desc_ac - type(psb_desc_type). - ! The communication descriptor associated to the matrix - ! stored in ac. - ! base_a - type(psb_Tspmat_type), pointer. - ! Pointer (really a pointer!) to the local part of the current - ! matrix (so we have a unified treatment of residuals). - ! We need this to avoid passing explicitly the current matrix - ! to the routine which applies the preconditioner. - ! base_desc - type(psb_desc_type), pointer. - ! Pointer to the communication descriptor associated to the - ! matrix pointed by base_a. - ! map - Stores the maps (restriction and prolongation) between the - ! vector spaces associated to the index spaces of the previous - ! and current levels. - ! - ! Methods: - ! Most methods follow the encapsulation hierarchy: they take whatever action - ! is appropriate for the current object, then call the corresponding method for - ! the contained object. - ! As an example: the descr() method prints out a description of the - ! level. It starts by invoking the descr() method of the parms object, - ! then calls the descr() method of the smoother object. - ! - ! descr - Prints a description of the object. - ! default - Set default values - ! dump - Dump to file object contents - ! set - Sets various parameters; when a request is unknown - ! it is passed to the smoother object for further processing. - ! check - Sanity checks. - ! sizeof - Total memory occupation in bytes - ! get_nzeros - Number of nonzeros - ! + !> \namespace mld_z_symdec_aggregator_mod \class mld_z_symdec_aggregator_type + !! \extends mld_z_dec_aggregator_mod::mld_z_dec_aggregator_type + !! + !! This version differs from the basic decoupled aggregation algorithm + !! only because it works on (the pattern of) A+A^T instead of A. + !! ! type, extends(mld_z_dec_aggregator_type) :: mld_z_symdec_aggregator_type