PaStiX Handbook  6.2.1
Refinement step

This group describes all the routines to apply iterative refinement on the system. More...

Modules

 Refinement internal function documentation
 

Functions

int pastix_subtask_refine (pastix_data_t *pastix_data, pastix_int_t n, pastix_int_t nrhs, const void *b, pastix_int_t ldb, void *x, pastix_int_t ldx)
 Perform the iterative refinement without apply the permutations. More...
 
pastix_int_t c_bicgstab_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t s_bicgstab_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t z_bicgstab_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t d_bicgstab_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t c_gmres_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t s_gmres_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t z_gmres_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t d_gmres_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t c_grad_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t s_grad_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t z_grad_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t d_grad_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t c_pivot_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t s_pivot_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t z_pivot_smp (pastix_data_t *pastix_data, void *x, void *b)
 
pastix_int_t d_pivot_smp (pastix_data_t *pastix_data, void *x, void *b)
 

Detailed Description

This group describes all the routines to apply iterative refinement on the system.

Function Documentation

◆ pastix_subtask_refine()

int pastix_subtask_refine ( pastix_data_t *  pastix_data,
pastix_int_t  n,
pastix_int_t  nrhs,
const void *  b,
pastix_int_t  ldb,
void *  x,
pastix_int_t  ldx 
)

Perform the iterative refinement without apply the permutations.

This routine is affected by the following parameters: IPARM_REFINEMENT, DPARM_EPSILON_REFINEMENT

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[in]nThe size of system to solve, and the number of rows of both matrices b and x.
[in]nrhsThe number of right hand side members, and the number of columns of b and x.
[in,out]bThe right hand side matrix of size ldb-by-nrhs. B is noted as inout, as permutation might be performed on the matrix. On exit, the matrix is restored as it was on entry.
[in]ldbThe leading dimension of the matrix b. ldb >= n.
[in,out]xThe matrix x of size ldx-by-nrhs. On entry, the initial guess x0 for the refinement step, that may be the solution returned by the solve step or any other initial guess. On exit, contains the final solution after the iterative refinement.
[in]ldxThe leading dimension of the matrix x. ldx >= n.
Return values
PASTIX_SUCCESSon successful exit,
PASTIX_ERR_BADPARAMETERif one parameter is incorrect,

Definition at line 115 of file pastix_task_refine.c.

References IPARM_SCHUR_SOLV_MODE.

◆ c_bicgstab_smp()

pastix_int_t c_bicgstab_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

c_bicgstab_smp - Function computing bicgstab iterative refinement.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file c_refine_bicgstab.c.

References c_refine_init().

◆ s_bicgstab_smp()

pastix_int_t s_bicgstab_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

s_bicgstab_smp - Function computing bicgstab iterative refinement.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file s_refine_bicgstab.c.

References s_refine_init().

◆ z_bicgstab_smp()

pastix_int_t z_bicgstab_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

z_bicgstab_smp - Function computing bicgstab iterative refinement.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file z_refine_bicgstab.c.

References z_refine_init().

◆ d_bicgstab_smp()

pastix_int_t d_bicgstab_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

d_bicgstab_smp - Function computing bicgstab iterative refinement.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file d_refine_bicgstab.c.

References d_refine_init().

◆ c_gmres_smp()

pastix_int_t c_gmres_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

c_gmres_smp - Function computing GMRES iterative refinement.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

H stores the h_{i,j} elements of the upper hessenberg matrix H (See Alg. 9.5 p 270) V stores the v_{i} vectors W stores the M^{-1} v_{i} vectors to avoid the application of the preconditioner on the output result (See line 11 of Alg 9.5)

If no preconditioner is applied, or the user wants to save memory, W stores only temporarily one vector for the Ax product (ldw is set to 0 to reuse the same vector at each iteration)

Algorithm from Iterative Methods for Sparse Linear systems, Y. Saad, Second Ed. p267-273

The version implemented is the Right preconditioned algorithm.

Compute x_m = x_0 + M^{-1} V_m y_m = x_0 + W_m y_m

Since we saved memory, we do not have (M^{-1} V_m) stored, thus we compute: w = V_m y_m w = M^{-1} (V_m y_m) x = x0 + (M^{-1} (V_m y_m))

Since we did not saved memory, we do have (M^{-1} V_m) stored in W_m if precond is true, thus we compute: x = x0 + W_m y_m, if precond x = x0 + V_m y_m, if not precond

Exit only if maximum number of iteration is reached. Exit on residual if checked at the beginning of the outer loop to be sure that the final residual of Ax-b is equal to the estimator computed within the inner loop.

Definition at line 48 of file c_refine_gmres.c.

References c_refine_init(), DPARM_EPSILON_REFINEMENT, IPARM_GMRES_IM, and IPARM_ITERMAX.

◆ s_gmres_smp()

pastix_int_t s_gmres_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

s_gmres_smp - Function computing GMRES iterative refinement.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

H stores the h_{i,j} elements of the upper hessenberg matrix H (See Alg. 9.5 p 270) V stores the v_{i} vectors W stores the M^{-1} v_{i} vectors to avoid the application of the preconditioner on the output result (See line 11 of Alg 9.5)

If no preconditioner is applied, or the user wants to save memory, W stores only temporarily one vector for the Ax product (ldw is set to 0 to reuse the same vector at each iteration)

Algorithm from Iterative Methods for Sparse Linear systems, Y. Saad, Second Ed. p267-273

The version implemented is the Right preconditioned algorithm.

Compute x_m = x_0 + M^{-1} V_m y_m = x_0 + W_m y_m

Since we saved memory, we do not have (M^{-1} V_m) stored, thus we compute: w = V_m y_m w = M^{-1} (V_m y_m) x = x0 + (M^{-1} (V_m y_m))

Since we did not saved memory, we do have (M^{-1} V_m) stored in W_m if precond is true, thus we compute: x = x0 + W_m y_m, if precond x = x0 + V_m y_m, if not precond

Exit only if maximum number of iteration is reached. Exit on residual if checked at the beginning of the outer loop to be sure that the final residual of Ax-b is equal to the estimator computed within the inner loop.

Definition at line 48 of file s_refine_gmres.c.

References DPARM_EPSILON_REFINEMENT, IPARM_GMRES_IM, IPARM_ITERMAX, and s_refine_init().

◆ z_gmres_smp()

pastix_int_t z_gmres_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

z_gmres_smp - Function computing GMRES iterative refinement.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

H stores the h_{i,j} elements of the upper hessenberg matrix H (See Alg. 9.5 p 270) V stores the v_{i} vectors W stores the M^{-1} v_{i} vectors to avoid the application of the preconditioner on the output result (See line 11 of Alg 9.5)

If no preconditioner is applied, or the user wants to save memory, W stores only temporarily one vector for the Ax product (ldw is set to 0 to reuse the same vector at each iteration)

Algorithm from Iterative Methods for Sparse Linear systems, Y. Saad, Second Ed. p267-273

The version implemented is the Right preconditioned algorithm.

Compute x_m = x_0 + M^{-1} V_m y_m = x_0 + W_m y_m

Since we saved memory, we do not have (M^{-1} V_m) stored, thus we compute: w = V_m y_m w = M^{-1} (V_m y_m) x = x0 + (M^{-1} (V_m y_m))

Since we did not saved memory, we do have (M^{-1} V_m) stored in W_m if precond is true, thus we compute: x = x0 + W_m y_m, if precond x = x0 + V_m y_m, if not precond

Exit only if maximum number of iteration is reached. Exit on residual if checked at the beginning of the outer loop to be sure that the final residual of Ax-b is equal to the estimator computed within the inner loop.

Definition at line 48 of file z_refine_gmres.c.

References DPARM_EPSILON_REFINEMENT, IPARM_GMRES_IM, IPARM_ITERMAX, and z_refine_init().

◆ d_gmres_smp()

pastix_int_t d_gmres_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

d_gmres_smp - Function computing GMRES iterative refinement.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

H stores the h_{i,j} elements of the upper hessenberg matrix H (See Alg. 9.5 p 270) V stores the v_{i} vectors W stores the M^{-1} v_{i} vectors to avoid the application of the preconditioner on the output result (See line 11 of Alg 9.5)

If no preconditioner is applied, or the user wants to save memory, W stores only temporarily one vector for the Ax product (ldw is set to 0 to reuse the same vector at each iteration)

Algorithm from Iterative Methods for Sparse Linear systems, Y. Saad, Second Ed. p267-273

The version implemented is the Right preconditioned algorithm.

Compute x_m = x_0 + M^{-1} V_m y_m = x_0 + W_m y_m

Since we saved memory, we do not have (M^{-1} V_m) stored, thus we compute: w = V_m y_m w = M^{-1} (V_m y_m) x = x0 + (M^{-1} (V_m y_m))

Since we did not saved memory, we do have (M^{-1} V_m) stored in W_m if precond is true, thus we compute: x = x0 + W_m y_m, if precond x = x0 + V_m y_m, if not precond

Exit only if maximum number of iteration is reached. Exit on residual if checked at the beginning of the outer loop to be sure that the final residual of Ax-b is equal to the estimator computed within the inner loop.

Definition at line 48 of file d_refine_gmres.c.

References d_refine_init(), DPARM_EPSILON_REFINEMENT, IPARM_GMRES_IM, and IPARM_ITERMAX.

◆ c_grad_smp()

pastix_int_t c_grad_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

c_grad_smp - Refine the solution using conjugate gradian method.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file c_refine_grad.c.

References c_refine_init().

◆ s_grad_smp()

pastix_int_t s_grad_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

s_grad_smp - Refine the solution using conjugate gradian method.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file s_refine_grad.c.

References s_refine_init().

◆ z_grad_smp()

pastix_int_t z_grad_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

z_grad_smp - Refine the solution using conjugate gradian method.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file z_refine_grad.c.

References z_refine_init().

◆ d_grad_smp()

pastix_int_t d_grad_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

d_grad_smp - Refine the solution using conjugate gradian method.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file d_refine_grad.c.

References d_refine_init().

◆ c_pivot_smp()

pastix_int_t c_pivot_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

c_pivot_smp - Refine the solution using static pivoting method.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file c_refine_pivot.c.

References c_refine_init().

◆ s_pivot_smp()

pastix_int_t s_pivot_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

s_pivot_smp - Refine the solution using static pivoting method.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file s_refine_pivot.c.

References s_refine_init().

◆ z_pivot_smp()

pastix_int_t z_pivot_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

z_pivot_smp - Refine the solution using static pivoting method.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file z_refine_pivot.c.

References z_refine_init().

◆ d_pivot_smp()

pastix_int_t d_pivot_smp ( pastix_data_t *  pastix_data,
void *  x,
void *  b 
)

d_pivot_smp - Refine the solution using static pivoting method.

Parameters
[in]pastix_dataThe PaStiX data structure that describes the solver instance.
[out]xThe solution vector.
[in]bThe right hand side member (only one).
Returns
Number of iterations

Definition at line 48 of file d_refine_pivot.c.

References d_refine_init().