LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
precond.c 文件参考
#include "precond_internal.h"
precond.c 的引用(Include)关系图:

浏览该文件的源代码.

函数

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_precond_validate_spd()

lmmc_status_t lmmc_precond_validate_spd ( const lmmc_precond_t * precond,
size_t size )

在文件 precond.c 第 3 行定义.

引用了 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_precond_create_none()

lmmc_status_t lmmc_precond_create_none ( size_t size,
lmmc_precond_t * out_precond )

创建恒等预处理子(仅记录尺寸,apply 时直接复制)。

在文件 precond.c 第 28 行定义.

引用了 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_precond_create_jacobi()

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_precond_destroy 释放。

在文件 precond.c 第 58 行定义.

引用了 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().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_precond_destroy()

void lmmc_precond_destroy ( lmmc_precond_t * precond)

销毁预处理子,释放内部资源。

对 NULL 指针安全。销毁后句柄不可再使用。

参数
[in,out]precond预处理子句柄,可为 NULL。
副作用
  • 释放 impl 指向的内部数据结构。

在文件 precond.c 第 86 行定义.

引用了 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_precond_apply()

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 分派到对应的求解逻辑:

  • NONE:直接复制 rhs 到 out。
  • JACOBI:逐元素乘以对角线倒数。
  • ILU0/ILUT:前代 + 回代。
参数
[in]precond预处理子句柄(不被修改)。
[in]rhs右端向量(不被修改)。
[out]out输出向量,长度须与 rhs 相同,内容被覆写。out 不可与 rhs 别名。
返回
副作用
  • 覆写 out->data。无内存分配。

在文件 precond.c 第 120 行定义.

引用了 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().

函数调用图:
这是这个函数的调用关系图: