Iterative Triangular Solve APIs (#696)
* This commit adds the public and internal APIs for doing jacobi approximation to iterative triangular solve. At the moment, this code simply sets parameters for the ILU classes. * Fixing defaults, docs, and comments. Co-authored-by: Paul Mullowney <Paul.Mullowney@nrel.gov>
This commit is contained in:
parent
6845385dd1
commit
6425099995
@ -1280,6 +1280,39 @@ HYPRE_BoomerAMGSetILUDroptol( HYPRE_Solver solver,
|
||||
return ( hypre_BoomerAMGSetILUDroptol( (void *) solver, ilu_droptol ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_BoomerAMGSetILUTriSolve
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
HYPRE_Int
|
||||
HYPRE_BoomerAMGSetILUTriSolve( HYPRE_Solver solver,
|
||||
HYPRE_Int ilu_tri_solve)
|
||||
{
|
||||
return( hypre_BoomerAMGSetILUTriSolve( (void *) solver, ilu_tri_solve ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_BoomerAMGSetILULowerJacobiIters
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
HYPRE_Int
|
||||
HYPRE_BoomerAMGSetILULowerJacobiIters( HYPRE_Solver solver,
|
||||
HYPRE_Int ilu_lower_jacobi_iters)
|
||||
{
|
||||
return( hypre_BoomerAMGSetILULowerJacobiIters( (void *) solver, ilu_lower_jacobi_iters ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_BoomerAMGSetILUUpperJacobiIters
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
HYPRE_Int
|
||||
HYPRE_BoomerAMGSetILUUpperJacobiIters( HYPRE_Solver solver,
|
||||
HYPRE_Int ilu_upper_jacobi_iters)
|
||||
{
|
||||
return( hypre_BoomerAMGSetILUUpperJacobiIters( (void *) solver, ilu_upper_jacobi_iters ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_BoomerAMGSetILULocalReordering
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
@ -95,6 +95,36 @@ HYPRE_ILUSetMaxIter( HYPRE_Solver solver, HYPRE_Int max_iter )
|
||||
return hypre_ILUSetMaxIter( solver, max_iter );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_ILUSetTriSolve
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
HYPRE_Int
|
||||
HYPRE_ILUSetTriSolve( HYPRE_Solver solver, HYPRE_Int tri_solve )
|
||||
{
|
||||
return hypre_ILUSetTriSolve( solver, tri_solve );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_ILUSetLowerJacobiIters
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
HYPRE_Int
|
||||
HYPRE_ILUSetLowerJacobiIters( HYPRE_Solver solver, HYPRE_Int lower_jacobi_iters )
|
||||
{
|
||||
return hypre_ILUSetLowerJacobiIters( solver, lower_jacobi_iters );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_ILUSetUpperJacobiIters
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
HYPRE_Int
|
||||
HYPRE_ILUSetUpperJacobiIters( HYPRE_Solver solver, HYPRE_Int upper_jacobi_iters )
|
||||
{
|
||||
return hypre_ILUSetUpperJacobiIters( solver, upper_jacobi_iters );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_ILUSetTol
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
@ -1118,6 +1118,34 @@ HYPRE_Int HYPRE_BoomerAMGSetFSAIEigMaxIters(HYPRE_Solver solver,
|
||||
HYPRE_Int HYPRE_BoomerAMGSetFSAIKapTolerance(HYPRE_Solver solver,
|
||||
HYPRE_Real kap_tolerance);
|
||||
|
||||
/**
|
||||
* (Optional) Defines triangular solver for ILU(k,T) smoother: 0-iterative, 1-direct (default)
|
||||
* For further explanation see description of ILU.
|
||||
**/
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUTriSolve( HYPRE_Solver solver,
|
||||
HYPRE_Int ilu_tri_solve);
|
||||
|
||||
/**
|
||||
* (Optional) Defines number of lower Jacobi iterations for ILU(k,T) smoother triangular solve.
|
||||
* For further explanation see description of ILU.
|
||||
**/
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILULowerJacobiIters( HYPRE_Solver solver,
|
||||
HYPRE_Int ilu_lower_jacobi_iters);
|
||||
|
||||
/**
|
||||
* (Optional) Defines number of upper Jacobi iterations for ILU(k,T) smoother triangular solve.
|
||||
* For further explanation see description of ILU.
|
||||
**/
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUUpperJacobiIters( HYPRE_Solver solver,
|
||||
HYPRE_Int ilu_upper_jacobi_iters);
|
||||
|
||||
/**
|
||||
* Set Local Reordering paramter (1==RCM, 0==None)
|
||||
* For further explanation see description of ILU.
|
||||
**/
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILULocalReordering( HYPRE_Solver solver,
|
||||
HYPRE_Int ilu_reordering_type);
|
||||
|
||||
/**
|
||||
* (Optional) Defines which parallel restriction operator is used.
|
||||
* There are the following options for restr_type:
|
||||
@ -4277,6 +4305,27 @@ HYPRE_Int HYPRE_ILUSolve( HYPRE_Solver solver,
|
||||
HYPRE_Int
|
||||
HYPRE_ILUSetMaxIter( HYPRE_Solver solver, HYPRE_Int max_iter );
|
||||
|
||||
/**
|
||||
* (Optional) Set triangular solver type (0) direct (1) iterative
|
||||
* Set this to 1 Jacobi iterations. The default is 0 direct method.
|
||||
**/
|
||||
HYPRE_Int
|
||||
HYPRE_ILUSetTriSolve( HYPRE_Solver solver, HYPRE_Int tri_solve );
|
||||
|
||||
/**
|
||||
* (Optional) Set number of lower Jacobi iterations for the triangular L solves
|
||||
* Set this to integer > 0 when using iterative tri_solve (0). The default is 5 iterations.
|
||||
**/
|
||||
HYPRE_Int
|
||||
HYPRE_ILUSetLowerJacobiIters( HYPRE_Solver solver, HYPRE_Int lower_jacobi_iterations );
|
||||
|
||||
/**
|
||||
* (Optional) Set number of upper Jacobi iterations for the triangular U solves
|
||||
* Set this to integer > 0 when using iterative tri_solve (0). The default is 5 iterations.
|
||||
**/
|
||||
HYPRE_Int
|
||||
HYPRE_ILUSetUpperJacobiIters( HYPRE_Solver solver, HYPRE_Int upper_jacobi_iterations );
|
||||
|
||||
/**
|
||||
* (Optional) Set the convergence tolerance for the ILU smoother.
|
||||
* Use tol = 0.0 if ILU is used as a preconditioner. The default is 1.e-7.
|
||||
|
||||
@ -160,6 +160,9 @@ typedef struct
|
||||
HYPRE_Int ilu_max_row_nnz;
|
||||
HYPRE_Int ilu_max_iter;
|
||||
HYPRE_Real ilu_droptol;
|
||||
HYPRE_Int ilu_tri_solve;
|
||||
HYPRE_Int ilu_lower_jacobi_iters;
|
||||
HYPRE_Int ilu_upper_jacobi_iters;
|
||||
HYPRE_Int ilu_reordering_type;
|
||||
|
||||
HYPRE_Int fsai_max_steps;
|
||||
@ -406,6 +409,9 @@ typedef struct
|
||||
#define hypre_ParAMGDataILULevel(amg_data) ((amg_data)->ilu_lfil)
|
||||
#define hypre_ParAMGDataILUMaxRowNnz(amg_data) ((amg_data)->ilu_max_row_nnz)
|
||||
#define hypre_ParAMGDataILUDroptol(amg_data) ((amg_data)->ilu_droptol)
|
||||
#define hypre_ParAMGDataILUTriSolve(amg_data) ((amg_data)->ilu_tri_solve)
|
||||
#define hypre_ParAMGDataILULowerJacobiIters(amg_data) ((amg_data)->ilu_lower_jacobi_iters)
|
||||
#define hypre_ParAMGDataILUUpperJacobiIters(amg_data) ((amg_data)->ilu_upper_jacobi_iters)
|
||||
#define hypre_ParAMGDataILUMaxIter(amg_data) ((amg_data)->ilu_max_iter)
|
||||
#define hypre_ParAMGDataILULocalReordering(amg_data) ((amg_data)->ilu_reordering_type)
|
||||
#define hypre_ParAMGDataFSAIMaxSteps(amg_data) ((amg_data)->fsai_max_steps)
|
||||
@ -1369,6 +1375,9 @@ HYPRE_Int HYPRE_BoomerAMGSetILULevel( HYPRE_Solver solver, HYPRE_Int ilu_lfil);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUMaxRowNnz( HYPRE_Solver solver, HYPRE_Int ilu_max_row_nnz);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUMaxIter( HYPRE_Solver solver, HYPRE_Int ilu_max_iter);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUDroptol( HYPRE_Solver solver, HYPRE_Real ilu_droptol);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUTriSolve( HYPRE_Solver solver, HYPRE_Int ilu_tri_solve);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILULowerJacobiIters( HYPRE_Solver solver, HYPRE_Int ilu_lower_jacobi_iters);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUUpperJacobiIters( HYPRE_Solver solver, HYPRE_Int ilu_upper_jacobi_iters);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILULocalReordering( HYPRE_Solver solver, HYPRE_Int ilu_reordering_type);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetFSAIMaxSteps ( HYPRE_Solver solver, HYPRE_Int max_steps );
|
||||
HYPRE_Int HYPRE_BoomerAMGSetFSAIMaxStepSize ( HYPRE_Solver solver, HYPRE_Int max_step_size );
|
||||
@ -2006,6 +2015,9 @@ HYPRE_Int hypre_BoomerAMGSetEuBJ ( void *data, HYPRE_Int eu_bj );
|
||||
HYPRE_Int hypre_BoomerAMGSetILUType( void *data, HYPRE_Int ilu_type);
|
||||
HYPRE_Int hypre_BoomerAMGSetILULevel( void *data, HYPRE_Int ilu_lfil);
|
||||
HYPRE_Int hypre_BoomerAMGSetILUDroptol( void *data, HYPRE_Real ilu_droptol);
|
||||
HYPRE_Int hypre_BoomerAMGSetILUTriSolve( void *data, HYPRE_Int ilu_tri_solve);
|
||||
HYPRE_Int hypre_BoomerAMGSetILULowerJacobiIters( void *data, HYPRE_Int ilu_lower_jacobi_iters);
|
||||
HYPRE_Int hypre_BoomerAMGSetILUUpperJacobiIters( void *data, HYPRE_Int ilu_upper_jacobi_iters);
|
||||
HYPRE_Int hypre_BoomerAMGSetILUMaxIter( void *data, HYPRE_Int ilu_max_iter);
|
||||
HYPRE_Int hypre_BoomerAMGSetILUMaxRowNnz( void *data, HYPRE_Int ilu_max_row_nnz);
|
||||
HYPRE_Int hypre_BoomerAMGSetILULocalReordering( void *data, HYPRE_Int ilu_reordering_type);
|
||||
@ -3018,6 +3030,9 @@ HYPRE_Int hypre_ILUSetDropThreshold( void *ilu_vdata, HYPRE_Real threshold );
|
||||
HYPRE_Int hypre_ILUSetDropThresholdArray( void *ilu_vdata, HYPRE_Real *threshold );
|
||||
HYPRE_Int hypre_ILUSetType( void *ilu_vdata, HYPRE_Int ilu_type );
|
||||
HYPRE_Int hypre_ILUSetMaxIter( void *ilu_vdata, HYPRE_Int max_iter );
|
||||
HYPRE_Int hypre_ILUSetTriSolve( void *ilu_vdata, HYPRE_Int tri_solve );
|
||||
HYPRE_Int hypre_ILUSetLowerJacobiIters( void *ilu_vdata, HYPRE_Int lower_jacobi_iters );
|
||||
HYPRE_Int hypre_ILUSetUpperJacobiIters( void *ilu_vdata, HYPRE_Int upper_jacobi_iters );
|
||||
HYPRE_Int hypre_ILUSetTol( void *ilu_vdata, HYPRE_Real tol );
|
||||
HYPRE_Int hypre_ILUSetup( void *ilu_vdata, hypre_ParCSRMatrix *A, hypre_ParVector *f,
|
||||
hypre_ParVector *u );
|
||||
|
||||
@ -104,6 +104,9 @@ hypre_BoomerAMGCreate()
|
||||
HYPRE_Int ilu_max_row_nnz;
|
||||
HYPRE_Int ilu_max_iter;
|
||||
HYPRE_Real ilu_droptol;
|
||||
HYPRE_Int ilu_tri_solve;
|
||||
HYPRE_Int ilu_lower_jacobi_iters;
|
||||
HYPRE_Int ilu_upper_jacobi_iters;
|
||||
HYPRE_Int ilu_reordering_type;
|
||||
|
||||
HYPRE_Int fsai_max_steps;
|
||||
@ -211,6 +214,9 @@ hypre_BoomerAMGCreate()
|
||||
ilu_max_row_nnz = 20;
|
||||
ilu_max_iter = 1;
|
||||
ilu_droptol = 0.01;
|
||||
ilu_tri_solve = 1;
|
||||
ilu_lower_jacobi_iters = 5;
|
||||
ilu_upper_jacobi_iters = 5;
|
||||
ilu_reordering_type = 1;
|
||||
|
||||
/* FSAI smoother params */
|
||||
@ -352,6 +358,9 @@ hypre_BoomerAMGCreate()
|
||||
hypre_BoomerAMGSetILULevel(amg_data, ilu_lfil);
|
||||
hypre_BoomerAMGSetILUMaxRowNnz(amg_data, ilu_max_row_nnz);
|
||||
hypre_BoomerAMGSetILUDroptol(amg_data, ilu_droptol);
|
||||
hypre_BoomerAMGSetILUTriSolve(amg_data, ilu_tri_solve);
|
||||
hypre_BoomerAMGSetILULowerJacobiIters(amg_data, ilu_lower_jacobi_iters);
|
||||
hypre_BoomerAMGSetILUUpperJacobiIters(amg_data, ilu_upper_jacobi_iters);
|
||||
hypre_BoomerAMGSetILUMaxIter(amg_data, ilu_max_iter);
|
||||
hypre_BoomerAMGSetILULocalReordering(amg_data, ilu_reordering_type);
|
||||
hypre_BoomerAMGSetFSAIMaxSteps(amg_data, fsai_max_steps);
|
||||
@ -4186,6 +4195,52 @@ hypre_BoomerAMGSetILUDroptol( void *data,
|
||||
return hypre_error_flag;
|
||||
}
|
||||
HYPRE_Int
|
||||
hypre_BoomerAMGSetILUTriSolve( void *data,
|
||||
HYPRE_Int ilu_tri_solve)
|
||||
{
|
||||
hypre_ParAMGData *amg_data = (hypre_ParAMGData*) data;
|
||||
|
||||
if (!amg_data)
|
||||
{
|
||||
hypre_error_in_arg(1);
|
||||
return hypre_error_flag;
|
||||
}
|
||||
hypre_ParAMGDataILUTriSolve(amg_data) = ilu_tri_solve;
|
||||
|
||||
return hypre_error_flag;
|
||||
}
|
||||
HYPRE_Int
|
||||
hypre_BoomerAMGSetILULowerJacobiIters( void *data,
|
||||
HYPRE_Int ilu_lower_jacobi_iters)
|
||||
{
|
||||
hypre_ParAMGData *amg_data = (hypre_ParAMGData*) data;
|
||||
|
||||
if (!amg_data)
|
||||
{
|
||||
hypre_error_in_arg(1);
|
||||
return hypre_error_flag;
|
||||
}
|
||||
hypre_ParAMGDataILULowerJacobiIters(amg_data) = ilu_lower_jacobi_iters;
|
||||
|
||||
return hypre_error_flag;
|
||||
}
|
||||
|
||||
HYPRE_Int
|
||||
hypre_BoomerAMGSetILUUpperJacobiIters( void *data,
|
||||
HYPRE_Int ilu_upper_jacobi_iters)
|
||||
{
|
||||
hypre_ParAMGData *amg_data = (hypre_ParAMGData*) data;
|
||||
|
||||
if (!amg_data)
|
||||
{
|
||||
hypre_error_in_arg(1);
|
||||
return hypre_error_flag;
|
||||
}
|
||||
hypre_ParAMGDataILUUpperJacobiIters(amg_data) = ilu_upper_jacobi_iters;
|
||||
|
||||
return hypre_error_flag;
|
||||
}
|
||||
HYPRE_Int
|
||||
hypre_BoomerAMGSetILUMaxIter( void *data,
|
||||
HYPRE_Int ilu_max_iter)
|
||||
{
|
||||
|
||||
@ -142,6 +142,9 @@ typedef struct
|
||||
HYPRE_Int ilu_max_row_nnz;
|
||||
HYPRE_Int ilu_max_iter;
|
||||
HYPRE_Real ilu_droptol;
|
||||
HYPRE_Int ilu_tri_solve;
|
||||
HYPRE_Int ilu_lower_jacobi_iters;
|
||||
HYPRE_Int ilu_upper_jacobi_iters;
|
||||
HYPRE_Int ilu_reordering_type;
|
||||
|
||||
HYPRE_Int fsai_max_steps;
|
||||
@ -388,6 +391,9 @@ typedef struct
|
||||
#define hypre_ParAMGDataILULevel(amg_data) ((amg_data)->ilu_lfil)
|
||||
#define hypre_ParAMGDataILUMaxRowNnz(amg_data) ((amg_data)->ilu_max_row_nnz)
|
||||
#define hypre_ParAMGDataILUDroptol(amg_data) ((amg_data)->ilu_droptol)
|
||||
#define hypre_ParAMGDataILUTriSolve(amg_data) ((amg_data)->ilu_tri_solve)
|
||||
#define hypre_ParAMGDataILULowerJacobiIters(amg_data) ((amg_data)->ilu_lower_jacobi_iters)
|
||||
#define hypre_ParAMGDataILUUpperJacobiIters(amg_data) ((amg_data)->ilu_upper_jacobi_iters)
|
||||
#define hypre_ParAMGDataILUMaxIter(amg_data) ((amg_data)->ilu_max_iter)
|
||||
#define hypre_ParAMGDataILULocalReordering(amg_data) ((amg_data)->ilu_reordering_type)
|
||||
#define hypre_ParAMGDataFSAIMaxSteps(amg_data) ((amg_data)->fsai_max_steps)
|
||||
|
||||
@ -162,6 +162,9 @@ hypre_BoomerAMGSetup( void *amg_vdata,
|
||||
HYPRE_Int ilu_lfil;
|
||||
HYPRE_Int ilu_max_row_nnz;
|
||||
HYPRE_Int ilu_max_iter;
|
||||
HYPRE_Int ilu_tri_solve;
|
||||
HYPRE_Int ilu_lower_jacobi_iters;
|
||||
HYPRE_Int ilu_upper_jacobi_iters;
|
||||
HYPRE_Real ilu_droptol;
|
||||
HYPRE_Int ilu_reordering_type;
|
||||
HYPRE_Int fsai_max_steps;
|
||||
@ -255,6 +258,9 @@ hypre_BoomerAMGSetup( void *amg_vdata,
|
||||
ilu_lfil = hypre_ParAMGDataILULevel(amg_data);
|
||||
ilu_max_row_nnz = hypre_ParAMGDataILUMaxRowNnz(amg_data);
|
||||
ilu_droptol = hypre_ParAMGDataILUDroptol(amg_data);
|
||||
ilu_tri_solve = hypre_ParAMGDataILUTriSolve(amg_data);
|
||||
ilu_lower_jacobi_iters = hypre_ParAMGDataILULowerJacobiIters(amg_data);
|
||||
ilu_upper_jacobi_iters = hypre_ParAMGDataILUUpperJacobiIters(amg_data);
|
||||
ilu_max_iter = hypre_ParAMGDataILUMaxIter(amg_data);
|
||||
ilu_reordering_type = hypre_ParAMGDataILULocalReordering(amg_data);
|
||||
fsai_max_steps = hypre_ParAMGDataFSAIMaxSteps(amg_data);
|
||||
@ -3437,6 +3443,9 @@ hypre_BoomerAMGSetup( void *amg_vdata,
|
||||
HYPRE_ILUSetType( smoother[j], ilu_type);
|
||||
HYPRE_ILUSetLocalReordering( smoother[j], ilu_reordering_type);
|
||||
HYPRE_ILUSetMaxIter(smoother[j], ilu_max_iter);
|
||||
HYPRE_ILUSetTriSolve(smoother[j], ilu_tri_solve);
|
||||
HYPRE_ILUSetLowerJacobiIters(smoother[j], ilu_lower_jacobi_iters);
|
||||
HYPRE_ILUSetUpperJacobiIters(smoother[j], ilu_upper_jacobi_iters);
|
||||
HYPRE_ILUSetTol(smoother[j], 0.);
|
||||
HYPRE_ILUSetDropThreshold(smoother[j], ilu_droptol);
|
||||
HYPRE_ILUSetLogging(smoother[j], 0);
|
||||
|
||||
@ -81,6 +81,9 @@ hypre_ILUCreate()
|
||||
hypre_ParILUDataNumIterations(ilu_data) = 0;
|
||||
|
||||
hypre_ParILUDataMaxIter(ilu_data) = 20;
|
||||
hypre_ParILUDataTriSolve(ilu_data) = 1;
|
||||
hypre_ParILUDataLowerJacobiIters(ilu_data) = 5;
|
||||
hypre_ParILUDataUpperJacobiIters(ilu_data) = 5;
|
||||
hypre_ParILUDataTol(ilu_data) = 1.0e-7;
|
||||
|
||||
hypre_ParILUDataLogging(ilu_data) = 0;
|
||||
@ -120,6 +123,9 @@ hypre_ILUCreate()
|
||||
NULL;/* this is not the default option, set it only when switched to */
|
||||
hypre_ParILUDataSchurPrecondPrintLevel(ilu_data) = 0;
|
||||
hypre_ParILUDataSchurPrecondMaxIter(ilu_data) = 1;
|
||||
hypre_ParILUDataSchurPrecondTriSolve(ilu_data) = 1;
|
||||
hypre_ParILUDataSchurPrecondLowerJacobiIters(ilu_data) = 5;
|
||||
hypre_ParILUDataSchurPrecondUpperJacobiIters(ilu_data) = 5;
|
||||
hypre_ParILUDataSchurPrecondTol(ilu_data) = 0.0;
|
||||
|
||||
/* -> SCHUR-NSH */
|
||||
@ -557,6 +563,30 @@ hypre_ILUSetMaxIter( void *ilu_vdata, HYPRE_Int max_iter )
|
||||
hypre_ParILUDataMaxIter(ilu_data) = max_iter;
|
||||
return hypre_error_flag;
|
||||
}
|
||||
/* Set ILU triangular solver type */
|
||||
HYPRE_Int
|
||||
hypre_ILUSetTriSolve( void *ilu_vdata, HYPRE_Int tri_solve )
|
||||
{
|
||||
hypre_ParILUData *ilu_data = (hypre_ParILUData*) ilu_vdata;
|
||||
hypre_ParILUDataTriSolve(ilu_data) = tri_solve;
|
||||
return hypre_error_flag;
|
||||
}
|
||||
/* Set Lower Jacobi iterations for iterative triangular solver */
|
||||
HYPRE_Int
|
||||
hypre_ILUSetLowerJacobiIters( void *ilu_vdata, HYPRE_Int lower_jacobi_iters )
|
||||
{
|
||||
hypre_ParILUData *ilu_data = (hypre_ParILUData*) ilu_vdata;
|
||||
hypre_ParILUDataLowerJacobiIters(ilu_data) = lower_jacobi_iters;
|
||||
return hypre_error_flag;
|
||||
}
|
||||
/* Set Upper Jacobi iterations for iterative triangular solver */
|
||||
HYPRE_Int
|
||||
hypre_ILUSetUpperJacobiIters( void *ilu_vdata, HYPRE_Int upper_jacobi_iters )
|
||||
{
|
||||
hypre_ParILUData *ilu_data = (hypre_ParILUData*) ilu_vdata;
|
||||
hypre_ParILUDataUpperJacobiIters(ilu_data) = upper_jacobi_iters;
|
||||
return hypre_error_flag;
|
||||
}
|
||||
/* Set convergence tolerance for ILU solver */
|
||||
HYPRE_Int
|
||||
hypre_ILUSetTol( void *ilu_vdata, HYPRE_Real tol )
|
||||
@ -721,6 +751,30 @@ hypre_ILUSetSchurPrecondMaxIter( void *ilu_vdata, HYPRE_Int sp_max_iter )
|
||||
hypre_ParILUDataSchurPrecondMaxIter(ilu_data) = sp_max_iter;
|
||||
return hypre_error_flag;
|
||||
}
|
||||
/* Set triangular solver type for Precond of Schur System */
|
||||
HYPRE_Int
|
||||
hypre_ILUSetSchurPrecondTriSolve( void *ilu_vdata, HYPRE_Int sp_tri_solve )
|
||||
{
|
||||
hypre_ParILUData *ilu_data = (hypre_ParILUData*) ilu_vdata;
|
||||
hypre_ParILUDataSchurPrecondTriSolve(ilu_data) = sp_tri_solve;
|
||||
return hypre_error_flag;
|
||||
}
|
||||
/* Set Lower Jacobi iterations for Precond of Schur System */
|
||||
HYPRE_Int
|
||||
hypre_ILUSetSchurPrecondLowerJacobiIters( void *ilu_vdata, HYPRE_Int sp_lower_jacobi_iters )
|
||||
{
|
||||
hypre_ParILUData *ilu_data = (hypre_ParILUData*) ilu_vdata;
|
||||
hypre_ParILUDataSchurPrecondLowerJacobiIters(ilu_data) = sp_lower_jacobi_iters;
|
||||
return hypre_error_flag;
|
||||
}
|
||||
/* Set Upper Jacobi iterations for Precond of Schur System */
|
||||
HYPRE_Int
|
||||
hypre_ILUSetSchurPrecondUpperJacobiIters( void *ilu_vdata, HYPRE_Int sp_upper_jacobi_iters )
|
||||
{
|
||||
hypre_ParILUData *ilu_data = (hypre_ParILUData*) ilu_vdata;
|
||||
hypre_ParILUDataSchurPrecondUpperJacobiIters(ilu_data) = sp_upper_jacobi_iters;
|
||||
return hypre_error_flag;
|
||||
}
|
||||
/* Set onvergence tolerance for Precond of Schur System */
|
||||
HYPRE_Int
|
||||
hypre_ILUSetSchurPrecondTol( void *ilu_vdata, HYPRE_Int sp_tol )
|
||||
@ -938,6 +992,9 @@ hypre_ILUWriteSolverParams(void *ilu_vdata)
|
||||
|
||||
hypre_printf("\n ILU Solver Parameters: \n");
|
||||
hypre_printf("Max number of iterations: %d\n", hypre_ParILUDataMaxIter(ilu_data));
|
||||
hypre_printf("Triangular solver type: %d\n", hypre_ParILUDataTriSolve(ilu_data));
|
||||
hypre_printf("Lower Jacobi Iterations: %d\n", hypre_ParILUDataLowerJacobiIters(ilu_data));
|
||||
hypre_printf("Upper Jacobi Iterations: %d\n", hypre_ParILUDataUpperJacobiIters(ilu_data));
|
||||
hypre_printf("Stopping tolerance: %e\n", hypre_ParILUDataTol(ilu_data));
|
||||
|
||||
return hypre_error_flag;
|
||||
|
||||
@ -73,6 +73,10 @@ typedef struct hypre_ParILUData_struct
|
||||
HYPRE_Int print_level;
|
||||
HYPRE_Int max_iter;
|
||||
|
||||
HYPRE_Int tri_solve;
|
||||
HYPRE_Int lower_jacobi_iters;
|
||||
HYPRE_Int upper_jacobi_iters;
|
||||
|
||||
HYPRE_Int ilu_type;
|
||||
HYPRE_Int nLU;
|
||||
HYPRE_Int nI;
|
||||
@ -130,6 +134,9 @@ typedef struct hypre_ParILUData_struct
|
||||
HYPRE_Real *sp_ilu_droptol;/* droptol array for ILUT */
|
||||
HYPRE_Int sp_print_level;
|
||||
HYPRE_Int sp_max_iter;/* max precond iter or max MR iteration */
|
||||
HYPRE_Int sp_tri_solve;
|
||||
HYPRE_Int sp_lower_jacobi_iters;
|
||||
HYPRE_Int sp_upper_jacobi_iters;
|
||||
HYPRE_Real sp_tol;
|
||||
|
||||
HYPRE_Int test_opt;
|
||||
@ -193,6 +200,9 @@ typedef struct hypre_ParILUData_struct
|
||||
#define hypre_ParILUDataLogging(ilu_data) ((ilu_data) -> logging)
|
||||
#define hypre_ParILUDataPrintLevel(ilu_data) ((ilu_data) -> print_level)
|
||||
#define hypre_ParILUDataMaxIter(ilu_data) ((ilu_data) -> max_iter)
|
||||
#define hypre_ParILUDataTriSolve(ilu_data) ((ilu_data) -> tri_solve)
|
||||
#define hypre_ParILUDataLowerJacobiIters(ilu_data) ((ilu_data) -> lower_jacobi_iters)
|
||||
#define hypre_ParILUDataUpperJacobiIters(ilu_data) ((ilu_data) -> upper_jacobi_iters)
|
||||
#define hypre_ParILUDataIluType(ilu_data) ((ilu_data) -> ilu_type)
|
||||
#define hypre_ParILUDataNLU(ilu_data) ((ilu_data) -> nLU)
|
||||
#define hypre_ParILUDataNI(ilu_data) ((ilu_data) -> nI)
|
||||
@ -220,6 +230,9 @@ typedef struct hypre_ParILUData_struct
|
||||
#define hypre_ParILUDataSchurPrecondIluDroptol(ilu_data) ((ilu_data) -> sp_ilu_droptol)
|
||||
#define hypre_ParILUDataSchurPrecondPrintLevel(ilu_data) ((ilu_data) -> sp_print_level)
|
||||
#define hypre_ParILUDataSchurPrecondMaxIter(ilu_data) ((ilu_data) -> sp_max_iter)
|
||||
#define hypre_ParILUDataSchurPrecondTriSolve(ilu_data) ((ilu_data) -> sp_tri_solve)
|
||||
#define hypre_ParILUDataSchurPrecondLowerJacobiIters(ilu_data) ((ilu_data) -> sp_lower_jacobi_iters)
|
||||
#define hypre_ParILUDataSchurPrecondUpperJacobiIters(ilu_data) ((ilu_data) -> sp_upper_jacobi_iters)
|
||||
#define hypre_ParILUDataSchurPrecondTol(ilu_data) ((ilu_data) -> sp_tol)
|
||||
|
||||
#define hypre_ParILUDataSchurNSHMaxNumIter(ilu_data) ((ilu_data) -> ss_nsh_setup_max_iter)
|
||||
|
||||
@ -507,6 +507,9 @@ HYPRE_Int HYPRE_BoomerAMGSetILULevel( HYPRE_Solver solver, HYPRE_Int ilu_lfil);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUMaxRowNnz( HYPRE_Solver solver, HYPRE_Int ilu_max_row_nnz);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUMaxIter( HYPRE_Solver solver, HYPRE_Int ilu_max_iter);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUDroptol( HYPRE_Solver solver, HYPRE_Real ilu_droptol);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUTriSolve( HYPRE_Solver solver, HYPRE_Int ilu_tri_solve);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILULowerJacobiIters( HYPRE_Solver solver, HYPRE_Int ilu_lower_jacobi_iters);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILUUpperJacobiIters( HYPRE_Solver solver, HYPRE_Int ilu_upper_jacobi_iters);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetILULocalReordering( HYPRE_Solver solver, HYPRE_Int ilu_reordering_type);
|
||||
HYPRE_Int HYPRE_BoomerAMGSetFSAIMaxSteps ( HYPRE_Solver solver, HYPRE_Int max_steps );
|
||||
HYPRE_Int HYPRE_BoomerAMGSetFSAIMaxStepSize ( HYPRE_Solver solver, HYPRE_Int max_step_size );
|
||||
@ -1144,6 +1147,9 @@ HYPRE_Int hypre_BoomerAMGSetEuBJ ( void *data, HYPRE_Int eu_bj );
|
||||
HYPRE_Int hypre_BoomerAMGSetILUType( void *data, HYPRE_Int ilu_type);
|
||||
HYPRE_Int hypre_BoomerAMGSetILULevel( void *data, HYPRE_Int ilu_lfil);
|
||||
HYPRE_Int hypre_BoomerAMGSetILUDroptol( void *data, HYPRE_Real ilu_droptol);
|
||||
HYPRE_Int hypre_BoomerAMGSetILUTriSolve( void *data, HYPRE_Int ilu_tri_solve);
|
||||
HYPRE_Int hypre_BoomerAMGSetILULowerJacobiIters( void *data, HYPRE_Int ilu_lower_jacobi_iters);
|
||||
HYPRE_Int hypre_BoomerAMGSetILUUpperJacobiIters( void *data, HYPRE_Int ilu_upper_jacobi_iters);
|
||||
HYPRE_Int hypre_BoomerAMGSetILUMaxIter( void *data, HYPRE_Int ilu_max_iter);
|
||||
HYPRE_Int hypre_BoomerAMGSetILUMaxRowNnz( void *data, HYPRE_Int ilu_max_row_nnz);
|
||||
HYPRE_Int hypre_BoomerAMGSetILULocalReordering( void *data, HYPRE_Int ilu_reordering_type);
|
||||
@ -2157,6 +2163,9 @@ HYPRE_Int hypre_ILUSetDropThresholdArray( void *ilu_vdata, HYPRE_Real *threshold
|
||||
HYPRE_Int hypre_ILUSetType( void *ilu_vdata, HYPRE_Int ilu_type );
|
||||
HYPRE_Int hypre_ILUSetMaxIter( void *ilu_vdata, HYPRE_Int max_iter );
|
||||
HYPRE_Int hypre_ILUSetTol( void *ilu_vdata, HYPRE_Real tol );
|
||||
HYPRE_Int hypre_ILUSetTriSolve( void *ilu_vdata, HYPRE_Int tri_solve );
|
||||
HYPRE_Int hypre_ILUSetLowerJacobiIters( void *ilu_vdata, HYPRE_Int lower_jacobi_iters );
|
||||
HYPRE_Int hypre_ILUSetUpperJacobiIters( void *ilu_vdata, HYPRE_Int upper_jacobi_iters );
|
||||
HYPRE_Int hypre_ILUSetup( void *ilu_vdata, hypre_ParCSRMatrix *A, hypre_ParVector *f,
|
||||
hypre_ParVector *u );
|
||||
HYPRE_Int hypre_ILUSolve( void *ilu_vdata, hypre_ParCSRMatrix *A, hypre_ParVector *f,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user