第一个PETSc矩阵测试:
static char help[] = " matrix parallel partition test\n\n";
#include <petscksp.h>
int main(int argc, char **args)
{
Mat A;
PetscInt dim, i, j, Ii, J, Istart, Iend, n=6;
PetscScalar v ;
PetscInitialize(&argc, &args, (char*)0,help);
PetscOptionsGetReal(NULL, "-sigma1", &sigma1, NULL);
PetscOptionsGetInt(NULL, "-n", &n, NULL);
dim = n * n;
MatCreate(PETSC_COMM_WORLD, &A);
MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,dim,dim);
MatSetFromOptions(A);
MatSetUp(A);
MatGetOwnershipRange(A,&Istart,&Iend);
for (Ii = Istart; Ii < Iend; Ii++) {
v = 1.0; i = Ii/n; j = Ii - i * n;
if(i > 0) {
J = Ii - n; MatSetValues(A,1,&Ii,1,&J,&v,ADD_VALUES);
}
if(i < n - 1) {
J = Ii + n; MatSetValues(A,1,&Ii,1,&J,&v,ADD_VALUES);