New inheritance structure for aggregator object.

stopcriterion
Salvatore Filippone 7 years ago
parent 24988bcfc5
commit 7aadb73bd6

@ -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\

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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
@ -223,6 +224,13 @@ module mld_base_prec_type
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_
!
integer(psb_ipk_), parameter :: mld_noalg_ = 0
@ -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
@ -558,13 +554,23 @@ contains
& pm%sweeps_pre ,' post: ', pm%sweeps_post
end select
if (present(aggr_name)) then
write(iout,*) ' Aggregation type: ', &
& aggr_name
else
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
write(iout,*) ' Aggregation type: ',&
& aggr_type_names(pm%aggr_type)
end if
write(iout,*) ' parallel algorithm: ',&
& par_aggr_alg_names(pm%par_aggr_alg)
if (pm%par_aggr_alg /= mld_ext_aggr_) then
@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

Loading…
Cancel
Save