added stop_crit parameter in hybrid for stopping criterion in GMRES and
possibly PCG
This commit is contained in:
parent
4081f45f15
commit
3f9c04f17b
@ -144,6 +144,17 @@ HYPRE_ParCSRHybridSetTwoNorm( HYPRE_Solver solver,
|
||||
return( hypre_AMGHybridSetTwoNorm( (void *) solver, two_norm ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_ParCSRHybridSetStopCrit
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
int
|
||||
HYPRE_ParCSRHybridSetStopCrit( HYPRE_Solver solver,
|
||||
int stop_crit )
|
||||
{
|
||||
return( hypre_AMGHybridSetStopCrit( (void *) solver, stop_crit ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_ParCSRHybridSetRelChange
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
@ -1261,6 +1261,9 @@ int HYPRE_ParCSRHybridSetKDim(HYPRE_Solver solver,
|
||||
int HYPRE_ParCSRHybridSetTwoNorm(HYPRE_Solver solver,
|
||||
int two_norm);
|
||||
|
||||
int HYPRE_ParCSRHybridSetStopCrit(HYPRE_Solver solver,
|
||||
int stop_crit);
|
||||
|
||||
int HYPRE_ParCSRHybridSetRelChange(HYPRE_Solver solver,
|
||||
int rel_change);
|
||||
|
||||
|
||||
@ -25,6 +25,7 @@ typedef struct
|
||||
int dscg_max_its;
|
||||
int pcg_max_its;
|
||||
int two_norm;
|
||||
int stop_crit;
|
||||
int rel_change;
|
||||
int solver_type;
|
||||
int k_dim;
|
||||
@ -79,6 +80,7 @@ hypre_AMGHybridCreate( )
|
||||
(AMGhybrid_data -> dscg_max_its) = 1000;
|
||||
(AMGhybrid_data -> pcg_max_its) = 200;
|
||||
(AMGhybrid_data -> two_norm) = 0;
|
||||
(AMGhybrid_data -> stop_crit) = 0;
|
||||
(AMGhybrid_data -> rel_change) = 0;
|
||||
(AMGhybrid_data -> pcg_default) = 1;
|
||||
(AMGhybrid_data -> solver_type) = 1;
|
||||
@ -251,6 +253,22 @@ hypre_AMGHybridSetKDim( void *AMGhybrid_vdata,
|
||||
return ierr;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* hypre_AMGHybridSetStopCrit
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
int
|
||||
hypre_AMGHybridSetStopCrit( void *AMGhybrid_vdata,
|
||||
int stop_crit )
|
||||
{
|
||||
hypre_AMGHybridData *AMGhybrid_data = AMGhybrid_vdata;
|
||||
int ierr = 0;
|
||||
|
||||
(AMGhybrid_data -> stop_crit) = stop_crit;
|
||||
|
||||
return ierr;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* hypre_AMGHybridSetTwoNorm
|
||||
*--------------------------------------------------------------------------*/
|
||||
@ -641,6 +659,7 @@ hypre_AMGHybridSolve( void *AMGhybrid_vdata,
|
||||
int dscg_max_its = (AMGhybrid_data -> dscg_max_its);
|
||||
int pcg_max_its = (AMGhybrid_data -> pcg_max_its);
|
||||
int two_norm = (AMGhybrid_data -> two_norm);
|
||||
int stop_crit = (AMGhybrid_data -> stop_crit);
|
||||
int rel_change = (AMGhybrid_data -> rel_change);
|
||||
int logging = (AMGhybrid_data -> logging);
|
||||
int plogging = (AMGhybrid_data -> plogging);
|
||||
@ -711,6 +730,7 @@ hypre_AMGHybridSolve( void *AMGhybrid_vdata,
|
||||
hypre_PCGSetTol(pcg_solver, tol);
|
||||
hypre_PCGSetConvergenceFactorTol(pcg_solver, cf_tol);
|
||||
hypre_PCGSetTwoNorm(pcg_solver, two_norm);
|
||||
hypre_PCGSetStopCrit(pcg_solver, stop_crit);
|
||||
hypre_PCGSetRelChange(pcg_solver, rel_change);
|
||||
hypre_PCGSetPrintLevel(pcg_solver, logging);
|
||||
|
||||
@ -759,7 +779,7 @@ hypre_AMGHybridSolve( void *AMGhybrid_vdata,
|
||||
hypre_GMRESSetTol(pcg_solver, tol);
|
||||
hypre_GMRESSetKDim(pcg_solver, k_dim);
|
||||
hypre_GMRESSetConvergenceFactorTol(pcg_solver, cf_tol);
|
||||
hypre_GMRESSetStopCrit(pcg_solver, two_norm);
|
||||
hypre_GMRESSetStopCrit(pcg_solver, stop_crit);
|
||||
hypre_GMRESSetRelChange(pcg_solver, rel_change);
|
||||
hypre_GMRESSetPrintLevel(pcg_solver, logging);
|
||||
|
||||
@ -804,7 +824,7 @@ hypre_AMGHybridSolve( void *AMGhybrid_vdata,
|
||||
hypre_BiCGSTABSetMaxIter(pcg_solver, dscg_max_its);
|
||||
hypre_BiCGSTABSetTol(pcg_solver, tol);
|
||||
hypre_BiCGSTABSetConvergenceFactorTol(pcg_solver, cf_tol);
|
||||
hypre_BiCGSTABSetStopCrit(pcg_solver, two_norm);
|
||||
hypre_BiCGSTABSetStopCrit(pcg_solver, stop_crit);
|
||||
hypre_BiCGSTABSetLogging(pcg_solver, logging);
|
||||
|
||||
pcg_precond = NULL;
|
||||
@ -869,6 +889,7 @@ hypre_AMGHybridSolve( void *AMGhybrid_vdata,
|
||||
hypre_PCGSetMaxIter(pcg_solver, pcg_max_its);
|
||||
hypre_PCGSetTol(pcg_solver, tol);
|
||||
hypre_PCGSetTwoNorm(pcg_solver, two_norm);
|
||||
hypre_PCGSetStopCrit(pcg_solver, stop_crit);
|
||||
hypre_PCGSetRelChange(pcg_solver, rel_change);
|
||||
hypre_PCGSetPrintLevel(pcg_solver, logging);
|
||||
hypre_PCGSetConvergenceFactorTol(pcg_solver, 0.0);
|
||||
@ -895,7 +916,7 @@ hypre_AMGHybridSolve( void *AMGhybrid_vdata,
|
||||
hypre_GMRESSetMaxIter(pcg_solver, dscg_max_its);
|
||||
hypre_GMRESSetTol(pcg_solver, tol);
|
||||
hypre_GMRESSetKDim(pcg_solver, k_dim);
|
||||
hypre_GMRESSetStopCrit(pcg_solver, two_norm);
|
||||
hypre_GMRESSetStopCrit(pcg_solver, stop_crit);
|
||||
hypre_GMRESSetRelChange(pcg_solver, rel_change);
|
||||
hypre_GMRESSetPrintLevel(pcg_solver, logging);
|
||||
hypre_GMRESSetConvergenceFactorTol(pcg_solver, 0.0);
|
||||
@ -918,7 +939,7 @@ hypre_AMGHybridSolve( void *AMGhybrid_vdata,
|
||||
|
||||
hypre_BiCGSTABSetMaxIter(pcg_solver, dscg_max_its);
|
||||
hypre_BiCGSTABSetTol(pcg_solver, tol);
|
||||
hypre_BiCGSTABSetStopCrit(pcg_solver, two_norm);
|
||||
hypre_BiCGSTABSetStopCrit(pcg_solver, stop_crit);
|
||||
hypre_BiCGSTABSetLogging(pcg_solver, logging);
|
||||
hypre_BiCGSTABSetConvergenceFactorTol(pcg_solver, 0.0);
|
||||
}
|
||||
|
||||
@ -26,6 +26,7 @@ int hypre_AMGHybridSetPCGMaxIter( void *AMGhybrid_vdata , int pcg_max_its );
|
||||
int hypre_AMGHybridSetSolverType( void *AMGhybrid_vdata , int solver_type );
|
||||
int hypre_AMGHybridSetKDim( void *AMGhybrid_vdata , int k_dim );
|
||||
int hypre_AMGHybridSetTwoNorm( void *AMGhybrid_vdata , int two_norm );
|
||||
int hypre_AMGHybridSetStopCrit( void *AMGhybrid_vdata , int stop_crit );
|
||||
int hypre_AMGHybridSetRelChange( void *AMGhybrid_vdata , int rel_change );
|
||||
int hypre_AMGHybridSetPrecond( void *pcg_vdata , int (*pcg_precond_solve )(), int (*pcg_precond_setup )(), void *pcg_precond );
|
||||
int hypre_AMGHybridSetLogging( void *AMGhybrid_vdata , int logging );
|
||||
@ -175,6 +176,7 @@ int HYPRE_ParCSRHybridSetPCGMaxIter( HYPRE_Solver solver , int pcg_max_its );
|
||||
int HYPRE_ParCSRHybridSetSolverType( HYPRE_Solver solver , int solver_type );
|
||||
int HYPRE_ParCSRHybridSetKDim( HYPRE_Solver solver , int k_dim );
|
||||
int HYPRE_ParCSRHybridSetTwoNorm( HYPRE_Solver solver , int two_norm );
|
||||
int HYPRE_ParCSRHybridSetStopCrit( HYPRE_Solver solver , int stop_crit );
|
||||
int HYPRE_ParCSRHybridSetRelChange( HYPRE_Solver solver , int rel_change );
|
||||
int HYPRE_ParCSRHybridSetPrecond( HYPRE_Solver solver , HYPRE_PtrToParSolverFcn precond , HYPRE_PtrToParSolverFcn precond_setup , HYPRE_Solver precond_solver );
|
||||
int HYPRE_ParCSRHybridSetLogging( HYPRE_Solver solver , int logging );
|
||||
|
||||
Loading…
Reference in New Issue
Block a user