mirror of
https://github.com/sfilippone/amg4psblas.git
synced 2026-10-20 12:52:16 +00:00
Renamed VMB and HYB into SOC1 and SOC2.
This commit is contained in:
@@ -12,25 +12,25 @@ OBJS= \
|
||||
mld_s_dec_aggregator_mat_asb.o \
|
||||
mld_s_dec_aggregator_tprol.o \
|
||||
mld_s_symdec_aggregator_tprol.o \
|
||||
mld_s_map_to_tprol.o mld_s_vmb_map_bld.o mld_s_hyb_map_bld.o\
|
||||
mld_s_map_to_tprol.o mld_s_soc1_map_bld.o mld_s_soc2_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_dec_aggregator_mat_asb.o \
|
||||
mld_d_dec_aggregator_tprol.o \
|
||||
mld_d_symdec_aggregator_tprol.o \
|
||||
mld_d_map_to_tprol.o mld_d_vmb_map_bld.o mld_d_hyb_map_bld.o\
|
||||
mld_d_map_to_tprol.o mld_d_soc1_map_bld.o mld_d_soc2_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_dec_aggregator_mat_asb.o \
|
||||
mld_c_dec_aggregator_tprol.o \
|
||||
mld_c_symdec_aggregator_tprol.o \
|
||||
mld_c_map_to_tprol.o mld_c_vmb_map_bld.o mld_c_hyb_map_bld.o\
|
||||
mld_c_map_to_tprol.o mld_c_soc1_map_bld.o mld_c_soc2_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_dec_aggregator_mat_asb.o \
|
||||
mld_z_dec_aggregator_tprol.o \
|
||||
mld_z_symdec_aggregator_tprol.o \
|
||||
mld_z_map_to_tprol.o mld_z_vmb_map_bld.o mld_z_hyb_map_bld.o\
|
||||
mld_z_map_to_tprol.o mld_z_soc1_map_bld.o mld_z_soc2_map_bld.o\
|
||||
mld_zaggrmat_biz_asb.o mld_zaggrmat_minnrg_asb.o\
|
||||
mld_zaggrmat_nosmth_asb.o mld_zaggrmat_smth_asb.o
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
! Subroutine: mld_c_dec_aggregator_tprol
|
||||
! Version: complex
|
||||
!
|
||||
! This routine is mainly an interface to vmb_map_bld where the real work is performed.
|
||||
! This routine is mainly an interface to map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
@@ -111,12 +111,11 @@ subroutine mld_c_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_
|
||||
|
||||
|
||||
call ag%map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
!!$ call mld_c_vmb_map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (info==psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='vmb_map_bld/map_to_tprol')
|
||||
call psb_errpush(info,name,a_err='map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
!
|
||||
!
|
||||
! MLD2P4 version 2.2
|
||||
! MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
! based on PSBLAS (Parallel Sparse BLAS version 3.5)
|
||||
!
|
||||
! (C) Copyright 2008-2018
|
||||
!
|
||||
! Salvatore Filippone
|
||||
! Pasqua D'Ambra
|
||||
! Daniela di Serafino
|
||||
!
|
||||
! Redistribution and use in source and binary forms, with or without
|
||||
! modification, are permitted provided that the following conditions
|
||||
! are met:
|
||||
! 1. Redistributions of source code must retain the above copyright
|
||||
! notice, this list of conditions and the following disclaimer.
|
||||
! 2. Redistributions in binary form must reproduce the above copyright
|
||||
! notice, this list of conditions, and the following disclaimer in the
|
||||
! documentation and/or other materials provided with the distribution.
|
||||
! 3. The name of the MLD2P4 group or the names of its contributors may
|
||||
! not be used to endorse or promote products derived from this
|
||||
! software without specific written permission.
|
||||
!
|
||||
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
|
||||
! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
! POSSIBILITY OF SUCH DAMAGE.
|
||||
!
|
||||
!
|
||||
! File: mld_c_hybrid_aggregator_tprol.f90
|
||||
!
|
||||
! Subroutine: mld_c_hybrid_aggregator_tprol
|
||||
! Version: complex
|
||||
!
|
||||
!
|
||||
! This routine is mainly an interface to hyb_map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
!
|
||||
!
|
||||
! Arguments:
|
||||
! p - type(mld_c_onelev_type), input/output.
|
||||
! The 'one-level' data structure containing the control
|
||||
! parameters and (eventually) coarse matrix and prolongator/restrictors.
|
||||
!
|
||||
! a - type(psb_cspmat_type).
|
||||
! The sparse matrix structure containing the local part of the
|
||||
! fine-level matrix.
|
||||
! desc_a - type(psb_desc_type), input.
|
||||
! The communication descriptor of a.
|
||||
! ilaggr - integer, dimension(:), allocatable, output
|
||||
! The mapping between the row indices of the coarse-level
|
||||
! matrix and the row indices of the fine-level matrix.
|
||||
! ilaggr(i)=j means that node i in the adjacency graph
|
||||
! of the fine-level matrix is mapped onto node j in the
|
||||
! adjacency graph of the coarse-level matrix. Note that on exit the indices
|
||||
! will be shifted so as to make sure the ranges on the various processes do not
|
||||
! overlap.
|
||||
! nlaggr - integer, dimension(:), allocatable, output
|
||||
! nlaggr(i) contains the aggregates held by process i.
|
||||
! op_prol - type(psb_cspmat_type), output
|
||||
! The tentative prolongator, based on ilaggr.
|
||||
!
|
||||
! info - integer, output.
|
||||
! Error code.
|
||||
!
|
||||
subroutine mld_c_hybrid_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
use psb_base_mod
|
||||
use mld_c_prec_type
|
||||
use mld_c_hybrid_aggregator_mod, mld_protect_name => mld_c_hybrid_aggregator_build_tprol
|
||||
use mld_c_inner_mod
|
||||
implicit none
|
||||
class(mld_c_hybrid_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
|
||||
|
||||
! Local variables
|
||||
character(len=20) :: name
|
||||
integer(psb_mpik_) :: ictxt, np, me
|
||||
integer(psb_ipk_) :: err_act
|
||||
integer(psb_ipk_) :: ntaggr
|
||||
integer(psb_ipk_) :: debug_level, debug_unit
|
||||
|
||||
name='mld_c_hybrid_aggregator_tprol'
|
||||
if (psb_get_errstatus().ne.0) return
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
info = psb_success_
|
||||
ictxt = desc_a%get_context()
|
||||
call psb_info(ictxt,me,np)
|
||||
|
||||
call mld_check_def(parms%ml_cycle,'Multilevel cycle',&
|
||||
& mld_mult_ml_,is_legal_ml_cycle)
|
||||
call mld_check_def(parms%par_aggr_alg,'Aggregation',&
|
||||
& mld_dec_aggr_,is_legal_ml_par_aggr_alg)
|
||||
call mld_check_def(parms%aggr_ord,'Ordering',&
|
||||
& mld_aggr_ord_nat_,is_legal_ml_aggr_ord)
|
||||
call mld_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs)
|
||||
|
||||
|
||||
call mld_c_hyb_map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (info==psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='hyb_map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
call psb_erractionrestore(err_act)
|
||||
return
|
||||
|
||||
9999 call psb_error_handler(err_act)
|
||||
return
|
||||
|
||||
end subroutine mld_c_hybrid_aggregator_build_tprol
|
||||
+6
-6
@@ -36,9 +36,9 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
! File: mld_c_vmb_map__bld.f90
|
||||
! File: mld_c_soc1_map__bld.f90
|
||||
!
|
||||
! Subroutine: mld_c_vmb_map_bld
|
||||
! Subroutine: mld_c_soc1_map_bld
|
||||
! Version: complex
|
||||
!
|
||||
! This routine builds the tentative prolongator based on the
|
||||
@@ -67,11 +67,11 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
subroutine mld_c_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
subroutine mld_c_soc1_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
use psb_base_mod
|
||||
use mld_base_prec_type
|
||||
use mld_c_inner_mod!, mld_protect_name => mld_c_vmb_map_bld
|
||||
use mld_c_inner_mod!, mld_protect_name => mld_c_soc1_map_bld
|
||||
|
||||
implicit none
|
||||
|
||||
@@ -98,7 +98,7 @@ subroutine mld_c_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (psb_get_errstatus() /= 0) return
|
||||
info=psb_success_
|
||||
name = 'mld_vmb_map_bld'
|
||||
name = 'mld_soc1_map_bld'
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
@@ -318,5 +318,5 @@ subroutine mld_c_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
return
|
||||
|
||||
end subroutine mld_c_vmb_map_bld
|
||||
end subroutine mld_c_soc1_map_bld
|
||||
|
||||
+7
-7
@@ -36,13 +36,13 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
! File: mld_c_hyb_map__bld.f90
|
||||
! File: mld_c_soc2_map__bld.f90
|
||||
!
|
||||
! Subroutine: mld_c_hyb_map_bld
|
||||
! Subroutine: mld_c_soc2_map_bld
|
||||
! Version: complex
|
||||
!
|
||||
! The aggregator object hosts the aggregation method for building
|
||||
! the multilevel hierarchy. This variant is based on the hybrid method
|
||||
! the multilevel hierarchy. This variant is based on the method
|
||||
! presented in
|
||||
!
|
||||
! S. Gratton, P. Henon, P. Jiranek and X. Vasseur:
|
||||
@@ -66,11 +66,11 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
subroutine mld_c_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
subroutine mld_c_soc2_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
use psb_base_mod
|
||||
use mld_base_prec_type
|
||||
use mld_c_inner_mod!, mld_protect_name => mld_c_hyb_map_bld
|
||||
use mld_c_inner_mod!, mld_protect_name => mld_c_soc2_map_bld
|
||||
|
||||
implicit none
|
||||
|
||||
@@ -98,7 +98,7 @@ subroutine mld_c_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (psb_get_errstatus() /= 0) return
|
||||
info=psb_success_
|
||||
name = 'mld_hyb_map_bld'
|
||||
name = 'mld_soc2_map_bld'
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
@@ -326,5 +326,5 @@ subroutine mld_c_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
return
|
||||
|
||||
end subroutine mld_c_hyb_map_bld
|
||||
end subroutine mld_c_soc2_map_bld
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
! Version: complex
|
||||
!
|
||||
!
|
||||
! This routine is mainly an interface to vmb_map_bld where the real work is performed.
|
||||
! This routine is mainly an interface to map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
@@ -127,13 +127,13 @@ subroutine mld_c_symdec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,
|
||||
if (info == psb_success_) call atmp%cscnv(info,type='CSR')
|
||||
|
||||
if (info == psb_success_) &
|
||||
& call mld_c_vmb_map_bld(parms%aggr_ord,parms%aggr_thresh,atmp,desc_a,nlaggr,ilaggr,info)
|
||||
& call ag%map_bld(parms%aggr_ord,parms%aggr_thresh,atmp,desc_a,nlaggr,ilaggr,info)
|
||||
if (info == psb_success_) call atmp%free()
|
||||
|
||||
if (info == psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='vmb_map_bld/map_to_tprol')
|
||||
call psb_errpush(info,name,a_err='map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
! Subroutine: mld_d_dec_aggregator_tprol
|
||||
! Version: real
|
||||
!
|
||||
! This routine is mainly an interface to vmb_map_bld where the real work is performed.
|
||||
! This routine is mainly an interface to map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
@@ -111,12 +111,11 @@ subroutine mld_d_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_
|
||||
|
||||
|
||||
call ag%map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
!!$ call mld_d_vmb_map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (info==psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='vmb_map_bld/map_to_tprol')
|
||||
call psb_errpush(info,name,a_err='map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
!
|
||||
!
|
||||
! MLD2P4 version 2.2
|
||||
! MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
! based on PSBLAS (Parallel Sparse BLAS version 3.5)
|
||||
!
|
||||
! (C) Copyright 2008-2018
|
||||
!
|
||||
! Salvatore Filippone
|
||||
! Pasqua D'Ambra
|
||||
! Daniela di Serafino
|
||||
!
|
||||
! Redistribution and use in source and binary forms, with or without
|
||||
! modification, are permitted provided that the following conditions
|
||||
! are met:
|
||||
! 1. Redistributions of source code must retain the above copyright
|
||||
! notice, this list of conditions and the following disclaimer.
|
||||
! 2. Redistributions in binary form must reproduce the above copyright
|
||||
! notice, this list of conditions, and the following disclaimer in the
|
||||
! documentation and/or other materials provided with the distribution.
|
||||
! 3. The name of the MLD2P4 group or the names of its contributors may
|
||||
! not be used to endorse or promote products derived from this
|
||||
! software without specific written permission.
|
||||
!
|
||||
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
|
||||
! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
! POSSIBILITY OF SUCH DAMAGE.
|
||||
!
|
||||
!
|
||||
! File: mld_d_hybrid_aggregator_tprol.f90
|
||||
!
|
||||
! Subroutine: mld_d_hybrid_aggregator_tprol
|
||||
! Version: real
|
||||
!
|
||||
!
|
||||
! This routine is mainly an interface to hyb_map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
!
|
||||
!
|
||||
! Arguments:
|
||||
! p - type(mld_d_onelev_type), input/output.
|
||||
! The 'one-level' data structure containing the control
|
||||
! parameters and (eventually) coarse matrix and prolongator/restrictors.
|
||||
!
|
||||
! a - type(psb_dspmat_type).
|
||||
! The sparse matrix structure containing the local part of the
|
||||
! fine-level matrix.
|
||||
! desc_a - type(psb_desc_type), input.
|
||||
! The communication descriptor of a.
|
||||
! ilaggr - integer, dimension(:), allocatable, output
|
||||
! The mapping between the row indices of the coarse-level
|
||||
! matrix and the row indices of the fine-level matrix.
|
||||
! ilaggr(i)=j means that node i in the adjacency graph
|
||||
! of the fine-level matrix is mapped onto node j in the
|
||||
! adjacency graph of the coarse-level matrix. Note that on exit the indices
|
||||
! will be shifted so as to make sure the ranges on the various processes do not
|
||||
! overlap.
|
||||
! nlaggr - integer, dimension(:), allocatable, output
|
||||
! nlaggr(i) contains the aggregates held by process i.
|
||||
! op_prol - type(psb_dspmat_type), output
|
||||
! The tentative prolongator, based on ilaggr.
|
||||
!
|
||||
! info - integer, output.
|
||||
! Error code.
|
||||
!
|
||||
subroutine mld_d_hybrid_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
use psb_base_mod
|
||||
use mld_d_prec_type
|
||||
use mld_d_hybrid_aggregator_mod, mld_protect_name => mld_d_hybrid_aggregator_build_tprol
|
||||
use mld_d_inner_mod
|
||||
implicit none
|
||||
class(mld_d_hybrid_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
|
||||
|
||||
! Local variables
|
||||
character(len=20) :: name
|
||||
integer(psb_mpik_) :: ictxt, np, me
|
||||
integer(psb_ipk_) :: err_act
|
||||
integer(psb_ipk_) :: ntaggr
|
||||
integer(psb_ipk_) :: debug_level, debug_unit
|
||||
|
||||
name='mld_d_hybrid_aggregator_tprol'
|
||||
if (psb_get_errstatus().ne.0) return
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
info = psb_success_
|
||||
ictxt = desc_a%get_context()
|
||||
call psb_info(ictxt,me,np)
|
||||
|
||||
call mld_check_def(parms%ml_cycle,'Multilevel cycle',&
|
||||
& mld_mult_ml_,is_legal_ml_cycle)
|
||||
call mld_check_def(parms%par_aggr_alg,'Aggregation',&
|
||||
& mld_dec_aggr_,is_legal_ml_par_aggr_alg)
|
||||
call mld_check_def(parms%aggr_ord,'Ordering',&
|
||||
& mld_aggr_ord_nat_,is_legal_ml_aggr_ord)
|
||||
call mld_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs)
|
||||
|
||||
|
||||
call mld_d_hyb_map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (info==psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='hyb_map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
call psb_erractionrestore(err_act)
|
||||
return
|
||||
|
||||
9999 call psb_error_handler(err_act)
|
||||
return
|
||||
|
||||
end subroutine mld_d_hybrid_aggregator_build_tprol
|
||||
+6
-6
@@ -36,9 +36,9 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
! File: mld_d_vmb_map__bld.f90
|
||||
! File: mld_d_soc1_map__bld.f90
|
||||
!
|
||||
! Subroutine: mld_d_vmb_map_bld
|
||||
! Subroutine: mld_d_soc1_map_bld
|
||||
! Version: real
|
||||
!
|
||||
! This routine builds the tentative prolongator based on the
|
||||
@@ -67,11 +67,11 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
subroutine mld_d_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
subroutine mld_d_soc1_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
use psb_base_mod
|
||||
use mld_base_prec_type
|
||||
use mld_d_inner_mod!, mld_protect_name => mld_d_vmb_map_bld
|
||||
use mld_d_inner_mod!, mld_protect_name => mld_d_soc1_map_bld
|
||||
|
||||
implicit none
|
||||
|
||||
@@ -98,7 +98,7 @@ subroutine mld_d_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (psb_get_errstatus() /= 0) return
|
||||
info=psb_success_
|
||||
name = 'mld_vmb_map_bld'
|
||||
name = 'mld_soc1_map_bld'
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
@@ -318,5 +318,5 @@ subroutine mld_d_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
return
|
||||
|
||||
end subroutine mld_d_vmb_map_bld
|
||||
end subroutine mld_d_soc1_map_bld
|
||||
|
||||
+7
-7
@@ -36,13 +36,13 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
! File: mld_d_hyb_map__bld.f90
|
||||
! File: mld_d_soc2_map__bld.f90
|
||||
!
|
||||
! Subroutine: mld_d_hyb_map_bld
|
||||
! Subroutine: mld_d_soc2_map_bld
|
||||
! Version: real
|
||||
!
|
||||
! The aggregator object hosts the aggregation method for building
|
||||
! the multilevel hierarchy. This variant is based on the hybrid method
|
||||
! the multilevel hierarchy. This variant is based on the method
|
||||
! presented in
|
||||
!
|
||||
! S. Gratton, P. Henon, P. Jiranek and X. Vasseur:
|
||||
@@ -66,11 +66,11 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
subroutine mld_d_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
subroutine mld_d_soc2_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
use psb_base_mod
|
||||
use mld_base_prec_type
|
||||
use mld_d_inner_mod!, mld_protect_name => mld_d_hyb_map_bld
|
||||
use mld_d_inner_mod!, mld_protect_name => mld_d_soc2_map_bld
|
||||
|
||||
implicit none
|
||||
|
||||
@@ -98,7 +98,7 @@ subroutine mld_d_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (psb_get_errstatus() /= 0) return
|
||||
info=psb_success_
|
||||
name = 'mld_hyb_map_bld'
|
||||
name = 'mld_soc2_map_bld'
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
@@ -326,5 +326,5 @@ subroutine mld_d_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
return
|
||||
|
||||
end subroutine mld_d_hyb_map_bld
|
||||
end subroutine mld_d_soc2_map_bld
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
! Version: real
|
||||
!
|
||||
!
|
||||
! This routine is mainly an interface to vmb_map_bld where the real work is performed.
|
||||
! This routine is mainly an interface to map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
@@ -127,13 +127,13 @@ subroutine mld_d_symdec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,
|
||||
if (info == psb_success_) call atmp%cscnv(info,type='CSR')
|
||||
|
||||
if (info == psb_success_) &
|
||||
& call mld_d_vmb_map_bld(parms%aggr_ord,parms%aggr_thresh,atmp,desc_a,nlaggr,ilaggr,info)
|
||||
& call ag%map_bld(parms%aggr_ord,parms%aggr_thresh,atmp,desc_a,nlaggr,ilaggr,info)
|
||||
if (info == psb_success_) call atmp%free()
|
||||
|
||||
if (info == psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='vmb_map_bld/map_to_tprol')
|
||||
call psb_errpush(info,name,a_err='map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
! Subroutine: mld_s_dec_aggregator_tprol
|
||||
! Version: real
|
||||
!
|
||||
! This routine is mainly an interface to vmb_map_bld where the real work is performed.
|
||||
! This routine is mainly an interface to map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
@@ -111,12 +111,11 @@ subroutine mld_s_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_
|
||||
|
||||
|
||||
call ag%map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
!!$ call mld_s_vmb_map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (info==psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='vmb_map_bld/map_to_tprol')
|
||||
call psb_errpush(info,name,a_err='map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
!
|
||||
!
|
||||
! MLD2P4 version 2.2
|
||||
! MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
! based on PSBLAS (Parallel Sparse BLAS version 3.5)
|
||||
!
|
||||
! (C) Copyright 2008-2018
|
||||
!
|
||||
! Salvatore Filippone
|
||||
! Pasqua D'Ambra
|
||||
! Daniela di Serafino
|
||||
!
|
||||
! Redistribution and use in source and binary forms, with or without
|
||||
! modification, are permitted provided that the following conditions
|
||||
! are met:
|
||||
! 1. Redistributions of source code must retain the above copyright
|
||||
! notice, this list of conditions and the following disclaimer.
|
||||
! 2. Redistributions in binary form must reproduce the above copyright
|
||||
! notice, this list of conditions, and the following disclaimer in the
|
||||
! documentation and/or other materials provided with the distribution.
|
||||
! 3. The name of the MLD2P4 group or the names of its contributors may
|
||||
! not be used to endorse or promote products derived from this
|
||||
! software without specific written permission.
|
||||
!
|
||||
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
|
||||
! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
! POSSIBILITY OF SUCH DAMAGE.
|
||||
!
|
||||
!
|
||||
! File: mld_s_hybrid_aggregator_tprol.f90
|
||||
!
|
||||
! Subroutine: mld_s_hybrid_aggregator_tprol
|
||||
! Version: real
|
||||
!
|
||||
!
|
||||
! This routine is mainly an interface to hyb_map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
!
|
||||
!
|
||||
! Arguments:
|
||||
! p - type(mld_s_onelev_type), input/output.
|
||||
! The 'one-level' data structure containing the control
|
||||
! parameters and (eventually) coarse matrix and prolongator/restrictors.
|
||||
!
|
||||
! a - type(psb_sspmat_type).
|
||||
! The sparse matrix structure containing the local part of the
|
||||
! fine-level matrix.
|
||||
! desc_a - type(psb_desc_type), input.
|
||||
! The communication descriptor of a.
|
||||
! ilaggr - integer, dimension(:), allocatable, output
|
||||
! The mapping between the row indices of the coarse-level
|
||||
! matrix and the row indices of the fine-level matrix.
|
||||
! ilaggr(i)=j means that node i in the adjacency graph
|
||||
! of the fine-level matrix is mapped onto node j in the
|
||||
! adjacency graph of the coarse-level matrix. Note that on exit the indices
|
||||
! will be shifted so as to make sure the ranges on the various processes do not
|
||||
! overlap.
|
||||
! nlaggr - integer, dimension(:), allocatable, output
|
||||
! nlaggr(i) contains the aggregates held by process i.
|
||||
! op_prol - type(psb_sspmat_type), output
|
||||
! The tentative prolongator, based on ilaggr.
|
||||
!
|
||||
! info - integer, output.
|
||||
! Error code.
|
||||
!
|
||||
subroutine mld_s_hybrid_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
use psb_base_mod
|
||||
use mld_s_prec_type
|
||||
use mld_s_hybrid_aggregator_mod, mld_protect_name => mld_s_hybrid_aggregator_build_tprol
|
||||
use mld_s_inner_mod
|
||||
implicit none
|
||||
class(mld_s_hybrid_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
|
||||
|
||||
! Local variables
|
||||
character(len=20) :: name
|
||||
integer(psb_mpik_) :: ictxt, np, me
|
||||
integer(psb_ipk_) :: err_act
|
||||
integer(psb_ipk_) :: ntaggr
|
||||
integer(psb_ipk_) :: debug_level, debug_unit
|
||||
|
||||
name='mld_s_hybrid_aggregator_tprol'
|
||||
if (psb_get_errstatus().ne.0) return
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
info = psb_success_
|
||||
ictxt = desc_a%get_context()
|
||||
call psb_info(ictxt,me,np)
|
||||
|
||||
call mld_check_def(parms%ml_cycle,'Multilevel cycle',&
|
||||
& mld_mult_ml_,is_legal_ml_cycle)
|
||||
call mld_check_def(parms%par_aggr_alg,'Aggregation',&
|
||||
& mld_dec_aggr_,is_legal_ml_par_aggr_alg)
|
||||
call mld_check_def(parms%aggr_ord,'Ordering',&
|
||||
& mld_aggr_ord_nat_,is_legal_ml_aggr_ord)
|
||||
call mld_check_def(parms%aggr_thresh,'Aggr_Thresh',szero,is_legal_s_aggr_thrs)
|
||||
|
||||
|
||||
call mld_s_hyb_map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (info==psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='hyb_map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
call psb_erractionrestore(err_act)
|
||||
return
|
||||
|
||||
9999 call psb_error_handler(err_act)
|
||||
return
|
||||
|
||||
end subroutine mld_s_hybrid_aggregator_build_tprol
|
||||
+6
-6
@@ -36,9 +36,9 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
! File: mld_s_vmb_map__bld.f90
|
||||
! File: mld_s_soc1_map__bld.f90
|
||||
!
|
||||
! Subroutine: mld_s_vmb_map_bld
|
||||
! Subroutine: mld_s_soc1_map_bld
|
||||
! Version: real
|
||||
!
|
||||
! This routine builds the tentative prolongator based on the
|
||||
@@ -67,11 +67,11 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
subroutine mld_s_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
subroutine mld_s_soc1_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
use psb_base_mod
|
||||
use mld_base_prec_type
|
||||
use mld_s_inner_mod!, mld_protect_name => mld_s_vmb_map_bld
|
||||
use mld_s_inner_mod!, mld_protect_name => mld_s_soc1_map_bld
|
||||
|
||||
implicit none
|
||||
|
||||
@@ -98,7 +98,7 @@ subroutine mld_s_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (psb_get_errstatus() /= 0) return
|
||||
info=psb_success_
|
||||
name = 'mld_vmb_map_bld'
|
||||
name = 'mld_soc1_map_bld'
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
@@ -318,5 +318,5 @@ subroutine mld_s_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
return
|
||||
|
||||
end subroutine mld_s_vmb_map_bld
|
||||
end subroutine mld_s_soc1_map_bld
|
||||
|
||||
+7
-7
@@ -36,13 +36,13 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
! File: mld_s_hyb_map__bld.f90
|
||||
! File: mld_s_soc2_map__bld.f90
|
||||
!
|
||||
! Subroutine: mld_s_hyb_map_bld
|
||||
! Subroutine: mld_s_soc2_map_bld
|
||||
! Version: real
|
||||
!
|
||||
! The aggregator object hosts the aggregation method for building
|
||||
! the multilevel hierarchy. This variant is based on the hybrid method
|
||||
! the multilevel hierarchy. This variant is based on the method
|
||||
! presented in
|
||||
!
|
||||
! S. Gratton, P. Henon, P. Jiranek and X. Vasseur:
|
||||
@@ -66,11 +66,11 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
subroutine mld_s_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
subroutine mld_s_soc2_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
use psb_base_mod
|
||||
use mld_base_prec_type
|
||||
use mld_s_inner_mod!, mld_protect_name => mld_s_hyb_map_bld
|
||||
use mld_s_inner_mod!, mld_protect_name => mld_s_soc2_map_bld
|
||||
|
||||
implicit none
|
||||
|
||||
@@ -98,7 +98,7 @@ subroutine mld_s_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (psb_get_errstatus() /= 0) return
|
||||
info=psb_success_
|
||||
name = 'mld_hyb_map_bld'
|
||||
name = 'mld_soc2_map_bld'
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
@@ -326,5 +326,5 @@ subroutine mld_s_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
return
|
||||
|
||||
end subroutine mld_s_hyb_map_bld
|
||||
end subroutine mld_s_soc2_map_bld
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
! Version: real
|
||||
!
|
||||
!
|
||||
! This routine is mainly an interface to vmb_map_bld where the real work is performed.
|
||||
! This routine is mainly an interface to map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
@@ -127,13 +127,13 @@ subroutine mld_s_symdec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,
|
||||
if (info == psb_success_) call atmp%cscnv(info,type='CSR')
|
||||
|
||||
if (info == psb_success_) &
|
||||
& call mld_s_vmb_map_bld(parms%aggr_ord,parms%aggr_thresh,atmp,desc_a,nlaggr,ilaggr,info)
|
||||
& call ag%map_bld(parms%aggr_ord,parms%aggr_thresh,atmp,desc_a,nlaggr,ilaggr,info)
|
||||
if (info == psb_success_) call atmp%free()
|
||||
|
||||
if (info == psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='vmb_map_bld/map_to_tprol')
|
||||
call psb_errpush(info,name,a_err='map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
! Subroutine: mld_z_dec_aggregator_tprol
|
||||
! Version: complex
|
||||
!
|
||||
! This routine is mainly an interface to vmb_map_bld where the real work is performed.
|
||||
! This routine is mainly an interface to map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
@@ -111,12 +111,11 @@ subroutine mld_z_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_
|
||||
|
||||
|
||||
call ag%map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
!!$ call mld_z_vmb_map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (info==psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='vmb_map_bld/map_to_tprol')
|
||||
call psb_errpush(info,name,a_err='map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
!
|
||||
!
|
||||
! MLD2P4 version 2.2
|
||||
! MultiLevel Domain Decomposition Parallel Preconditioners Package
|
||||
! based on PSBLAS (Parallel Sparse BLAS version 3.5)
|
||||
!
|
||||
! (C) Copyright 2008-2018
|
||||
!
|
||||
! Salvatore Filippone
|
||||
! Pasqua D'Ambra
|
||||
! Daniela di Serafino
|
||||
!
|
||||
! Redistribution and use in source and binary forms, with or without
|
||||
! modification, are permitted provided that the following conditions
|
||||
! are met:
|
||||
! 1. Redistributions of source code must retain the above copyright
|
||||
! notice, this list of conditions and the following disclaimer.
|
||||
! 2. Redistributions in binary form must reproduce the above copyright
|
||||
! notice, this list of conditions, and the following disclaimer in the
|
||||
! documentation and/or other materials provided with the distribution.
|
||||
! 3. The name of the MLD2P4 group or the names of its contributors may
|
||||
! not be used to endorse or promote products derived from this
|
||||
! software without specific written permission.
|
||||
!
|
||||
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
! ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
! TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MLD2P4 GROUP OR ITS CONTRIBUTORS
|
||||
! BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
! POSSIBILITY OF SUCH DAMAGE.
|
||||
!
|
||||
!
|
||||
! File: mld_z_hybrid_aggregator_tprol.f90
|
||||
!
|
||||
! Subroutine: mld_z_hybrid_aggregator_tprol
|
||||
! Version: complex
|
||||
!
|
||||
!
|
||||
! This routine is mainly an interface to hyb_map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
!
|
||||
!
|
||||
! Arguments:
|
||||
! p - type(mld_z_onelev_type), input/output.
|
||||
! The 'one-level' data structure containing the control
|
||||
! parameters and (eventually) coarse matrix and prolongator/restrictors.
|
||||
!
|
||||
! a - type(psb_zspmat_type).
|
||||
! The sparse matrix structure containing the local part of the
|
||||
! fine-level matrix.
|
||||
! desc_a - type(psb_desc_type), input.
|
||||
! The communication descriptor of a.
|
||||
! ilaggr - integer, dimension(:), allocatable, output
|
||||
! The mapping between the row indices of the coarse-level
|
||||
! matrix and the row indices of the fine-level matrix.
|
||||
! ilaggr(i)=j means that node i in the adjacency graph
|
||||
! of the fine-level matrix is mapped onto node j in the
|
||||
! adjacency graph of the coarse-level matrix. Note that on exit the indices
|
||||
! will be shifted so as to make sure the ranges on the various processes do not
|
||||
! overlap.
|
||||
! nlaggr - integer, dimension(:), allocatable, output
|
||||
! nlaggr(i) contains the aggregates held by process i.
|
||||
! op_prol - type(psb_zspmat_type), output
|
||||
! The tentative prolongator, based on ilaggr.
|
||||
!
|
||||
! info - integer, output.
|
||||
! Error code.
|
||||
!
|
||||
subroutine mld_z_hybrid_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
use psb_base_mod
|
||||
use mld_z_prec_type
|
||||
use mld_z_hybrid_aggregator_mod, mld_protect_name => mld_z_hybrid_aggregator_build_tprol
|
||||
use mld_z_inner_mod
|
||||
implicit none
|
||||
class(mld_z_hybrid_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
|
||||
|
||||
! Local variables
|
||||
character(len=20) :: name
|
||||
integer(psb_mpik_) :: ictxt, np, me
|
||||
integer(psb_ipk_) :: err_act
|
||||
integer(psb_ipk_) :: ntaggr
|
||||
integer(psb_ipk_) :: debug_level, debug_unit
|
||||
|
||||
name='mld_z_hybrid_aggregator_tprol'
|
||||
if (psb_get_errstatus().ne.0) return
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
info = psb_success_
|
||||
ictxt = desc_a%get_context()
|
||||
call psb_info(ictxt,me,np)
|
||||
|
||||
call mld_check_def(parms%ml_cycle,'Multilevel cycle',&
|
||||
& mld_mult_ml_,is_legal_ml_cycle)
|
||||
call mld_check_def(parms%par_aggr_alg,'Aggregation',&
|
||||
& mld_dec_aggr_,is_legal_ml_par_aggr_alg)
|
||||
call mld_check_def(parms%aggr_ord,'Ordering',&
|
||||
& mld_aggr_ord_nat_,is_legal_ml_aggr_ord)
|
||||
call mld_check_def(parms%aggr_thresh,'Aggr_Thresh',dzero,is_legal_d_aggr_thrs)
|
||||
|
||||
|
||||
call mld_z_hyb_map_bld(parms%aggr_ord,parms%aggr_thresh,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (info==psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='hyb_map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
call psb_erractionrestore(err_act)
|
||||
return
|
||||
|
||||
9999 call psb_error_handler(err_act)
|
||||
return
|
||||
|
||||
end subroutine mld_z_hybrid_aggregator_build_tprol
|
||||
+6
-6
@@ -36,9 +36,9 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
! File: mld_z_vmb_map__bld.f90
|
||||
! File: mld_z_soc1_map__bld.f90
|
||||
!
|
||||
! Subroutine: mld_z_vmb_map_bld
|
||||
! Subroutine: mld_z_soc1_map_bld
|
||||
! Version: complex
|
||||
!
|
||||
! This routine builds the tentative prolongator based on the
|
||||
@@ -67,11 +67,11 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
subroutine mld_z_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
subroutine mld_z_soc1_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
use psb_base_mod
|
||||
use mld_base_prec_type
|
||||
use mld_z_inner_mod!, mld_protect_name => mld_z_vmb_map_bld
|
||||
use mld_z_inner_mod!, mld_protect_name => mld_z_soc1_map_bld
|
||||
|
||||
implicit none
|
||||
|
||||
@@ -98,7 +98,7 @@ subroutine mld_z_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (psb_get_errstatus() /= 0) return
|
||||
info=psb_success_
|
||||
name = 'mld_vmb_map_bld'
|
||||
name = 'mld_soc1_map_bld'
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
@@ -318,5 +318,5 @@ subroutine mld_z_vmb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
return
|
||||
|
||||
end subroutine mld_z_vmb_map_bld
|
||||
end subroutine mld_z_soc1_map_bld
|
||||
|
||||
+7
-7
@@ -36,13 +36,13 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
! File: mld_z_hyb_map__bld.f90
|
||||
! File: mld_z_soc2_map__bld.f90
|
||||
!
|
||||
! Subroutine: mld_z_hyb_map_bld
|
||||
! Subroutine: mld_z_soc2_map_bld
|
||||
! Version: complex
|
||||
!
|
||||
! The aggregator object hosts the aggregation method for building
|
||||
! the multilevel hierarchy. This variant is based on the hybrid method
|
||||
! the multilevel hierarchy. This variant is based on the method
|
||||
! presented in
|
||||
!
|
||||
! S. Gratton, P. Henon, P. Jiranek and X. Vasseur:
|
||||
@@ -66,11 +66,11 @@
|
||||
!
|
||||
!
|
||||
!
|
||||
subroutine mld_z_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
subroutine mld_z_soc2_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
use psb_base_mod
|
||||
use mld_base_prec_type
|
||||
use mld_z_inner_mod!, mld_protect_name => mld_z_hyb_map_bld
|
||||
use mld_z_inner_mod!, mld_protect_name => mld_z_soc2_map_bld
|
||||
|
||||
implicit none
|
||||
|
||||
@@ -98,7 +98,7 @@ subroutine mld_z_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
if (psb_get_errstatus() /= 0) return
|
||||
info=psb_success_
|
||||
name = 'mld_hyb_map_bld'
|
||||
name = 'mld_soc2_map_bld'
|
||||
call psb_erractionsave(err_act)
|
||||
debug_unit = psb_get_debug_unit()
|
||||
debug_level = psb_get_debug_level()
|
||||
@@ -326,5 +326,5 @@ subroutine mld_z_hyb_map_bld(iorder,theta,a,desc_a,nlaggr,ilaggr,info)
|
||||
|
||||
return
|
||||
|
||||
end subroutine mld_z_hyb_map_bld
|
||||
end subroutine mld_z_soc2_map_bld
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
! Version: complex
|
||||
!
|
||||
!
|
||||
! This routine is mainly an interface to vmb_map_bld where the real work is performed.
|
||||
! This routine is mainly an interface to map_bld where the real work is performed.
|
||||
! It takes care of some consistency checking, and calls map_to_tprol, which is
|
||||
! refactored and shared among all the aggregation methods that produce a simple
|
||||
! integer mapping.
|
||||
@@ -127,13 +127,13 @@ subroutine mld_z_symdec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,
|
||||
if (info == psb_success_) call atmp%cscnv(info,type='CSR')
|
||||
|
||||
if (info == psb_success_) &
|
||||
& call mld_z_vmb_map_bld(parms%aggr_ord,parms%aggr_thresh,atmp,desc_a,nlaggr,ilaggr,info)
|
||||
& call ag%map_bld(parms%aggr_ord,parms%aggr_thresh,atmp,desc_a,nlaggr,ilaggr,info)
|
||||
if (info == psb_success_) call atmp%free()
|
||||
|
||||
if (info == psb_success_) call mld_map_to_tprol(desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
if (info /= psb_success_) then
|
||||
info=psb_err_from_subroutine_
|
||||
call psb_errpush(info,name,a_err='vmb_map_bld/map_to_tprol')
|
||||
call psb_errpush(info,name,a_err='map_bld/map_to_tprol')
|
||||
goto 9999
|
||||
endif
|
||||
|
||||
|
||||
@@ -234,8 +234,8 @@ module mld_base_prec_type
|
||||
! Legal values for entry: mld_aggr_type_
|
||||
!
|
||||
integer(psb_ipk_), parameter :: mld_noalg_ = 0
|
||||
integer(psb_ipk_), parameter :: mld_vmb_ = 1
|
||||
integer(psb_ipk_), parameter :: mld_hyb_ = 2
|
||||
integer(psb_ipk_), parameter :: mld_soc1_ = 1
|
||||
integer(psb_ipk_), parameter :: mld_soc2_ = 2
|
||||
!
|
||||
! Legal values for entry: mld_aggr_prol_
|
||||
!
|
||||
@@ -323,7 +323,7 @@ module mld_base_prec_type
|
||||
& matrix_names(0:1)=(/'distributed ','replicated '/)
|
||||
character(len=18), parameter, private :: &
|
||||
& aggr_type_names(0:2)=(/'None ',&
|
||||
& 'VMB aggregation ', 'Hybrid aggregation'/)
|
||||
& 'SOC measure 1 ', 'SOC Measure 2 '/)
|
||||
character(len=18), parameter, private :: &
|
||||
& par_aggr_alg_names(0:2)=(/&
|
||||
& 'decoupled aggr. ', 'sym. dec. aggr. ',&
|
||||
@@ -438,10 +438,10 @@ contains
|
||||
val = mld_kcycle_ml_
|
||||
case('KCYCLESYM')
|
||||
val = mld_kcyclesym_ml_
|
||||
case('HYB')
|
||||
val = mld_hyb_
|
||||
case('VMB')
|
||||
val = mld_vmb_
|
||||
case('SOC2')
|
||||
val = mld_soc2_
|
||||
case('SOC1')
|
||||
val = mld_soc1_
|
||||
case('DEC')
|
||||
val = mld_dec_aggr_
|
||||
case('SYMDEC')
|
||||
@@ -774,7 +774,7 @@ contains
|
||||
integer(psb_ipk_), intent(in) :: ip
|
||||
logical :: is_legal_ml_aggr_type
|
||||
|
||||
is_legal_ml_aggr_type = (ip >= mld_vmb_) .and. (ip <= mld_hyb_)
|
||||
is_legal_ml_aggr_type = (ip >= mld_soc1_) .and. (ip <= mld_soc2_)
|
||||
return
|
||||
end function is_legal_ml_aggr_type
|
||||
function is_legal_ml_aggr_ord(ip)
|
||||
|
||||
@@ -114,7 +114,7 @@ module mld_c_dec_aggregator_mod
|
||||
end subroutine mld_c_map_bld
|
||||
end interface
|
||||
|
||||
procedure(mld_c_map_bld) :: mld_c_vmb_map_bld, mld_c_hyb_map_bld
|
||||
procedure(mld_c_map_bld) :: mld_c_soc1_map_bld, mld_c_soc2_map_bld
|
||||
|
||||
interface
|
||||
subroutine mld_c_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
@@ -161,13 +161,13 @@ contains
|
||||
select case(parms%aggr_type)
|
||||
case (mld_noalg_)
|
||||
ag%map_bld => null()
|
||||
case (mld_vmb_)
|
||||
ag%map_bld => mld_c_vmb_map_bld
|
||||
case (mld_hyb_)
|
||||
ag%map_bld => mld_c_hyb_map_bld
|
||||
case (mld_soc1_)
|
||||
ag%map_bld => mld_c_soc1_map_bld
|
||||
case (mld_soc2_)
|
||||
ag%map_bld => mld_c_soc2_map_bld
|
||||
case default
|
||||
write(0,*) 'Unknown aggregation type, defaulting to VMB'
|
||||
ag%map_bld => mld_c_vmb_map_bld
|
||||
write(0,*) 'Unknown aggregation type, defaulting to SOC1'
|
||||
ag%map_bld => mld_c_soc1_map_bld
|
||||
end select
|
||||
|
||||
return
|
||||
@@ -178,7 +178,7 @@ contains
|
||||
implicit none
|
||||
class(mld_c_dec_aggregator_type), intent(inout) :: ag
|
||||
|
||||
ag%map_bld => mld_c_vmb_map_bld
|
||||
ag%map_bld => mld_c_soc1_map_bld
|
||||
|
||||
return
|
||||
end subroutine mld_c_dec_aggregator_default
|
||||
|
||||
@@ -489,7 +489,7 @@ contains
|
||||
lv%parms%sweeps_pre = 1
|
||||
lv%parms%sweeps_post = 1
|
||||
lv%parms%ml_cycle = mld_vcycle_ml_
|
||||
lv%parms%aggr_type = mld_vmb_
|
||||
lv%parms%aggr_type = mld_soc1_
|
||||
lv%parms%par_aggr_alg = mld_dec_aggr_
|
||||
lv%parms%aggr_ord = mld_aggr_ord_nat_
|
||||
lv%parms%aggr_prol = mld_smooth_prol_
|
||||
|
||||
@@ -114,7 +114,7 @@ module mld_d_dec_aggregator_mod
|
||||
end subroutine mld_d_map_bld
|
||||
end interface
|
||||
|
||||
procedure(mld_d_map_bld) :: mld_d_vmb_map_bld, mld_d_hyb_map_bld
|
||||
procedure(mld_d_map_bld) :: mld_d_soc1_map_bld, mld_d_soc2_map_bld
|
||||
|
||||
interface
|
||||
subroutine mld_d_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
@@ -161,13 +161,13 @@ contains
|
||||
select case(parms%aggr_type)
|
||||
case (mld_noalg_)
|
||||
ag%map_bld => null()
|
||||
case (mld_vmb_)
|
||||
ag%map_bld => mld_d_vmb_map_bld
|
||||
case (mld_hyb_)
|
||||
ag%map_bld => mld_d_hyb_map_bld
|
||||
case (mld_soc1_)
|
||||
ag%map_bld => mld_d_soc1_map_bld
|
||||
case (mld_soc2_)
|
||||
ag%map_bld => mld_d_soc2_map_bld
|
||||
case default
|
||||
write(0,*) 'Unknown aggregation type, defaulting to VMB'
|
||||
ag%map_bld => mld_d_vmb_map_bld
|
||||
write(0,*) 'Unknown aggregation type, defaulting to SOC1'
|
||||
ag%map_bld => mld_d_soc1_map_bld
|
||||
end select
|
||||
|
||||
return
|
||||
@@ -178,7 +178,7 @@ contains
|
||||
implicit none
|
||||
class(mld_d_dec_aggregator_type), intent(inout) :: ag
|
||||
|
||||
ag%map_bld => mld_d_vmb_map_bld
|
||||
ag%map_bld => mld_d_soc1_map_bld
|
||||
|
||||
return
|
||||
end subroutine mld_d_dec_aggregator_default
|
||||
|
||||
@@ -489,7 +489,7 @@ contains
|
||||
lv%parms%sweeps_pre = 1
|
||||
lv%parms%sweeps_post = 1
|
||||
lv%parms%ml_cycle = mld_vcycle_ml_
|
||||
lv%parms%aggr_type = mld_vmb_
|
||||
lv%parms%aggr_type = mld_soc1_
|
||||
lv%parms%par_aggr_alg = mld_dec_aggr_
|
||||
lv%parms%aggr_ord = mld_aggr_ord_nat_
|
||||
lv%parms%aggr_prol = mld_smooth_prol_
|
||||
|
||||
@@ -114,7 +114,7 @@ module mld_s_dec_aggregator_mod
|
||||
end subroutine mld_s_map_bld
|
||||
end interface
|
||||
|
||||
procedure(mld_s_map_bld) :: mld_s_vmb_map_bld, mld_s_hyb_map_bld
|
||||
procedure(mld_s_map_bld) :: mld_s_soc1_map_bld, mld_s_soc2_map_bld
|
||||
|
||||
interface
|
||||
subroutine mld_s_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
@@ -161,13 +161,13 @@ contains
|
||||
select case(parms%aggr_type)
|
||||
case (mld_noalg_)
|
||||
ag%map_bld => null()
|
||||
case (mld_vmb_)
|
||||
ag%map_bld => mld_s_vmb_map_bld
|
||||
case (mld_hyb_)
|
||||
ag%map_bld => mld_s_hyb_map_bld
|
||||
case (mld_soc1_)
|
||||
ag%map_bld => mld_s_soc1_map_bld
|
||||
case (mld_soc2_)
|
||||
ag%map_bld => mld_s_soc2_map_bld
|
||||
case default
|
||||
write(0,*) 'Unknown aggregation type, defaulting to VMB'
|
||||
ag%map_bld => mld_s_vmb_map_bld
|
||||
write(0,*) 'Unknown aggregation type, defaulting to SOC1'
|
||||
ag%map_bld => mld_s_soc1_map_bld
|
||||
end select
|
||||
|
||||
return
|
||||
@@ -178,7 +178,7 @@ contains
|
||||
implicit none
|
||||
class(mld_s_dec_aggregator_type), intent(inout) :: ag
|
||||
|
||||
ag%map_bld => mld_s_vmb_map_bld
|
||||
ag%map_bld => mld_s_soc1_map_bld
|
||||
|
||||
return
|
||||
end subroutine mld_s_dec_aggregator_default
|
||||
|
||||
@@ -489,7 +489,7 @@ contains
|
||||
lv%parms%sweeps_pre = 1
|
||||
lv%parms%sweeps_post = 1
|
||||
lv%parms%ml_cycle = mld_vcycle_ml_
|
||||
lv%parms%aggr_type = mld_vmb_
|
||||
lv%parms%aggr_type = mld_soc1_
|
||||
lv%parms%par_aggr_alg = mld_dec_aggr_
|
||||
lv%parms%aggr_ord = mld_aggr_ord_nat_
|
||||
lv%parms%aggr_prol = mld_smooth_prol_
|
||||
|
||||
@@ -114,7 +114,7 @@ module mld_z_dec_aggregator_mod
|
||||
end subroutine mld_z_map_bld
|
||||
end interface
|
||||
|
||||
procedure(mld_z_map_bld) :: mld_z_vmb_map_bld, mld_z_hyb_map_bld
|
||||
procedure(mld_z_map_bld) :: mld_z_soc1_map_bld, mld_z_soc2_map_bld
|
||||
|
||||
interface
|
||||
subroutine mld_z_dec_aggregator_build_tprol(ag,parms,a,desc_a,ilaggr,nlaggr,op_prol,info)
|
||||
@@ -161,13 +161,13 @@ contains
|
||||
select case(parms%aggr_type)
|
||||
case (mld_noalg_)
|
||||
ag%map_bld => null()
|
||||
case (mld_vmb_)
|
||||
ag%map_bld => mld_z_vmb_map_bld
|
||||
case (mld_hyb_)
|
||||
ag%map_bld => mld_z_hyb_map_bld
|
||||
case (mld_soc1_)
|
||||
ag%map_bld => mld_z_soc1_map_bld
|
||||
case (mld_soc2_)
|
||||
ag%map_bld => mld_z_soc2_map_bld
|
||||
case default
|
||||
write(0,*) 'Unknown aggregation type, defaulting to VMB'
|
||||
ag%map_bld => mld_z_vmb_map_bld
|
||||
write(0,*) 'Unknown aggregation type, defaulting to SOC1'
|
||||
ag%map_bld => mld_z_soc1_map_bld
|
||||
end select
|
||||
|
||||
return
|
||||
@@ -178,7 +178,7 @@ contains
|
||||
implicit none
|
||||
class(mld_z_dec_aggregator_type), intent(inout) :: ag
|
||||
|
||||
ag%map_bld => mld_z_vmb_map_bld
|
||||
ag%map_bld => mld_z_soc1_map_bld
|
||||
|
||||
return
|
||||
end subroutine mld_z_dec_aggregator_default
|
||||
|
||||
@@ -489,7 +489,7 @@ contains
|
||||
lv%parms%sweeps_pre = 1
|
||||
lv%parms%sweeps_post = 1
|
||||
lv%parms%ml_cycle = mld_vcycle_ml_
|
||||
lv%parms%aggr_type = mld_vmb_
|
||||
lv%parms%aggr_type = mld_soc1_
|
||||
lv%parms%par_aggr_alg = mld_dec_aggr_
|
||||
lv%parms%aggr_ord = mld_aggr_ord_nat_
|
||||
lv%parms%aggr_prol = mld_smooth_prol_
|
||||
|
||||
Reference in New Issue
Block a user