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:
Ruipeng Li 2022-08-02 00:19:44 -07:00 committed by GitHub
parent 6845385dd1
commit 6425099995
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 276 additions and 0 deletions

View File

@ -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
*--------------------------------------------------------------------------*/

View File

@ -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
*--------------------------------------------------------------------------*/

View File

@ -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.

View File

@ -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 );

View File

@ -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)
{

View File

@ -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)

View File

@ -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);

View File

@ -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;

View File

@ -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)

View File

@ -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,