> Am 24.07.2021 um 07:32 schrieb Barry Smith <bsm...@petsc.dev>:
> 
> 
>   Qi,
> 
>     MatSetLocalGlobalToGlobalMapping() is the routine that provides the 
> information to the matrix so that one can use a "local" ordering and it will 
> get automatically translated to the parallel PETSc ordering on the parallel 
> matrix. Generically yes it includes the ghost point region on each MPI rank. 
> Some DM's provide this information automatically; for DMDA it is pretty 
> simple, for DMStag a bit more complicated. 
> 
The local-to-global mapping should get automatically attached to the Mat if you 
use a DM to create an operator/Mat, with DMCreateMatrix(). Thus, this is the 
recommended way to proceed!

https://petsc.org/release/docs/manualpages/DM/DMCreateMatrix.html

>   You are correct, the previous manual page for MatZeroRowsLocal() 
> incorrectly states "global" rows from 16+ years ago, likely a cut and paste 
> error. It looks like it has been fixed in the main PETSc repository,
> 
>   Barry
> 
> 
>> On Jul 23, 2021, at 10:50 AM, Tang, Qi <tan...@msu.edu 
>> <mailto:tan...@msu.edu>> wrote:
>> 
>> How can we use MatZeroRowsLocal? Is there any doc for the local index vs 
>> global index for a matrix?
>> 
>> I am asking because we are not sure about how to prepare a proper local 
>> index. Does the index include the ghost point region or not?
>> 
>> Qi
>> 
>> 
>> 
>> 
>>> On Jul 20, 2021, at 9:30 PM, Tang, Qi <tan...@msu.edu 
>>> <mailto:tan...@msu.edu>> wrote:
>>> 
>>> 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.
>>> 
>>> Thanks,
>>> Qi
>>> 
>>> 
>>>> On Jul 20, 2021, at 2:18 AM, Patrick Sanan <patrick.sa...@gmail.com 
>>>> <mailto:patrick.sa...@gmail.com>> 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 <tan...@msu.edu 
>>>>> <mailto:tan...@msu.edu>>:
>>>>> 
>>>>> 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 <bsm...@petsc.dev 
>>>>>> <mailto:bsm...@petsc.dev>> 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 
>>>>>>> <petsc-users@mcs.anl.gov <mailto:petsc-users@mcs.anl.gov>> 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 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to