88 size_t* iterations,
int* converged) {
90 if (limit > cfg->
max_iter - *iterations) {
97 for (
size_t j = 0; j < limit; ++j) {
100 st = lmmc_gmres_step(a, b, precond, s, j, &h_next, &breakdown);
108 if (result != NULL) {
120 if (h_next <= 1e-30) {
137 size_t iterations = 0;
147 st = lmmc_gmres_start(a, b, &local, x, &s);
154 while (iterations < local.
max_iter && !converged) {
155 st = lmmc_gmres_cycle(a, b, precond, &local, x, &s, out_result, &iterations, &converged);
double lmmc_real_t
Public and internal LMMC real type.
lmmc_status_t lmmc_vec_copy(const lmmc_vec_t *src, lmmc_vec_t *dst)
逐元素复制向量内容:dst = src。
lmmc_status_t lmmc_vec_norm2_checked(const lmmc_vec_t *v, lmmc_real_t *out_norm)
lmmc_status_t lmmc_apply_precond_or_identity(const lmmc_precond_t *precond, const lmmc_vec_t *rhs, lmmc_vec_t *out)
lmmc_status_t lmmc_itersolve_validate(const lmmc_sparse_mat_t *a, const lmmc_vec_t *b, const lmmc_precond_t *precond, const lmmc_itersolve_config_t *cfg, lmmc_vec_t *x, lmmc_itersolve_config_t *out_cfg, lmmc_itersolve_result_t *out_result)
void lmmc_itersolve_finish(lmmc_itersolve_result_t *result, int converged, size_t iterations, lmmc_real_t norm)
lmmc_status_t lmmc_itersolve_residual(const lmmc_sparse_mat_t *a, const lmmc_vec_t *b, const lmmc_vec_t *x, lmmc_vec_t *ax, lmmc_vec_t *r)
void lmmc_itersolve_initial(lmmc_itersolve_result_t *result, lmmc_real_t norm)
void lmmc_itersolve_do_log(const lmmc_itersolve_config_t *cfg, size_t iter, lmmc_real_t residual_norm)
lmmc_status_t lmmc_gmres_solve(const lmmc_sparse_mat_t *a, const lmmc_vec_t *b, const lmmc_precond_t *precond, const lmmc_itersolve_config_t *cfg, lmmc_vec_t *x, lmmc_itersolve_result_t *out_result)
重启型 GMRES 求解一般非对称稀疏系统 A*x = b。
lmmc_real_t final_residual_norm
lmmc_status_t lmmc_gmres_trial(lmmc_gmres_state_t *s, size_t j)
lmmc_status_t lmmc_gmres_normalize(lmmc_vec_t *out, const lmmc_vec_t *in, lmmc_real_t norm)
lmmc_status_t lmmc_gmres_workspace(size_t n, size_t restart, lmmc_gmres_state_t *s)
lmmc_status_t lmmc_gmres_arnoldi(const lmmc_sparse_mat_t *a, const lmmc_precond_t *precond, lmmc_gmres_state_t *s, size_t j, lmmc_real_t *h_next)
lmmc_status_t lmmc_gmres_back_substitute(lmmc_gmres_state_t *s, size_t dim)
lmmc_status_t lmmc_gmres_rotate(lmmc_gmres_state_t *s, size_t j, int *breakdown)
void lmmc_memory_free(void *pointer)
通用稀疏矩阵(CSR / CSC 共用同一结构)。
lmmc_status_t
LMMC 库统一返回的状态码.
@ LMMC_STATUS_NUMERICAL_FAILURE