In-house iterative solvers defined by blocks and associated to CDO discretizations. More...
#include "cs_defs.h"
#include <assert.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <bft_mem.h>
#include "cs_array.h"
#include "cs_blas.h"
#include "cs_cdo_solve.h"
#include "cs_log.h"
#include "cs_parall.h"
#include "cs_parameters.h"
#include "cs_saddle_itsol.h"
Functions | |
cs_saddle_block_precond_t * | cs_saddle_block_precond_create (cs_param_precond_block_t block_type, cs_param_schur_approx_t schur_type, cs_param_sles_t *m11_slesp, cs_sles_t *m11_sles) |
Create and initialize a cs_saddle_block_precond_t structure. More... | |
void | cs_saddle_block_precond_free (cs_saddle_block_precond_t **p_sbp) |
Free a cs_saddle_block_precond_t structure. More... | |
void | cs_saddle_minres (cs_saddle_system_t *ssys, cs_saddle_block_precond_t *sbp, cs_real_t *x1, cs_real_t *x2, cs_iter_algo_t *algo) |
Apply the MINRES algorithm to a saddle point problem (the system is stored in a hybrid way). Please refer to cs_saddle_system_t structure definition. The stride is equal to 1 for the matrix (db_size[3] = 1) and the vector. More... | |
void | cs_saddle_gcr (int restart, cs_saddle_system_t *ssys, cs_saddle_block_precond_t *sbp, cs_real_t *x1, cs_real_t *x2, cs_iter_algo_t *algo) |
Apply the GCR algorithm to a saddle point problem (the system is stored in a hybrid way). Please refer to cs_saddle_system_t structure definition. The stride is equal to 1 for the matrix (db_size[3] = 1) and the vector. This algorithm is taken from 2010 Notay's paper: "An aggregation-based algebraic multigrid method" ETNA (vol. 37) More... | |
void | cs_matrix_vector_multiply_gs_allocated (const cs_range_set_t *rset, const cs_matrix_t *mat, cs_real_t *vec, cs_real_t *matvec) |
Perform a matrix-vector multiplication in case of scatter-view array as input parameter. Thus, one performs a scatter --> gather (before the multiplication) and a gather --> scatter operation after the multiplication. One assumes that matvec is allocated to the right size. No check is done. More... | |
void | cs_matrix_vector_multiply_gs (const cs_range_set_t *rset, const cs_matrix_t *mat, cs_lnum_t vec_len, cs_real_t *vec, cs_real_t **p_matvec) |
Perform a matrix-vector multiplication in case of scatter-view array as input parameter. Thus, one performs a scatter --> gather (before the multiplication) and a gather --> scatter operation after the multiplication. The output parameter matvec is not allocated. A check on the size is done for the input array. More... | |
In-house iterative solvers defined by blocks and associated to CDO discretizations.
void cs_matrix_vector_multiply_gs | ( | const cs_range_set_t * | rset, |
const cs_matrix_t * | mat, | ||
cs_lnum_t | vec_len, | ||
cs_real_t * | vec, | ||
cs_real_t ** | p_matvec | ||
) |
Perform a matrix-vector multiplication in case of scatter-view array as input parameter. Thus, one performs a scatter --> gather (before the multiplication) and a gather --> scatter operation after the multiplication. The output parameter matvec is not allocated. A check on the size is done for the input array.
The stride is equal to 1 for the matrix (db_size[3] = 1) and the vector
[in] | rset | pointer to a cs_range_set_t structure |
[in] | mat | matrix |
[in] | vec_len | size of vec |
[in,out] | vec | vector of real numbers |
[out] | p_matvec | resulting vector for the matrix-vector product |
void cs_matrix_vector_multiply_gs_allocated | ( | const cs_range_set_t * | rset, |
const cs_matrix_t * | mat, | ||
cs_real_t * | vec, | ||
cs_real_t * | matvec | ||
) |
Perform a matrix-vector multiplication in case of scatter-view array as input parameter. Thus, one performs a scatter --> gather (before the multiplication) and a gather --> scatter operation after the multiplication. One assumes that matvec is allocated to the right size. No check is done.
The stride is equal to 1 for the matrix (db_size[3] = 1) and the vector
[in] | rset | pointer to a cs_range_set_t structure |
[in] | mat | matrix |
[in,out] | vec | vector |
[in,out] | matvec | resulting vector for the matrix-vector product |
cs_saddle_block_precond_t* cs_saddle_block_precond_create | ( | cs_param_precond_block_t | block_type, |
cs_param_schur_approx_t | schur_type, | ||
cs_param_sles_t * | m11_slesp, | ||
cs_sles_t * | m11_sles | ||
) |
Create and initialize a cs_saddle_block_precond_t structure.
[in] | block_type | type of block preconditioner |
[in] | schur_type | type of Schur approximation |
[in] | m11_slesp | pointer to the settings for the M11 block |
[in] | m11_sles | pointer to the cs_sles_t struct. for the M11 block |
void cs_saddle_block_precond_free | ( | cs_saddle_block_precond_t ** | p_sbp | ) |
Free a cs_saddle_block_precond_t structure.
[in,out] | p_sbp | double pointer to the structure to free |
void cs_saddle_gcr | ( | int | restart, |
cs_saddle_system_t * | ssys, | ||
cs_saddle_block_precond_t * | sbp, | ||
cs_real_t * | x1, | ||
cs_real_t * | x2, | ||
cs_iter_algo_t * | algo | ||
) |
Apply the GCR algorithm to a saddle point problem (the system is stored in a hybrid way). Please refer to cs_saddle_system_t structure definition. The stride is equal to 1 for the matrix (db_size[3] = 1) and the vector. This algorithm is taken from 2010 Notay's paper: "An aggregation-based algebraic multigrid method" ETNA (vol. 37)
[in] | restart | number of iterations before restarting |
[in] | ssys | pointer to a cs_saddle_system_t structure |
[in] | sbp | block-preconditioner for the Saddle-point problem |
[in,out] | x1 | array for the first part |
[in,out] | x2 | array for the second part |
[in,out] | algo | pointer to a cs_iter_algo_t structure |
void cs_saddle_minres | ( | cs_saddle_system_t * | ssys, |
cs_saddle_block_precond_t * | sbp, | ||
cs_real_t * | x1, | ||
cs_real_t * | x2, | ||
cs_iter_algo_t * | algo | ||
) |
Apply the MINRES algorithm to a saddle point problem (the system is stored in a hybrid way). Please refer to cs_saddle_system_t structure definition. The stride is equal to 1 for the matrix (db_size[3] = 1) and the vector.
[in] | ssys | pointer to a cs_saddle_system_t structure |
[in] | sbp | Block-preconditioner for the Saddle-point problem |
[in,out] | x1 | array for the first part |
[in,out] | x2 | array for the second part |
[in,out] | algo | pointer to a cs_iter_algo_t structure |