<html><head><meta http-equiv="content-type" content="text/html; charset=us-ascii"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div><br></div>   Thank you for the test code. I have a fix in the branch <span style="caret-color: rgb(51, 50, 56); color: rgb(51, 50, 56); font-family: "GitLab Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 14px; background-color: rgb(251, 250, 253);"> </span><a class="ref-name" href="https://gitlab.com/petsc/petsc/-/commits/barry/2023-04-29/fix-pcasmcreatesubdomains2d" style="box-sizing: border-box; font-variant-ligatures: none; color: rgb(31, 117, 203); text-decoration: none; transition: background-color 100ms linear, color 100ms linear, border 100ms linear; font-family: var(--default-mono-font, "Menlo"),"DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; font-size: 13.3px;">barry/2023-04-29/fix-pcasmcreatesubdomains2d</a> with merge request <a href="https://gitlab.com/petsc/petsc/-/merge_requests/6394">https://gitlab.com/petsc/petsc/-/merge_requests/6394</a><div><br></div><div>   The functions did not have proper Fortran stubs and interfaces so I had to provide them manually in the new branch.<br><div><br></div><div>   Use</div><div><br></div><div>   git fetch</div><div>   git checkout <a class="ref-name" href="https://gitlab.com/petsc/petsc/-/commits/barry/2023-04-29/fix-pcasmcreatesubdomains2d" style="box-sizing: border-box; font-variant-ligatures: none; color: rgb(31, 117, 203); text-decoration: none; transition: background-color 100ms linear, color 100ms linear, border 100ms linear; font-family: var(--default-mono-font, "Menlo"),"DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace; font-size: 13.3px;">barry/2023-04-29/fix-pcasmcreatesubdomains2d</a></div><div>   ./configure etc</div><div><br></div><div>   Your now working test code is in src/ksp/ksp/tests/ex71f.F90  I had to change things slightly and I updated the error handling for the latest version.</div><div><br></div><div>   Please let us know if you have any later questions.</div><div><br></div><div>  Barry</div><div><br></div><div><br></div><div><br></div><div><div><br><blockquote type="cite"><div>On Apr 28, 2023, at 12:07 PM, LEONARDO MUTTI <leonardo.mutti01@universitadipavia.it> wrote:</div><br class="Apple-interchange-newline"><div><div dir="ltr">Hello. I am having a hard time understanding the index sets to feed PCGASMSetSubdomains, and I am working in Fortran (as a PETSc novice). To get more intuition on how the IS objects behave I tried the following minimal (non) working example, which should tile a 16x16 matrix into 16 square, non-overlapping submatrices:<div><br></div><div>#include <petsc/finclude/petscmat.h><br></div><div>#include <petsc/finclude/petscksp.h><br>#include <petsc/finclude/petscpc.h><br>      USE petscmat<br>      USE petscksp<br>      USE petscpc<br>      <br>      Mat   :: A<br>      PetscInt :: M, NSubx, dof, overlap, NSub<br>      INTEGER :: I,J<br>      PetscErrorCode      :: ierr<br>      PetscScalar :: v<br>      KSP            :: ksp<br>      PC             :: pc<br>      IS :: subdomains_IS, inflated_IS<br>      <br>      call PetscInitialize(PETSC_NULL_CHARACTER , ierr)</div><div>      <br>!-----Create a dummy matrix<br>      M = 16<br>      call MatCreateAIJ(MPI_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE,<br>     & M, M,<br>     & PETSC_DEFAULT_INTEGER, PETSC_NULL_INTEGER,<br>     & PETSC_DEFAULT_INTEGER, PETSC_NULL_INTEGER,<br>     & A, ierr)<br>      <br>      DO I=1,M<br>         DO J=1,M<br>            v = I*J<br>            CALL MatSetValue (A,I-1,J-1,v,<br>     &                     INSERT_VALUES , ierr)<br>         END DO<br>      END DO<br>      <br>      call MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY , ierr)<br>      call MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY , ierr)<br>      </div><div>!-----Create KSP and PC<br>      call KSPCreate(PETSC_COMM_WORLD,ksp, ierr)<br>      call KSPSetOperators(ksp,A,A, ierr)<br>      call KSPSetType(ksp,"bcgs",ierr)<br>      call KSPGetPC(ksp,pc,ierr)<br>      call KSPSetUp(ksp, ierr)<br>      call PCSetType(pc,PCGASM, ierr)<br>      call PCSetUp(pc , ierr)<br>      <br>!-----GASM setup<br>      NSubx = 4<br>      dof = 1<br>      overlap = 0<br>      <br>      call PCGASMCreateSubdomains2D(pc, <br>     &      M, M,<br>     &      NSubx, NSubx,<br>     &      dof, overlap,<br>     &      NSub, subdomains_IS, inflated_IS, ierr)<br><br>      call ISView(subdomains_IS, PETSC_VIEWER_STDOUT_WORLD, ierr)<br>      <br>      call KSPDestroy(ksp, ierr)  <br>      call PetscFinalize(ierr)</div><div><br></div><div>Running this on one processor, I get NSub = 4.</div><div>If PCASM and PCASMCreateSubdomains2D are used instead, I get NSub = 16 as expected.</div><div>Moreover, I get in the end "forrtl: severe (157): Program Exception - access violation". So:</div><div>1) why do I get two different results with ASM, and GASM?</div><div>2) why do I get access violation and how can I solve this?</div><div>In fact, in C, subdomains_IS, inflated_IS should pointers to IS objects. As I see on the Fortran interface, the arguments to PCGASMCreateSubdomains2D are IS objects:<br></div><div><br></div><div>       subroutine PCGASMCreateSubdomains2D(a,b,c,d,e,f,g,h,i,j,z)<br>       import tPC,tIS<br>       PC a ! PC<br>       PetscInt b ! PetscInt<br>       PetscInt c ! PetscInt<br>       PetscInt d ! PetscInt<br>       PetscInt e ! PetscInt<br>       PetscInt f ! PetscInt<br>       PetscInt g ! PetscInt<br>       PetscInt h ! PetscInt<br>       IS i ! IS<br>       IS j ! IS<br>       PetscErrorCode z<br>       end subroutine PCGASMCreateSubdomains2D<br></div><div>Thus:</div><div>3) what should be inside e.g., subdomains_IS? I expect it to contain, for every created subdomain, the list of rows and columns defining the subblock in the matrix, am I right?</div><div><br></div><div>Context: I have a block-tridiagonal system arising from space-time finite elements, and I want to solve it with GMRES+PCGASM preconditioner, where each overlapping submatrix is on the diagonal and of size 3x3 blocks (and spanning multiple processes). This is PETSc 3.17.1 on Windows.</div><div><br></div><div>Thanks in advance,</div><div>Leonardo</div></div>
</div></blockquote></div><br></div></div></body></html>