---
title: 迁移步骤
description: "PETSc提供C接口，KML_SOLVER同样也提供了C接口，但接口名及接收参数不一致，需要进行对应功能的切换，举例如下："
url: https://www.hikunpeng.com/document/detail/zh/kunpengaccel/math-lib/devg-kml/kunpengaccel_12_0051.html
sourcePath: /source/zh/kunpengaccel/math-lib/devg-kml/kunpengaccel_12_0051.html
indexId: 45e17c6bdfc4090bd6b03e792e783b51f3575fd3c23b91287bffae8202a9a44067
---
# 迁移步骤

#### C语言迁移步骤

PETSc提供C接口，KML_SOLVER同样也提供了C接口，但接口名及接收参数不一致，需要进行对应功能的切换，举例如下：

1. 初始化。
  迁移前： 1 2 3 4 KSP ksp; PetscErrorCode ierr; ierr = KSPCreate(PETSC_COMM_WORLD,&ksp); ierr = KSPSetOperators(ksp,A,A);

  迁移后： 1 2 3 4 5 6 int n = 8; int ia[9]; int ja[17]; double a[17]; void* handle; int error = KmlIssCgInitDI(&handle, &n, a, ja, ia);

2. 求解。
  迁移前： 1 2 3 4 5 6 7 8 Vec u,x,b; ierr = VecCreate(PETSC_COMM_WORLD,&u); ierr = VecSetSizes(u,PETSC_DECIDE,rdim); ierr = VecSetFromOptions(u);CHKERRQ(ierr); ierr = VecDuplicate(u,&b);CHKERRQ(ierr); ierr = VecDuplicate(b,&x);CHKERRQ(ierr); ierr = KSPSolve(ksp,b,x);CHKERRQ(ierr);

  迁移后： 1 2 3 4 5 6 double b[8]; /* Solution vector */ double x[8]; int nrhs = 1; /* Number of right-hand sides */ int ldx=n, ldb=n; /*!Leading dimension of B and X */ int error = KmlIssCgSolveDI(&handle, &nrhs, x, &ldx, b, &ldb);

3. 获取迭代参数。
  迁移前： 1 2 PetscInt its; ierr = KSPGetIterationNumber(ksp,&its);CHKERRQ(ierr);

  迁移后： 1 2 3 int *data; // user data. int nd = 1; int error = KmlIssCgGetDII(&handle, ITERATION_COUNT, data, nd);

4. 清除。
  迁移前： 1 ierr = KSPDestroy(&ksp);

  迁移后： 1 int error = KmlIssCgCleanDI(&handle);

5. 头文件。
  迁移前：

  #include "petscksp.h"

  迁移后：

  #include "kml_iss.h"

6. 编译链接。
  替换PETSc相关的链接选项，具体选项请参见《鲲鹏数学库 开发指南(https://www.hikunpeng.com/document/detail/zh/kunpengaccel/math-lib/devg-kml/kunpengaccel_kml_16_0011.html)》中“安装KML”章节安装后验证内容。《Kunpeng HPCKit 24.0.0 安装指南》(https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/instg/KunpengHPCKit_install_004.html)安装KML。
