diff --git a/src/LinAlg/LinSolParams.C b/src/LinAlg/LinSolParams.C index 4c32f83e..16b229d2 100644 --- a/src/LinAlg/LinSolParams.C +++ b/src/LinAlg/LinSolParams.C @@ -65,7 +65,7 @@ bool SettingMap::hasValue(const std::string& key) const LinSolParams::BlockParams::BlockParams() : basis(1), comps(0) { - addValue("pc", "ilu"); + addValue("pc", "default"); addValue("multigrid_ksp", "defrichardson"); } diff --git a/src/LinAlg/PETScSolParams.C b/src/LinAlg/PETScSolParams.C index e273f145..2c1f3788 100644 --- a/src/LinAlg/PETScSolParams.C +++ b/src/LinAlg/PETScSolParams.C @@ -32,6 +32,9 @@ void PETScSolParams::setupPC(PC& pc, { // Set preconditioner std::string prec = params.getBlock(block).getStringValue("pc"); + if (prec == "default") + prec = adm.getNoProcs() > 1 ? "asm" : "ilu"; + if (prec == "compositedir") { Mat mat; Mat Pmat; @@ -297,8 +300,12 @@ void PETScSolParams::setupSmoothers(PC& pc, size_t iBlock, noSmooth = params.getBlock(iBlock).getIntValue("multigrid_no_smooth");; } - if (smoother.empty()) - smoother = "ilu"; + if (smoother.empty()) { + if (adm.getNoProcs() > 1) + smoother = "asm"; + else + smoother = "ilu"; + } KSPSetTolerances(preksp,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_DEFAULT,noSmooth); KSPGetPC(preksp,&prepc);