Go to the source code of this file.
Typedefs | |
typedef void() | cs_sles_hypre_setup_hook_t(int verbosity, void *context, void *solver) |
Function pointer for settings of a HYPRE solver setup. More... | |
typedef struct _cs_sles_hypre_t | cs_sles_hypre_t |
Functions | |
cs_sles_hypre_t * | cs_sles_hypre_define (int f_id, const char *name, cs_sles_hypre_type_t solver_type, cs_sles_hypre_type_t precond_type, cs_sles_hypre_setup_hook_t *setup_hook, void *context) |
Define and associate a HYPRE linear system solver for a given field or equation name. More... | |
cs_sles_hypre_t * | cs_sles_hypre_create (cs_sles_hypre_type_t solver_type, cs_sles_hypre_type_t precond_type, cs_sles_hypre_setup_hook_t *setup_hook, void *context) |
Create HYPRE linear system solver info and context. More... | |
void | cs_sles_hypre_destroy (void **context) |
Destroy iterative sparse linear system solver info and context. More... | |
void * | cs_sles_hypre_copy (const void *context) |
Create HYPRE sparse linear system solver info and context based on existing info and context. More... | |
void | cs_sles_hypre_setup (void *context, const char *name, const cs_matrix_t *a, int verbosity) |
Setup iterative sparse linear equation solver. More... | |
cs_sles_convergence_state_t | cs_sles_hypre_solve (void *context, const char *name, const cs_matrix_t *a, int verbosity, double precision, double r_norm, int *n_iter, double *residual, const cs_real_t *rhs, cs_real_t *vx, size_t aux_size, void *aux_vectors) |
Call HYPRE linear equation solver. More... | |
void | cs_sles_hypre_free (void *context) |
Free HYPRE linear equation solver setup context. More... | |
bool | cs_sles_hypre_error_post_and_abort (cs_sles_t *sles, cs_sles_convergence_state_t state, const cs_matrix_t *a, const cs_real_t *rhs, cs_real_t *vx) |
Error handler for HYPRE solver. More... | |
void | cs_sles_hypre_log (const void *context, cs_log_t log_type) |
Log sparse linear equation solver info. More... | |
void | cs_sles_hypre_set_n_max_iter (cs_sles_hypre_t *context, int n_max_iter) |
Set the max. number of iterations associated to the given HYPRE contrext. More... | |
void | cs_sles_hypre_set_host_device (cs_sles_hypre_t *context, int use_device) |
Define whether the solver should run on the host or accelerated device. More... | |
int | cs_sles_hypre_get_host_device (const cs_sles_hypre_t *context) |
Query whether the solver should run on the host or accelerated device. More... | |
void | cs_sles_hypre_library_info (cs_log_t log_type) |
Print information on hypre library. More... | |
cs_sles_hypre_setup_hook_t |
Function pointer for settings of a HYPRE solver setup.
This function is called during the setup stage for a HYPRE solver.
When first called, the solver argument is NULL, and must be created using HYPRE functions.
Note: if the context pointer is non-NULL, it must point to valid data when the selection function is called so that value or structure should not be temporary (i.e. local);
[in] | verbosity | verbosity level |
[in,out] | context | pointer to optional (untyped) value or structure |
[in,out] | solver | handle to HYPRE solver (to be cast as HYPRE_Solver) |
typedef struct _cs_sles_hypre_t cs_sles_hypre_t |
enum cs_sles_hypre_type_t |
void* cs_sles_hypre_copy | ( | const void * | context | ) |
Create HYPRE sparse linear system solver info and context based on existing info and context.
[in] | context | pointer to reference info and context (actual type: cs_sles_hypre_t *) |
cs_sles_hypre_t* cs_sles_hypre_create | ( | cs_sles_hypre_type_t | solver_type, |
cs_sles_hypre_type_t | precond_type, | ||
cs_sles_hypre_setup_hook_t * | setup_hook, | ||
void * | context | ||
) |
Create HYPRE linear system solver info and context.
In case of rotational periodicity for a block (non-scalar) matrix, the matrix type will be forced to MATSHELL ("shell") regardless of the option used.
[in] | solver_type | HYPRE solver type |
[in] | precond_type | HYPRE preconditioner type |
[in] | setup_hook | pointer to optional setup epilogue function |
[in] | context | pointer to optional (untyped) value or structure for setup_hook, or NULL |
cs_sles_hypre_t* cs_sles_hypre_define | ( | int | f_id, |
const char * | name, | ||
cs_sles_hypre_type_t | solver_type, | ||
cs_sles_hypre_type_t | precond_type, | ||
cs_sles_hypre_setup_hook_t * | setup_hook, | ||
void * | context | ||
) |
Define and associate a HYPRE linear system solver for a given field or equation name.
If this system did not previously exist, it is added to the list of "known" systems. Otherwise, its definition is replaced by the one defined here.
This is a utility function: if finer control is needed, see cs_sles_define and cs_sles_petsc_create.
The associated solver required that the matrix passed to it is a HYPRE matrix (see cs_matrix_set_type_hypre).
Note that this function returns a pointer directly to the iterative solver management structure. This may be used to set further options. If needed, cs_sles_find may be used to obtain a pointer to the matching cs_sles_t container.
[in] | f_id | associated field id, or < 0 |
[in] | name | associated name if f_id < 0, or NULL |
[in] | solver_type | HYPRE solver type |
[in] | precond_type | HYPRE preconditioner type |
[in] | setup_hook | pointer to optional setup epilogue function |
[in,out] | context | pointer to optional (untyped) value or structure for setup_hook, or NULL |
void cs_sles_hypre_destroy | ( | void ** | context | ) |
Destroy iterative sparse linear system solver info and context.
[in,out] | context | pointer to iterative solver info and context (actual type: cs_sles_hypre_t **) |
bool cs_sles_hypre_error_post_and_abort | ( | cs_sles_t * | sles, |
cs_sles_convergence_state_t | state, | ||
const cs_matrix_t * | a, | ||
const cs_real_t * | rhs, | ||
cs_real_t * | vx | ||
) |
Error handler for HYPRE solver.
In case of divergence or breakdown, this error handler outputs an error message It does nothing in case the maximum iteration count is reached.
[in,out] | sles | pointer to solver object |
[in] | state | convergence state |
[in] | a | matrix |
[in] | rhs | right hand side |
[in,out] | vx | system solution |
void cs_sles_hypre_free | ( | void * | context | ) |
Free HYPRE linear equation solver setup context.
This function frees resolution-related data, such as buffers and preconditioning but does not free the whole context, as info used for logging (especially performance data) is maintained.
[in,out] | context | pointer to iterative solver info and context (actual type: cs_sles_hypre_t *) |
int cs_sles_hypre_get_host_device | ( | const cs_sles_hypre_t * | context | ) |
Query whether the solver should run on the host or accelerated device.
[in,out] | context | pointer to HYPRE linear solver info |
void cs_sles_hypre_library_info | ( | cs_log_t | log_type | ) |
Print information on hypre library.
[in] | log_type | log type |
void cs_sles_hypre_log | ( | const void * | context, |
cs_log_t | log_type | ||
) |
Log sparse linear equation solver info.
[in] | context | pointer to iterative solver info and context (actual type: cs_sles_hypre_t *) |
[in] | log_type | log type |
void cs_sles_hypre_set_host_device | ( | cs_sles_hypre_t * | context, |
int | use_device | ||
) |
Define whether the solver should run on the host or accelerated device.
If no device is available, this setting is ignored.
[in,out] | context | pointer to HYPRE linear solver info |
[in] | use_device | 0 for host, 1 for device (GPU) |
void cs_sles_hypre_set_n_max_iter | ( | cs_sles_hypre_t * | context, |
int | n_max_iter | ||
) |
Set the max. number of iterations associated to the given HYPRE contrext.
[in,out] | context | pointer to HYPRE linear solver info |
[in] | n_max_iter | max. number of iterations |
void cs_sles_hypre_setup | ( | void * | context, |
const char * | name, | ||
const cs_matrix_t * | a, | ||
int | verbosity | ||
) |
Setup iterative sparse linear equation solver.
[in,out] | context | pointer to iterative solver info and context (actual type: cs_sles_hypre_t *) |
[in] | name | pointer to system name |
[in] | a | associated matrix |
[in] | verbosity | associated verbosity |
cs_sles_convergence_state_t cs_sles_hypre_solve | ( | void * | context, |
const char * | name, | ||
const cs_matrix_t * | a, | ||
int | verbosity, | ||
double | precision, | ||
double | r_norm, | ||
int * | n_iter, | ||
double * | residual, | ||
const cs_real_t * | rhs, | ||
cs_real_t * | vx, | ||
size_t | aux_size, | ||
void * | aux_vectors | ||
) |
Call HYPRE linear equation solver.
[in,out] | context | pointer to iterative solver info and context (actual type: cs_sles_hypre_t *) |
[in] | name | pointer to system name |
[in] | a | matrix |
[in] | verbosity | associated verbosity |
[in] | precision | solver precision |
[in] | r_norm | residual normalization |
[out] | n_iter | number of "equivalent" iterations |
[out] | residual | residual |
[in] | rhs | right hand side |
[in,out] | vx | system solution |
[in] | aux_size | number of elements in aux_vectors (in bytes) |
aux_vectors | optional working area (internal allocation if NULL) |