[petsc-users] DMCreateMatrix from one DMDA to an another

Timothée Nicolas timothee.nicolas at gmail.com
Sun Dec 6 04:19:41 CST 2015


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 <dave.mayhem23 at gmail.com>:

>
>
> On 5 December 2015 at 11:15, Timothée Nicolas <timothee.nicolas at gmail.com>
> 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
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20151206/f4e3f2b4/attachment.html>


More information about the petsc-users mailing list