Hi Barry, sorry, but I still cannot make it. I guess what I need is something similar to MatRestrict/MatInterpolate (and B is something similar to what is created from DMCreateInterpolation, except for the fact that the nonzero entries are distributed differently).
Am I mistaken? Is there any example I could start from? Thanks again, Gianluca On Wed, Nov 11, 2015 at 10:19 PM, Barry Smith <[email protected]> wrote: > DMDAGetOwnershipRanges > > > On Nov 11, 2015, at 10:47 PM, Gianluca Meneghello <[email protected]> > wrote: > > > > Hi, > > > > thanks for the very quick reply. > > > > One more question: is there a way to get the lx and ly from the first dm > and use them (modified) for the second dm? DMDAGetInfo does not seem to > provide this information. > > > > Thanks again for your help > > > > Gianluca > > > > On Wed, Nov 11, 2015 at 8:12 PM, Barry Smith <[email protected]> wrote: > > > > When you create the 2 DM you must be set the lx, ly arguments (the > ones you set to 0) in your code carefully to insure that the vectors for > the 2 DM you create have compatible layout to do the matrix vector product. > > > > You can run a very small problem with 2 processors and printing out > the vectors to see the layout to make sure you get it correct. > > > > The 2 DM don't have any magically way of knowing that you created > another DMDA and want it to be compatible automatically. > > > > Barry > > > > DMDACreate2d(PETSC_COMM_WORLD , DM_BOUNDARY_GHOSTED , > DM_BOUNDARY_GHOSTED , DMDA_STENCIL_BOX , > > Mx , Nx , PETSC_DECIDE , PETSC_DECIDE , 1 , 0 , 0 , 0 , > &dax); > > DMDACreate2d(PETSC_COMM_WORLD , DM_BOUNDARY_NONE , > DM_BOUNDARY_NONE , DMDA_STENCIL_BOX , > > Mx-2*bs , Nx-2*bs , PETSC_DECIDE , PETSC_DECIDE , 1 , 0 , 0 , 0 , > &daf); > > > > > On Nov 11, 2015, at 10:05 PM, Gianluca Meneghello <[email protected]> > wrote: > > > > > > Hi, > > > > > > I am trying to do something apparently really simple but with no > success. > > > > > > I need to perform a matrix-vector multiplication x = B f , where the > length of x is bigger than the length of f (or viceversa). Thus, B cannot > be created using DMCreateMatrix. > > > > > > Both x and f are obtained from different DMs, the smaller covering > only a subdomain of the larger. The application is to apply a control f to > a system, e.g. \dot{x} = A x + B f. > > > > > > The problem is, when running on more than one core, the vector x is > not organized as I would expect (everything works fine on a single core). > > > > > > I attach a short example where B is intended to map f to the interior > of x. > > > > > > mpirun -n 1 ./test -draw_pause -1 works fine while > > > mpirun -n 2 ./test -draw_pause -1 shows the problem > > > > > > I have not found any example with non square matrices in the src > folder, any help is very welcome. > > > > > > Thanks for your time, > > > > > > Gianluca > > > <test.cpp> > > > > > >
