> On Mar 11, 2019, at 7:07 PM, Maahi Talukder via petsc-users 
> <[email protected]> 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 <[email protected]> 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 
> <[email protected]>:
> 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

Reply via email to