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

Bibrak Qamar bibrakc at gmail.com
Mon Dec 7 00:37:28 CST 2015


Yes, I called MatAssemblyBegin and MatAssemblyEnd.

But I figured out that you need to call it every time you use MatGetValues()

Here is the updated code:


PetscInt sigmoidMat(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);
MatGetSize(x,&rows,&cols);


for (Ii=Istart; Ii<Iend; Ii++) {
     for (Ji=0; Ji<cols; Ji++){
MatAssemblyBegin(x,MAT_FINAL_ASSEMBLY);
MatAssemblyEnd(x,MAT_FINAL_ASSEMBLY);
    ierr = MatGetValues(x,1,&Ii,1,&Ji,&v);CHKERRQ(ierr);
    v = 1.0/(1+exp(-1*v));
    ierr = MatSetValues(x,1,&Ii,1,&Ji,&v,INSERT_VALUES);CHKERRQ(ierr);
    }
  }

MatAssemblyBegin(x,MAT_FINAL_ASSEMBLY);
MatAssemblyEnd(x,MAT_FINAL_ASSEMBLY);


MatView(x,PETSC_VIEWER_STDOUT_WORLD);
return 0;
}



Bibrak Qamar


On Mon, Dec 7, 2015 at 1:29 AM, Timothée Nicolas <timothee.nicolas at gmail.com
> wrote:

> Hi,
>
> The error message seems to tell you that your matrix is not assembled.
> Have you used the calls
>
> MatAssemblyBegin
>
> and
>
> MatAssemblyEnd
>
> When you build your matrix ?
>
> Timothee
>
>
> 2015-12-07 15:11 GMT+09:00 Bibrak Qamar <bibrakc at gmail.com>:
>
>> Hi,
>>
>> 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);
>> MatGetSize(x,&rows,&cols);
>>
>> 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);
>>     }
>>   }
>>
>> MatAssemblyBegin(x,MAT_FINAL_ASSEMBLY);
>> MatAssemblyEnd(x,MAT_FINAL_ASSEMBLY);
>>
>>
>> MatView(x,PETSC_VIEWER_STDOUT_WORLD);
>> }
>>
>>
>> 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
>> /gpfs/home/petsc-3.6.3/src/mat/interface/matrix.c
>> [0]PETSC ERROR: #2 sigmoid() line 21 in neural.c
>>
>>
>> Thanks
>> Bibrak Qamar
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20151207/2c666ffb/attachment.html>


More information about the petsc-users mailing list