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(" - tolerance <f>\n");
|
||||||
printf(" - gmresDim <d>\n");
|
printf(" - gmresDim <d>\n");
|
||||||
printf(" - stopCrit <absolute,relative>\n");
|
printf(" - stopCrit <absolute,relative>\n");
|
||||||
|
printf(" - pcgRecomputeResiudal\n");
|
||||||
printf(" - preconditioner <identity,diagonal,pilut,parasails,\n");
|
printf(" - preconditioner <identity,diagonal,pilut,parasails,\n");
|
||||||
printf(" - boomeramg,ddilut,schwarz,ddict,poly,euclid,...\n");
|
printf(" - boomeramg,ddilut,schwarz,ddict,poly,euclid,...\n");
|
||||||
printf(" - blockP,ml,mli,reuse,parasails_reuse> <override>\n");
|
printf(" - blockP,ml,mli,reuse,parasails_reuse> <override>\n");
|
||||||
@ -646,6 +647,17 @@ int HYPRE_LinSysCore::parameters(int numParams, char **params)
|
|||||||
param2);
|
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
|
// preconditioner reuse
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
|
|||||||
@ -4780,12 +4780,19 @@ int HYPRE_LinSysCore::launchSolver(int& solveStatus, int &iterations)
|
|||||||
}
|
}
|
||||||
setupPCGPrecon();
|
setupPCGPrecon();
|
||||||
HYPRE_ParCSRPCGSetMaxIter(HYSolver_, maxIterations_);
|
HYPRE_ParCSRPCGSetMaxIter(HYSolver_, maxIterations_);
|
||||||
HYPRE_ParCSRPCGSetTol(HYSolver_, tolerance_);
|
|
||||||
HYPRE_ParCSRPCGSetRelChange(HYSolver_, 0);
|
HYPRE_ParCSRPCGSetRelChange(HYSolver_, 0);
|
||||||
HYPRE_ParCSRPCGSetTwoNorm(HYSolver_, 1);
|
HYPRE_ParCSRPCGSetTwoNorm(HYSolver_, 1);
|
||||||
HYPRE_PCGSetRecomputeResidual(HYSolver_, pcgRecomputeRes_);
|
HYPRE_PCGSetRecomputeResidual(HYSolver_, pcgRecomputeRes_);
|
||||||
if ( normAbsRel_ == 0 ) HYPRE_ParCSRPCGSetStopCrit(HYSolver_,0);
|
if ( normAbsRel_ == 0 )
|
||||||
else HYPRE_ParCSRPCGSetStopCrit(HYSolver_,1);
|
{
|
||||||
|
HYPRE_PCGSetStopCrit(HYSolver_,0);
|
||||||
|
HYPRE_PCGSetTol(HYSolver_, tolerance_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HYPRE_PCGSetStopCrit(HYSolver_,1);
|
||||||
|
HYPRE_PCGSetAbsoluteTol(HYSolver_, tolerance_);
|
||||||
|
}
|
||||||
if ( (HYOutputLevel_ & HYFEI_SPECIALMASK) >= 1 )
|
if ( (HYOutputLevel_ & HYFEI_SPECIALMASK) >= 1 )
|
||||||
{
|
{
|
||||||
if ( mypid_ == 0 )
|
if ( mypid_ == 0 )
|
||||||
@ -5019,9 +5026,16 @@ int HYPRE_LinSysCore::launchSolver(int& solveStatus, int &iterations)
|
|||||||
setupGMRESPrecon();
|
setupGMRESPrecon();
|
||||||
HYPRE_ParCSRGMRESSetKDim(HYSolver_, gmresDim_);
|
HYPRE_ParCSRGMRESSetKDim(HYSolver_, gmresDim_);
|
||||||
HYPRE_ParCSRGMRESSetMaxIter(HYSolver_, maxIterations_);
|
HYPRE_ParCSRGMRESSetMaxIter(HYSolver_, maxIterations_);
|
||||||
HYPRE_ParCSRGMRESSetTol(HYSolver_, tolerance_);
|
if ( normAbsRel_ == 0 )
|
||||||
if ( normAbsRel_ == 0 ) HYPRE_ParCSRGMRESSetStopCrit(HYSolver_,0);
|
{
|
||||||
else HYPRE_ParCSRGMRESSetStopCrit(HYSolver_,1);
|
HYPRE_GMRESSetStopCrit(HYSolver_,0);
|
||||||
|
HYPRE_GMRESSetTol(HYSolver_, tolerance_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HYPRE_GMRESSetStopCrit(HYSolver_,1);
|
||||||
|
HYPRE_GMRESSetAbsoluteTol(HYSolver_, tolerance_);
|
||||||
|
}
|
||||||
if ( (HYOutputLevel_ & HYFEI_SPECIALMASK) >= 1 )
|
if ( (HYOutputLevel_ & HYFEI_SPECIALMASK) >= 1 )
|
||||||
{
|
{
|
||||||
HYPRE_ParCSRGMRESSetPrintLevel(HYSolver_, 1);
|
HYPRE_ParCSRGMRESSetPrintLevel(HYSolver_, 1);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user