|
LMMC
Lamina Mathematic core
|
#include "precond_internal.h"函数 | |
| lmmc_status_t | lmmc_precond_validate_spd (const lmmc_precond_t *precond, size_t size) |
| lmmc_status_t | lmmc_precond_create_none (size_t size, lmmc_precond_t *out_precond) |
| 创建恒等预处理子(仅记录尺寸,apply 时直接复制)。 | |
| lmmc_status_t | lmmc_precond_create_jacobi (const lmmc_sparse_mat_t *a, lmmc_precond_t *out_precond) |
| 由稀疏矩阵的对角线创建 Jacobi 预处理子:M = diag(A)。 | |
| void | lmmc_precond_destroy (lmmc_precond_t *precond) |
| 销毁预处理子,释放内部资源。 | |
| lmmc_status_t | lmmc_precond_apply (const lmmc_precond_t *precond, const lmmc_vec_t *rhs, lmmc_vec_t *out) |
| 应用预处理子:求解 M*out = rhs。 | |
| lmmc_status_t lmmc_precond_validate_spd | ( | const lmmc_precond_t * | precond, |
| size_t | size ) |
引用了 lmmc_precond_t::impl, LMMC_PRECOND_JACOBI, LMMC_PRECOND_NONE, lmmc_precond_validate_spd(), LMMC_STATUS_DIMENSION_MISMATCH, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NOT_POSITIVE_DEFINITE, LMMC_STATUS_NUMERICAL_FAILURE, LMMC_STATUS_OK, lmmc_precond_t::size , 以及 lmmc_precond_t::type.
被这些函数引用 lmmc_precond_validate_spd().
| lmmc_status_t lmmc_precond_create_none | ( | size_t | size, |
| lmmc_precond_t * | out_precond ) |
创建恒等预处理子(仅记录尺寸,apply 时直接复制)。
引用了 lmmc_precond_t::impl, lmmc_precond_create_none(), LMMC_PRECOND_NONE, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_precond_t::owns_data, lmmc_precond_t::size , 以及 lmmc_precond_t::type.
被这些函数引用 lmmc_precond_create_none().
| lmmc_status_t lmmc_precond_create_jacobi | ( | const lmmc_sparse_mat_t * | a, |
| lmmc_precond_t * | out_precond ) |
由稀疏矩阵的对角线创建 Jacobi 预处理子:M = diag(A)。
存储 A 对角线的倒数;对角元为零或过小(<1e-15)时返回 SINGULAR_MATRIX。
| [in] | a | 输入稀疏矩阵,满足 sparse_types.h 的规范 CSR 契约,保持不变。 |
| [out] | out_precond | 输出预处理子句柄。 |
引用了 lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, lmmc_precond_t::impl, lmmc_memory_alloc(), lmmc_memory_free(), lmmc_precond_create_jacobi(), LMMC_PRECOND_JACOBI, LMMC_SPARSE_CSR, LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_DIMENSION_MISMATCH, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_precond_t::owns_data, lmmc_sparse_mat_t::rows, lmmc_precond_t::size , 以及 lmmc_precond_t::type.
被这些函数引用 lmmc_precond_create_jacobi().
| void lmmc_precond_destroy | ( | lmmc_precond_t * | precond | ) |
销毁预处理子,释放内部资源。
对 NULL 指针安全。销毁后句柄不可再使用。
| [in,out] | precond | 预处理子句柄,可为 NULL。 |
引用了 lmmc_precond_t::impl, lmmc_ilu_impl_destroy(), lmmc_memory_free(), lmmc_precond_destroy(), LMMC_PRECOND_ILU0, LMMC_PRECOND_ILUT, LMMC_PRECOND_NONE, lmmc_precond_t::owns_data, lmmc_precond_t::size , 以及 lmmc_precond_t::type.
被这些函数引用 lmmc_precond_destroy().
| lmmc_status_t lmmc_precond_apply | ( | const lmmc_precond_t * | precond, |
| const lmmc_vec_t * | rhs, | ||
| lmmc_vec_t * | out ) |
应用预处理子:求解 M*out = rhs。
根据 precond->type 分派到对应的求解逻辑:
| [in] | precond | 预处理子句柄(不被修改)。 |
| [in] | rhs | 右端向量(不被修改)。 |
| [out] | out | 输出向量,长度须与 rhs 相同,内容被覆写。out 不可与 rhs 别名。 |
引用了 lmmc_vec_t::data, lmmc_ilu_apply(), lmmc_precond_apply(), LMMC_PRECOND_ILU0, LMMC_PRECOND_ILUT, LMMC_PRECOND_JACOBI, LMMC_PRECOND_NONE, LMMC_STATUS_DIMENSION_MISMATCH, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_NOT_IMPLEMENTED, lmmc_vec_copy(), lmmc_precond_t::size, lmmc_vec_t::size , 以及 lmmc_precond_t::type.
被这些函数引用 lmmc_apply_precond_or_identity() , 以及 lmmc_precond_apply().