From 3c58dfaefdb1df8b7d06a05d7bbe643f20af7f5a Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 23 Oct 2018 14:09:36 +0100 Subject: [PATCH 1/2] Fix typo in description. --- mlprec/mld_c_base_aggregator_mod.f90 | 2 +- mlprec/mld_d_base_aggregator_mod.f90 | 2 +- mlprec/mld_s_base_aggregator_mod.f90 | 2 +- mlprec/mld_z_base_aggregator_mod.f90 | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mlprec/mld_c_base_aggregator_mod.f90 b/mlprec/mld_c_base_aggregator_mod.f90 index ebf096c2..f06f418b 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_d_base_aggregator_mod.f90 b/mlprec/mld_d_base_aggregator_mod.f90 index 93700360..2e9fdbd0 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_s_base_aggregator_mod.f90 b/mlprec/mld_s_base_aggregator_mod.f90 index 20fd2c11..6aa2d3fc 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_z_base_aggregator_mod.f90 b/mlprec/mld_z_base_aggregator_mod.f90 index 5f400319..a1756af9 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 From 73823102a246b500b3059d6881c49c7345b4d399 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 23 Oct 2018 15:41:01 +0100 Subject: [PATCH 2/2] Added internal documentation. Take out obsolete methods. --- .../mld_c_dec_aggregator_mat_asb.f90 | 3 + .../aggregator/mld_c_dec_aggregator_tprol.f90 | 8 +- mlprec/impl/aggregator/mld_c_map_to_tprol.f90 | 7 -- mlprec/impl/aggregator/mld_c_soc1_map_bld.f90 | 8 +- mlprec/impl/aggregator/mld_c_soc2_map_bld.f90 | 2 +- .../mld_c_symdec_aggregator_tprol.f90 | 11 +-- .../impl/aggregator/mld_caggrmat_biz_asb.f90 | 2 +- .../aggregator/mld_caggrmat_minnrg_asb.f90 | 18 ++--- .../aggregator/mld_caggrmat_nosmth_asb.f90 | 2 +- .../mld_d_dec_aggregator_mat_asb.f90 | 3 + .../aggregator/mld_d_dec_aggregator_tprol.f90 | 8 +- mlprec/impl/aggregator/mld_d_map_to_tprol.f90 | 7 -- mlprec/impl/aggregator/mld_d_soc1_map_bld.f90 | 8 +- mlprec/impl/aggregator/mld_d_soc2_map_bld.f90 | 2 +- .../mld_d_symdec_aggregator_tprol.f90 | 11 +-- .../impl/aggregator/mld_daggrmat_biz_asb.f90 | 2 +- .../aggregator/mld_daggrmat_minnrg_asb.f90 | 18 ++--- .../aggregator/mld_daggrmat_nosmth_asb.f90 | 2 +- .../mld_s_dec_aggregator_mat_asb.f90 | 3 + .../aggregator/mld_s_dec_aggregator_tprol.f90 | 8 +- mlprec/impl/aggregator/mld_s_map_to_tprol.f90 | 7 -- mlprec/impl/aggregator/mld_s_soc1_map_bld.f90 | 8 +- mlprec/impl/aggregator/mld_s_soc2_map_bld.f90 | 2 +- .../mld_s_symdec_aggregator_tprol.f90 | 11 +-- .../impl/aggregator/mld_saggrmat_biz_asb.f90 | 2 +- .../aggregator/mld_saggrmat_minnrg_asb.f90 | 18 ++--- .../aggregator/mld_saggrmat_nosmth_asb.f90 | 2 +- .../mld_z_dec_aggregator_mat_asb.f90 | 3 + .../aggregator/mld_z_dec_aggregator_tprol.f90 | 8 +- mlprec/impl/aggregator/mld_z_map_to_tprol.f90 | 7 -- mlprec/impl/aggregator/mld_z_soc1_map_bld.f90 | 8 +- mlprec/impl/aggregator/mld_z_soc2_map_bld.f90 | 2 +- .../mld_z_symdec_aggregator_tprol.f90 | 11 +-- .../impl/aggregator/mld_zaggrmat_biz_asb.f90 | 2 +- .../aggregator/mld_zaggrmat_minnrg_asb.f90 | 18 ++--- .../aggregator/mld_zaggrmat_nosmth_asb.f90 | 2 +- mlprec/mld_c_dec_aggregator_mod.f90 | 80 ++++++++----------- mlprec/mld_c_symdec_aggregator_mod.f90 | 57 +++---------- mlprec/mld_d_dec_aggregator_mod.f90 | 80 ++++++++----------- mlprec/mld_d_symdec_aggregator_mod.f90 | 57 +++---------- mlprec/mld_s_dec_aggregator_mod.f90 | 80 ++++++++----------- mlprec/mld_s_symdec_aggregator_mod.f90 | 57 +++---------- mlprec/mld_z_dec_aggregator_mod.f90 | 80 ++++++++----------- mlprec/mld_z_symdec_aggregator_mod.f90 | 57 +++---------- 44 files changed, 276 insertions(+), 516 deletions(-) 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 0cce1101..2e9e6c4d 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 efe66b9a..17d3e5e4 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 28ac347a..8a537c14 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 50440770..3e28e2f4 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 7ceb36fc..231963ba 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 594831f4..cbd84b77 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 4944df2a..0b754d41 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 60be7674..d1af7fa3 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 c029b562..6b5953ec 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 9f14fad1..8389339f 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 15a5c2c7..90adfb92 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 a8a53826..f930fc80 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 9b999c74..4e84da4d 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 2f57abb9..5397e77f 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 b3079bdf..04a4174b 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 76d266d8..e15ec223 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 391aefe1..e200c0bc 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 09989846..daa320a3 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 e632f8fa..f4030c0e 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 02552a10..69b7f647 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 8d237d34..e7cb7f83 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 7c36341e..74cffe30 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 9e0a95cd..aa566431 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 a19f5344..ec9fc187 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 93b3be0b..e29b2f50 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 6ceb0874..1c6caabf 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 6678f775..dc0cfebf 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 6d85871b..88b5391c 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 aeac2317..4c7b5b5b 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 d01b2e75..540fb0ad 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 06bc77b1..acb53d76 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 590c3d37..5c96240e 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 eb619419..12dd1e53 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 297ea046..76ad6564 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 71add989..8505f61c 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 27677ac4..d6905cb0 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_dec_aggregator_mod.f90 b/mlprec/mld_c_dec_aggregator_mod.f90 index e933494c..42728468 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 a3dd8fb9..f01faa57 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_dec_aggregator_mod.f90 b/mlprec/mld_d_dec_aggregator_mod.f90 index 3fa0247f..fdaf9afe 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 dfc03c90..4b64085a 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_dec_aggregator_mod.f90 b/mlprec/mld_s_dec_aggregator_mod.f90 index ccd4b1d6..f344a1ba 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 dd7ffb62..6ef4d684 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_dec_aggregator_mod.f90 b/mlprec/mld_z_dec_aggregator_mod.f90 index 10989e0f..223bf085 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 1397a532..46b208f1 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