<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote">On Wed, Oct 9, 2013 at 2:56 PM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@mcs.anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">Christophe Ortiz <<a href="mailto:christophe.ortiz@ciemat.es">christophe.ortiz@ciemat.es</a>> writes:<br>

<br>
> Hi,<br>
><br>
> I am building my Jacobian (IJacobian) with dof > 1 and I am considering to<br>
> use either MatSetValuesLocal (what you did in ex10.c from<br>
> advection-diffusion) or MatSetValuesBlocked.<br>
><br>
> Which one do you recommend ?<br>
<br>
</div>MatSetValuesBlocked or MatSetValuesBlockedLocal.<br></blockquote><div><br></div><div>Ok.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
> For the moment I am trying to understand how MatSetValuesBlocked works from<br>
> the various examples given in ts tutorials, but there is a mistery for<br>
> me...In these examples, the block size is not set. So when m and idxm[] (n<br>
> and idxn[]) are passed in, how does PETSc know the correspondance with<br>
> global row and column indices in the matrix ?<br>
><br>
> For instance, ex22.c<br>
><br>
> for (i=info.xs; i<info.xs+info.xm; i++) {<br>
> const PetscReal *k = user->k;<br>
> PetscScalar     v[2][2];<br>
><br>
> v[0][0] = a + k[0]; v[0][1] =  -k[1];<br>
> v[1][0] =    -k[0]; v[1][1] = a+k[1];<br>
> MatSetValuesBlocked(*Jpre,1,&i,1,&i,&v[0][0],INSERT_VALUES);<br>
> }<br>
><br>
> Here 4 terms due to chemical reactions are passed to the matrix at once.<br>
> &i is passed for indice of row and column, which is supposed to be the<br>
> indice of the block. But if the blocksize is not set, how PETSc knows to<br>
> which row/colum it really corresponds in the matrix ?<br>
<br>
</div>DMCreateMatrix() set the block size to match the "dof" argument to DMDACreate1d.<br></blockquote><div><br></div><div>I suspected it ! It's smart !</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im"><br>
> For instance, if we take the example from petsc (MatSetValuesBlocked page),<br>
> what should I do to pass the block of values 3, 4, 7 and 8 with<br>
> MatSetValuesBlocked ?<br>
><br>
>   1  2  | 3  4<br>
>   5  6  | 7  8<br>
>     - - - | - - -<br>
>  9  10 | 11 12<br>
> 13 14 | 15 16<br>
<br>
</div>Block row 0, block column 1.  (Count from 0.)<br></blockquote><div><br></div><div>Thanks !</div><div>Christophe </div></div><br></div></div>