[petsc-users] DMDA and ksp(ex46.c & ex22f.F90)

Maahi Talukder maahi.buet at gmail.com
Mon Mar 11 15:17:32 CDT 2019


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
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMDA/DMDAGetCorners.html#DMDAGetCorners>(da,xs,ys,zs,xm,ym,zm,ierr)
107:       do 10,k=zs,zs+zm-1108:         do 20,j=ys,ys+ym-1109:
    do 30,i=xs,xs+xm-1110:           row(MatStencil_i) = i111:
  row(MatStencil_j) = j112:           row(MatStencil_k) = k113:
   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) then114:             v(1) = 2.0*(HxHydHz + HxHzdHy +
HyHzdHx)115:             call MatSetValuesStencil
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetValuesStencil.html#MatSetValuesStencil>(jac,i1,row,i1,row,v,INSERT_VALUES
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/INSERT_VALUES.html#INSERT_VALUES>,ierr)116:
          else117:             v(1) = -HxHydHz118:
col(MatStencil_i,1) = i119:              col(MatStencil_j,1) = j120:
           col(MatStencil_k,1) = k-1121:             v(2) =
-HxHzdHy122:              col(MatStencil_i,2) = i123:
col(MatStencil_j,2) = j-1124:              col(MatStencil_k,2) = k125:
            v(3) = -HyHzdHx126:              col(MatStencil_i,3) =
i-1127:              col(MatStencil_j,3) = j128:
col(MatStencil_k,3) = k129:             v(4) = 2.0*(HxHydHz + HxHzdHy
+ HyHzdHx)130:              col(MatStencil_i,4) = i131:
col(MatStencil_j,4) = j132:              col(MatStencil_k,4) = k133:
          v(5) = -HyHzdHx134:              col(MatStencil_i,5) =
i+1135:              col(MatStencil_j,5) = j136:
col(MatStencil_k,5) = k137:             v(6) = -HxHzdHy138:
  col(MatStencil_i,6) = i139:              col(MatStencil_j,6) =
j+1140:              col(MatStencil_k,6) = k141:             v(7) =
-HxHydHz142:              col(MatStencil_i,7) = i143:
col(MatStencil_j,7) = j144:              col(MatStencil_k,7) = k+1145:
      call MatSetValuesStencil
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetValuesStencil.html#MatSetValuesStencil>(jac,i1,row,i7,col,v,INSERT_VALUES
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/INSERT_VALUES.html#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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190311/ed77508a/attachment-0001.html>


More information about the petsc-users mailing list