迁移步骤
C语言迁移步骤
PETSc提供C接口,KML_SOLVER同样也提供了C接口,但接口名及接收参数不一致,需要进行对应功能的切换,举例如下:
- 初始化。迁移前:
KSP ksp; PetscErrorCode ierr; ierr = KSPCreate(PETSC_COMM_WORLD,&ksp); ierr = KSPSetOperators(ksp,A,A);
迁移后:int n = 8; int ia[9]; int ja[17]; double a[17]; void* handle; int error = KmlIssCgInitDI(&handle, &n, a, ja, ia);
- 求解。迁移前:
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);
迁移后: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);
- 获取迭代参数。
迁移后:
int *data; // user data. int nd = 1; int error = KmlIssCgGetDII(&handle, ITERATION_COUNT, data, nd);
- 清除。
迁移后:
int error = KmlIssCgCleanDI(&handle);
- 头文件。
#include "petscksp.h"
迁移后:
#include "kml_iss.h"
- 编译链接。
父主题: 单机版