KmlMgMatrixCreate
创建矩阵句柄

创建矩阵时是浅拷贝,用户需要保证MgMatrixDestroy之前不释放参数store指定的内存
接口定义
C Interface:
KmlMgStatus KmlMgMatrixCreate(KmlMgMatrixH* pMatrix, const KmlMgMatrixStore* store, const KmlMgMatrixOptions* options);
参数
参数名 |
类型 |
描述 |
输入/输出 |
---|---|---|---|
pMatrix |
KmlMgMatrixH* |
矩阵句柄,pMatrix不可为空指针 |
输入/输出 |
store |
const KmlMgMatrixStore* |
矩阵的结构与数据信息 |
输入 |
options |
const KmlMgMatrixOptions* |
矩阵的数据类型等信息 |
输入 |
返回值
返回值 |
类型 |
描述 |
---|---|---|
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 |
资源未就绪 |
结构体说明
KmlMgMatrixOptions
字段名 |
类型 |
描述 |
---|---|---|
fieldMask |
uint64_t |
配置生效的字段掩码。非0的位代表配置对应字段指定的值,0的位代表使用默认值,可配置的掩码位请参见具体字段的说明。 |
indexType |
KmlMgIndexType |
坐标类型,有如下值。
掩码位:MG_MATRIX_OPTIONS_INDEX_TYPE |
valueType |
KmlMgValueType |
数值类型,有如下值。(目前只支持FP32和FP64作为用户输入的数值类型)
掩码位:KML_MG_MATRIX_OPTIONS_VALUE_TYPE |
KmlMgMatrixStore
字段名 |
类型 |
描述 |
---|---|---|
comm |
MPI_Comm |
MPI 通信子 |
globalx |
int64_t |
所有进程组成的全局矩阵的 x 方向维度大小 |
globaly |
int64_t |
所有进程组成的全局矩阵的 y 方向维度大小 |
globalz |
int64_t |
所有进程组成的全局矩阵的 z 方向维度大小 |
procx |
int64_t |
x 方向上划分的进程数量 |
procy |
int64_t |
y 方向上划分的进程数量 |
procz |
int64_t |
z 方向上划分的进程数量 |
xbeg |
int64_t |
当前进程的 x 方向起始坐标(包含该坐标) |
xend |
int64_t |
当前进程的 x 方向终止坐标(不含该坐标) |
ybeg |
int64_t |
当前进程的 y 方向起始坐标(包含该坐标) |
yend |
int64_t |
当前进程的 y 方向终止坐标(不含该坐标) |
zbeg |
int64_t |
当前进程的 z 方向起始坐标(包含该坐标) |
zend |
int64_t |
当前进程的 z 方向终止坐标(不含该坐标) |
xhalo |
int64_t |
当前进程的 x 方向的halo区域大小,目前只支持halo=1 |
yhalo |
int64_t |
当前进程的 y 方向的halo区域大小,目前只支持halo=1 |
zhalo |
int64_t |
当前进程的 z 方向的halo区域大小,目前只支持halo=1 |
crossPolar |
bool |
网格是否跨极点通信,即网格边界是否连续 |
type |
KmlMgMatrixStoreType |
矩阵格式,均为结构化网格矩阵,有如下值。
目前只支持向量为KML_MG_MATRIX_STORE_DENSE_COL_MAJOR_HALO,矩阵为KML_MG_MATRIX_STORE_SPARSE_HALO |
dense |
KmlMgMatrixStoreDense |
稠密格式,目前用于存储右端向量和解向量,与sparse字段共同构成联合体 |
sparse |
KmlMgMatrixStoreSparse |
稀疏格式,目前用于存储稀疏矩阵,与dense字段共同构成联合体 |
KmlMgMatrixStoreDense
字段名 |
类型 |
描述 |
---|---|---|
values |
void* |
数值数组,目前实现必须按Y-X-Z顺序(从外到里)排列 |
numDim |
int64_t |
次维度大小,表示行(列)主序的列(行)数 |
is2D |
bool |
是否为2D网格 |
needCorner |
bool |
网格结构是否存在角点,对应KmlMgMatrixStoreSparse中的stencil为KML_MG_STENCIL_2D5或KML_MG_STENCIL_3D7则为false,否则为true。 |
KmlMgMatrixStoreSparse
字段名 |
类型 |
描述 |
---|---|---|
values |
void* |
数值数组,目前实现必须按Y-X-Z顺序(从外到里)排列 |
type |
KmlMgSparseType |
稀疏矩阵排列顺序,有如下值。
如下图所示,对于本程序的结构化网格矩阵来说,AOS按网格(行)连续存储,SOA则按每条对角线连续存储 |
stencil |
KmlMgStencilType |
表示网格结构,稀疏矩阵按照行存储,根据网格结构决定矩阵每行的非零元个数,有如下值。
|

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