设置预条件子。
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_PRECONDITIONER_OPTIONS_INDEX_TYPE |
kspValueType |
KmlMgValueType |
输入矩阵的数值类型,有如下值。(目前实现要求与KmlMgSolverOptions中的kspValueType字段保持一致,支持的精度组合请看下方精度组合表)
掩码位:KML_MG_PRECONDITIONER_OPTIONS_KSP_VALUE_TYPE |
valueType |
KmlMgValueType |
预条件子(多重网格)的数值类型,有如下值。(目前实现要求与KmlMgSolverOptions中的pcValueType字段保持一致)
掩码位:KML_MG_PRECONDITIONER_OPTIONS_VALUE_TYPE |
calcType |
KmlMgValueType |
预条件子(多重网格)的计算数值类型,有如下值。(目前实现要求与KmlMgSolverOptions中的pcCalcType字段保持一致)
掩码位: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_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_PRECONDITIONER_OPTIONS_SMOOTHER |
weight |
void* |
光滑子权值,类型由计算数值类型calcType指定,长度为网格层数numLevels 掩码位:KML_MG_PRECONDITIONER_OPTIONS_WEIGHT |
coarsen |
KmlMgCoarsenType* |
粗化网格方法,长度为网格层数numLevels,有如下值
掩码位:KML_MG_PRECONDITIONER_OPTIONS_COARSEN |
rest |
KmlMgRestInteType* |
限制算子,长度为网格层数numLevels,有如下值
掩码位:KML_MG_PRECONDITIONER_OPTIONS_RESTRICT |
interp |
KmlMgRestInteType* |
插值算子,长度为网格层数numLevels,有如下值
掩码位: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 |
使用暂不支持的参数会导致程序异常退出