创建求解器句柄。
C Interface:
KmlMgStatus KmlMgSolverCreate(KmlMgSolverH* pSolver, MPI_Comm comm, const KmlMgSolverOptions* options);
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
pSolver |
KmlMgSolverH* |
求解器句柄,solver不可为空指针 |
输入/输出 |
comm |
MPI_Comm |
求解器通信子,须与求解矩阵中的通信子保持一致,否则可能会出现未知问题 |
输入 |
options |
const KmlMgSolverOptions* |
求解器配置信息 |
输入 |
返回值 |
类型 |
描述 |
---|---|---|
KML_MG_OK |
int |
正常执行 |
KML_MG_ERR_INVALID_PARAM |
int |
参数无效 |
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 |
资源未就绪 |
KmlMgSolverOptions
字段名 |
类型 |
描述 |
---|---|---|
fieldMask |
uint64_t |
配置生效的字段掩码。非0的位代表配置对应字段指定的值,0的位代表使用默认值,可配置的掩码位请参见具体字段的说明。 |
indexType |
KmlMgIndexType |
坐标类型,有如下值。
掩码位:KML_MG_SOLVER_OPTIONS_INDEX_TYPE |
kspValueType |
KmlMgValueType |
输入矩阵的数值类型,有如下值。(目前实现要求与pcCalcType字段保持一致,支持的精度组合请看下方精度组合表)
掩码位:KML_MG_SOLVER_OPTIONS_KSP_VALUE_TYPE |
pcValueType |
KmlMgValueType |
预条件子(多重网格)的数值类型,有如下值。(目前只支持FP16、FP32和FP64,支持的精度组合请看下方精度组合表)
掩码位:KML_MG_MATRIX_INFO_STORE |
pcCalcType |
KmlMgValueType |
预条件子(多重网格)的计算数值类型,有如下值。(目前只支持FP32和FP64,支持的精度组合请看下方精度组合表)
掩码位:KML_MG_MATRIX_INFO_STORE |
ksp |
KmlMgSolverKsp |
Krylov子空间方法类型,有如下值。
掩码位:KML_MG_MATRIX_INFO_STORE |
目前支持的精度组合有三种:
组合 |
kspValueType |
pcValueType |
pcCalcType |
1 |
KML_MG_VALUE_FP64 |
KML_MG_VALUE_FP64 |
KML_MG_VALUE_FP64 |
2 |
KML_MG_VALUE_FP32 |
KML_MG_VALUE_FP32 |
KML_MG_VALUE_FP32 |
3 |
KML_MG_VALUE_FP32 |
KML_MG_VALUE_FP16 |
KML_MG_VALUE_FP32 |