<div dir="ltr">A note aside: MATIS uses the ISLocalToGlobalMapping to setup the local matrices. If these get changed by the user, the local matrices are rebuilt.</div><br><div class="gmail_quote"><div dir="ltr">Il giorno lun 10 dic 2018 alle ore 14:58 Lawrence Mitchell via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>> ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Barry,<br>
<br>
> On 9 Dec 2018, at 19:25, Smith, Barry F. <<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>> wrote:<br>
> <br>
> <br>
>   Lawrence,<br>
> <br>
>      I understand what you want and it is a reasonable request. The problem is that currently ISLocalToGlobalMappingCreate() when used with block vectors and matrices is always based on blocks, that is, from the manual page, "There is one integer value in indices per block and it represents the actual indices bs*idx + j, where j=0,..,bs-1". If you look at ISLocalToGlobalMappingApply() it uses the code:<br>
> <br>
> out[i] = idx[in[i]/bs]*bs + (in[i] % bs);<br>
> <br>
> to do the mapping; that is the idx[] mapping is stored only by block, not by point.<br>
> <br>
>  But I think you may be able to get the effect you want by "managing the local to global mapping yourself before calling MatSetValues()". That is, you create a ISLocalToGlobal object yourself, not based on blocks, then when setting your Dirichlet conditions you call ISLocalToGlobalMapping() apply yourself and then call MatSetValues() using the resulting indices.<br>
<br>
Thanks. I can do this. What would be neat is if I could just swap out the LGMaps. I can try and prepare a PR that does this, if you think it would be useful.<br>
<br>
I think the checking should be something like:<br>
<br>
- Does ISLocalToGlobalMappingGetSize(...) match the PetscLayout size?<br>
<br>
- If using the blocked interface, does the block size of the LGMap match the block size of the PetscLayout?<br>
<br>
This would move some error checking from MatSetLocalToGlobalMapping to MatSetValuesXXXLocal, which may not be  desired.<br>
<br>
What do you think?<br>
<br>
Lawrence</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature">Stefano</div>