The key is to understand that most PETSc functionality is supported by two 
levels of code: the abstract interface (usually defined in src/xxx/interface) 
and then one or more implementations (usually defined in src/xxx/impls/*). The 
abstract interface functions are XXXYYYY while the implementation functions 
names are usually XXXYYYY_ZZZZ.    So for example MatCreate() is the abstract 
interface function and MatCreate_SeqAIJ() is one particular implementation. 
You can find the the interface and implementation functions by simply googling 
the manual page (for example 
http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreate.html) 
and then looking at the bottom of the page for the location:

Location

src/mat/utils/gcreate.c

and the implementations

Implementations

MatCreate_HYPREStruct in src/dm/impls/da/hypre/mhyp.c
MatCreate_HYPRESStruct in src/dm/impls/da/hypre/mhyp.c
MatCreate_MPIAdj in src/mat/impls/adj/mpi/mpiadj.c
...

They are all hyper links that you can click on to go exactly to the routine. 

   Barry

If you use EMACS or VI/VIM you can use etags or tags (see the PETSc users 
manual page pages 235, 236) to jump directly the various functions also.



> On Sep 17, 2018, at 6:27 PM, Oleksandr Koshkarov <[email protected]> wrote:
> 
> Awesome, thank you. All those functions and flexibility imply the enormous 
> beauty in PETSc structure. I wish to start reading petsc internal code, to be 
> more comfortable using it and to ask less stupid questions. However, it is 
> quite intimidating to start. Maybe you have some pointers, where a petsc user 
> can start reading petsc code?
> 
> Thank you and best regards,
> 
> Oleksandr
> 
> 
> On 09/17/2018 05:23 PM, Smith, Barry F. wrote:
>> 
>>> On Sep 17, 2018, at 5:54 PM, Oleksandr Koshkarov <[email protected]> 
>>> wrote:
>>> 
>>> Thank you. One more question:
>>> 
>>> Are DMDA matrices with smaller stencil compatible with state vectors with 
>>> larger stencil width? If I precondition finite volume method were I use 
>>> stencil width 2 (or more) with lower order method with stencil width 1, can 
>>> this still work? (My jacobian is matrix free). Can this work together?
>>    Yes
>> 
>>> Thank you and best regards,
>>> 
>>> Oleksandr.
>>> 
>>> 
>>> On 09/17/2018 04:44 PM, Smith, Barry F. wrote:
>>>>> On Sep 17, 2018, at 5:36 PM, Oleksandr Koshkarov <[email protected]> 
>>>>> wrote:
>>>>> 
>>>>> Wow, that is neat, thank you! I think it is exactly what I need. However, 
>>>>> can you please clarify some details:
>>>>> 
>>>>> 1) does "ofill" represent all non diagonal blocs?  meaning they have the 
>>>>> same pattern. (e.g., in 1d I will have 1+2*stencil_width blocks)
>>>>    Yes, it represents all the non diagonal blocks, this is a weakness in 
>>>> that depending on the discretization different diagonal blocks may have 
>>>> different nonzero structure. You need to use the union of all the 
>>>> off-diagonal block matrix nonzero structure.
>>>>> 2) this note: "This only makes sense when you are doing multicomponent 
>>>>> problems but using the MPIAIJ matrix format". Sounds like MPIAIJ is wrong 
>>>>> choice for multi component problem. Actually, I do not pick the DMDA 
>>>>> matrix format myself, and use petsc default (which is probably MPIAIJ).
>>>>    It is MPIAIJ.
>>>> 
>>>>> Maybe, I should something else more heavily multi component problem? My 
>>>>> matrices appears from discretizing 6D PDE, where I put 3D inside dof... 
>>>>> The discretization is all stencil based (finite volume method).
>>>>    The BAIJ format is only appropriate if the "blocks" are essentially 
>>>> dense (since BAIJ stores them as dense). BAIJ format is not correct for 
>>>> you. You should be using the MPIAIJ format.
>>>> 
>>>>    Barry
>>>> 
>>>>> p.s. All those functions and flexibility imply the enormous beauty in 
>>>>> PETSc structure. I wish to start reading petsc internal code, to be more 
>>>>> comfortable using it and to ask more smart questions to you guys. 
>>>>> However, it is quite intimidating to start. Maybe you have some pointers, 
>>>>> how can I start?
>>>>> 
>>>>> Thank you and best regards,
>>>>> 
>>>>> Oleksandr.
>>>>> 
>>>>> 
>>>>> On 09/17/2018 02:37 PM, Smith, Barry F. wrote:
>>>>>>   You can use DMDASetBlockFills() or DMDASetBlockFillsSparse().
>>>>>> 
>>>>>>    If you need any finer scale control then they offer you need to copy 
>>>>>> the PETSc source that does the preallocation for DMDA generated matrices 
>>>>>> and customize it exactly for your problem.
>>>>>> 
>>>>>> 
>>>>>>     Barry
>>>>>> 
>>>>>> 
>>>>>>> On Sep 17, 2018, at 3:31 PM, Oleksandr Koshkarov <[email protected]> 
>>>>>>> wrote:
>>>>>>> 
>>>>>>> Hello All,
>>>>>>> 
>>>>>>> I have a question about preallocation of DMDA matrix. As I understand, 
>>>>>>> it preallocates the number of nonzeros using the stencil width info. 
>>>>>>> However, it seems it will not be efficient for me: I have a large dof 
>>>>>>> (around 2000), where only some of those dof's are coupled, so those 
>>>>>>> dof*dof blocks inside the DMMatrix would be also sparse. I also use 
>>>>>>> this DMDA matrix as preconditioner, which has lower coupling than 
>>>>>>> original DMDA array, so stencil is effectively smaller (I precondition 
>>>>>>> higher order finite volume method with lower order FV method). Can I 
>>>>>>> manually specify how many zeros needs to be preallocated for the DMDA 
>>>>>>> matrix?
>>>>>>> 
>>>>>>> p.s. I do not want o use normal matrix, as I relay on dmda indexing 
>>>>>>> (MatSetValuesStencil).
>>>>>>> 
>>>>>>> Thank you and best regards,
>>>>>>> 
>>>>>>> Oleksandr.
>>>>>>> 
> 

Reply via email to