<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jan 3, 2014 at 1:37 AM, Dharmendar Reddy <span dir="ltr"><<a href="mailto:dharmareddy84@gmail.com" target="_blank">dharmareddy84@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
         I did not fully understand the flow. Need more help.<br>
If i look at the flow in DMPlexCreateSectionInitial<br>
(<a href="http://www.mcs.anl.gov/petsc/petsc-current/src/dm/impls/plex/plex.c.html#DMPlexCreateSection" target="_blank">http://www.mcs.anl.gov/petsc/petsc-current/src/dm/impls/plex/plex.c.html#DMPlexCreateSection</a>)<br>

<br>
6023:   for (d = 0; d <= dim; ++d) {<br>
6024:     numDofTot[d] = 0;<br>
6025:     for (f = 0; f < numFields; ++f) numDofTot[d] += numDof[f*(dim+1)+d];<br>
6026:   }<br>
6027:   PetscSectionCreate(PetscObjectComm((PetscObject)dm), section);<br>
6028:   if (numFields > 0) {<br>
6029:     PetscSectionSetNumFields(*section, numFields);<br>
6030:     if (numComp) {<br>
6031:       for (f = 0; f < numFields; ++f) {<br>
6032:         PetscSectionSetFieldComponents(*section, f, numComp[f]);<br>
6033:       }<br>
6034:     }<br>
6035:   }<br>
6036:   DMPlexGetChart(dm, &pStart, &pEnd);<br>
6037:   PetscSectionSetChart(*section, pStart, pEnd);<br>
6038:   for (d = 0; d <= dim; ++d) {<br>
6039:     DMPlexGetDepthStratum(dm, d, &pStart, &pEnd);<br>
6040:     for (p = pStart; p < pEnd; ++p) {<br>
6041:       for (f = 0; f < numFields; ++f) {<br>
6042:         PetscSectionSetFieldDof(*section, p, f, numDof[f*(dim+1)+d]);<br>
6043:       }<br>
6044:       PetscSectionSetDof(*section, p, numDofTot[d]);<br>
6045:     }<br>
6046:   }<br>
<br>
In line 6027, number of fields for entire section is defined. Now,<br>
dose the flow in your earlier replies requires me to do that ? I.e,<br>
define numFields to 2. Then<br>
<br>
Inside the loop 6040, i need to check if the point belongs to region 1 or 2.<br>
<br>
If it belongs to region 1 then numFields is 1 and if it belongs to<br>
region 2, numFields is 2.<br>
<br>
Where do i set the number of fields in the flow you mentioned in the<br>
earlier email ?<br></blockquote><div><br></div><div>The number of fields is always 2 and the chart is always the whole domain. Its just that</div><div>one field only takes values on part of the chart. The other points will have dof = 0.</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">
Thanks<br>
Reddy<br>
<br>
On Thu, Jan 2, 2014 at 9:56 AM, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br>
> On Thu, Jan 2, 2014 at 4:11 AM, Dharmendar Reddy <<a href="mailto:dharmareddy84@gmail.com">dharmareddy84@gmail.com</a>><br>
> wrote:<br>
>><br>
>> Hello,<br>
>>          I am trying to use DMPlexCreateSection from fortran. I was<br>
>> able to solve a Poisson equation earlier using DMPlex for handling<br>
>> mesh data.<br>
>><br>
>> Now i need to solve a system of equations: (poisson + continuity<br>
>> equations)<br>
>><br>
>> - div (grad phi) = (C + n)  --- (1)<br>
>>   div (J ) = 0  ---------------  (2)<br>
>>   J = n grad(phi)<br>
>> ( C is constant)<br>
>> Simulation domain is defined as, rectangular regions 1 and 2 shown below.<br>
>><br>
>> -------------<br>
>> |     1        |<br>
>> -------------<br>
>> |               |<br>
>> |       2      |<br>
>> |               |<br>
>> --------------<br>
>><br>
>> Now, equation 1 is defined in region 1 and 2<br>
>> and equation 2 is defined only for region 2.<br>
>><br>
>> How do i setup the section  ? DMPlexCreateSection applies the given<br>
>> DOF layout  per cell to all cells in the mesh.<br>
>><br>
>> I am not sure if all the function calls inside<br>
>> DMPlexCreateSectionIntial and DMPlexCreateSectionBCDof  are accessible<br>
>> from Fotran.<br>
><br>
><br>
> You don't want them anyway since they apply to the whole domain. The control<br>
> flow could be:<br>
><br>
>   DMPlexSetChart()<br>
>   <loop over region 1><br>
>     DMPlexSetDof() and DMPlexSetFieldDof()<br>
>   <loop over region 2><br>
>     DMPlexSetDof() and DMPlexSetFieldDof()<br>
>   <loop over BC><br>
>     DMPlexSetConstraintDof() and DMPlexSetFieldConstraintDof()<br>
>   DMPlexSetUp()<br>
>   <loop over BC><br>
>     DMPlexSetConstraintIndices() and DMPlexSetFieldConstraintIndices()<br>
><br>
> We could try and package some of this up if it looks generic.<br>
><br>
>   Thanks,<br>
><br>
>      Matt<br>
><br>
>><br>
>> Thanks<br>
>> Reddy<br>
>><br>
>> --<br>
>> -----------------------------------------------------<br>
>> Dharmendar Reddy Palle<br>
><br>
><br>
><br>
<span class="HOEnZb"><font color="#888888">><br>
> --<br>
> What most experimenters take for granted before they begin their experiments<br>
> is infinitely more interesting than any results to which their experiments<br>
> lead.<br>
> -- Norbert Wiener<br>
<br>
<br>
<br>
--<br>
-----------------------------------------------------<br>
</font></span></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>