Dear Matt, I printed in wrong state, ncols gives right solution.
But I still can't understand the first problem. Eda Eda Oktay <eda.ok...@metu.edu.tr>, 11 Mar 2019 Pzt, 16:05 tarihinde şunu yazdı: > Dear Matt, > > Thank you for answering. First of all, sizeof(vals) returns to number of > entries, I checked. Secondly, I found a problem: > > ncols gives me 6.95328e-310. However, I checked the matrix L, it was > computed properly. > > Why can ncols give such a value? > > Thanks, > > Eda > > Matthew Knepley <knep...@gmail.com>, 11 Mar 2019 Pzt, 15:56 tarihinde > şunu yazdı: > >> On Mon, Mar 11, 2019 at 8:27 AM Eda Oktay via petsc-users < >> petsc-users@mcs.anl.gov> wrote: >> >>> Hello, >>> >>> I have a following part of a code which tries to change the nonzero >>> values of matrix L with -1. However in MatSetValues line, something happens >>> and some of the values in matrix turns into 1.99665e-314 instead of -1. >>> Type of arr is defined as PetscScalar and arr is produced correctly. What >>> can be the problem, is there a mistake about types? >>> >>> Thanks, >>> >>> Eda >>> >>> >>> for(rw = mm; rw<nn; ++rw){ >>> >>> ierr = MatGetRow(L,rw,&ncols,&cols,&vals);CHKERRQ(ierr); >>> >>> s = sizeof(vals); >>> >> >> This is wrong. sizeof(vals) gives bytes, not entries. Why don't you just >> use ncols here? >> >> Matt >> >> >>> ierr = PetscMalloc1(s,&arr);CHKERRQ(ierr); >>> >>> for(j=0;j<s;++j){ >>> >>> arr[j]=-1.0; >>> } >>> ierr = >>> MatSetValues(NSymmA,1,&rw,ncols,cols,arr,INSERT_VALUES);CHKERRQ(ierr); >>> ierr = MatRestoreRow(L,rw,&ncols,&cols,&vals);CHKERRQ(ierr); >>> } >>> >> >> >> -- >> What most experimenters take for granted before they begin their >> experiments is infinitely more interesting than any results to which their >> experiments lead. >> -- Norbert Wiener >> >> https://www.cse.buffalo.edu/~knepley/ >> <http://www.cse.buffalo.edu/~knepley/> >> >