Hi, The answer to the first question is yes. I was puzzled about the second part of the answer, but I realize I was not clear enough. I don't want to just transfer information between 2 DMDAs, I want to perform an operation on vectors with a rectangular matrix. To be more explicit, the input vector of the operation is a vector with 3 components (hence dof=3), and the results of the operator is put in one vector equation + 2 scalar equation, which makes it dof = 5.
So, either I cannot fill my matrix (if the number of rows exceeds what is allowed by the DMDA), or I can fill my matrix but then the matrix and vectors are not compatible, as in this error : [0]PETSC ERROR: --------------------- Error Message -------------------------------------------------------------- [0]PETSC ERROR: Nonconforming object sizes [0]PETSC ERROR: Mat mat,Vec y: global dim 4900 2940 [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting. [0]PETSC ERROR: Petsc Release Version 3.6.1, Jul, 22, 2015 [0]PETSC ERROR: ./miips on a arch-linux2-c-debug named Carl-9000 by timothee Sun Dec 6 19:17:20 2015 [0]PETSC ERROR: Configure options --with-cc=gcc --with-cxx=g++ --with-fc=gfortran --download-fblaslapack --download-mpich [0]PETSC ERROR: #1 MatMult() line 2215 in /home/timothee/Documents/petsc-3.6.1/src/mat/interface/matrix.c So I assume it means the matrix is assumed to be square. Is there a way to change this ? Best Timothée 2015-12-05 20:41 GMT+09:00 Dave May <[email protected]>: > > > On 5 December 2015 at 11:15, Timothée Nicolas <[email protected]> > wrote: > >> Hi, >> >> I need to create a rectangular matrix which takes vector structured by a >> DMDA and transforms them to vectors structured with an other DMDA. It does >> not look like there is a routine to do this since apparently DMCreateMatrix >> assumes square matrix. What is the clean way to do this ? >> > > Do the DMDA's have exactly the same parallel layout and only differ by the > number of DOFs? > > If yes, and you only want to move entries between vectors associated with > the two DMDA's, you can perform the transfer between vectors locally > (rank-wise) in a very simple manner using the local number of points from > DMDA and the known block sizes (DOFs) associated with your DMDA and the > size of the subspace you ultimately want to construct. > > Thanks, > Dave > > >> The problem is I have a DMDA with 8 degrees of freedom (dof) and my >> matrix sends vectors living in a subspace with 3 dof to the other 5 dof >> subspace. I can define a square matrix living in the large, 8 dof subspace, >> but this is of course very inefficient in terms of memory and time. >> >> Thanks >> >> Best >> >> Timothée >> > >
