[petsc-users] How to get values from a matrix and set again?

Bibrak Qamar bibrakc at gmail.com
Mon Dec 7 00:11:14 CST 2015


I am trying to apply a function on each element of a matrix. The function
is the sigmoid function which transforms each element of the matrix.

I am trying to approach it like this but get error. What could be the
problem? Or is there a better way to do this?

int sigmoid(Mat x){
printf("in sigmoid\n");

PetscErrorCode ierr;
PetscInt       Istart, Iend, Ii, Ji, rows, cols;

PetscScalar     v = 0.0;
ierr = MatGetOwnershipRange(x,&Istart,&Iend);CHKERRQ(ierr);

for (Ii=Istart; Ii<Iend; Ii++) {
     for (Ji=0; Ji<cols; Ji++){
    ierr = MatGetValues(x,1,&Ii,1,&Ji,&v);CHKERRQ(ierr);
    v = mysigmoid(v);
    ierr = MatSetValues(x,1,&Ii,1,&Ji,&v,INSERT_VALUES);CHKERRQ(ierr);



error msg is:

[0]PETSC ERROR: --------------------- Error Message
[0]PETSC ERROR: Object is in wrong state
[0]PETSC ERROR: Not for unassembled matrix
[0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for
trouble shooting.
[0]PETSC ERROR: Petsc Release Version 3.6.3, Dec, 03, 2015
[0]PETSC ERROR: #1 MatGetValues() line 1780 in
[0]PETSC ERROR: #2 sigmoid() line 21 in neural.c

Bibrak Qamar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20151207/981b5e58/attachment.html>

More information about the petsc-users mailing list