My Project
programmer's documentation
|
handling of PETSc-based linear solvers More...
#include "cs_defs.h"
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <petscvec.h>
#include <petscmat.h>
#include <petscksp.h>
#include "bft_mem.h"
#include "bft_error.h"
#include "bft_printf.h"
#include "cs_base.h"
#include "cs_log.h"
#include "cs_fp_exception.h"
#include "cs_halo.h"
#include "cs_matrix.h"
#include "cs_matrix_default.h"
#include "cs_timer.h"
#include "cs_sles.h"
#include "cs_sles_petsc.h"
Functions | |
void | cs_user_sles_petsc_hook (void *context, Mat a, KSP ksp) |
cs_sles_petsc_t * | cs_sles_petsc_define (int f_id, const char *name, MatType matrix_type, cs_sles_petsc_setup_hook_t *setup_hook, void *context) |
Define and associate a PETSc linear system solver for a given field or equation name. More... | |
cs_sles_petsc_t * | cs_sles_petsc_create (MatType matrix_type, cs_sles_petsc_setup_hook_t *setup_hook, void *context) |
Create PETSc linear system solver info and context. More... | |
void * | cs_sles_petsc_copy (const void *context) |
Create PETSc linear system solver info and context based on existing info and context. More... | |
void | cs_sles_petsc_destroy (void **context) |
Destroy PETSc linear system solver info and context. More... | |
void | cs_sles_petsc_setup (void *context, const char *name, const cs_matrix_t *a, int verbosity) |
Setup PETSc linear equation solver. More... | |
cs_sles_convergence_state_t | cs_sles_petsc_solve (void *context, const char *name, const cs_matrix_t *a, int verbosity, cs_halo_rotation_t rotation_mode, double precision, double r_norm, int *n_iter, double *residue, const cs_real_t *rhs, cs_real_t *vx, size_t aux_size, void *aux_vectors) |
Call PETSc linear equation solver. More... | |
void | cs_sles_petsc_free (void *context) |
Free PETSc linear equation solver setup context. More... | |
bool | cs_sles_petsc_error_post_and_abort (cs_sles_t *sles, cs_sles_convergence_state_t state, const cs_matrix_t *a, cs_halo_rotation_t rotation_mode, const cs_real_t *rhs, cs_real_t *vx) |
Error handler for PETSc solver. More... | |
void | cs_sles_petsc_log (const void *context, cs_log_t log_type) |
Log sparse linear equation solver info. More... | |
handling of PETSc-based linear solvers
void* cs_sles_petsc_copy | ( | const void * | context | ) |
Create PETSc linear system solver info and context based on existing info and context.
[in] | context | pointer to reference info and context (actual type: cs_sles_petsc_t *) |
cs_sles_petsc_t* cs_sles_petsc_create | ( | MatType | matrix_type, |
cs_sles_petsc_setup_hook_t * | setup_hook, | ||
void * | context | ||
) |
Create PETSc 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] | matrix_type | PETSc matrix 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 |
cs_sles_petsc_t* cs_sles_petsc_define | ( | int | f_id, |
const char * | name, | ||
MatType | matrix_type, | ||
cs_sles_petsc_setup_hook_t * | setup_hook, | ||
void * | context | ||
) |
Define and associate a PETSc 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.
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.
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] | matrix_type | PETSc matrix 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_petsc_destroy | ( | void ** | context | ) |
Destroy PETSc linear system solver info and context.
[in,out] | context | pointer to iterative solver info and context (actual type: cs_sles_petsc_t **) |
bool cs_sles_petsc_error_post_and_abort | ( | cs_sles_t * | sles, |
cs_sles_convergence_state_t | state, | ||
const cs_matrix_t * | a, | ||
cs_halo_rotation_t | rotation_mode, | ||
const cs_real_t * | rhs, | ||
cs_real_t * | vx | ||
) |
Error handler for PETSc 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] | rotation_mode | halo update option for rotational periodicity |
[in] | rhs | right hand side |
[in,out] | vx | system solution |
void cs_sles_petsc_free | ( | void * | context | ) |
Free PETSc 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_petsc_t *) |
void cs_sles_petsc_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_petsc_t *) |
[in] | log_type | log type |
void cs_sles_petsc_setup | ( | void * | context, |
const char * | name, | ||
const cs_matrix_t * | a, | ||
int | verbosity | ||
) |
Setup PETSc linear equation solver.
[in,out] | context | pointer to iterative solver info and context (actual type: cs_sles_petsc_t *) |
[in] | name | pointer to system name |
[in] | a | associated matrix |
[in] | verbosity | associated verbosity |
cs_sles_convergence_state_t cs_sles_petsc_solve | ( | void * | context, |
const char * | name, | ||
const cs_matrix_t * | a, | ||
int | verbosity, | ||
cs_halo_rotation_t | rotation_mode, | ||
double | precision, | ||
double | r_norm, | ||
int * | n_iter, | ||
double * | residue, | ||
const cs_real_t * | rhs, | ||
cs_real_t * | vx, | ||
size_t | aux_size, | ||
void * | aux_vectors | ||
) |
Call PETSc linear equation solver.
[in,out] | context | pointer to iterative solver info and context (actual type: cs_sles_petsc_t *) |
[in] | name | pointer to system name |
[in] | a | matrix |
[in] | verbosity | associated verbosity |
[in] | rotation_mode | halo update option for rotational periodicity |
[in] | precision | solver precision |
[in] | r_norm | residue normalization |
[out] | n_iter | number of "equivalent" iterations |
[out] | residue | residue |
[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) |
void cs_user_sles_petsc_hook | ( | void * | context, |
Mat | a, | ||
KSP | ksp | ||
) |