From 7aadb73bd6d6c1a2d1b13ac33b592aa2bdfdc718 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Thu, 10 May 2018 14:00:47 +0100 Subject: [PATCH] New inheritance structure for aggregator object. --- mlprec/impl/aggregator/Makefile | 16 ++-- ...b.f90 => mld_c_dec_aggregator_mat_asb.f90} | 16 ++-- ...rol.f90 => mld_c_dec_aggregator_tprol.f90} | 14 +-- ...b.f90 => mld_d_dec_aggregator_mat_asb.f90} | 16 ++-- ...rol.f90 => mld_d_dec_aggregator_tprol.f90} | 14 +-- ...b.f90 => mld_s_dec_aggregator_mat_asb.f90} | 16 ++-- ...rol.f90 => mld_s_dec_aggregator_tprol.f90} | 14 +-- ...b.f90 => mld_z_dec_aggregator_mat_asb.f90} | 16 ++-- ...rol.f90 => mld_z_dec_aggregator_tprol.f90} | 14 +-- mlprec/impl/level/mld_c_base_onelev_cseti.F90 | 23 +++++ mlprec/impl/level/mld_c_base_onelev_seti.F90 | 23 +++++ mlprec/impl/level/mld_d_base_onelev_cseti.F90 | 23 +++++ mlprec/impl/level/mld_d_base_onelev_seti.F90 | 23 +++++ mlprec/impl/level/mld_s_base_onelev_cseti.F90 | 23 +++++ mlprec/impl/level/mld_s_base_onelev_seti.F90 | 23 +++++ mlprec/impl/level/mld_z_base_onelev_cseti.F90 | 23 +++++ mlprec/impl/level/mld_z_base_onelev_seti.F90 | 23 +++++ mlprec/mld_base_prec_type.F90 | 58 +++++++----- mlprec/mld_c_base_aggregator_mod.f90 | 94 ++++++++++++------- mlprec/mld_c_onelev_mod.f90 | 2 +- mlprec/mld_c_symdec_aggregator_mod.f90 | 4 +- mlprec/mld_d_base_aggregator_mod.f90 | 94 ++++++++++++------- mlprec/mld_d_onelev_mod.f90 | 2 +- mlprec/mld_d_symdec_aggregator_mod.f90 | 4 +- mlprec/mld_s_base_aggregator_mod.f90 | 94 ++++++++++++------- mlprec/mld_s_onelev_mod.f90 | 2 +- mlprec/mld_s_symdec_aggregator_mod.f90 | 4 +- mlprec/mld_z_base_aggregator_mod.f90 | 94 ++++++++++++------- mlprec/mld_z_onelev_mod.f90 | 2 +- mlprec/mld_z_symdec_aggregator_mod.f90 | 4 +- 30 files changed, 540 insertions(+), 238 deletions(-) rename mlprec/impl/aggregator/{mld_c_base_aggregator_mat_asb.f90 => mld_c_dec_aggregator_mat_asb.f90} (94%) rename mlprec/impl/aggregator/{mld_c_base_aggregator_tprol.f90 => mld_c_dec_aggregator_tprol.f90} (92%) rename mlprec/impl/aggregator/{mld_d_base_aggregator_mat_asb.f90 => mld_d_dec_aggregator_mat_asb.f90} (94%) rename mlprec/impl/aggregator/{mld_d_base_aggregator_tprol.f90 => mld_d_dec_aggregator_tprol.f90} (92%) rename mlprec/impl/aggregator/{mld_s_base_aggregator_mat_asb.f90 => mld_s_dec_aggregator_mat_asb.f90} (94%) rename mlprec/impl/aggregator/{mld_s_base_aggregator_tprol.f90 => mld_s_dec_aggregator_tprol.f90} (92%) rename mlprec/impl/aggregator/{mld_z_base_aggregator_mat_asb.f90 => mld_z_dec_aggregator_mat_asb.f90} (94%) rename mlprec/impl/aggregator/{mld_z_base_aggregator_tprol.f90 => mld_z_dec_aggregator_tprol.f90} (92%) diff --git a/mlprec/impl/aggregator/Makefile b/mlprec/impl/aggregator/Makefile index b1f2e402..ba217c1c 100644 --- a/mlprec/impl/aggregator/Makefile +++ b/mlprec/impl/aggregator/Makefile @@ -9,29 +9,29 @@ FINCLUDES=$(FMFLAG)$(HERE) $(FMFLAG)$(MODDIR) $(FMFLAG)$(INCDIR) $(PSBLAS_INCLUD #CINCLUDES= -I${SUPERLU_INCDIR} -I${HSL_INCDIR} -I${SPRAL_INCDIR} -I/home/users/pasqua/Ambra/BootCMatch/include -lBCM -L/home/users/pasqua/Ambra/BootCMatch/lib -lm OBJS= \ -mld_s_base_aggregator_mat_asb.o \ -mld_s_base_aggregator_tprol.o \ +mld_s_dec_aggregator_mat_asb.o \ +mld_s_dec_aggregator_tprol.o \ mld_s_hybrid_aggregator_tprol.o \ mld_s_symdec_aggregator_tprol.o \ mld_s_map_to_tprol.o mld_s_dec_map_bld.o mld_s_hyb_map_bld.o\ mld_saggrmat_biz_asb.o mld_saggrmat_minnrg_asb.o\ mld_saggrmat_nosmth_asb.o mld_saggrmat_smth_asb.o \ -mld_d_base_aggregator_mat_asb.o \ -mld_d_base_aggregator_tprol.o \ +mld_d_dec_aggregator_mat_asb.o \ +mld_d_dec_aggregator_tprol.o \ mld_d_hybrid_aggregator_tprol.o \ mld_d_symdec_aggregator_tprol.o \ mld_d_map_to_tprol.o mld_d_dec_map_bld.o mld_d_hyb_map_bld.o\ mld_daggrmat_biz_asb.o mld_daggrmat_minnrg_asb.o\ mld_daggrmat_nosmth_asb.o mld_daggrmat_smth_asb.o \ -mld_c_base_aggregator_mat_asb.o \ -mld_c_base_aggregator_tprol.o \ +mld_c_dec_aggregator_mat_asb.o \ +mld_c_dec_aggregator_tprol.o \ mld_c_hybrid_aggregator_tprol.o \ mld_c_symdec_aggregator_tprol.o \ mld_c_map_to_tprol.o mld_c_dec_map_bld.o mld_c_hyb_map_bld.o\ mld_caggrmat_biz_asb.o mld_caggrmat_minnrg_asb.o\ mld_caggrmat_nosmth_asb.o mld_caggrmat_smth_asb.o \ -mld_z_base_aggregator_mat_asb.o \ -mld_z_base_aggregator_tprol.o \ +mld_z_dec_aggregator_mat_asb.o \ +mld_z_dec_aggregator_tprol.o \ mld_z_hybrid_aggregator_tprol.o \ mld_z_symdec_aggregator_tprol.o \ mld_z_map_to_tprol.o mld_z_dec_map_bld.o mld_z_hyb_map_bld.o\ diff --git a/mlprec/impl/aggregator/mld_c_base_aggregator_mat_asb.f90 b/mlprec/impl/aggregator/mld_c_dec_aggregator_mat_asb.f90 similarity index 94% rename from mlprec/impl/aggregator/mld_c_base_aggregator_mat_asb.f90 rename to mlprec/impl/aggregator/mld_c_dec_aggregator_mat_asb.f90 index 69ca7c2e..0cce1101 100644 --- a/mlprec/impl/aggregator/mld_c_base_aggregator_mat_asb.f90 +++ b/mlprec/impl/aggregator/mld_c_dec_aggregator_mat_asb.f90 @@ -35,9 +35,9 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: mld_c_base_aggregator_mat_asb.f90 +! File: mld_c_dec_aggregator_mat_asb.f90 ! -! Subroutine: mld_c_base_aggregator_mat_asb +! Subroutine: mld_c_dec_aggregator_mat_asb ! Version: complex ! ! This routine builds the matrix associated to the current level of the @@ -96,7 +96,7 @@ ! ! ! Arguments: -! ag - type(mld_c_base_aggregator_type), input/output. +! ag - type(mld_c_dec_aggregator_type), input/output. ! The aggregator object ! parms - type(mld_sml_parms), input ! The aggregation parameters @@ -130,13 +130,13 @@ ! info - integer, output. ! Error code. ! -subroutine mld_c_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_prol,op_restr,info) +subroutine mld_c_dec_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_prol,op_restr,info) use psb_base_mod - use mld_c_prec_type, mld_protect_name => mld_c_base_aggregator_mat_asb + use mld_c_prec_type, mld_protect_name => mld_c_dec_aggregator_mat_asb use mld_c_inner_mod implicit none - class(mld_c_base_aggregator_type), target, intent(inout) :: ag + class(mld_c_dec_aggregator_type), target, intent(inout) :: ag type(mld_sml_parms), intent(inout) :: parms type(psb_cspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -154,7 +154,7 @@ subroutine mld_c_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_ integer(psb_ipk_) :: err_act integer(psb_ipk_) :: debug_level, debug_unit - name='mld_c_base_aggregator_mat_asb' + name='mld_c_dec_aggregator_mat_asb' if (psb_get_errstatus().ne.0) return call psb_erractionsave(err_act) debug_unit = psb_get_debug_unit() @@ -208,4 +208,4 @@ subroutine mld_c_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_ return -end subroutine mld_c_base_aggregator_mat_asb +end subroutine mld_c_dec_aggregator_mat_asb diff --git a/mlprec/impl/aggregator/mld_c_base_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 similarity index 92% rename from mlprec/impl/aggregator/mld_c_base_aggregator_tprol.f90 rename to mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 index 345ffcd1..cd978972 100644 --- a/mlprec/impl/aggregator/mld_c_base_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 @@ -35,9 +35,9 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: mld_c_base_aggregator_tprol.f90 +! File: mld_c_dec_aggregator_tprol.f90 ! -! Subroutine: mld_c_base_aggregator_tprol +! Subroutine: mld_c_dec_aggregator_tprol ! Version: complex ! ! This routine is mainly an interface to dec_map_bld where the real work is performed. @@ -72,12 +72,12 @@ ! info - integer, output. ! Error code. ! -subroutine mld_c_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) +subroutine mld_c_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) use psb_base_mod - use mld_c_prec_type, mld_protect_name => mld_c_base_aggregator_build_tprol + use mld_c_prec_type, mld_protect_name => mld_c_dec_aggregator_build_tprol use mld_c_inner_mod implicit none - class(mld_c_base_aggregator_type), target, intent(inout) :: ag + class(mld_c_dec_aggregator_type), target, intent(inout) :: ag type(mld_sml_parms), intent(inout) :: parms type(psb_cspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -92,7 +92,7 @@ subroutine mld_c_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op integer(psb_ipk_) :: ntaggr integer(psb_ipk_) :: debug_level, debug_unit - name='mld_c_base_aggregator_tprol' + name='mld_c_dec_aggregator_tprol' if (psb_get_errstatus().ne.0) return call psb_erractionsave(err_act) debug_unit = psb_get_debug_unit() @@ -125,4 +125,4 @@ subroutine mld_c_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op 9999 call psb_error_handler(err_act) return -end subroutine mld_c_base_aggregator_build_tprol +end subroutine mld_c_dec_aggregator_build_tprol diff --git a/mlprec/impl/aggregator/mld_d_base_aggregator_mat_asb.f90 b/mlprec/impl/aggregator/mld_d_dec_aggregator_mat_asb.f90 similarity index 94% rename from mlprec/impl/aggregator/mld_d_base_aggregator_mat_asb.f90 rename to mlprec/impl/aggregator/mld_d_dec_aggregator_mat_asb.f90 index 36ab21b0..9f14fad1 100644 --- a/mlprec/impl/aggregator/mld_d_base_aggregator_mat_asb.f90 +++ b/mlprec/impl/aggregator/mld_d_dec_aggregator_mat_asb.f90 @@ -35,9 +35,9 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: mld_d_base_aggregator_mat_asb.f90 +! File: mld_d_dec_aggregator_mat_asb.f90 ! -! Subroutine: mld_d_base_aggregator_mat_asb +! Subroutine: mld_d_dec_aggregator_mat_asb ! Version: real ! ! This routine builds the matrix associated to the current level of the @@ -96,7 +96,7 @@ ! ! ! Arguments: -! ag - type(mld_d_base_aggregator_type), input/output. +! ag - type(mld_d_dec_aggregator_type), input/output. ! The aggregator object ! parms - type(mld_dml_parms), input ! The aggregation parameters @@ -130,13 +130,13 @@ ! info - integer, output. ! Error code. ! -subroutine mld_d_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_prol,op_restr,info) +subroutine mld_d_dec_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_prol,op_restr,info) use psb_base_mod - use mld_d_prec_type, mld_protect_name => mld_d_base_aggregator_mat_asb + use mld_d_prec_type, mld_protect_name => mld_d_dec_aggregator_mat_asb use mld_d_inner_mod implicit none - class(mld_d_base_aggregator_type), target, intent(inout) :: ag + class(mld_d_dec_aggregator_type), target, intent(inout) :: ag type(mld_dml_parms), intent(inout) :: parms type(psb_dspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -154,7 +154,7 @@ subroutine mld_d_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_ integer(psb_ipk_) :: err_act integer(psb_ipk_) :: debug_level, debug_unit - name='mld_d_base_aggregator_mat_asb' + name='mld_d_dec_aggregator_mat_asb' if (psb_get_errstatus().ne.0) return call psb_erractionsave(err_act) debug_unit = psb_get_debug_unit() @@ -208,4 +208,4 @@ subroutine mld_d_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_ return -end subroutine mld_d_base_aggregator_mat_asb +end subroutine mld_d_dec_aggregator_mat_asb diff --git a/mlprec/impl/aggregator/mld_d_base_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 similarity index 92% rename from mlprec/impl/aggregator/mld_d_base_aggregator_tprol.f90 rename to mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 index 354a94da..a919f55b 100644 --- a/mlprec/impl/aggregator/mld_d_base_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 @@ -35,9 +35,9 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: mld_d_base_aggregator_tprol.f90 +! File: mld_d_dec_aggregator_tprol.f90 ! -! Subroutine: mld_d_base_aggregator_tprol +! Subroutine: mld_d_dec_aggregator_tprol ! Version: real ! ! This routine is mainly an interface to dec_map_bld where the real work is performed. @@ -72,12 +72,12 @@ ! info - integer, output. ! Error code. ! -subroutine mld_d_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) +subroutine mld_d_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) use psb_base_mod - use mld_d_prec_type, mld_protect_name => mld_d_base_aggregator_build_tprol + use mld_d_prec_type, mld_protect_name => mld_d_dec_aggregator_build_tprol use mld_d_inner_mod implicit none - class(mld_d_base_aggregator_type), target, intent(inout) :: ag + class(mld_d_dec_aggregator_type), target, intent(inout) :: ag type(mld_dml_parms), intent(inout) :: parms type(psb_dspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -92,7 +92,7 @@ subroutine mld_d_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op integer(psb_ipk_) :: ntaggr integer(psb_ipk_) :: debug_level, debug_unit - name='mld_d_base_aggregator_tprol' + name='mld_d_dec_aggregator_tprol' if (psb_get_errstatus().ne.0) return call psb_erractionsave(err_act) debug_unit = psb_get_debug_unit() @@ -125,4 +125,4 @@ subroutine mld_d_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op 9999 call psb_error_handler(err_act) return -end subroutine mld_d_base_aggregator_build_tprol +end subroutine mld_d_dec_aggregator_build_tprol diff --git a/mlprec/impl/aggregator/mld_s_base_aggregator_mat_asb.f90 b/mlprec/impl/aggregator/mld_s_dec_aggregator_mat_asb.f90 similarity index 94% rename from mlprec/impl/aggregator/mld_s_base_aggregator_mat_asb.f90 rename to mlprec/impl/aggregator/mld_s_dec_aggregator_mat_asb.f90 index a77e8412..e632f8fa 100644 --- a/mlprec/impl/aggregator/mld_s_base_aggregator_mat_asb.f90 +++ b/mlprec/impl/aggregator/mld_s_dec_aggregator_mat_asb.f90 @@ -35,9 +35,9 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: mld_s_base_aggregator_mat_asb.f90 +! File: mld_s_dec_aggregator_mat_asb.f90 ! -! Subroutine: mld_s_base_aggregator_mat_asb +! Subroutine: mld_s_dec_aggregator_mat_asb ! Version: real ! ! This routine builds the matrix associated to the current level of the @@ -96,7 +96,7 @@ ! ! ! Arguments: -! ag - type(mld_s_base_aggregator_type), input/output. +! ag - type(mld_s_dec_aggregator_type), input/output. ! The aggregator object ! parms - type(mld_sml_parms), input ! The aggregation parameters @@ -130,13 +130,13 @@ ! info - integer, output. ! Error code. ! -subroutine mld_s_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_prol,op_restr,info) +subroutine mld_s_dec_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_prol,op_restr,info) use psb_base_mod - use mld_s_prec_type, mld_protect_name => mld_s_base_aggregator_mat_asb + use mld_s_prec_type, mld_protect_name => mld_s_dec_aggregator_mat_asb use mld_s_inner_mod implicit none - class(mld_s_base_aggregator_type), target, intent(inout) :: ag + class(mld_s_dec_aggregator_type), target, intent(inout) :: ag type(mld_sml_parms), intent(inout) :: parms type(psb_sspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -154,7 +154,7 @@ subroutine mld_s_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_ integer(psb_ipk_) :: err_act integer(psb_ipk_) :: debug_level, debug_unit - name='mld_s_base_aggregator_mat_asb' + name='mld_s_dec_aggregator_mat_asb' if (psb_get_errstatus().ne.0) return call psb_erractionsave(err_act) debug_unit = psb_get_debug_unit() @@ -208,4 +208,4 @@ subroutine mld_s_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_ return -end subroutine mld_s_base_aggregator_mat_asb +end subroutine mld_s_dec_aggregator_mat_asb diff --git a/mlprec/impl/aggregator/mld_s_base_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 similarity index 92% rename from mlprec/impl/aggregator/mld_s_base_aggregator_tprol.f90 rename to mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 index ca4b40dd..78bce133 100644 --- a/mlprec/impl/aggregator/mld_s_base_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 @@ -35,9 +35,9 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: mld_s_base_aggregator_tprol.f90 +! File: mld_s_dec_aggregator_tprol.f90 ! -! Subroutine: mld_s_base_aggregator_tprol +! Subroutine: mld_s_dec_aggregator_tprol ! Version: real ! ! This routine is mainly an interface to dec_map_bld where the real work is performed. @@ -72,12 +72,12 @@ ! info - integer, output. ! Error code. ! -subroutine mld_s_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) +subroutine mld_s_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) use psb_base_mod - use mld_s_prec_type, mld_protect_name => mld_s_base_aggregator_build_tprol + use mld_s_prec_type, mld_protect_name => mld_s_dec_aggregator_build_tprol use mld_s_inner_mod implicit none - class(mld_s_base_aggregator_type), target, intent(inout) :: ag + class(mld_s_dec_aggregator_type), target, intent(inout) :: ag type(mld_sml_parms), intent(inout) :: parms type(psb_sspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -92,7 +92,7 @@ subroutine mld_s_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op integer(psb_ipk_) :: ntaggr integer(psb_ipk_) :: debug_level, debug_unit - name='mld_s_base_aggregator_tprol' + name='mld_s_dec_aggregator_tprol' if (psb_get_errstatus().ne.0) return call psb_erractionsave(err_act) debug_unit = psb_get_debug_unit() @@ -125,4 +125,4 @@ subroutine mld_s_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op 9999 call psb_error_handler(err_act) return -end subroutine mld_s_base_aggregator_build_tprol +end subroutine mld_s_dec_aggregator_build_tprol diff --git a/mlprec/impl/aggregator/mld_z_base_aggregator_mat_asb.f90 b/mlprec/impl/aggregator/mld_z_dec_aggregator_mat_asb.f90 similarity index 94% rename from mlprec/impl/aggregator/mld_z_base_aggregator_mat_asb.f90 rename to mlprec/impl/aggregator/mld_z_dec_aggregator_mat_asb.f90 index f7d4a926..6d85871b 100644 --- a/mlprec/impl/aggregator/mld_z_base_aggregator_mat_asb.f90 +++ b/mlprec/impl/aggregator/mld_z_dec_aggregator_mat_asb.f90 @@ -35,9 +35,9 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: mld_z_base_aggregator_mat_asb.f90 +! File: mld_z_dec_aggregator_mat_asb.f90 ! -! Subroutine: mld_z_base_aggregator_mat_asb +! Subroutine: mld_z_dec_aggregator_mat_asb ! Version: complex ! ! This routine builds the matrix associated to the current level of the @@ -96,7 +96,7 @@ ! ! ! Arguments: -! ag - type(mld_z_base_aggregator_type), input/output. +! ag - type(mld_z_dec_aggregator_type), input/output. ! The aggregator object ! parms - type(mld_dml_parms), input ! The aggregation parameters @@ -130,13 +130,13 @@ ! info - integer, output. ! Error code. ! -subroutine mld_z_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_prol,op_restr,info) +subroutine mld_z_dec_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_prol,op_restr,info) use psb_base_mod - use mld_z_prec_type, mld_protect_name => mld_z_base_aggregator_mat_asb + use mld_z_prec_type, mld_protect_name => mld_z_dec_aggregator_mat_asb use mld_z_inner_mod implicit none - class(mld_z_base_aggregator_type), target, intent(inout) :: ag + class(mld_z_dec_aggregator_type), target, intent(inout) :: ag type(mld_dml_parms), intent(inout) :: parms type(psb_zspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -154,7 +154,7 @@ subroutine mld_z_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_ integer(psb_ipk_) :: err_act integer(psb_ipk_) :: debug_level, debug_unit - name='mld_z_base_aggregator_mat_asb' + name='mld_z_dec_aggregator_mat_asb' if (psb_get_errstatus().ne.0) return call psb_erractionsave(err_act) debug_unit = psb_get_debug_unit() @@ -208,4 +208,4 @@ subroutine mld_z_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,op_ return -end subroutine mld_z_base_aggregator_mat_asb +end subroutine mld_z_dec_aggregator_mat_asb diff --git a/mlprec/impl/aggregator/mld_z_base_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 similarity index 92% rename from mlprec/impl/aggregator/mld_z_base_aggregator_tprol.f90 rename to mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 index 4522bd8d..cc3f23cb 100644 --- a/mlprec/impl/aggregator/mld_z_base_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 @@ -35,9 +35,9 @@ ! POSSIBILITY OF SUCH DAMAGE. ! ! -! File: mld_z_base_aggregator_tprol.f90 +! File: mld_z_dec_aggregator_tprol.f90 ! -! Subroutine: mld_z_base_aggregator_tprol +! Subroutine: mld_z_dec_aggregator_tprol ! Version: complex ! ! This routine is mainly an interface to dec_map_bld where the real work is performed. @@ -72,12 +72,12 @@ ! info - integer, output. ! Error code. ! -subroutine mld_z_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) +subroutine mld_z_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) use psb_base_mod - use mld_z_prec_type, mld_protect_name => mld_z_base_aggregator_build_tprol + use mld_z_prec_type, mld_protect_name => mld_z_dec_aggregator_build_tprol use mld_z_inner_mod implicit none - class(mld_z_base_aggregator_type), target, intent(inout) :: ag + class(mld_z_dec_aggregator_type), target, intent(inout) :: ag type(mld_dml_parms), intent(inout) :: parms type(psb_zspmat_type), intent(in) :: a type(psb_desc_type), intent(in) :: desc_a @@ -92,7 +92,7 @@ subroutine mld_z_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op integer(psb_ipk_) :: ntaggr integer(psb_ipk_) :: debug_level, debug_unit - name='mld_z_base_aggregator_tprol' + name='mld_z_dec_aggregator_tprol' if (psb_get_errstatus().ne.0) return call psb_erractionsave(err_act) debug_unit = psb_get_debug_unit() @@ -125,4 +125,4 @@ subroutine mld_z_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op 9999 call psb_error_handler(err_act) return -end subroutine mld_z_base_aggregator_build_tprol +end subroutine mld_z_dec_aggregator_build_tprol diff --git a/mlprec/impl/level/mld_c_base_onelev_cseti.F90 b/mlprec/impl/level/mld_c_base_onelev_cseti.F90 index ea1ecc8e..48e98d7d 100644 --- a/mlprec/impl/level/mld_c_base_onelev_cseti.F90 +++ b/mlprec/impl/level/mld_c_base_onelev_cseti.F90 @@ -39,6 +39,10 @@ subroutine mld_c_base_onelev_cseti(lv,what,val,info,pos) use psb_base_mod use mld_c_onelev_mod, mld_protect_name => mld_c_base_onelev_cseti + use mld_c_base_aggregator_mod + use mld_c_dec_aggregator_mod + use mld_c_symdec_aggregator_mod + use mld_c_hybrid_aggregator_mod use mld_c_jac_smoother use mld_c_as_smoother use mld_c_diag_solver @@ -182,6 +186,25 @@ subroutine mld_c_base_onelev_cseti(lv,what,val,info,pos) case ('PAR_AGGR_ALG') lv%parms%par_aggr_alg = val + if (allocated(lv%aggr)) then + call lv%aggr%free(info) + if (info == 0) deallocate(lv%aggr,stat=info) + if (info /= 0) then + info = psb_err_internal_error_ + return + end if + end if + + select case(val) + case(mld_dec_aggr_) + allocate(mld_c_dec_aggregator_type :: lv%aggr, stat=info) + case(mld_sym_dec_aggr_) + allocate(mld_c_symdec_aggregator_type :: lv%aggr, stat=info) + case(mld_hybrid_aggr_) + allocate(mld_c_hybrid_aggregator_type :: lv%aggr, stat=info) + case default + info = psb_err_internal_error_ + end select case ('AGGR_ORD') lv%parms%aggr_ord = val diff --git a/mlprec/impl/level/mld_c_base_onelev_seti.F90 b/mlprec/impl/level/mld_c_base_onelev_seti.F90 index 27cceaa0..dcaa19dc 100644 --- a/mlprec/impl/level/mld_c_base_onelev_seti.F90 +++ b/mlprec/impl/level/mld_c_base_onelev_seti.F90 @@ -39,6 +39,10 @@ subroutine mld_c_base_onelev_seti(lv,what,val,info,pos) use psb_base_mod use mld_c_onelev_mod, mld_protect_name => mld_c_base_onelev_seti + use mld_c_base_aggregator_mod + use mld_c_dec_aggregator_mod + use mld_c_symdec_aggregator_mod + use mld_c_hybrid_aggregator_mod use mld_c_jac_smoother use mld_c_as_smoother use mld_c_diag_solver @@ -182,6 +186,25 @@ subroutine mld_c_base_onelev_seti(lv,what,val,info,pos) case (mld_par_aggr_alg_) lv%parms%par_aggr_alg = val + if (allocated(lv%aggr)) then + call lv%aggr%free(info) + if (info == 0) deallocate(lv%aggr,stat=info) + if (info /= 0) then + info = psb_err_internal_error_ + return + end if + end if + + select case(val) + case(mld_dec_aggr_) + allocate(mld_c_dec_aggregator_type :: lv%aggr, stat=info) + case(mld_sym_dec_aggr_) + allocate(mld_c_symdec_aggregator_type :: lv%aggr, stat=info) + case(mld_hybrid_aggr_) + allocate(mld_c_hybrid_aggregator_type :: lv%aggr, stat=info) + case default + info = psb_err_internal_error_ + end select case (mld_aggr_ord_) lv%parms%aggr_ord = val diff --git a/mlprec/impl/level/mld_d_base_onelev_cseti.F90 b/mlprec/impl/level/mld_d_base_onelev_cseti.F90 index 492eb9fb..a4ca7838 100644 --- a/mlprec/impl/level/mld_d_base_onelev_cseti.F90 +++ b/mlprec/impl/level/mld_d_base_onelev_cseti.F90 @@ -39,6 +39,10 @@ subroutine mld_d_base_onelev_cseti(lv,what,val,info,pos) use psb_base_mod use mld_d_onelev_mod, mld_protect_name => mld_d_base_onelev_cseti + use mld_d_base_aggregator_mod + use mld_d_dec_aggregator_mod + use mld_d_symdec_aggregator_mod + use mld_d_hybrid_aggregator_mod use mld_d_jac_smoother use mld_d_as_smoother use mld_d_diag_solver @@ -202,6 +206,25 @@ subroutine mld_d_base_onelev_cseti(lv,what,val,info,pos) case ('PAR_AGGR_ALG') lv%parms%par_aggr_alg = val + if (allocated(lv%aggr)) then + call lv%aggr%free(info) + if (info == 0) deallocate(lv%aggr,stat=info) + if (info /= 0) then + info = psb_err_internal_error_ + return + end if + end if + + select case(val) + case(mld_dec_aggr_) + allocate(mld_d_dec_aggregator_type :: lv%aggr, stat=info) + case(mld_sym_dec_aggr_) + allocate(mld_d_symdec_aggregator_type :: lv%aggr, stat=info) + case(mld_hybrid_aggr_) + allocate(mld_d_hybrid_aggregator_type :: lv%aggr, stat=info) + case default + info = psb_err_internal_error_ + end select case ('AGGR_ORD') lv%parms%aggr_ord = val diff --git a/mlprec/impl/level/mld_d_base_onelev_seti.F90 b/mlprec/impl/level/mld_d_base_onelev_seti.F90 index 2a3914d0..38610bd1 100644 --- a/mlprec/impl/level/mld_d_base_onelev_seti.F90 +++ b/mlprec/impl/level/mld_d_base_onelev_seti.F90 @@ -39,6 +39,10 @@ subroutine mld_d_base_onelev_seti(lv,what,val,info,pos) use psb_base_mod use mld_d_onelev_mod, mld_protect_name => mld_d_base_onelev_seti + use mld_d_base_aggregator_mod + use mld_d_dec_aggregator_mod + use mld_d_symdec_aggregator_mod + use mld_d_hybrid_aggregator_mod use mld_d_jac_smoother use mld_d_as_smoother use mld_d_diag_solver @@ -202,6 +206,25 @@ subroutine mld_d_base_onelev_seti(lv,what,val,info,pos) case (mld_par_aggr_alg_) lv%parms%par_aggr_alg = val + if (allocated(lv%aggr)) then + call lv%aggr%free(info) + if (info == 0) deallocate(lv%aggr,stat=info) + if (info /= 0) then + info = psb_err_internal_error_ + return + end if + end if + + select case(val) + case(mld_dec_aggr_) + allocate(mld_d_dec_aggregator_type :: lv%aggr, stat=info) + case(mld_sym_dec_aggr_) + allocate(mld_d_symdec_aggregator_type :: lv%aggr, stat=info) + case(mld_hybrid_aggr_) + allocate(mld_d_hybrid_aggregator_type :: lv%aggr, stat=info) + case default + info = psb_err_internal_error_ + end select case (mld_aggr_ord_) lv%parms%aggr_ord = val diff --git a/mlprec/impl/level/mld_s_base_onelev_cseti.F90 b/mlprec/impl/level/mld_s_base_onelev_cseti.F90 index b6552c5a..882bae1a 100644 --- a/mlprec/impl/level/mld_s_base_onelev_cseti.F90 +++ b/mlprec/impl/level/mld_s_base_onelev_cseti.F90 @@ -39,6 +39,10 @@ subroutine mld_s_base_onelev_cseti(lv,what,val,info,pos) use psb_base_mod use mld_s_onelev_mod, mld_protect_name => mld_s_base_onelev_cseti + use mld_s_base_aggregator_mod + use mld_s_dec_aggregator_mod + use mld_s_symdec_aggregator_mod + use mld_s_hybrid_aggregator_mod use mld_s_jac_smoother use mld_s_as_smoother use mld_s_diag_solver @@ -182,6 +186,25 @@ subroutine mld_s_base_onelev_cseti(lv,what,val,info,pos) case ('PAR_AGGR_ALG') lv%parms%par_aggr_alg = val + if (allocated(lv%aggr)) then + call lv%aggr%free(info) + if (info == 0) deallocate(lv%aggr,stat=info) + if (info /= 0) then + info = psb_err_internal_error_ + return + end if + end if + + select case(val) + case(mld_dec_aggr_) + allocate(mld_s_dec_aggregator_type :: lv%aggr, stat=info) + case(mld_sym_dec_aggr_) + allocate(mld_s_symdec_aggregator_type :: lv%aggr, stat=info) + case(mld_hybrid_aggr_) + allocate(mld_s_hybrid_aggregator_type :: lv%aggr, stat=info) + case default + info = psb_err_internal_error_ + end select case ('AGGR_ORD') lv%parms%aggr_ord = val diff --git a/mlprec/impl/level/mld_s_base_onelev_seti.F90 b/mlprec/impl/level/mld_s_base_onelev_seti.F90 index 52880ac6..54ed838f 100644 --- a/mlprec/impl/level/mld_s_base_onelev_seti.F90 +++ b/mlprec/impl/level/mld_s_base_onelev_seti.F90 @@ -39,6 +39,10 @@ subroutine mld_s_base_onelev_seti(lv,what,val,info,pos) use psb_base_mod use mld_s_onelev_mod, mld_protect_name => mld_s_base_onelev_seti + use mld_s_base_aggregator_mod + use mld_s_dec_aggregator_mod + use mld_s_symdec_aggregator_mod + use mld_s_hybrid_aggregator_mod use mld_s_jac_smoother use mld_s_as_smoother use mld_s_diag_solver @@ -182,6 +186,25 @@ subroutine mld_s_base_onelev_seti(lv,what,val,info,pos) case (mld_par_aggr_alg_) lv%parms%par_aggr_alg = val + if (allocated(lv%aggr)) then + call lv%aggr%free(info) + if (info == 0) deallocate(lv%aggr,stat=info) + if (info /= 0) then + info = psb_err_internal_error_ + return + end if + end if + + select case(val) + case(mld_dec_aggr_) + allocate(mld_s_dec_aggregator_type :: lv%aggr, stat=info) + case(mld_sym_dec_aggr_) + allocate(mld_s_symdec_aggregator_type :: lv%aggr, stat=info) + case(mld_hybrid_aggr_) + allocate(mld_s_hybrid_aggregator_type :: lv%aggr, stat=info) + case default + info = psb_err_internal_error_ + end select case (mld_aggr_ord_) lv%parms%aggr_ord = val diff --git a/mlprec/impl/level/mld_z_base_onelev_cseti.F90 b/mlprec/impl/level/mld_z_base_onelev_cseti.F90 index d4d353da..1418b3ac 100644 --- a/mlprec/impl/level/mld_z_base_onelev_cseti.F90 +++ b/mlprec/impl/level/mld_z_base_onelev_cseti.F90 @@ -39,6 +39,10 @@ subroutine mld_z_base_onelev_cseti(lv,what,val,info,pos) use psb_base_mod use mld_z_onelev_mod, mld_protect_name => mld_z_base_onelev_cseti + use mld_z_base_aggregator_mod + use mld_z_dec_aggregator_mod + use mld_z_symdec_aggregator_mod + use mld_z_hybrid_aggregator_mod use mld_z_jac_smoother use mld_z_as_smoother use mld_z_diag_solver @@ -202,6 +206,25 @@ subroutine mld_z_base_onelev_cseti(lv,what,val,info,pos) case ('PAR_AGGR_ALG') lv%parms%par_aggr_alg = val + if (allocated(lv%aggr)) then + call lv%aggr%free(info) + if (info == 0) deallocate(lv%aggr,stat=info) + if (info /= 0) then + info = psb_err_internal_error_ + return + end if + end if + + select case(val) + case(mld_dec_aggr_) + allocate(mld_z_dec_aggregator_type :: lv%aggr, stat=info) + case(mld_sym_dec_aggr_) + allocate(mld_z_symdec_aggregator_type :: lv%aggr, stat=info) + case(mld_hybrid_aggr_) + allocate(mld_z_hybrid_aggregator_type :: lv%aggr, stat=info) + case default + info = psb_err_internal_error_ + end select case ('AGGR_ORD') lv%parms%aggr_ord = val diff --git a/mlprec/impl/level/mld_z_base_onelev_seti.F90 b/mlprec/impl/level/mld_z_base_onelev_seti.F90 index f335b968..73bc2d2d 100644 --- a/mlprec/impl/level/mld_z_base_onelev_seti.F90 +++ b/mlprec/impl/level/mld_z_base_onelev_seti.F90 @@ -39,6 +39,10 @@ subroutine mld_z_base_onelev_seti(lv,what,val,info,pos) use psb_base_mod use mld_z_onelev_mod, mld_protect_name => mld_z_base_onelev_seti + use mld_z_base_aggregator_mod + use mld_z_dec_aggregator_mod + use mld_z_symdec_aggregator_mod + use mld_z_hybrid_aggregator_mod use mld_z_jac_smoother use mld_z_as_smoother use mld_z_diag_solver @@ -202,6 +206,25 @@ subroutine mld_z_base_onelev_seti(lv,what,val,info,pos) case (mld_par_aggr_alg_) lv%parms%par_aggr_alg = val + if (allocated(lv%aggr)) then + call lv%aggr%free(info) + if (info == 0) deallocate(lv%aggr,stat=info) + if (info /= 0) then + info = psb_err_internal_error_ + return + end if + end if + + select case(val) + case(mld_dec_aggr_) + allocate(mld_z_dec_aggregator_type :: lv%aggr, stat=info) + case(mld_sym_dec_aggr_) + allocate(mld_z_symdec_aggregator_type :: lv%aggr, stat=info) + case(mld_hybrid_aggr_) + allocate(mld_z_hybrid_aggregator_type :: lv%aggr, stat=info) + case default + info = psb_err_internal_error_ + end select case (mld_aggr_ord_) lv%parms%aggr_ord = val diff --git a/mlprec/mld_base_prec_type.F90 b/mlprec/mld_base_prec_type.F90 index 26987979..28cda2db 100644 --- a/mlprec/mld_base_prec_type.F90 +++ b/mlprec/mld_base_prec_type.F90 @@ -97,6 +97,7 @@ module mld_base_prec_type procedure, pass(pm) :: get_coarse => ml_parms_get_coarse procedure, pass(pm) :: clone => ml_parms_clone procedure, pass(pm) :: descr => ml_parms_descr + procedure, pass(pm) :: mlcycledsc => ml_parms_mlcycledsc procedure, pass(pm) :: mldescr => ml_parms_mldescr procedure, pass(pm) :: coarsedescr => ml_parms_coarsedescr procedure, pass(pm) :: printout => ml_parms_printout @@ -222,6 +223,13 @@ module mld_base_prec_type integer(psb_ipk_), parameter :: mld_new_ml_prec_ = 7 integer(psb_ipk_), parameter :: mld_mult_dev_ml_ = 7 integer(psb_ipk_), parameter :: mld_max_ml_cycle_ = 8 + ! + ! Legal values for entry: mld_par_aggr_alg_ + ! + integer(psb_ipk_), parameter :: mld_dec_aggr_ = 0 + integer(psb_ipk_), parameter :: mld_sym_dec_aggr_ = 1 + integer(psb_ipk_), parameter :: mld_ext_aggr_ = 2 + integer(psb_ipk_), parameter :: mld_max_par_aggr_alg_ = mld_ext_aggr_ ! ! Legal values for entry: mld_aggr_type_ ! @@ -244,14 +252,6 @@ module mld_base_prec_type integer(psb_ipk_), parameter :: mld_filter_mat_ = 1 integer(psb_ipk_), parameter :: mld_max_filter_mat_ = mld_filter_mat_ ! - ! Legal values for entry: mld_par_aggr_alg_ - ! - integer(psb_ipk_), parameter :: mld_dec_aggr_ = 0 - integer(psb_ipk_), parameter :: mld_sym_dec_aggr_ = 1 - integer(psb_ipk_), parameter :: mld_ext_aggr_ = 2 - integer(psb_ipk_), parameter :: mld_bcmatch_aggr_ = 3 - integer(psb_ipk_), parameter :: mld_max_par_aggr_alg_ = mld_ext_aggr_ - ! ! Legal values for entry: mld_aggr_ord_ ! integer(psb_ipk_), parameter :: mld_aggr_ord_nat_ = 0 @@ -322,12 +322,12 @@ module mld_base_prec_type character(len=15), parameter, private :: & & matrix_names(0:1)=(/'distributed ','replicated '/) character(len=18), parameter, private :: & - & aggr_type_names(0:2)=(/'No aggregation ',& + & aggr_type_names(0:2)=(/'None ',& & 'VMB aggregation ', 'Hybrid aggregation'/) character(len=18), parameter, private :: & - & par_aggr_alg_names(0:3)=(/'decoupled aggr. ',& - & 'sym. dec. aggr. ',& - & 'user defined aggr.', 'matching aggr. '/) + & par_aggr_alg_names(0:2)=(/& + & 'decoupled aggr. ', 'sym. dec. aggr. ',& + & 'user defined aggr.'/) character(len=18), parameter, private :: & & ord_names(0:1)=(/'Natural ordering ','Desc. degree ord. '/) character(len=6), parameter, private :: & @@ -446,8 +446,6 @@ contains val = mld_dec_aggr_ case('SYMDEC') val = mld_sym_dec_aggr_ - case('BCMATCH') - val = mld_bcmatch_aggr_ case('NAT','NATURAL') val = mld_aggr_ord_nat_ case('DESC','RDEGREE','DEGREE') @@ -533,8 +531,7 @@ contains ! ! Routines printing out a description of the preconditioner ! - - subroutine ml_parms_mldescr(pm,iout,info,aggr_name) + subroutine ml_parms_mlcycledsc(pm,iout,info) Implicit None @@ -542,7 +539,6 @@ contains class(mld_ml_parms), intent(in) :: pm integer(psb_ipk_), intent(in) :: iout integer(psb_ipk_), intent(out) :: info - character(len=*), intent(in), optional :: aggr_name info = psb_success_ if ((pm%ml_cycle>=mld_no_ml_).and.(pm%ml_cycle<=mld_max_ml_cycle_)) then @@ -557,14 +553,24 @@ contains write(iout,*) ' Number of smoother sweeps : pre: ',& & pm%sweeps_pre ,' post: ', pm%sweeps_post end select + + end if + end subroutine ml_parms_mlcycledsc + + subroutine ml_parms_mldescr(pm,iout,info) + + Implicit None + + ! Arguments + class(mld_ml_parms), intent(in) :: pm + integer(psb_ipk_), intent(in) :: iout + integer(psb_ipk_), intent(out) :: info + info = psb_success_ + if ((pm%ml_cycle>=mld_no_ml_).and.(pm%ml_cycle<=mld_max_ml_cycle_)) then + - if (present(aggr_name)) then - write(iout,*) ' Aggregation type: ', & - & aggr_name - else - write(iout,*) ' Aggregation type: ',& - & aggr_type_names(pm%aggr_type) - end if + write(iout,*) ' Aggregation type: ',& + & aggr_type_names(pm%aggr_type) write(iout,*) ' parallel algorithm: ',& & par_aggr_alg_names(pm%par_aggr_alg) if (pm%par_aggr_alg /= mld_ext_aggr_) then @@ -574,7 +580,7 @@ contains write(iout,*) ' Aggregation prolongator: ', & & aggr_prols(pm%aggr_prol) if (pm%aggr_prol /= mld_no_smooth_) then - write(iout,*) ' with: ', aggr_filters(pm%aggr_filter) + write(iout,*) ' with: ', aggr_filters(pm%aggr_filter) if (pm%aggr_omega_alg == mld_eig_est_) then write(iout,*) ' Damping omega computation: spectral radius estimate' write(iout,*) ' Spectral radius estimate: ', & @@ -587,7 +593,7 @@ contains end if end if else - write(iout,*) ' Multilevel type: Unkonwn value. Something is amis....',& + write(iout,*) ' Multilevel type: Unkonwn value. Something is amiss....',& & pm%ml_cycle end if diff --git a/mlprec/mld_c_base_aggregator_mod.f90 b/mlprec/mld_c_base_aggregator_mod.f90 index 6383f507..4576af81 100644 --- a/mlprec/mld_c_base_aggregator_mod.f90 +++ b/mlprec/mld_c_base_aggregator_mod.f90 @@ -107,38 +107,6 @@ module mld_c_base_aggregator_mod end type mld_c_base_aggregator_type - interface - subroutine mld_c_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) - import :: mld_c_base_aggregator_type, psb_desc_type, psb_cspmat_type, psb_spk_, & - & psb_ipk_, psb_long_int_k_, mld_sml_parms - implicit none - class(mld_c_base_aggregator_type), target, intent(inout) :: ag - type(mld_sml_parms), intent(inout) :: parms - type(psb_cspmat_type), intent(in) :: a - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) - type(psb_cspmat_type), intent(out) :: op_prol - integer(psb_ipk_), intent(out) :: info - end subroutine mld_c_base_aggregator_build_tprol - end interface - - interface - subroutine mld_c_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,& - & op_prol,op_restr,info) - import :: mld_c_base_aggregator_type, psb_desc_type, psb_cspmat_type, psb_spk_, & - & psb_ipk_, psb_long_int_k_, mld_sml_parms - implicit none - class(mld_c_base_aggregator_type), target, intent(inout) :: ag - type(mld_sml_parms), intent(inout) :: parms - type(psb_cspmat_type), intent(in) :: a - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(inout) :: ilaggr(:), nlaggr(:) - type(psb_cspmat_type), intent(inout) :: op_prol - type(psb_cspmat_type), intent(out) :: ac,op_restr - integer(psb_ipk_), intent(out) :: info - end subroutine mld_c_base_aggregator_mat_asb - end interface - contains subroutine mld_c_base_aggregator_update_next(ag,agnext,info) @@ -190,7 +158,7 @@ contains implicit none character(len=32) :: val - val = "Decoupled aggregation" + val = "Null " end function mld_c_base_aggregator_fmt subroutine mld_c_base_aggregator_descr(ag,parms,iout,info) @@ -205,4 +173,64 @@ contains return end subroutine mld_c_base_aggregator_descr + subroutine mld_c_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) + use psb_base_mod + implicit none + class(mld_c_base_aggregator_type), target, intent(inout) :: ag + type(mld_sml_parms), intent(inout) :: parms + type(psb_cspmat_type), intent(in) :: a + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) + type(psb_cspmat_type), intent(out) :: op_prol + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: err_act + character(len=20) :: name='c_base_aggregator_build_tprol' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + + end subroutine mld_c_base_aggregator_build_tprol + + + subroutine mld_c_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,& + & op_prol,op_restr,info) + use psb_base_mod + implicit none + class(mld_c_base_aggregator_type), target, intent(inout) :: ag + type(mld_sml_parms), intent(inout) :: parms + type(psb_cspmat_type), intent(in) :: a + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(inout) :: ilaggr(:), nlaggr(:) + type(psb_cspmat_type), intent(inout) :: op_prol + type(psb_cspmat_type), intent(out) :: ac,op_restr + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='c_base_aggregator_mat_asb' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + end subroutine mld_c_base_aggregator_mat_asb + + end module mld_c_base_aggregator_mod diff --git a/mlprec/mld_c_onelev_mod.f90 b/mlprec/mld_c_onelev_mod.f90 index a9b456d2..db9a64cc 100644 --- a/mlprec/mld_c_onelev_mod.f90 +++ b/mlprec/mld_c_onelev_mod.f90 @@ -507,7 +507,7 @@ contains else lv%sm2 => lv%sm end if - if (.not.allocated(lv%aggr)) allocate(mld_c_base_aggregator_type :: lv%aggr,stat=info) + if (.not.allocated(lv%aggr)) allocate(mld_c_dec_aggregator_type :: lv%aggr,stat=info) if (allocated(lv%aggr)) call lv%aggr%default() return diff --git a/mlprec/mld_c_symdec_aggregator_mod.f90 b/mlprec/mld_c_symdec_aggregator_mod.f90 index 1cf69096..0fffcf7a 100644 --- a/mlprec/mld_c_symdec_aggregator_mod.f90 +++ b/mlprec/mld_c_symdec_aggregator_mod.f90 @@ -50,7 +50,7 @@ ! module mld_c_symdec_aggregator_mod - use mld_c_base_aggregator_mod + use mld_c_dec_aggregator_mod ! ! sm - class(mld_T_base_smoother_type), allocatable ! The current level preconditioner (aka smoother). @@ -91,7 +91,7 @@ module mld_c_symdec_aggregator_mod ! get_nzeros - Number of nonzeros ! ! - type, extends(mld_c_base_aggregator_type) :: mld_c_symdec_aggregator_type + type, extends(mld_c_dec_aggregator_type) :: mld_c_symdec_aggregator_type contains procedure, pass(ag) :: tprol => mld_c_symdec_aggregator_build_tprol diff --git a/mlprec/mld_d_base_aggregator_mod.f90 b/mlprec/mld_d_base_aggregator_mod.f90 index a07c2da0..85dc972e 100644 --- a/mlprec/mld_d_base_aggregator_mod.f90 +++ b/mlprec/mld_d_base_aggregator_mod.f90 @@ -107,38 +107,6 @@ module mld_d_base_aggregator_mod end type mld_d_base_aggregator_type - interface - subroutine mld_d_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) - import :: mld_d_base_aggregator_type, psb_desc_type, psb_dspmat_type, psb_dpk_, & - & psb_ipk_, psb_long_int_k_, mld_dml_parms - implicit none - class(mld_d_base_aggregator_type), target, intent(inout) :: ag - type(mld_dml_parms), intent(inout) :: parms - type(psb_dspmat_type), intent(in) :: a - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) - type(psb_dspmat_type), intent(out) :: op_prol - integer(psb_ipk_), intent(out) :: info - end subroutine mld_d_base_aggregator_build_tprol - end interface - - interface - subroutine mld_d_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,& - & op_prol,op_restr,info) - import :: mld_d_base_aggregator_type, psb_desc_type, psb_dspmat_type, psb_dpk_, & - & psb_ipk_, psb_long_int_k_, mld_dml_parms - implicit none - class(mld_d_base_aggregator_type), target, intent(inout) :: ag - type(mld_dml_parms), intent(inout) :: parms - type(psb_dspmat_type), intent(in) :: a - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(inout) :: ilaggr(:), nlaggr(:) - type(psb_dspmat_type), intent(inout) :: op_prol - type(psb_dspmat_type), intent(out) :: ac,op_restr - integer(psb_ipk_), intent(out) :: info - end subroutine mld_d_base_aggregator_mat_asb - end interface - contains subroutine mld_d_base_aggregator_update_next(ag,agnext,info) @@ -190,7 +158,7 @@ contains implicit none character(len=32) :: val - val = "Decoupled aggregation" + val = "Null " end function mld_d_base_aggregator_fmt subroutine mld_d_base_aggregator_descr(ag,parms,iout,info) @@ -205,4 +173,64 @@ contains return end subroutine mld_d_base_aggregator_descr + subroutine mld_d_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) + use psb_base_mod + implicit none + class(mld_d_base_aggregator_type), target, intent(inout) :: ag + type(mld_dml_parms), intent(inout) :: parms + type(psb_dspmat_type), intent(in) :: a + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) + type(psb_dspmat_type), intent(out) :: op_prol + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_aggregator_build_tprol' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + + end subroutine mld_d_base_aggregator_build_tprol + + + subroutine mld_d_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,& + & op_prol,op_restr,info) + use psb_base_mod + implicit none + class(mld_d_base_aggregator_type), target, intent(inout) :: ag + type(mld_dml_parms), intent(inout) :: parms + type(psb_dspmat_type), intent(in) :: a + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(inout) :: ilaggr(:), nlaggr(:) + type(psb_dspmat_type), intent(inout) :: op_prol + type(psb_dspmat_type), intent(out) :: ac,op_restr + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_aggregator_mat_asb' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + end subroutine mld_d_base_aggregator_mat_asb + + end module mld_d_base_aggregator_mod diff --git a/mlprec/mld_d_onelev_mod.f90 b/mlprec/mld_d_onelev_mod.f90 index 13fcc688..c8e7630d 100644 --- a/mlprec/mld_d_onelev_mod.f90 +++ b/mlprec/mld_d_onelev_mod.f90 @@ -507,7 +507,7 @@ contains else lv%sm2 => lv%sm end if - if (.not.allocated(lv%aggr)) allocate(mld_d_base_aggregator_type :: lv%aggr,stat=info) + if (.not.allocated(lv%aggr)) allocate(mld_d_dec_aggregator_type :: lv%aggr,stat=info) if (allocated(lv%aggr)) call lv%aggr%default() return diff --git a/mlprec/mld_d_symdec_aggregator_mod.f90 b/mlprec/mld_d_symdec_aggregator_mod.f90 index 927ad60f..893cfbf2 100644 --- a/mlprec/mld_d_symdec_aggregator_mod.f90 +++ b/mlprec/mld_d_symdec_aggregator_mod.f90 @@ -50,7 +50,7 @@ ! module mld_d_symdec_aggregator_mod - use mld_d_base_aggregator_mod + use mld_d_dec_aggregator_mod ! ! sm - class(mld_T_base_smoother_type), allocatable ! The current level preconditioner (aka smoother). @@ -91,7 +91,7 @@ module mld_d_symdec_aggregator_mod ! get_nzeros - Number of nonzeros ! ! - type, extends(mld_d_base_aggregator_type) :: mld_d_symdec_aggregator_type + type, extends(mld_d_dec_aggregator_type) :: mld_d_symdec_aggregator_type contains procedure, pass(ag) :: tprol => mld_d_symdec_aggregator_build_tprol diff --git a/mlprec/mld_s_base_aggregator_mod.f90 b/mlprec/mld_s_base_aggregator_mod.f90 index b9a67239..4b7a5fd4 100644 --- a/mlprec/mld_s_base_aggregator_mod.f90 +++ b/mlprec/mld_s_base_aggregator_mod.f90 @@ -107,38 +107,6 @@ module mld_s_base_aggregator_mod end type mld_s_base_aggregator_type - interface - subroutine mld_s_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) - import :: mld_s_base_aggregator_type, psb_desc_type, psb_sspmat_type, psb_spk_, & - & psb_ipk_, psb_long_int_k_, mld_sml_parms - implicit none - class(mld_s_base_aggregator_type), target, intent(inout) :: ag - type(mld_sml_parms), intent(inout) :: parms - type(psb_sspmat_type), intent(in) :: a - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) - type(psb_sspmat_type), intent(out) :: op_prol - integer(psb_ipk_), intent(out) :: info - end subroutine mld_s_base_aggregator_build_tprol - end interface - - interface - subroutine mld_s_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,& - & op_prol,op_restr,info) - import :: mld_s_base_aggregator_type, psb_desc_type, psb_sspmat_type, psb_spk_, & - & psb_ipk_, psb_long_int_k_, mld_sml_parms - implicit none - class(mld_s_base_aggregator_type), target, intent(inout) :: ag - type(mld_sml_parms), intent(inout) :: parms - type(psb_sspmat_type), intent(in) :: a - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(inout) :: ilaggr(:), nlaggr(:) - type(psb_sspmat_type), intent(inout) :: op_prol - type(psb_sspmat_type), intent(out) :: ac,op_restr - integer(psb_ipk_), intent(out) :: info - end subroutine mld_s_base_aggregator_mat_asb - end interface - contains subroutine mld_s_base_aggregator_update_next(ag,agnext,info) @@ -190,7 +158,7 @@ contains implicit none character(len=32) :: val - val = "Decoupled aggregation" + val = "Null " end function mld_s_base_aggregator_fmt subroutine mld_s_base_aggregator_descr(ag,parms,iout,info) @@ -205,4 +173,64 @@ contains return end subroutine mld_s_base_aggregator_descr + subroutine mld_s_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) + use psb_base_mod + implicit none + class(mld_s_base_aggregator_type), target, intent(inout) :: ag + type(mld_sml_parms), intent(inout) :: parms + type(psb_sspmat_type), intent(in) :: a + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) + type(psb_sspmat_type), intent(out) :: op_prol + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: err_act + character(len=20) :: name='s_base_aggregator_build_tprol' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + + end subroutine mld_s_base_aggregator_build_tprol + + + subroutine mld_s_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,& + & op_prol,op_restr,info) + use psb_base_mod + implicit none + class(mld_s_base_aggregator_type), target, intent(inout) :: ag + type(mld_sml_parms), intent(inout) :: parms + type(psb_sspmat_type), intent(in) :: a + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(inout) :: ilaggr(:), nlaggr(:) + type(psb_sspmat_type), intent(inout) :: op_prol + type(psb_sspmat_type), intent(out) :: ac,op_restr + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='s_base_aggregator_mat_asb' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + end subroutine mld_s_base_aggregator_mat_asb + + end module mld_s_base_aggregator_mod diff --git a/mlprec/mld_s_onelev_mod.f90 b/mlprec/mld_s_onelev_mod.f90 index 3bfb50c3..a3bf3cb5 100644 --- a/mlprec/mld_s_onelev_mod.f90 +++ b/mlprec/mld_s_onelev_mod.f90 @@ -507,7 +507,7 @@ contains else lv%sm2 => lv%sm end if - if (.not.allocated(lv%aggr)) allocate(mld_s_base_aggregator_type :: lv%aggr,stat=info) + if (.not.allocated(lv%aggr)) allocate(mld_s_dec_aggregator_type :: lv%aggr,stat=info) if (allocated(lv%aggr)) call lv%aggr%default() return diff --git a/mlprec/mld_s_symdec_aggregator_mod.f90 b/mlprec/mld_s_symdec_aggregator_mod.f90 index de5c46d7..0e980885 100644 --- a/mlprec/mld_s_symdec_aggregator_mod.f90 +++ b/mlprec/mld_s_symdec_aggregator_mod.f90 @@ -50,7 +50,7 @@ ! module mld_s_symdec_aggregator_mod - use mld_s_base_aggregator_mod + use mld_s_dec_aggregator_mod ! ! sm - class(mld_T_base_smoother_type), allocatable ! The current level preconditioner (aka smoother). @@ -91,7 +91,7 @@ module mld_s_symdec_aggregator_mod ! get_nzeros - Number of nonzeros ! ! - type, extends(mld_s_base_aggregator_type) :: mld_s_symdec_aggregator_type + type, extends(mld_s_dec_aggregator_type) :: mld_s_symdec_aggregator_type contains procedure, pass(ag) :: tprol => mld_s_symdec_aggregator_build_tprol diff --git a/mlprec/mld_z_base_aggregator_mod.f90 b/mlprec/mld_z_base_aggregator_mod.f90 index cd99cf1a..e737c7df 100644 --- a/mlprec/mld_z_base_aggregator_mod.f90 +++ b/mlprec/mld_z_base_aggregator_mod.f90 @@ -107,38 +107,6 @@ module mld_z_base_aggregator_mod end type mld_z_base_aggregator_type - interface - subroutine mld_z_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) - import :: mld_z_base_aggregator_type, psb_desc_type, psb_zspmat_type, psb_dpk_, & - & psb_ipk_, psb_long_int_k_, mld_dml_parms - implicit none - class(mld_z_base_aggregator_type), target, intent(inout) :: ag - type(mld_dml_parms), intent(inout) :: parms - type(psb_zspmat_type), intent(in) :: a - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) - type(psb_zspmat_type), intent(out) :: op_prol - integer(psb_ipk_), intent(out) :: info - end subroutine mld_z_base_aggregator_build_tprol - end interface - - interface - subroutine mld_z_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,& - & op_prol,op_restr,info) - import :: mld_z_base_aggregator_type, psb_desc_type, psb_zspmat_type, psb_dpk_, & - & psb_ipk_, psb_long_int_k_, mld_dml_parms - implicit none - class(mld_z_base_aggregator_type), target, intent(inout) :: ag - type(mld_dml_parms), intent(inout) :: parms - type(psb_zspmat_type), intent(in) :: a - type(psb_desc_type), intent(in) :: desc_a - integer(psb_ipk_), intent(inout) :: ilaggr(:), nlaggr(:) - type(psb_zspmat_type), intent(inout) :: op_prol - type(psb_zspmat_type), intent(out) :: ac,op_restr - integer(psb_ipk_), intent(out) :: info - end subroutine mld_z_base_aggregator_mat_asb - end interface - contains subroutine mld_z_base_aggregator_update_next(ag,agnext,info) @@ -190,7 +158,7 @@ contains implicit none character(len=32) :: val - val = "Decoupled aggregation" + val = "Null " end function mld_z_base_aggregator_fmt subroutine mld_z_base_aggregator_descr(ag,parms,iout,info) @@ -205,4 +173,64 @@ contains return end subroutine mld_z_base_aggregator_descr + subroutine mld_z_base_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info) + use psb_base_mod + implicit none + class(mld_z_base_aggregator_type), target, intent(inout) :: ag + type(mld_dml_parms), intent(inout) :: parms + type(psb_zspmat_type), intent(in) :: a + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), allocatable, intent(out) :: ilaggr(:),nlaggr(:) + type(psb_zspmat_type), intent(out) :: op_prol + integer(psb_ipk_), intent(out) :: info + + integer(psb_ipk_) :: err_act + character(len=20) :: name='z_base_aggregator_build_tprol' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + + end subroutine mld_z_base_aggregator_build_tprol + + + subroutine mld_z_base_aggregator_mat_asb(ag,parms,a,desc_a,ilaggr,nlaggr,ac,& + & op_prol,op_restr,info) + use psb_base_mod + implicit none + class(mld_z_base_aggregator_type), target, intent(inout) :: ag + type(mld_dml_parms), intent(inout) :: parms + type(psb_zspmat_type), intent(in) :: a + type(psb_desc_type), intent(in) :: desc_a + integer(psb_ipk_), intent(inout) :: ilaggr(:), nlaggr(:) + type(psb_zspmat_type), intent(inout) :: op_prol + type(psb_zspmat_type), intent(out) :: ac,op_restr + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='z_base_aggregator_mat_asb' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return + end subroutine mld_z_base_aggregator_mat_asb + + end module mld_z_base_aggregator_mod diff --git a/mlprec/mld_z_onelev_mod.f90 b/mlprec/mld_z_onelev_mod.f90 index b5d873a9..5256cc6f 100644 --- a/mlprec/mld_z_onelev_mod.f90 +++ b/mlprec/mld_z_onelev_mod.f90 @@ -507,7 +507,7 @@ contains else lv%sm2 => lv%sm end if - if (.not.allocated(lv%aggr)) allocate(mld_z_base_aggregator_type :: lv%aggr,stat=info) + if (.not.allocated(lv%aggr)) allocate(mld_z_dec_aggregator_type :: lv%aggr,stat=info) if (allocated(lv%aggr)) call lv%aggr%default() return diff --git a/mlprec/mld_z_symdec_aggregator_mod.f90 b/mlprec/mld_z_symdec_aggregator_mod.f90 index a16fd1a3..ae7916b2 100644 --- a/mlprec/mld_z_symdec_aggregator_mod.f90 +++ b/mlprec/mld_z_symdec_aggregator_mod.f90 @@ -50,7 +50,7 @@ ! module mld_z_symdec_aggregator_mod - use mld_z_base_aggregator_mod + use mld_z_dec_aggregator_mod ! ! sm - class(mld_T_base_smoother_type), allocatable ! The current level preconditioner (aka smoother). @@ -91,7 +91,7 @@ module mld_z_symdec_aggregator_mod ! get_nzeros - Number of nonzeros ! ! - type, extends(mld_z_base_aggregator_type) :: mld_z_symdec_aggregator_type + type, extends(mld_z_dec_aggregator_type) :: mld_z_symdec_aggregator_type contains procedure, pass(ag) :: tprol => mld_z_symdec_aggregator_build_tprol