Mat objects in PETSc are parallel, meaning that the data structure is distributed. You should use MatGetOwnershipRange() so that each process accesses its local rows only. https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatGetOwnershipRange.html
This is very basic usage. You should read the manual and the online documentation including examples, and try hard to solve these issues before asking to the list. Jose > El 20 mar 2019, a las 8:52, Eda Oktay via petsc-users > <[email protected]> escribió: > > Hello, > > I wrote a code computing element wise absolute value of a matrix. When I run > the code sequentially, it works. However, when I try to use it in parallel > with the same matrix, I get the following error: > > [1]PETSC ERROR: Argument out of range > [1]PETSC ERROR: Only local rows > > The absolute value code is: > > ierr = MatGetSize(A,&n,NULL);CHKERRQ(ierr); > ierr = MatDuplicate(A,MAT_COPY_VALUES,AbsA);CHKERRQ(ierr); > > for (i=0; i<n; i++) { > ierr = MatGetRow(A,i,&nc,&aj,&aa);CHKERRQ(ierr); > > > PetscMalloc1(nc,&absaa); > for (j=0; j<nc; j++){ > absaa[j] = fabs(aa[j]); > } > > ierr = MatSetValues(*AbsA,1,&i,nc,aj,absaa,INSERT_VALUES);CHKERRQ(ierr); > > ierr = MatRestoreRow(A,i,&nc,&aj,&aa);CHKERRQ(ierr); > } > > I didn't understand how I fix this problem since I am new to PETSc. > > Thanks > > Eda
