From d6e990b04cf89fafe9aa242a0f3a9e98d317cb17 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Mon, 14 May 2018 11:48:15 +0100 Subject: [PATCH] Renamed VMB and HYB into SOC1 and SOC2. --- mlprec/impl/aggregator/Makefile | 8 +- .../aggregator/mld_c_dec_aggregator_tprol.f90 | 5 +- .../mld_c_hybrid_aggregator_tprol.f90 | 130 ------------------ ...vmb_map_bld.f90 => mld_c_soc1_map_bld.f90} | 12 +- ...hyb_map_bld.f90 => mld_c_soc2_map_bld.f90} | 14 +- .../mld_c_symdec_aggregator_tprol.f90 | 6 +- .../aggregator/mld_d_dec_aggregator_tprol.f90 | 5 +- .../mld_d_hybrid_aggregator_tprol.f90 | 130 ------------------ ...vmb_map_bld.f90 => mld_d_soc1_map_bld.f90} | 12 +- ...hyb_map_bld.f90 => mld_d_soc2_map_bld.f90} | 14 +- .../mld_d_symdec_aggregator_tprol.f90 | 6 +- .../aggregator/mld_s_dec_aggregator_tprol.f90 | 5 +- .../mld_s_hybrid_aggregator_tprol.f90 | 130 ------------------ ...vmb_map_bld.f90 => mld_s_soc1_map_bld.f90} | 12 +- ...hyb_map_bld.f90 => mld_s_soc2_map_bld.f90} | 14 +- .../mld_s_symdec_aggregator_tprol.f90 | 6 +- .../aggregator/mld_z_dec_aggregator_tprol.f90 | 5 +- .../mld_z_hybrid_aggregator_tprol.f90 | 130 ------------------ ...vmb_map_bld.f90 => mld_z_soc1_map_bld.f90} | 12 +- ...hyb_map_bld.f90 => mld_z_soc2_map_bld.f90} | 14 +- .../mld_z_symdec_aggregator_tprol.f90 | 6 +- mlprec/mld_base_prec_type.F90 | 16 +-- mlprec/mld_c_dec_aggregator_mod.f90 | 16 +-- mlprec/mld_c_onelev_mod.f90 | 2 +- mlprec/mld_d_dec_aggregator_mod.f90 | 16 +-- mlprec/mld_d_onelev_mod.f90 | 2 +- mlprec/mld_s_dec_aggregator_mod.f90 | 16 +-- mlprec/mld_s_onelev_mod.f90 | 2 +- mlprec/mld_z_dec_aggregator_mod.f90 | 16 +-- mlprec/mld_z_onelev_mod.f90 | 2 +- 30 files changed, 120 insertions(+), 644 deletions(-) delete mode 100644 mlprec/impl/aggregator/mld_c_hybrid_aggregator_tprol.f90 rename mlprec/impl/aggregator/{mld_c_vmb_map_bld.f90 => mld_c_soc1_map_bld.f90} (97%) rename mlprec/impl/aggregator/{mld_c_hyb_map_bld.f90 => mld_c_soc2_map_bld.f90} (96%) delete mode 100644 mlprec/impl/aggregator/mld_d_hybrid_aggregator_tprol.f90 rename mlprec/impl/aggregator/{mld_d_vmb_map_bld.f90 => mld_d_soc1_map_bld.f90} (97%) rename mlprec/impl/aggregator/{mld_d_hyb_map_bld.f90 => mld_d_soc2_map_bld.f90} (96%) delete mode 100644 mlprec/impl/aggregator/mld_s_hybrid_aggregator_tprol.f90 rename mlprec/impl/aggregator/{mld_s_vmb_map_bld.f90 => mld_s_soc1_map_bld.f90} (97%) rename mlprec/impl/aggregator/{mld_s_hyb_map_bld.f90 => mld_s_soc2_map_bld.f90} (96%) delete mode 100644 mlprec/impl/aggregator/mld_z_hybrid_aggregator_tprol.f90 rename mlprec/impl/aggregator/{mld_z_vmb_map_bld.f90 => mld_z_soc1_map_bld.f90} (97%) rename mlprec/impl/aggregator/{mld_z_hyb_map_bld.f90 => mld_z_soc2_map_bld.f90} (96%) diff --git a/mlprec/impl/aggregator/Makefile b/mlprec/impl/aggregator/Makefile index 9ff4f87b..81a51e87 100644 --- a/mlprec/impl/aggregator/Makefile +++ b/mlprec/impl/aggregator/Makefile @@ -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 diff --git a/mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 index f6caf655..efe66b9a 100644 --- a/mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_c_dec_aggregator_tprol.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_c_hybrid_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_c_hybrid_aggregator_tprol.f90 deleted file mode 100644 index 79da415e..00000000 --- a/mlprec/impl/aggregator/mld_c_hybrid_aggregator_tprol.f90 +++ /dev/null @@ -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 diff --git a/mlprec/impl/aggregator/mld_c_vmb_map_bld.f90 b/mlprec/impl/aggregator/mld_c_soc1_map_bld.f90 similarity index 97% rename from mlprec/impl/aggregator/mld_c_vmb_map_bld.f90 rename to mlprec/impl/aggregator/mld_c_soc1_map_bld.f90 index 4c5cf944..1ec3aa18 100644 --- a/mlprec/impl/aggregator/mld_c_vmb_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_c_soc1_map_bld.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_c_hyb_map_bld.f90 b/mlprec/impl/aggregator/mld_c_soc2_map_bld.f90 similarity index 96% rename from mlprec/impl/aggregator/mld_c_hyb_map_bld.f90 rename to mlprec/impl/aggregator/mld_c_soc2_map_bld.f90 index d7dbe2b8..7ceb36fc 100644 --- a/mlprec/impl/aggregator/mld_c_hyb_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_c_soc2_map_bld.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_c_symdec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_c_symdec_aggregator_tprol.f90 index df43dc0a..594831f4 100644 --- a/mlprec/impl/aggregator/mld_c_symdec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_c_symdec_aggregator_tprol.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 index cd5196bc..15a5c2c7 100644 --- a/mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_d_dec_aggregator_tprol.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_d_hybrid_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_d_hybrid_aggregator_tprol.f90 deleted file mode 100644 index b822a956..00000000 --- a/mlprec/impl/aggregator/mld_d_hybrid_aggregator_tprol.f90 +++ /dev/null @@ -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 diff --git a/mlprec/impl/aggregator/mld_d_vmb_map_bld.f90 b/mlprec/impl/aggregator/mld_d_soc1_map_bld.f90 similarity index 97% rename from mlprec/impl/aggregator/mld_d_vmb_map_bld.f90 rename to mlprec/impl/aggregator/mld_d_soc1_map_bld.f90 index 83d22fc4..4c9e935f 100644 --- a/mlprec/impl/aggregator/mld_d_vmb_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_d_soc1_map_bld.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_d_hyb_map_bld.f90 b/mlprec/impl/aggregator/mld_d_soc2_map_bld.f90 similarity index 96% rename from mlprec/impl/aggregator/mld_d_hyb_map_bld.f90 rename to mlprec/impl/aggregator/mld_d_soc2_map_bld.f90 index 1af79aa1..2f57abb9 100644 --- a/mlprec/impl/aggregator/mld_d_hyb_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_d_soc2_map_bld.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_d_symdec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_d_symdec_aggregator_tprol.f90 index 6216c2fc..b3079bdf 100644 --- a/mlprec/impl/aggregator/mld_d_symdec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_d_symdec_aggregator_tprol.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 index f305e2e6..02552a10 100644 --- a/mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_s_dec_aggregator_tprol.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_s_hybrid_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_s_hybrid_aggregator_tprol.f90 deleted file mode 100644 index d2100775..00000000 --- a/mlprec/impl/aggregator/mld_s_hybrid_aggregator_tprol.f90 +++ /dev/null @@ -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 diff --git a/mlprec/impl/aggregator/mld_s_vmb_map_bld.f90 b/mlprec/impl/aggregator/mld_s_soc1_map_bld.f90 similarity index 97% rename from mlprec/impl/aggregator/mld_s_vmb_map_bld.f90 rename to mlprec/impl/aggregator/mld_s_soc1_map_bld.f90 index 93293632..4729964d 100644 --- a/mlprec/impl/aggregator/mld_s_vmb_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_s_soc1_map_bld.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_s_hyb_map_bld.f90 b/mlprec/impl/aggregator/mld_s_soc2_map_bld.f90 similarity index 96% rename from mlprec/impl/aggregator/mld_s_hyb_map_bld.f90 rename to mlprec/impl/aggregator/mld_s_soc2_map_bld.f90 index ec70c6ce..9e0a95cd 100644 --- a/mlprec/impl/aggregator/mld_s_hyb_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_s_soc2_map_bld.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_s_symdec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_s_symdec_aggregator_tprol.f90 index 551ff721..a19f5344 100644 --- a/mlprec/impl/aggregator/mld_s_symdec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_s_symdec_aggregator_tprol.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 index a2ff5ca9..aeac2317 100644 --- a/mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_z_dec_aggregator_tprol.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_z_hybrid_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_z_hybrid_aggregator_tprol.f90 deleted file mode 100644 index bf739e8f..00000000 --- a/mlprec/impl/aggregator/mld_z_hybrid_aggregator_tprol.f90 +++ /dev/null @@ -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 diff --git a/mlprec/impl/aggregator/mld_z_vmb_map_bld.f90 b/mlprec/impl/aggregator/mld_z_soc1_map_bld.f90 similarity index 97% rename from mlprec/impl/aggregator/mld_z_vmb_map_bld.f90 rename to mlprec/impl/aggregator/mld_z_soc1_map_bld.f90 index 507877fc..9a4bc47b 100644 --- a/mlprec/impl/aggregator/mld_z_vmb_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_z_soc1_map_bld.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_z_hyb_map_bld.f90 b/mlprec/impl/aggregator/mld_z_soc2_map_bld.f90 similarity index 96% rename from mlprec/impl/aggregator/mld_z_hyb_map_bld.f90 rename to mlprec/impl/aggregator/mld_z_soc2_map_bld.f90 index 4e245d29..590c3d37 100644 --- a/mlprec/impl/aggregator/mld_z_hyb_map_bld.f90 +++ b/mlprec/impl/aggregator/mld_z_soc2_map_bld.f90 @@ -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 diff --git a/mlprec/impl/aggregator/mld_z_symdec_aggregator_tprol.f90 b/mlprec/impl/aggregator/mld_z_symdec_aggregator_tprol.f90 index 5425f75c..eb619419 100644 --- a/mlprec/impl/aggregator/mld_z_symdec_aggregator_tprol.f90 +++ b/mlprec/impl/aggregator/mld_z_symdec_aggregator_tprol.f90 @@ -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 diff --git a/mlprec/mld_base_prec_type.F90 b/mlprec/mld_base_prec_type.F90 index 81b2f368..b7661e99 100644 --- a/mlprec/mld_base_prec_type.F90 +++ b/mlprec/mld_base_prec_type.F90 @@ -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) diff --git a/mlprec/mld_c_dec_aggregator_mod.f90 b/mlprec/mld_c_dec_aggregator_mod.f90 index ecf6f43c..53a5f2c9 100644 --- a/mlprec/mld_c_dec_aggregator_mod.f90 +++ b/mlprec/mld_c_dec_aggregator_mod.f90 @@ -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 diff --git a/mlprec/mld_c_onelev_mod.f90 b/mlprec/mld_c_onelev_mod.f90 index 8ddbed4e..1ca988ed 100644 --- a/mlprec/mld_c_onelev_mod.f90 +++ b/mlprec/mld_c_onelev_mod.f90 @@ -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_ diff --git a/mlprec/mld_d_dec_aggregator_mod.f90 b/mlprec/mld_d_dec_aggregator_mod.f90 index 3a64e30f..4b5acff3 100644 --- a/mlprec/mld_d_dec_aggregator_mod.f90 +++ b/mlprec/mld_d_dec_aggregator_mod.f90 @@ -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 diff --git a/mlprec/mld_d_onelev_mod.f90 b/mlprec/mld_d_onelev_mod.f90 index a109e6eb..25caa9d7 100644 --- a/mlprec/mld_d_onelev_mod.f90 +++ b/mlprec/mld_d_onelev_mod.f90 @@ -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_ diff --git a/mlprec/mld_s_dec_aggregator_mod.f90 b/mlprec/mld_s_dec_aggregator_mod.f90 index 67a2618a..f1c80053 100644 --- a/mlprec/mld_s_dec_aggregator_mod.f90 +++ b/mlprec/mld_s_dec_aggregator_mod.f90 @@ -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 diff --git a/mlprec/mld_s_onelev_mod.f90 b/mlprec/mld_s_onelev_mod.f90 index e1c7bd01..ce5cd89e 100644 --- a/mlprec/mld_s_onelev_mod.f90 +++ b/mlprec/mld_s_onelev_mod.f90 @@ -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_ diff --git a/mlprec/mld_z_dec_aggregator_mod.f90 b/mlprec/mld_z_dec_aggregator_mod.f90 index 1ed1fa4f..6930230b 100644 --- a/mlprec/mld_z_dec_aggregator_mod.f90 +++ b/mlprec/mld_z_dec_aggregator_mod.f90 @@ -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 diff --git a/mlprec/mld_z_onelev_mod.f90 b/mlprec/mld_z_onelev_mod.f90 index bfc59dde..3f68c9e1 100644 --- a/mlprec/mld_z_onelev_mod.f90 +++ b/mlprec/mld_z_onelev_mod.f90 @@ -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_