From 4260dc74d5ae048080b58d499724ce725a955c5f Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Fri, 15 May 2020 15:44:22 +0200 Subject: [PATCH] Support for L1- variants of hybrid Gauss-Seidel --- mlprec/impl/level/mld_c_base_onelev_csetc.F90 | 21 ++ mlprec/impl/level/mld_d_base_onelev_csetc.F90 | 21 ++ mlprec/impl/level/mld_s_base_onelev_csetc.F90 | 21 ++ mlprec/impl/level/mld_z_base_onelev_csetc.F90 | 21 ++ mlprec/impl/mld_c_smoothers_bld.f90 | 2 +- mlprec/impl/mld_ccprecset.F90 | 249 +++++++++------ mlprec/impl/mld_d_smoothers_bld.f90 | 2 +- mlprec/impl/mld_dcprecset.F90 | 292 ++++++++++-------- mlprec/impl/mld_s_smoothers_bld.f90 | 2 +- mlprec/impl/mld_scprecset.F90 | 249 +++++++++------ mlprec/impl/mld_z_smoothers_bld.f90 | 2 +- mlprec/impl/mld_zcprecset.F90 | 292 ++++++++++-------- mlprec/mld_base_prec_type.F90 | 13 +- 13 files changed, 732 insertions(+), 455 deletions(-) diff --git a/mlprec/impl/level/mld_c_base_onelev_csetc.F90 b/mlprec/impl/level/mld_c_base_onelev_csetc.F90 index 6c5b07e7..262c20aa 100644 --- a/mlprec/impl/level/mld_c_base_onelev_csetc.F90 +++ b/mlprec/impl/level/mld_c_base_onelev_csetc.F90 @@ -134,11 +134,32 @@ subroutine mld_c_base_onelev_csetc(lv,what,val,info,pos,idx) call lv%set(mld_c_as_smoother_mold,info,pos=pos) if (info == 0) call lv%set(mld_c_ilu_solver_mold,info,pos=pos) + case ('GS','FWGS') + call lv%set(mld_c_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_c_gs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('BWGS') + call lv%set(mld_c_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_c_bwgs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) case ('FBGS') call lv%set(mld_c_jac_smoother_mold,info,pos='pre') if (info == 0) call lv%set(mld_c_gs_solver_mold,info,pos='pre') call lv%set(mld_c_jac_smoother_mold,info,pos='post') if (info == 0) call lv%set(mld_c_bwgs_solver_mold,info,pos='post') + case ('L1-GS','L1-FWGS') + call lv%set(mld_c_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_c_gs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('L1-BWGS') + call lv%set(mld_c_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_c_bwgs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('L1-FBGS') + call lv%set(mld_c_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_c_gs_solver_mold,info,pos='pre') + call lv%set(mld_c_l1_jac_smoother_mold,info,pos='post') + if (info == 0) call lv%set(mld_c_bwgs_solver_mold,info,pos='post') case default ! diff --git a/mlprec/impl/level/mld_d_base_onelev_csetc.F90 b/mlprec/impl/level/mld_d_base_onelev_csetc.F90 index 6531894c..69d7d7f8 100644 --- a/mlprec/impl/level/mld_d_base_onelev_csetc.F90 +++ b/mlprec/impl/level/mld_d_base_onelev_csetc.F90 @@ -146,11 +146,32 @@ subroutine mld_d_base_onelev_csetc(lv,what,val,info,pos,idx) call lv%set(mld_d_as_smoother_mold,info,pos=pos) if (info == 0) call lv%set(mld_d_ilu_solver_mold,info,pos=pos) + case ('GS','FWGS') + call lv%set(mld_d_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_d_gs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('BWGS') + call lv%set(mld_d_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_d_bwgs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) case ('FBGS') call lv%set(mld_d_jac_smoother_mold,info,pos='pre') if (info == 0) call lv%set(mld_d_gs_solver_mold,info,pos='pre') call lv%set(mld_d_jac_smoother_mold,info,pos='post') if (info == 0) call lv%set(mld_d_bwgs_solver_mold,info,pos='post') + case ('L1-GS','L1-FWGS') + call lv%set(mld_d_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_d_gs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('L1-BWGS') + call lv%set(mld_d_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_d_bwgs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('L1-FBGS') + call lv%set(mld_d_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_d_gs_solver_mold,info,pos='pre') + call lv%set(mld_d_l1_jac_smoother_mold,info,pos='post') + if (info == 0) call lv%set(mld_d_bwgs_solver_mold,info,pos='post') case default ! diff --git a/mlprec/impl/level/mld_s_base_onelev_csetc.F90 b/mlprec/impl/level/mld_s_base_onelev_csetc.F90 index 8a3de9f8..e28c64dc 100644 --- a/mlprec/impl/level/mld_s_base_onelev_csetc.F90 +++ b/mlprec/impl/level/mld_s_base_onelev_csetc.F90 @@ -134,11 +134,32 @@ subroutine mld_s_base_onelev_csetc(lv,what,val,info,pos,idx) call lv%set(mld_s_as_smoother_mold,info,pos=pos) if (info == 0) call lv%set(mld_s_ilu_solver_mold,info,pos=pos) + case ('GS','FWGS') + call lv%set(mld_s_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_s_gs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('BWGS') + call lv%set(mld_s_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_s_bwgs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) case ('FBGS') call lv%set(mld_s_jac_smoother_mold,info,pos='pre') if (info == 0) call lv%set(mld_s_gs_solver_mold,info,pos='pre') call lv%set(mld_s_jac_smoother_mold,info,pos='post') if (info == 0) call lv%set(mld_s_bwgs_solver_mold,info,pos='post') + case ('L1-GS','L1-FWGS') + call lv%set(mld_s_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_s_gs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('L1-BWGS') + call lv%set(mld_s_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_s_bwgs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('L1-FBGS') + call lv%set(mld_s_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_s_gs_solver_mold,info,pos='pre') + call lv%set(mld_s_l1_jac_smoother_mold,info,pos='post') + if (info == 0) call lv%set(mld_s_bwgs_solver_mold,info,pos='post') case default ! diff --git a/mlprec/impl/level/mld_z_base_onelev_csetc.F90 b/mlprec/impl/level/mld_z_base_onelev_csetc.F90 index cc4c3e35..bfb4025b 100644 --- a/mlprec/impl/level/mld_z_base_onelev_csetc.F90 +++ b/mlprec/impl/level/mld_z_base_onelev_csetc.F90 @@ -146,11 +146,32 @@ subroutine mld_z_base_onelev_csetc(lv,what,val,info,pos,idx) call lv%set(mld_z_as_smoother_mold,info,pos=pos) if (info == 0) call lv%set(mld_z_ilu_solver_mold,info,pos=pos) + case ('GS','FWGS') + call lv%set(mld_z_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_z_gs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('BWGS') + call lv%set(mld_z_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_z_bwgs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) case ('FBGS') call lv%set(mld_z_jac_smoother_mold,info,pos='pre') if (info == 0) call lv%set(mld_z_gs_solver_mold,info,pos='pre') call lv%set(mld_z_jac_smoother_mold,info,pos='post') if (info == 0) call lv%set(mld_z_bwgs_solver_mold,info,pos='post') + case ('L1-GS','L1-FWGS') + call lv%set(mld_z_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_z_gs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('L1-BWGS') + call lv%set(mld_z_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_z_bwgs_solver_mold,info,pos='pre') + if (allocated(lv%sm2a)) deallocate(lv%sm2a) + case ('L1-FBGS') + call lv%set(mld_z_l1_jac_smoother_mold,info,pos='pre') + if (info == 0) call lv%set(mld_z_gs_solver_mold,info,pos='pre') + call lv%set(mld_z_l1_jac_smoother_mold,info,pos='post') + if (info == 0) call lv%set(mld_z_bwgs_solver_mold,info,pos='post') case default ! diff --git a/mlprec/impl/mld_c_smoothers_bld.f90 b/mlprec/impl/mld_c_smoothers_bld.f90 index d1ffe1d4..c0ad3746 100644 --- a/mlprec/impl/mld_c_smoothers_bld.f90 +++ b/mlprec/impl/mld_c_smoothers_bld.f90 @@ -256,7 +256,7 @@ subroutine mld_c_smoothers_bld(a,desc_a,prec,info,amold,vmold,imold) & ' but the coarse matrix has been changed to replicated' end if - case(mld_bjac_,mld_l1_bjac_,mld_jac_, mld_l1_jac_) + case(mld_bjac_,mld_l1_bjac_,mld_jac_, mld_l1_jac_, mld_gs_, mld_fbgs_, mld_l1_gs_,mld_l1_fbgs_) if (prec%precv(iszv)%parms%coarse_mat /= mld_distr_mat_) then write(psb_err_unit,*) & & 'MLD2P4: Warning: original coarse solver was requested as ',& diff --git a/mlprec/impl/mld_ccprecset.F90 b/mlprec/impl/mld_ccprecset.F90 index 7f154c08..9043de76 100644 --- a/mlprec/impl/mld_ccprecset.F90 +++ b/mlprec/impl/mld_ccprecset.F90 @@ -188,75 +188,75 @@ subroutine mld_ccprecseti(p,what,val,info,ilev,ilmax,pos,idx) info = -2 return end if - if (nlev_ > 1) then - call p%precv(nlev_)%set('COARSE_SOLVE',val,info,pos=pos) - select case (val) - case(mld_bjac_,mld_l1_bjac_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',val,info,pos=pos) + if (nlev_ > 1) then + call p%precv(nlev_)%set('COARSE_SOLVE',val,info,pos=pos) + select case (val) + case(mld_bjac_,mld_l1_bjac_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',val,info,pos=pos) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) #else - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) #endif - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info) - case(mld_slu_) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info) + case(mld_slu_) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_ilu_n_, mld_ilu_t_,mld_milu_n_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) - case(mld_mumps_) + case(mld_ilu_n_, mld_ilu_t_,mld_milu_n_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + case(mld_mumps_) #if defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_umf_) + case(mld_umf_) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_sludist_) + case(mld_sludist_) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif case(mld_jac_) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) @@ -267,6 +267,18 @@ subroutine mld_ccprecseti(p,what,val,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',mld_l1_diag_scale_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_gs_,mld_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_bwgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_bwgs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_l1_gs_,mld_l1_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_l1_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) end select endif @@ -401,6 +413,18 @@ subroutine mld_ccprecseti(p,what,val,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',mld_l1_diag_scale_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_gs_,mld_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_bwgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_bwgs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_l1_gs_,mld_l1_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_l1_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) end select endif @@ -569,75 +593,75 @@ subroutine mld_ccprecsetc(p,what,string,info,ilev,ilmax,pos,idx) info = -2 return end if - if (nlev_ > 1) then - call p%precv(nlev_)%set('COARSE_SOLVE',string,info,pos=pos) - select case (psb_toupper(trim(string))) - case('BJAC', 'L1-BJAC') - call p%precv(nlev_)%set('SMOOTHER_TYPE',psb_toupper(trim(string)),info,pos=pos) + if (nlev_ > 1) then + call p%precv(nlev_)%set('COARSE_SOLVE',string,info,pos=pos) + select case (psb_toupper(trim(string))) + case('BJAC', 'L1-BJAC') + call p%precv(nlev_)%set('SMOOTHER_TYPE',psb_toupper(trim(string)),info,pos=pos) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) #else - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) #endif - call p%precv(nlev_)%set('COARSE_MAT','dist',info) - case('SLU') + call p%precv(nlev_)%set('COARSE_MAT','dist',info) + case('SLU') #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif - case('ILU','MILU','ILUT') - call p%precv(nlev_)%set('SMOOTHER_TYPE','bjac',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) - case('MUMPS') + case('ILU','MILU','ILUT') + call p%precv(nlev_)%set('SMOOTHER_TYPE','bjac',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + case('MUMPS') #if defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif - case('UMF') + case('UMF') #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif - case('SLUDIST') + case('SLUDIST') #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif case('JAC','JACOBI') call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) @@ -648,6 +672,18 @@ subroutine mld_ccprecsetc(p,what,string,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','L1-DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('GS','FWGS','FBGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('BWGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','BWGS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('L1-GS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','L1-BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) end select endif @@ -759,11 +795,22 @@ subroutine mld_ccprecsetc(p,what,string,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) - case('L1-JACOBI') call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','L1-DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('GS','FWGS','FBGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('BWGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','BWGS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('L1-GS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','L1-BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) end select endif diff --git a/mlprec/impl/mld_d_smoothers_bld.f90 b/mlprec/impl/mld_d_smoothers_bld.f90 index dfed9902..f7755b37 100644 --- a/mlprec/impl/mld_d_smoothers_bld.f90 +++ b/mlprec/impl/mld_d_smoothers_bld.f90 @@ -256,7 +256,7 @@ subroutine mld_d_smoothers_bld(a,desc_a,prec,info,amold,vmold,imold) & ' but the coarse matrix has been changed to replicated' end if - case(mld_bjac_,mld_l1_bjac_,mld_jac_, mld_l1_jac_) + case(mld_bjac_,mld_l1_bjac_,mld_jac_, mld_l1_jac_, mld_gs_, mld_fbgs_, mld_l1_gs_,mld_l1_fbgs_) if (prec%precv(iszv)%parms%coarse_mat /= mld_distr_mat_) then write(psb_err_unit,*) & & 'MLD2P4: Warning: original coarse solver was requested as ',& diff --git a/mlprec/impl/mld_dcprecset.F90 b/mlprec/impl/mld_dcprecset.F90 index f8d7876f..70e57e18 100644 --- a/mlprec/impl/mld_dcprecset.F90 +++ b/mlprec/impl/mld_dcprecset.F90 @@ -194,89 +194,89 @@ subroutine mld_dcprecseti(p,what,val,info,ilev,ilmax,pos,idx) info = -2 return end if - if (nlev_ > 1) then - call p%precv(nlev_)%set('COARSE_SOLVE',val,info,pos=pos) - select case (val) - case(mld_bjac_,mld_l1_bjac_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',val,info,pos=pos) + if (nlev_ > 1) then + call p%precv(nlev_)%set('COARSE_SOLVE',val,info,pos=pos) + select case (val) + case(mld_bjac_,mld_l1_bjac_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',val,info,pos=pos) #if defined(HAVE_UMF_) - call p%precv(nlev_)%set('SUB_SOLVE',mld_umf_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_umf_,info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) #else - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) #endif - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info) - case(mld_slu_) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info) + case(mld_slu_) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_ilu_n_, mld_ilu_t_,mld_milu_n_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) - case(mld_mumps_) + case(mld_ilu_n_, mld_ilu_t_,mld_milu_n_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + case(mld_mumps_) #if defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_umf_) + case(mld_umf_) #if defined(HAVE_UMF_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_sludist_) + case(mld_sludist_) #if defined(HAVE_SLUDIST_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #elif defined(HAVE_UMF_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_umf_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_umf_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif case(mld_jac_) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) @@ -287,6 +287,18 @@ subroutine mld_dcprecseti(p,what,val,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',mld_l1_diag_scale_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_gs_,mld_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_bwgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_bwgs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_l1_gs_,mld_l1_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_l1_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) end select endif @@ -435,6 +447,18 @@ subroutine mld_dcprecseti(p,what,val,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',mld_l1_diag_scale_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_gs_,mld_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_bwgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_bwgs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_l1_gs_,mld_l1_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_l1_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) end select endif @@ -609,89 +633,88 @@ subroutine mld_dcprecsetc(p,what,string,info,ilev,ilmax,pos,idx) info = -2 return end if - if (nlev_ > 1) then - call p%precv(nlev_)%set('COARSE_SOLVE',string,info,pos=pos) - select case (psb_toupper(trim(string))) - case('BJAC', 'L1-BJAC') - call p%precv(nlev_)%set('SMOOTHER_TYPE',psb_toupper(trim(string)),info,pos=pos) + if (nlev_ > 1) then + call p%precv(nlev_)%set('COARSE_SOLVE',string,info,pos=pos) + select case (psb_toupper(trim(string))) + case('BJAC', 'L1-BJAC') + call p%precv(nlev_)%set('SMOOTHER_TYPE',psb_toupper(trim(string)),info,pos=pos) #if defined(HAVE_UMF_) - call p%precv(nlev_)%set('SUB_SOLVE','UMF',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','UMF',info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) #else - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) #endif - call p%precv(nlev_)%set('COARSE_MAT','dist',info) - case('SLU') + call p%precv(nlev_)%set('COARSE_MAT','dist',info) + case('SLU') #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif - case('ILU','MILU','ILUT') - call p%precv(nlev_)%set('SMOOTHER_TYPE','bjac',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) - case('MUMPS') + case('ILU','MILU','ILUT') + call p%precv(nlev_)%set('SMOOTHER_TYPE','bjac',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + case('MUMPS') #if defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif - case('UMF') + case('UMF') #if defined(HAVE_UMF_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) -#endif - - case('SLUDIST') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) +#endif + case('SLUDIST') #if defined(HAVE_SLUDIST_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #elif defined(HAVE_UMF_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','UMF',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','UMF',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif case('JAC','JACOBI') call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) @@ -702,6 +725,18 @@ subroutine mld_dcprecsetc(p,what,string,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','L1-DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('GS','FWGS','FBGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('BWGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','BWGS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('L1-GS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','L1-BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) end select endif @@ -827,11 +862,22 @@ subroutine mld_dcprecsetc(p,what,string,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) - case('L1-JACOBI') call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','L1-DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('GS','FWGS','FBGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('BWGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','BWGS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('L1-GS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','L1-BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) end select endif diff --git a/mlprec/impl/mld_s_smoothers_bld.f90 b/mlprec/impl/mld_s_smoothers_bld.f90 index 2348825b..fb10abc3 100644 --- a/mlprec/impl/mld_s_smoothers_bld.f90 +++ b/mlprec/impl/mld_s_smoothers_bld.f90 @@ -256,7 +256,7 @@ subroutine mld_s_smoothers_bld(a,desc_a,prec,info,amold,vmold,imold) & ' but the coarse matrix has been changed to replicated' end if - case(mld_bjac_,mld_l1_bjac_,mld_jac_, mld_l1_jac_) + case(mld_bjac_,mld_l1_bjac_,mld_jac_, mld_l1_jac_, mld_gs_, mld_fbgs_, mld_l1_gs_,mld_l1_fbgs_) if (prec%precv(iszv)%parms%coarse_mat /= mld_distr_mat_) then write(psb_err_unit,*) & & 'MLD2P4: Warning: original coarse solver was requested as ',& diff --git a/mlprec/impl/mld_scprecset.F90 b/mlprec/impl/mld_scprecset.F90 index ec925997..71ce1f09 100644 --- a/mlprec/impl/mld_scprecset.F90 +++ b/mlprec/impl/mld_scprecset.F90 @@ -188,75 +188,75 @@ subroutine mld_scprecseti(p,what,val,info,ilev,ilmax,pos,idx) info = -2 return end if - if (nlev_ > 1) then - call p%precv(nlev_)%set('COARSE_SOLVE',val,info,pos=pos) - select case (val) - case(mld_bjac_,mld_l1_bjac_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',val,info,pos=pos) + if (nlev_ > 1) then + call p%precv(nlev_)%set('COARSE_SOLVE',val,info,pos=pos) + select case (val) + case(mld_bjac_,mld_l1_bjac_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',val,info,pos=pos) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) #else - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) #endif - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info) - case(mld_slu_) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info) + case(mld_slu_) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_ilu_n_, mld_ilu_t_,mld_milu_n_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) - case(mld_mumps_) + case(mld_ilu_n_, mld_ilu_t_,mld_milu_n_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + case(mld_mumps_) #if defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_umf_) + case(mld_umf_) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_sludist_) + case(mld_sludist_) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif case(mld_jac_) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) @@ -267,6 +267,18 @@ subroutine mld_scprecseti(p,what,val,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',mld_l1_diag_scale_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_gs_,mld_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_bwgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_bwgs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_l1_gs_,mld_l1_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_l1_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) end select endif @@ -401,6 +413,18 @@ subroutine mld_scprecseti(p,what,val,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',mld_l1_diag_scale_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_gs_,mld_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_bwgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_bwgs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_l1_gs_,mld_l1_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_l1_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) end select endif @@ -569,75 +593,75 @@ subroutine mld_scprecsetc(p,what,string,info,ilev,ilmax,pos,idx) info = -2 return end if - if (nlev_ > 1) then - call p%precv(nlev_)%set('COARSE_SOLVE',string,info,pos=pos) - select case (psb_toupper(trim(string))) - case('BJAC', 'L1-BJAC') - call p%precv(nlev_)%set('SMOOTHER_TYPE',psb_toupper(trim(string)),info,pos=pos) + if (nlev_ > 1) then + call p%precv(nlev_)%set('COARSE_SOLVE',string,info,pos=pos) + select case (psb_toupper(trim(string))) + case('BJAC', 'L1-BJAC') + call p%precv(nlev_)%set('SMOOTHER_TYPE',psb_toupper(trim(string)),info,pos=pos) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) #else - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) #endif - call p%precv(nlev_)%set('COARSE_MAT','dist',info) - case('SLU') + call p%precv(nlev_)%set('COARSE_MAT','dist',info) + case('SLU') #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif - case('ILU','MILU','ILUT') - call p%precv(nlev_)%set('SMOOTHER_TYPE','bjac',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) - case('MUMPS') + case('ILU','MILU','ILUT') + call p%precv(nlev_)%set('SMOOTHER_TYPE','bjac',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + case('MUMPS') #if defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif - case('UMF') + case('UMF') #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif - case('SLUDIST') + case('SLUDIST') #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif case('JAC','JACOBI') call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) @@ -648,6 +672,18 @@ subroutine mld_scprecsetc(p,what,string,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','L1-DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('GS','FWGS','FBGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('BWGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','BWGS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('L1-GS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','L1-BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) end select endif @@ -759,11 +795,22 @@ subroutine mld_scprecsetc(p,what,string,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) - case('L1-JACOBI') call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','L1-DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('GS','FWGS','FBGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('BWGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','BWGS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('L1-GS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','L1-BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) end select endif diff --git a/mlprec/impl/mld_z_smoothers_bld.f90 b/mlprec/impl/mld_z_smoothers_bld.f90 index e8fa4c09..0c1ba6aa 100644 --- a/mlprec/impl/mld_z_smoothers_bld.f90 +++ b/mlprec/impl/mld_z_smoothers_bld.f90 @@ -256,7 +256,7 @@ subroutine mld_z_smoothers_bld(a,desc_a,prec,info,amold,vmold,imold) & ' but the coarse matrix has been changed to replicated' end if - case(mld_bjac_,mld_l1_bjac_,mld_jac_, mld_l1_jac_) + case(mld_bjac_,mld_l1_bjac_,mld_jac_, mld_l1_jac_, mld_gs_, mld_fbgs_, mld_l1_gs_,mld_l1_fbgs_) if (prec%precv(iszv)%parms%coarse_mat /= mld_distr_mat_) then write(psb_err_unit,*) & & 'MLD2P4: Warning: original coarse solver was requested as ',& diff --git a/mlprec/impl/mld_zcprecset.F90 b/mlprec/impl/mld_zcprecset.F90 index 72dcf24a..b5fce826 100644 --- a/mlprec/impl/mld_zcprecset.F90 +++ b/mlprec/impl/mld_zcprecset.F90 @@ -194,89 +194,89 @@ subroutine mld_zcprecseti(p,what,val,info,ilev,ilmax,pos,idx) info = -2 return end if - if (nlev_ > 1) then - call p%precv(nlev_)%set('COARSE_SOLVE',val,info,pos=pos) - select case (val) - case(mld_bjac_,mld_l1_bjac_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',val,info,pos=pos) + if (nlev_ > 1) then + call p%precv(nlev_)%set('COARSE_SOLVE',val,info,pos=pos) + select case (val) + case(mld_bjac_,mld_l1_bjac_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',val,info,pos=pos) #if defined(HAVE_UMF_) - call p%precv(nlev_)%set('SUB_SOLVE',mld_umf_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_umf_,info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) #else - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) #endif - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info) - case(mld_slu_) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info) + case(mld_slu_) #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_ilu_n_, mld_ilu_t_,mld_milu_n_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) - case(mld_mumps_) + case(mld_ilu_n_, mld_ilu_t_,mld_milu_n_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + case(mld_mumps_) #if defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_umf_) + case(mld_umf_) #if defined(HAVE_UMF_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif - case(mld_sludist_) + case(mld_sludist_) #if defined(HAVE_SLUDIST_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',val,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #elif defined(HAVE_UMF_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_umf_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_umf_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_slu_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_repl_mat_,info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_mumps_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_ilu_n_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) #endif case(mld_jac_) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) @@ -287,6 +287,18 @@ subroutine mld_zcprecseti(p,what,val,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',mld_l1_diag_scale_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_gs_,mld_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_bwgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_bwgs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_l1_gs_,mld_l1_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_l1_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) end select endif @@ -435,6 +447,18 @@ subroutine mld_zcprecseti(p,what,val,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE',mld_l1_diag_scale_,info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_gs_,mld_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_bwgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_bwgs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) + case(mld_l1_gs_,mld_l1_fbgs_) + call p%precv(nlev_)%set('SMOOTHER_TYPE',mld_l1_bjac_,info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',mld_gs_,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT',mld_distr_mat_,info,pos=pos) end select endif @@ -609,89 +633,88 @@ subroutine mld_zcprecsetc(p,what,string,info,ilev,ilmax,pos,idx) info = -2 return end if - if (nlev_ > 1) then - call p%precv(nlev_)%set('COARSE_SOLVE',string,info,pos=pos) - select case (psb_toupper(trim(string))) - case('BJAC', 'L1-BJAC') - call p%precv(nlev_)%set('SMOOTHER_TYPE',psb_toupper(trim(string)),info,pos=pos) + if (nlev_ > 1) then + call p%precv(nlev_)%set('COARSE_SOLVE',string,info,pos=pos) + select case (psb_toupper(trim(string))) + case('BJAC', 'L1-BJAC') + call p%precv(nlev_)%set('SMOOTHER_TYPE',psb_toupper(trim(string)),info,pos=pos) #if defined(HAVE_UMF_) - call p%precv(nlev_)%set('SUB_SOLVE','UMF',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','UMF',info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) #else - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) #endif - call p%precv(nlev_)%set('COARSE_MAT','dist',info) - case('SLU') + call p%precv(nlev_)%set('COARSE_MAT','dist',info) + case('SLU') #if defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif - case('ILU','MILU','ILUT') - call p%precv(nlev_)%set('SMOOTHER_TYPE','bjac',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) - case('MUMPS') + case('ILU','MILU','ILUT') + call p%precv(nlev_)%set('SMOOTHER_TYPE','bjac',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + case('MUMPS') #if defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif - case('UMF') + case('UMF') #if defined(HAVE_UMF_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) -#endif - - case('SLUDIST') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) +#endif + case('SLUDIST') #if defined(HAVE_SLUDIST_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE',string,info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #elif defined(HAVE_UMF_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','UMF',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','UMF',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_SLU_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','SLU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','REPL',info,pos=pos) #elif defined(HAVE_MUMPS_) - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','MUMPS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #else - call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) - call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) - call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','ILU',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) #endif case('JAC','JACOBI') call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) @@ -702,6 +725,18 @@ subroutine mld_zcprecsetc(p,what,string,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','L1-DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('GS','FWGS','FBGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('BWGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','BWGS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('L1-GS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','L1-BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) end select endif @@ -827,11 +862,22 @@ subroutine mld_zcprecsetc(p,what,string,info,ilev,ilmax,pos,idx) call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) - case('L1-JACOBI') call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) call p%precv(nlev_)%set('SUB_SOLVE','L1-DIAG',info,pos=pos) call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('GS','FWGS','FBGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('BWGS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','BWGS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) + case('L1-GS') + call p%precv(nlev_)%set('SMOOTHER_TYPE','L1-BJAC',info,pos=pos) + call p%precv(nlev_)%set('SUB_SOLVE','GS',info,pos=pos) + call p%precv(nlev_)%set('COARSE_MAT','DIST',info,pos=pos) end select endif diff --git a/mlprec/mld_base_prec_type.F90 b/mlprec/mld_base_prec_type.F90 index f7f4707f..3e163d30 100644 --- a/mlprec/mld_base_prec_type.F90 +++ b/mlprec/mld_base_prec_type.F90 @@ -210,8 +210,10 @@ module mld_base_prec_type integer(psb_ipk_), parameter :: mld_bjac_ = 3 integer(psb_ipk_), parameter :: mld_l1_bjac_ = 4 integer(psb_ipk_), parameter :: mld_as_ = 5 - integer(psb_ipk_), parameter :: mld_max_prec_ = 5 - integer(psb_ipk_), parameter :: mld_fbgs_ = mld_max_prec_+1 + integer(psb_ipk_), parameter :: mld_fbgs_ = 6 + integer(psb_ipk_), parameter :: mld_l1_gs_ = 7 + integer(psb_ipk_), parameter :: mld_l1_fbgs_ = 8 + integer(psb_ipk_), parameter :: mld_max_prec_ = 8 ! ! Constants for pre/post signaling. Now only used internally ! @@ -387,7 +389,8 @@ module mld_base_prec_type & mld_fact_names(0:mld_max_sub_solve_)=(/& & 'none ','Jacobi ',& & 'L1-Jacobi ','none ','none ',& - & 'none ','none ','Point Jacobi ',& + & 'none ','none ','L1-GS ',& + & 'L1-FBGS ','none ','Point Jacobi ',& & 'L1-Jacobi ','Gauss-Seidel ','ILU(n) ',& & 'MILU(n) ','ILU(t,n) ',& & 'SuperLU ','UMFPACK LU ',& @@ -510,6 +513,10 @@ contains val = mld_noprec_ case('BJAC') val = mld_bjac_ + case('L1-GS') + val = mld_l1_gs_ + case('L1-FBGS') + val = mld_l1_fbgs_ case('L1-BJAC') val = mld_l1_bjac_ case('JAC','JACOBI')