<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Apr 2, 2014 at 8:14 AM, Michael Lange <span dir="ltr"><<a href="mailto:michael.lange@imperial.ac.uk" target="_blank">michael.lange@imperial.ac.uk</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Matt,<br>
<br>
We are  trying to implement fieldsplit for mixed function spaces in Firedrake. For this we want to compose a set of sections with one field each into one section with several fields. The is to add a PetscSectionSetField() function and then use this to build a container section with something like:<br>


<br>
sec_offset = 0<br>
msec = PETSc.Section().create()<br>
for i, s in enumerate(spaces):<br>
    sec = shift_offsets(s.clone(), sec_offset)<br>
    msec.setField(i, sec)<br>
    sec_offset += s.getStorageSize()<br>
<br>
We have tried setting this as the DefaultSection in our DM and then passing this to SNES via SNESSetDM(), but the problem we encountered is that we get an empty global section, because PetscSectionCreateGlobalSectio<u></u>n() can currently not handle multiple fields.<br>

</blockquote><div><br></div><div>Global section handles multiple fields, for instance SNES ex62. I am guessing the problem here is that you</div><div>increment the offsets in the section, but fail to increment the aggregate sizes for each point when you add a</div>

<div>field.</div><div><br></div><div>I personally would not do it this way, although there is nothing wrong with it. I would make descriptions of each discrezation and build</div><div>the unified Section once. This is what currently happens in ex12 and ex62:</div>
<div><br></div><div>   - Build PetscFE for each field and call DMAddBoundary()</div><div><br></div><div>  - PetscFE makes numDof[] and DMBoundary gives a set of (field, IS) pairs</div><div><br></div><div>  - Call DMPlexCreateSection()</div>
<div><br></div><div>This cannot constrain individual field components, like y-velocity, but we could</div><div>write a more specific version of DMPlexCreateSection() and upgrade DMAddBoundary()</div><div>to take field component as well. I will do this myself when PyLith switches over if it</div>
<div>does not happen before that.</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">
Do you agree with this approach? And if so, can we make PetscSectionCreateGlobalSectio<u></u>n() aware of fields?<br>
<br>
Thanks,<br>
<br>
Michael<br>
</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
</div></div>