On Wed, Jun 20, 2012 at 8:40 PM, Blaise Bourdin <span dir="ltr"><<a href="mailto:bourdin@lsu.edu" target="_blank">bourdin@lsu.edu</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
I want to change the way I handle boundary conditions in my finite elements code:<br>
Right now, I skip the rows and columns during the matrices assembly, using a flag (a SectionInt). Using an IS denoting all dof with a BC and MatZeroRowsColumns, MatZeroRowsColumnsIS or MatZeroRowsColumnsLocal would make much more sense.<br>

<br>
The difficulty comes up when applying a Dirichlet boundary condition on only one of the dof associated with a vertex (roller boundary conditions in elasticity, for instance). What I can easily get from Sieve is the point number associated with a vertex, for instance, from which I can obtain the _local_ index of the dof associated with a given component of a field at this point. For vectors, I can then set values on the local Vec or the Section. For matrices, though I can't just use MatGetLocalSubMatrix since I need also to modify the out of diagonal block terms.<br>

<br>
I guess I need the LocalToGlobalMapping or to renumber the IS describing my BC and convert it to global indices. I am sure that this information is somewhere in Sieve (in the overlap, I guess), but I was thinking that since getting a Local to Global scatter is trivial, there may be a way to obtain the mapping or renumbering the IS from the scatter.<br>

<br>
Now that I think about it more, the right way is most likely to get the information I need from Sieve.</blockquote><div><br></div><div>Yes, in the new version there is jsut a LocalToGlobalMapping. In C++, you can use the GlobalNumbering,</div>
<div><br></div><div>  numbering->getIndex(point) + dof offset</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888"><br>

Blaise<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On Jun 20, 2012, at 7:23 PM, Barry Smith wrote:<br>
<br>
><br>
>  Why do you need them? Maybe there is a better way?<br>
><br>
><br>
> On Jun 20, 2012, at 6:19 PM, Blaise Bourdin wrote:<br>
><br>
>> Hi,<br>
>><br>
>> I need to reconstruct the IS that were used to build a VecScatter between a local and a global Vec.<br>
>><br>
>> From what I see in VecScatterView_MPI (vpscat.c:13), it looks like I can get the indices from from->local.vslots[i],to->local.vslots[i], i=0 .. i<to->local.n where from and to are obtained with<br>
>> VecScatter_MPI_General *to=(VecScatter_MPI_General*)ctx->todata;<br>
>> VecScatter_MPI_General *from=(VecScatter_MPI_General*)ctx->fromdata;<br>
>><br>
>> From there, constructing the IS is trivial. Is there a way that does not involve poking inside the VecScatter data structure?<br>
>><br>
>> Blaise<br>
>><br>
>><br>
>> --<br>
>> Department of Mathematics and Center for Computation & Technology<br>
>> Louisiana State University, Baton Rouge, LA 70803, USA<br>
>> Tel. <a href="tel:%2B1%20%28225%29%20578%201612" value="+12255781612">+1 (225) 578 1612</a>, Fax  <a href="tel:%2B1%20%28225%29%20578%204276" value="+12255784276">+1 (225) 578 4276</a> <a href="http://www.math.lsu.edu/~bourdin" target="_blank">http://www.math.lsu.edu/~bourdin</a><br>

>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
><br>
<br>
--<br>
Department of Mathematics and Center for Computation & Technology<br>
Louisiana State University, Baton Rouge, LA 70803, USA<br>
Tel. <a href="tel:%2B1%20%28225%29%20578%201612" value="+12255781612">+1 (225) 578 1612</a>, Fax  <a href="tel:%2B1%20%28225%29%20578%204276" value="+12255784276">+1 (225) 578 4276</a> <a href="http://www.math.lsu.edu/~bourdin" target="_blank">http://www.math.lsu.edu/~bourdin</a><br>

<br>
<br>
<br>
<br>
<br>
<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener<br>