Hi Dave, Thanks a lot for your prompt reply! This is even easier than I thought (and that is most likely the reason, why I could not think into this direction) :) And yes, I might/should upgrade our PETSc version used (3.1), but it will take me some days to check the full code package.
Now, I will create my DA (now in 3.6 called DMDA) for the coupled system via DACreate3d(PETSC_COMM_WORLD, Periodicity, DA_STENCIL_BOX, Nx, Ny, Nz, Px, Py, Pz, 4, 1, lx, ly, lz, &MyDA); instead of DACreate3d(PETSC_COMM_WORLD, Periodicity, DA_STENCIL_BOX, Nx, Ny, Nz, Px, Py, Pz, 1, 1, lx, ly, lz, &MyDA); which I have used for the single equation. I would like to ask one follow-up question: Currently, I loop over my matrix (and vectors) via three for-loops over the 3 spatial directions, and set the columns indices in the following way: for(k){ row.k = k; col[0].k = k; col[1].k = k; col[2].k = k; col[3].k = k; col[4].k = k+1; col[5].k = k-1; for(j){ row.j = j; col[0].j = j; col[1].j = j; col[2].j = j+1; col[3].j = j-1; col[4].j = j; col[5].j = j; for(i){ row.i = i; col[0].i = i+1; col[1].i = i-1; col[2].i = i; col[3].i = i; col[4].i = i; col[5].i = i; Now for the coupled equations, I should overall additionally loop over the number of DOFs (just 2 in my previous email example). Could you give me an easy example or pseudo-code for the associated assignment of columns (I have the same stencil in each of the submatrices, so for the 2 DOFs in 3D, I would get 7+6=13 column entries per row)? Or can you link me to an existing example within the PETSc help? Again, Thanks a lot! Rolf > Am 24.11.2016 um 22:30 schrieb Dave May <dave.mayhe...@gmail.com>: > > When you create the DMDA, set the number of DOFs (degrees of freedom) per > point to be 2 instead of 1. > > You must be using and ancient version of petsc given the function names you > quoted. Consider upgrading to 3.7 > > Thanks, > Dave > > On Thu, 24 Nov 2016 at 20:24, Rolf Kuiper <kui...@mpia.de > <mailto:kui...@mpia.de>> wrote: > Dear PETSc users, > > maybe this is an easy question, but I can’t find the information right away > in the user’s guide nor online. > > What I am currently doing and which works fine: > To solve a partial differential equation for the quantity q on a parallel > distributed grid, which is represented by the Distributed Array MyDA, I am > currently creating the associated sparse matrix for the KSP solver via > DAGetMatrix(MyDA, MATMPIAIJ, &MyMatrix); > > The solution vector and right hand side vector are created via > DACreateGlobalVector(MyDA, &MyRightHandSideVector); > VecDuplicate(MyRightHandSideVector, &GlobalSolutionVector); > > The DA is constructed using DACreate3d() with the corresponding regular > structured grid information. > > And here is my problem: > Now, I would like to solve a coupled system of equations for the quantities > q1 and q2 on the same grid. I.e., the matrix should just get the double > number of rows and columns, the vectors contain twice the number of entries > (e.g. first all q1s and then all q2s). And I would like to be sure that the > entries of q1 and q2, which are associated with the same grid cell are > located on the same processor. > Is there already a pre-defined structures available (such as MATMPIAIJ) > within PETSc to enlarge such a single equation to store the entries of > coupled equations? Such as > DACreateTwiceTheGlobalVector()? > > The equation is (simplified) of the form > d/dt q1 + grad q2 = 0 > d/dt q2 + f(q1) = 0 > with an arbitrary function f depending on q1. > > Thanks a lot for your help in advance, > Rolf