> Am 21.07.2021 um 05:30 schrieb Tang, Qi <[email protected]>: > > Hi, > > Now I think the DMStagStencilToIndexLocal provides the local index for given > (stencil) positions. How can we use that local index information to eliminate > the rows? > > Is the following code possible: > > MatSetLocalToGlobalMapping(…); > If (is_boundary){ > PetscInt ix; > DMStagStencilToIndexLocal(…, &ix); > MatZeroRowsLocal(… &ix, …); > } > > The comment of MatZeroRowsLocal said "rows - the global row indices”. But > this seems inconsistent with its name, so I am confused. That was indeed a typo on the man page, fix here: https://gitlab.com/petsc/petsc/-/merge_requests/4183 <https://gitlab.com/petsc/petsc/-/merge_requests/4183>
> > Thanks, > Qi > > >> On Jul 20, 2021, at 2:18 AM, Patrick Sanan <[email protected] >> <mailto:[email protected]>> wrote: >> >> Hi Qi - >> >> I just opened a PR to make DMStagStencilToIndexLocal() public >> https://gitlab.com/petsc/petsc/-/merge_requests/4180 >> <https://urldefense.com/v3/__https://gitlab.com/petsc/petsc/-/merge_requests/4180__;!!HXCxUKc!mAeQntyQFk-B3KHmJJWuOGKXTfKh8A-uC-v9JFZHW-VbJT7ejxWH7LlaFNM-Zg$> >> >> (Sorry for my inattention - I think I may have missed some communications in >> processing the flood of PETSc emails too quickly - I still plan to get some >> more automatic DMStag fieldsplit capabilities into main, if it's not too >> late). >> >>> Am 20.07.2021 um 02:47 schrieb Tang, Qi <[email protected] >>> <mailto:[email protected]>>: >>> >>> Hi, >>> As a part of implementing this process by ourself, we would like to >>> eliminate boundary dofs. By reading DMStag code, we guess we can use >>> DMStagStencilToIndexLocal >>> MatZeroRowsLocal >>> >>> We note that DMStagStencilToIndexLocal is not explicitly defined in the >>> header file. Is this function ready to use? And will we be able to >>> eliminate the dofs using the above functions? >>> >>> Thanks, >>> Qi >>> >>> >>> >>>> On Jul 16, 2021, at 8:17 PM, Barry Smith <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> >>>> >>>> Zakariae, >>>> >>>> MatGetSubMatrix() was removed a long time ago, the routine is now >>>> MatCreateSubMatrix() but it does not work in way you had hoped. There is >>>> currently no mechanism to move values you put into the sub matrix back >>>> into the original larger matrix (though perhaps there should be?). >>>> >>>> Please look at MatCreateSubMatrixVirtual() and also MatCreateNest() to >>>> see if either of those approaches satisfy your needs. >>>> >>>> Please let us know if there are extensions that would be useful for >>>> you to accomplish what you need. >>>> >>>> Barry >>>> >>>> >>>>> On Jul 16, 2021, at 7:45 PM, Jorti, Zakariae via petsc-users >>>>> <[email protected] <mailto:[email protected]>> wrote: >>>>> >>>>> Hello, >>>>> >>>>> I have a matrix A = [A00 , A01 ; A10, A11]. >>>>> I extract the submatrix A11 with MatGetSubMatrix. >>>>> I only know the global IS is1 and is2, so to get A11 I call: >>>>> MatGetSubMatrix(A,is2,is2,MAT_INITIAL_MATRIX,&A11); >>>>> I want to modify A11 and update the changes on the global matrix A but I >>>>> could not find any MatRestoreSubMatrix routine. >>>>> Is there something similar to VecGetSubVector and VecRestoreSubVector for >>>>> matrices that uses only global indices? >>>>> Many thanks. >>>>> Best regards, >>>>> >>>>> Zakariae >>>> >>> >> >
