Add SetAtol to pcg and gmres and add pcg recompute residual option.
This commit is contained in:
parent
e212be53c0
commit
a364fc9470
@ -262,6 +262,7 @@ int HYPRE_LinSysCore::parameters(int numParams, char **params)
|
||||
printf(" - tolerance <f>\n");
|
||||
printf(" - gmresDim <d>\n");
|
||||
printf(" - stopCrit <absolute,relative>\n");
|
||||
printf(" - pcgRecomputeResiudal\n");
|
||||
printf(" - preconditioner <identity,diagonal,pilut,parasails,\n");
|
||||
printf(" - boomeramg,ddilut,schwarz,ddict,poly,euclid,...\n");
|
||||
printf(" - blockP,ml,mli,reuse,parasails_reuse> <override>\n");
|
||||
@ -646,6 +647,17 @@ int HYPRE_LinSysCore::parameters(int numParams, char **params)
|
||||
param2);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// for PCG only
|
||||
//----------------------------------------------------------------
|
||||
|
||||
else if ( !strcmp(param1, "pcgRecomputeResidual") )
|
||||
{
|
||||
pcgRecomputeRes_ = 1;
|
||||
if ( (HYOutputLevel_ & HYFEI_SPECIALMASK) >= 3 && mypid_ == 0 )
|
||||
printf(" HYPRE_LSC::parameters pcgRecomputeResidual\n");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// preconditioner reuse
|
||||
//----------------------------------------------------------------
|
||||
|
||||
@ -4780,12 +4780,19 @@ int HYPRE_LinSysCore::launchSolver(int& solveStatus, int &iterations)
|
||||
}
|
||||
setupPCGPrecon();
|
||||
HYPRE_ParCSRPCGSetMaxIter(HYSolver_, maxIterations_);
|
||||
HYPRE_ParCSRPCGSetTol(HYSolver_, tolerance_);
|
||||
HYPRE_ParCSRPCGSetRelChange(HYSolver_, 0);
|
||||
HYPRE_ParCSRPCGSetTwoNorm(HYSolver_, 1);
|
||||
HYPRE_PCGSetRecomputeResidual(HYSolver_, pcgRecomputeRes_);
|
||||
if ( normAbsRel_ == 0 ) HYPRE_ParCSRPCGSetStopCrit(HYSolver_,0);
|
||||
else HYPRE_ParCSRPCGSetStopCrit(HYSolver_,1);
|
||||
if ( normAbsRel_ == 0 )
|
||||
{
|
||||
HYPRE_PCGSetStopCrit(HYSolver_,0);
|
||||
HYPRE_PCGSetTol(HYSolver_, tolerance_);
|
||||
}
|
||||
else
|
||||
{
|
||||
HYPRE_PCGSetStopCrit(HYSolver_,1);
|
||||
HYPRE_PCGSetAbsoluteTol(HYSolver_, tolerance_);
|
||||
}
|
||||
if ( (HYOutputLevel_ & HYFEI_SPECIALMASK) >= 1 )
|
||||
{
|
||||
if ( mypid_ == 0 )
|
||||
@ -5019,9 +5026,16 @@ int HYPRE_LinSysCore::launchSolver(int& solveStatus, int &iterations)
|
||||
setupGMRESPrecon();
|
||||
HYPRE_ParCSRGMRESSetKDim(HYSolver_, gmresDim_);
|
||||
HYPRE_ParCSRGMRESSetMaxIter(HYSolver_, maxIterations_);
|
||||
HYPRE_ParCSRGMRESSetTol(HYSolver_, tolerance_);
|
||||
if ( normAbsRel_ == 0 ) HYPRE_ParCSRGMRESSetStopCrit(HYSolver_,0);
|
||||
else HYPRE_ParCSRGMRESSetStopCrit(HYSolver_,1);
|
||||
if ( normAbsRel_ == 0 )
|
||||
{
|
||||
HYPRE_GMRESSetStopCrit(HYSolver_,0);
|
||||
HYPRE_GMRESSetTol(HYSolver_, tolerance_);
|
||||
}
|
||||
else
|
||||
{
|
||||
HYPRE_GMRESSetStopCrit(HYSolver_,1);
|
||||
HYPRE_GMRESSetAbsoluteTol(HYSolver_, tolerance_);
|
||||
}
|
||||
if ( (HYOutputLevel_ & HYFEI_SPECIALMASK) >= 1 )
|
||||
{
|
||||
HYPRE_ParCSRGMRESSetPrintLevel(HYSolver_, 1);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user