> On Mar 11, 2019, at 10:01 PM, Maahi Talukder <maahi.b...@gmail.com> wrote: > > Hi > Thank you for your explanation. > So is it so that it always connects two points?
Entries in matrices represent the connection between points in a vector (including the diagonal entries that are connections between a point and itself). I think you are "over-thinking" MatStencil. It is just a handy way of managing the mapping from a grid point to an entry in a vector. And similarly from two grid points and an entry in a matrix. > I am still hazy on the concept. Could you suggest me some more elaborate book > or something to go through so that I can grasp the whole concept? How about > your book ' Domain Decomposition'? Does it cover this topic? No, it doesn't discuss this issue. Barry > Please let me know > > Regards, > Maahi Talukder > > On Mon, Mar 11, 2019 at 9:46 PM Smith, Barry F. <bsm...@mcs.anl.gov> wrote: > > > > On Mar 11, 2019, at 7:07 PM, Maahi Talukder via petsc-users > > <petsc-users@mcs.anl.gov> wrote: > > > > > > Thank you for your reply. > > > > I still have some confusion. So if (i,j) is a point on the structured grid( > > Where "i" is the column and "j" is the row), and the information associated > > with the (i,j) point on the grid is stored in some (m,n) location of the > > matrix A (Where Ax =b), > > Almost. Think about the vector (not the matrix) first. The point (i,j) on > the mesh has location m in the vector (m is a function of both i and j) Now > think about another point on the mesh (say next to the first point), call it > (i',j') this point also has a location in the vector, call it n. Now consider > the matrix entry containing the value that connects m and n. On the mesh it > is associated with the point (i,j) AND the point (i',j') hence the row in the > matrix is a function of the first point (i,j) while the column is a function > of the second point (i',j'). > > Now the diagonal entry in matrix a_{mm} has (i,j) for both "row" and > "column" stencils, but the off-diagonal entries a_{mn} has (i,j) for the row > but (i',j') for the column. > > > I still don't > > understand why both of row(MatStencil_i,1) and row(MatStencil_j,1) are > > necessary? I mean is it something like mapping "i" from grid to its > > location in the matrix? > > > > Would you please explain that? > > > > > > Regards, > > Maahi > > > > On Mon, Mar 11, 2019 at 4:41 PM Patrick Sanan <patrick.sa...@gmail.com> > > wrote: > > There are two different types of rows and columns: > > 1. Rows and columns in a grid > > 2. Rows and columns in a matrix > > > > "i" and "j" refer to rows and columns in the grid, but "row" and "col" > > refer to rows and columns in the matrix. > > > > > > > > Am Mo., 11. März 2019 um 21:18 Uhr schrieb Maahi Talukder via petsc-users > > <petsc-users@mcs.anl.gov>: > > Hello all, > > > > I am trying to solve Poisson Equation on structured grid using 9-point > > stencil in 2D. Now to setup my matrix, I came across C structure MatStencil > > in ex22f.F90 > > > > ........................................................................................................... > > call DMDAGetCorners > > (da,xs,ys,zs,xm,ym,zm,ierr) > > > > > > 107: do > > 10,k=zs,zs+zm-1 > > > > 108: do > > 20,j=ys,ys+ym-1 > > > > 109: do > > 30,i=xs,xs+xm-1 > > > > 110: > > row(MatStencil_i) = i > > > > 111: > > row(MatStencil_j) = j > > > > 112: > > row(MatStencil_k) = k > > > > 113: if > > (i.eq.0 .or. j.eq.0 .or. k.eq.0 .or. i.eq.mx-1 .or. j.eq.my-1 .or. > > k.eq.mz-1) then > > > > 114: > > v(1) = 2.0*(HxHydHz + HxHzdHy + HyHzdHx) > > > > 115: call MatSetValuesStencil(jac,i1,row,i1,row,v,INSERT_VALUES > > ,ierr) > > > > 116: else > > 117: > > v(1) = -HxHydHz > > > > 118: > > col(MatStencil_i,1) = i > > > > 119: > > col(MatStencil_j,1) = j > > > > 120: > > col(MatStencil_k,1) = k-1 > > > > 121: > > v(2) = -HxHzdHy > > > > 122: > > col(MatStencil_i,2) = i > > > > 123: > > col(MatStencil_j,2) = j-1 > > > > 124: > > col(MatStencil_k,2) = k > > > > 125: > > v(3) = -HyHzdHx > > > > 126: > > col(MatStencil_i,3) = i-1 > > > > 127: > > col(MatStencil_j,3) = j > > > > 128: > > col(MatStencil_k,3) = k > > > > 129: > > v(4) = 2.0*(HxHydHz + HxHzdHy + HyHzdHx) > > > > 130: > > col(MatStencil_i,4) = i > > > > 131: > > col(MatStencil_j,4) = j > > > > 132: > > col(MatStencil_k,4) = k > > > > 133: > > v(5) = -HyHzdHx > > > > 134: > > col(MatStencil_i,5) = i+1 > > > > 135: > > col(MatStencil_j,5) = j > > > > 136: > > col(MatStencil_k,5) = k > > > > 137: > > v(6) = -HxHzdHy > > > > 138: > > col(MatStencil_i,6) = i > > > > 139: > > col(MatStencil_j,6) = j+1 > > > > 140: > > col(MatStencil_k,6) = k > > > > 141: > > v(7) = -HxHydHz > > > > 142: > > col(MatStencil_i,7) = i > > > > 143: > > col(MatStencil_j,7) = j > > > > 144: > > col(MatStencil_k,7) = k+1 > > > > 145: call MatSetValuesStencil(jac,i1,row,i7,col,v,INSERT_VALUES > > ,ierr) > > > > 146: endif > > ..................................................................................... > > What I am confused about is what it means to have the value of row in i and > > j directions(row(MatStencil_i,1) & row(MatStencil_j,1)). > > Same confusion goes for the column values as well. I mean generally in a > > 2D Matrix row values are in j/y direction and column values are in i/x > > direction. > > Could you please explain that? > > > > Regards, > > Maahi Talukder > > Department of Mechanical Engineering > > Clarkson University >