---
title: KmlMgSolverCreate
description: "创建求解器句柄。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0970.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0970.html
indexId: 7210aeb26aaf71de125cff267ebca7394825d05ee7238dbd9e72cc57683fd7bf61
---
# KmlMgSolverCreate

创建求解器句柄。

#### 接口定义

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\_INDEX\_INT32（目前只支持32位int） KML\_MG\_INDEX\_INT64 掩码位：KML\_MG\_SOLVER\_OPTIONS\_INDEX\_TYPE |
| kspValueType | KmlMgValueType | 输入矩阵的数值类型，有如下值。（目前实现要求与pcCalcType字段保持一致，支持的精度组合请看下方精度组合表） KML\_MG\_VALUE\_FP16 KML\_MG\_VALUE\_FP32 KML\_MG\_VALUE\_FP64 掩码位：KML\_MG\_SOLVER\_OPTIONS\_KSP\_VALUE\_TYPE |
| pcValueType | KmlMgValueType | 预条件子（多重网格）的数值类型，有如下值。（目前只支持FP16、FP32和FP64，支持的精度组合请看下方精度组合表） KML\_MG\_VALUE\_FP16 KML\_MG\_VALUE\_FP32 KML\_MG\_VALUE\_FP64 掩码位：KML\_MG\_MATRIX\_INFO\_STORE |
| pcCalcType | KmlMgValueType | 预条件子（多重网格）的计算数值类型，有如下值。（目前只支持FP32和FP64，支持的精度组合请看下方精度组合表） KML\_MG\_VALUE\_FP16 KML\_MG\_VALUE\_FP32 KML\_MG\_VALUE\_FP64 掩码位：KML\_MG\_MATRIX\_INFO\_STORE |
| ksp | KmlMgSolverKsp | Krylov子空间方法类型，有如下值。 KML\_MG\_SOLVER\_NONE KML\_MG\_SOLVER\_BICG KML\_MG\_SOLVER\_CG KML\_MG\_SOLVER\_CR KML\_MG\_SOLVER\_GCR KML\_MG\_SOLVER\_GMRES 掩码位：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 |


#### 依赖

#include "mg.h"

示例代码请参见示例。
