System Preprocessors
|
00001 /* 00002 * create a matrix with a singleton row & column 00003 */ 00004 ierr = MatCreateSeqAIJ(MPI_COMM_SELF,n,n,3,0,&A); CHKERRQ(ierr); 00005 ierr = VecCreateSeq(MPI_COMM_SELF,n,&rhs); CHKERRQ(ierr); 00006 for (i=0; i<n; i++) { 00007 if (i>0) { 00008 int ii=i-1; 00009 if ( (i!=n/3 && i!=2*n/3) && (ii!=n/3 && ii!=2*n/3) ) { 00010 ierr = MatSetValues(A,1,&i,1,&ii,&mone,INSERT_VALUES); CHKERRQ(ierr); 00011 ierr = MatSetValues(A,1,&ii,1,&i,&mone,INSERT_VALUES); CHKERRQ(ierr); 00012 } 00013 } 00014 if (i!=n/3 && i!=2*n/3) { 00015 ierr = MatSetValues(A,1,&i,1,&i,&two,INSERT_VALUES); CHKERRQ(ierr); 00016 } else { 00017 ierr = MatSetValues(A,1,&i,1,&i,&one,INSERT_VALUES); CHKERRQ(ierr); 00018 } 00019 ierr = VecSetValues(rhs,1,&i,&one,INSERT_VALUES); CHKERRQ(ierr); 00020 } 00021 ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr); 00022 ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr); 00023 00024 ierr = VecAssemblyBegin(rhs); CHKERRQ(ierr); 00025 ierr = VecAssemblyEnd(rhs); CHKERRQ(ierr); 00026 ierr = VecDuplicate(rhs,&sol); CHKERRQ(ierr);