Actual source code: ex3.c
petsc-3.4.2 2013-07-02

      2: static char help[] = "Tests relaxation for dense matrices.\n\n";

      4: #include <petscmat.h>

      8: int main(int argc,char **args)
      9: {
     10:   Mat            C;
     11:   Vec            u,x,b,e;
     12:   PetscInt       i,n = 10,midx[3];
     14:   PetscScalar    v[3];
     15:   PetscReal      omega = 1.0,norm;

     17:   PetscInitialize(&argc,&args,(char*)0,help);
     18:   PetscOptionsGetReal(NULL,"-omega",&omega,NULL);
     19:   PetscOptionsGetInt(NULL,"-n",&n,NULL);

     21:   MatCreate(PETSC_COMM_SELF,&C);
     22:   MatSetSizes(C,n,n,n,n);
     23:   MatSetType(C,MATSEQDENSE);
     24:   MatSetUp(C);
     25:   VecCreateSeq(PETSC_COMM_SELF,n,&b);
     26:   VecCreateSeq(PETSC_COMM_SELF,n,&x);
     27:   VecCreateSeq(PETSC_COMM_SELF,n,&u);
     28:   VecCreateSeq(PETSC_COMM_SELF,n,&e);
     29:   VecSet(u,1.0);
     30:   VecSet(x,0.0);

     32:   v[0] = -1.; v[1] = 2.; v[2] = -1.;
     33:   for (i=1; i<n-1; i++) {
     34:     midx[0] = i-1; midx[1] = i; midx[2] = i+1;
     35:     MatSetValues(C,1,&i,3,midx,v,INSERT_VALUES);
     36:   }
     37:   i    = 0; midx[0] = 0; midx[1] = 1;
     38:   v[0] = 2.0; v[1] = -1.;
     39:   MatSetValues(C,1,&i,2,midx,v,INSERT_VALUES);
     40:   i    = n-1; midx[0] = n-2; midx[1] = n-1;
     41:   v[0] = -1.0; v[1] = 2.;
     42:   MatSetValues(C,1,&i,2,midx,v,INSERT_VALUES);

     44:   MatAssemblyBegin(C,MAT_FINAL_ASSEMBLY);
     45:   MatAssemblyEnd(C,MAT_FINAL_ASSEMBLY);

     47:   MatMult(C,u,b);

     49:   for (i=0; i<n; i++) {
     50:     MatSOR(C,b,omega,SOR_FORWARD_SWEEP,0.0,1,1,x);
     51:     VecWAXPY(e,-1.0,x,u);
     52:     VecNorm(e,NORM_2,&norm);
     53:     PetscPrintf(PETSC_COMM_SELF,"2-norm of error %G\n",norm);
     54:   }
     55:   MatDestroy(&C);
     56:   VecDestroy(&x);
     57:   VecDestroy(&b);
     58:   VecDestroy(&u);
     59:   VecDestroy(&e);
     60:   PetscFinalize();
     61:   return 0;
     62: }