[petsc-users] Reshaping a vector into a matrix

Barry Smith bsmith at mcs.anl.gov
Fri Jan 7 14:07:03 CST 2011


On Jan 7, 2011, at 12:21 PM, S V N Vishwanathan wrote:

> Dear Barry,
> 
> Thanks for your help. Now the code works as expected (attached). There
> is one more problem that I am facing.
> 
> If you remember I have 
> 
> vec = (vec1^t, vec2^t,...,veck^t)^t
> 
> and given the MAIJ matrix X I need to compute
> 
> fx = (X.vec1, X.vec2, ...,X.veck)
> 
>> From what I understand so far, if I compute X.vec then I get a vector of
> the form
> 
> x_1.vec1
> x_1.vec2
> .
> .
> .
> x_n.veck
> 
> where x_i denotes the i-th row of X. 
> 
> In my application I need access to (x_i.vec1, x_i.vec2, ...., x_i.veck)
> on the same processor. If I use the local size provided by the
> MatGetLocalSize how do I ensure that the local vectors are aligned w.r.t

   After you do the MatLoad() of the AIJ matrix get its local size, say nlocal. The local size of the MAIJ matrix created from the AIJ matrix will be k*nlocal. You will then create your vector with a local size of k*nlocal. I think that everything lines up perfectly. If this is not the case then please send a demonstration of its failure to petsc-maint at mcs.anl.gov (code) and we'll see what is going on.

   Barry


> k?
> 
> vishy
> 
> 
> 
> On Thu, 2011-01-06 at 21:53 -0600, Barry Smith wrote:
>> You've assumed that the PETSC_DECIDE for the MatLoad() for local sizes will match that for the VecCreate(). In general they will not be the same.
>> Once you've created your MATMAIJ   (by they way you don't need to call MatAssembly on the MAIJ matrix) call MatGetLocalSize() and use that local size in the construction of the vector.
>> 
>>   Barry
>> 
>> 
>> On Jan 6, 2011, at 9:46 PM, S V N Vishwanathan wrote:
>> 
>>>>> 
>>>>> Is there any place to read up about MAIJ matrices. I read the manual
>>>>> pages but they were rather cryptic. Perhaps some example code?
>>>> 
>>>> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/src/snes/examples/tutorials/ex48.c.html is the only example that uses. 
>>> 
>>> I wrote a little example (attached) to test my understanding of the MAIJ
>>> matrices. When I run it on a single processor I have no trouble but when
>>> I use mpiexec -n 2 I get the following errors. Any pointers on how to
>>> overcome this problem are appreciated. The code loads a matrix from a
>>> file, which can be downloaded from
>>> 
>>> http://www.stat.purdue.edu/~vishy/adult9.train.x
>>> 
>>> Before someone has ideas ;-), I should clarify that this is a standard
>>> machine learning dataset.
>>> 
>>> [0]PETSC ERROR: --------------------- Error Message
>>> ------------------------------------
>>> [0]PETSC ERROR: Nonconforming object sizes!
>>> [0]PETSC ERROR: Mat mat,Vec y: local dim 48843 48842!
>>> [0]PETSC ERROR:
>>> ------------------------------------------------------------------------
>>> [0]PETSC ERROR: Petsc Release Version 3.1.0, Patch 7, Mon Dec 20
>>> 14:26:37 CST 2010
>>> [0]PETSC ERROR: See docs/changes/index.html for recent updates.
>>> [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
>>> [0]PETSC ERROR: See docs/index.html for manual pages.
>>> [0]PETSC ERROR:
>>> ------------------------------------------------------------------------
>>> [0]PETSC ERROR: ./chumma on a linux-gnu named vishy-laptop by vishy Thu
>>> Jan  6 22:28:26 2011
>>> [0]PETSC ERROR: Libraries linked
>>> from /home/vishy/Repositories/GenEntropy/Code/hpc/petsc-3.1-p7/linux-gnu-cxx-debug/lib
>>> [0]PETSC ERROR: Configure run at Thu Dec 30 23:48:41 2010
>>> [0]PETSC ERROR: Configure options --with-debugging=yes
>>> --with-clanguage=C++ --with-shared --download-mpich=ifneeded
>>> [0]PETSC ERROR:
>>> ------------------------------------------------------------------------
>>> [0]PETSC ERROR: MatMult() line 1889 in src/mat/interface/matrix.c
>>> [0]PETSC ERROR: main() line 61 in chumma.cpp
>>> application called MPI_Abort(MPI_COMM_WORLD, 60) - process 0[cli_0]:
>>> aborting job:
>>> application called MPI_Abort(MPI_COMM_WORLD, 60) - process 0
>>> [0]0:Return code = 60
>>> [0]1:Return code = 0, signaled with Interrupt
>>> 
>>> vishy
>>> <chumma.cpp>
>> 
> 
> <chumma.cpp>



More information about the petsc-users mailing list