[petsc-dev] MatSetValuesStencil() and all that

Barry Smith bsmith at mcs.anl.gov
Fri Mar 19 16:37:51 CDT 2010


   Mike,

   MatSetValuesStencil() does a simple mapping of the stencil values  
to the local numbering and then calls MatSetValuesLocal().

   To extend this for "multiphysics" is I think pretty  
straightforward, the only difficulty will be getting all the indices  
right.

   Currently a single stencil is attached to the matrix with  
MatSetStencil() what we will need to do is allow multiple stencils to  
be attached with multiple calls. Then we can add another field to  
MatStencil to indicate what "physics" you are putting values in  
associated with. Then the mappings in MatSetValuesStencil() (and  
blocked versions) need to be updated to properly handle the several  
"physics".

   You will also need another argument (or maybe more than 1?) to  
MatSetStencil() to indicate where in the large matrix the new  
"physics" fits.

    To make the code simple I would make the mat->stencil field be an  
array of, say, 5 and introduce a mat->stencilcnt field to keep track  
of how many have been set so far. Then the new field in MatStencil  
would be used in the mapping code to select which mat->stencil[] to  
pull out.

    Can you take a look at the code and see if it is feasible for you  
to make these changes? Feel free to send email or come by my office  
with questions.

    Barry




More information about the petsc-dev mailing list