KmlMgSolverSetPreconditioner

设置预条件子。

接口定义

C Interface:

KmlMgStatus KmlMgSolverSetPreconditioner(KmlMgSolverH solver, const KmlMgPreconditionerOptions* options);

参数

参数名

类型

描述

输入/输出

solver

KmlMgSolverH

由KmlMgSolverCreate创建的求解器句柄

输入/输出

options

const KmlMgPreconditionerOptions*

预条件子配置信息,即多重网格配置信息

输入

返回值

返回值

类型

描述

KML_MG_OK

int

正常执行

KML_MG_ERR_INVALID_PARAM

int

参数无效

KML_MG_ERR_UNSUPPORTED

int

暂不支持的功能

KML_MG_ERR_NO_MEMORY

int

分配内存失败

KML_MG_ERR_EXCEEDS_LIMIT

int

超过设置限制

KML_MG_ERR_INCOMPATIBLE

int

版本不兼容

KML_MG_ERR_NO_REQUIRED_FIELD

int

未设置必填字段

KML_MG_ERR_UNKNOWN_TYPE

int

未知的类型

KML_MG_ERR_THIRD_PART

int

内部调用第三方错误

KML_MG_ERR_INCONSISTENT

int

传递信息不一致

KML_MG_ERR_UNEXPECTED_CALL_ORDER

int

预期之外的调用顺序

KML_MG_ERR_MATRIX_VALUE_IS_NULL

int

矩阵值为空

KML_MG_ERR_NO_RESOURCE

int

资源未就绪

结构体说明

KmlMgPreconditionerOptions

字段名

字段类型

字段说明

fieldMask

uint64_t

配置生效的字段掩码。非0的位代表配置对应字段指定的值,0的位代表使用默认值,可配置的掩码位请参见具体字段的说明。

indexType

KmlMgIndexType

坐标类型,有如下值。

  • KML_MG_INDEX_INT32(目前只支持32位int)
  • KML_MG_INDEX_INT64

掩码位:KML_MG_PRECONDITIONER_OPTIONS_INDEX_TYPE

kspValueType

KmlMgValueType

输入矩阵的数值类型,有如下值。(目前实现要求与KmlMgSolverOptions中的kspValueType字段保持一致,支持的精度组合请看下方精度组合表)

  • KML_MG_VALUE_FP16
  • KML_MG_VALUE_FP32
  • KML_MG_VALUE_FP64

掩码位:KML_MG_PRECONDITIONER_OPTIONS_KSP_VALUE_TYPE

valueType

KmlMgValueType

预条件子(多重网格)的数值类型,有如下值。(目前实现要求与KmlMgSolverOptions中的pcValueType字段保持一致)

  • KML_MG_VALUE_FP16
  • KML_MG_VALUE_FP32
  • KML_MG_VALUE_FP64

掩码位:KML_MG_PRECONDITIONER_OPTIONS_VALUE_TYPE

calcType

KmlMgValueType

预条件子(多重网格)的计算数值类型,有如下值。(目前实现要求与KmlMgSolverOptions中的pcCalcType字段保持一致)

  • KML_MG_VALUE_FP16
  • KML_MG_VALUE_FP32
  • KML_MG_VALUE_FP64

掩码位:KML_MG_PRECONDITIONER_OPTIONS_CALC_TYPE

numLevels

int64_t

多重网格层数

掩码位:KML_MG_PRECONDITIONER_OPTIONS_NUM_LEVEL

shiftLevelId

int64_t

混合精度向单一精度转换的层数

掩码位:KML_MG_PRECONDITIONER_OPTIONS_SHIFT_LEVEL

cycle

KmlMgCycleType

有如下值

  • KML_MG_CYCLE_V
  • KML_MG_CYCLE_W(暂不支持)

掩码位:KML_MG_PRECONDITIONER_OPTIONS_CYCLE_TYPE

gridSweep

void*

多重网格的sweep数组,类型为坐标类型indexType,长度为2

掩码位:KML_MG_PRECONDITIONER_OPTIONS_SWEEP

xpss

void*

XPSS数组为X-Process Shrink Strides,表示X方向进程减少的步长,类型由坐标类型indexType指定,长度为网格层数numLevels

掩码位:KML_MG_PRECONDITIONER_OPTIONS_XPSS

smoother

KmlMgSmootherType*

每层网格的光滑子类型数组,长度为网格层数numLevels,有如下值

  • KML_MG_SMOOTHER_POINT_JACOBI
  • KML_MG_SMOOTHER_POINT_GS
  • KML_MG_SMOOTHER_LINE_JACOBI
  • KML_MG_SMOOTHER_LINE_GS
  • KML_MG_SMOOTHER_PLANE_ILU
  • KML_MG_SMOOTHER_SHUFFLE_PLANE_ILU
  • KML_MG_SMOOTHER_BLOCK_ILU
  • KML_MG_SMOOTHER_ADI
  • KML_MG_SMOOTHER_BLOCK_LU(暂不支持)
  • KML_MG_SMOOTHER_LU(暂不支持)
  • KML_MG_SMOOTHER_CUSTOM(暂不支持)

掩码位:KML_MG_PRECONDITIONER_OPTIONS_SMOOTHER

weight

void*

光滑子权值,类型由计算数值类型calcType指定,长度为网格层数numLevels

掩码位:KML_MG_PRECONDITIONER_OPTIONS_WEIGHT

coarsen

KmlMgCoarsenType*

粗化网格方法,长度为网格层数numLevels,有如下值

  • KML_MG_COARSEN_FULL_XYZ
  • KML_MG_COARSEN_SEMI_XY
  • KML_MG_COARSEN_SEMI_XZ(暂不支持)
  • KML_MG_COARSEN_SEMI_YZ(暂不支持)
  • KML_MG_COARSEN_SEMI_Z(暂不支持)
  • KML_MG_COARSEN_FULL_XZ(暂不支持)

掩码位:KML_MG_PRECONDITIONER_OPTIONS_COARSEN

rest

KmlMgRestInteType*

限制算子,长度为网格层数numLevels,有如下值

  • KML_MG_REST_INTE_VTX_1D1(暂不支持)
  • KML_MG_REST_INTE_VTX_1D3(暂不支持)
  • KML_MG_REST_INTE_VTX_2D1(暂不支持)
  • KML_MG_REST_INTE_VTX_2D5(暂不支持)
  • KML_MG_REST_INTE_VTX_2D9(暂不支持)
  • KML_MG_REST_INTE_CELL_2D4
  • KML_MG_REST_INTE_CELL_2D16
  • KML_MG_REST_INTE_CELL_3D8
  • KML_MG_REST_INTE_CELL_3D64

掩码位:KML_MG_PRECONDITIONER_OPTIONS_RESTRICT

interp

KmlMgRestInteType*

插值算子,长度为网格层数numLevels,有如下值

  • KML_MG_REST_INTE_VTX_1D1(暂不支持)
  • KML_MG_REST_INTE_VTX_1D3(暂不支持)
  • KML_MG_REST_INTE_VTX_2D1(暂不支持)
  • KML_MG_REST_INTE_VTX_2D5(暂不支持)
  • KML_MG_REST_INTE_VTX_2D9(暂不支持)
  • KML_MG_REST_INTE_CELL_2D4
  • KML_MG_REST_INTE_CELL_2D16
  • KML_MG_REST_INTE_CELL_3D8
  • KML_MG_REST_INTE_CELL_3D64

掩码位:KML_MG_PRECONDITIONER_OPTIONS_PROLONG

alpha

void*

Galerkin 算子调整系数,类型由计算数值类型calcType指定,长度为网格层数numLevels

掩码位:KML_MG_PRECONDITIONER_OPTIONS_ALPHA

control

bool*

控制粗化后的网格的stencil是否与上一层保持一致,若为true保持一致,若为false则可能膨胀,长度为网格层数numLevels。KML_MG_PRECONDITIONER_OPTIONS_CONTROL

使用暂不支持的参数会导致程序异常退出

依赖

#include "mg.h"

示例代码请参见示例