[petsc-users] query DMPlexCreateSection

Dharmendar Reddy dharmareddy84 at gmail.com
Fri Jan 3 01:37:24 CST 2014


Hello,
         I did not fully understand the flow. Need more help.
If i look at the flow in DMPlexCreateSectionInitial
(http://www.mcs.anl.gov/petsc/petsc-current/src/dm/impls/plex/plex.c.html#DMPlexCreateSection)

6023:   for (d = 0; d <= dim; ++d) {
6024:     numDofTot[d] = 0;
6025:     for (f = 0; f < numFields; ++f) numDofTot[d] += numDof[f*(dim+1)+d];
6026:   }
6027:   PetscSectionCreate(PetscObjectComm((PetscObject)dm), section);
6028:   if (numFields > 0) {
6029:     PetscSectionSetNumFields(*section, numFields);
6030:     if (numComp) {
6031:       for (f = 0; f < numFields; ++f) {
6032:         PetscSectionSetFieldComponents(*section, f, numComp[f]);
6033:       }
6034:     }
6035:   }
6036:   DMPlexGetChart(dm, &pStart, &pEnd);
6037:   PetscSectionSetChart(*section, pStart, pEnd);
6038:   for (d = 0; d <= dim; ++d) {
6039:     DMPlexGetDepthStratum(dm, d, &pStart, &pEnd);
6040:     for (p = pStart; p < pEnd; ++p) {
6041:       for (f = 0; f < numFields; ++f) {
6042:         PetscSectionSetFieldDof(*section, p, f, numDof[f*(dim+1)+d]);
6043:       }
6044:       PetscSectionSetDof(*section, p, numDofTot[d]);
6045:     }
6046:   }

In line 6027, number of fields for entire section is defined. Now,
dose the flow in your earlier replies requires me to do that ? I.e,
define numFields to 2. Then

Inside the loop 6040, i need to check if the point belongs to region 1 or 2.

If it belongs to region 1 then numFields is 1 and if it belongs to
region 2, numFields is 2.

Where do i set the number of fields in the flow you mentioned in the
earlier email ?

Thanks
Reddy

On Thu, Jan 2, 2014 at 9:56 AM, Matthew Knepley <knepley at gmail.com> wrote:
> On Thu, Jan 2, 2014 at 4:11 AM, Dharmendar Reddy <dharmareddy84 at gmail.com>
> wrote:
>>
>> Hello,
>>          I am trying to use DMPlexCreateSection from fortran. I was
>> able to solve a Poisson equation earlier using DMPlex for handling
>> mesh data.
>>
>> Now i need to solve a system of equations: (poisson + continuity
>> equations)
>>
>> - div (grad phi) = (C + n)  --- (1)
>>   div (J ) = 0  ---------------  (2)
>>   J = n grad(phi)
>> ( C is constant)
>> Simulation domain is defined as, rectangular regions 1 and 2 shown below.
>>
>> -------------
>> |     1        |
>> -------------
>> |               |
>> |       2      |
>> |               |
>> --------------
>>
>> Now, equation 1 is defined in region 1 and 2
>> and equation 2 is defined only for region 2.
>>
>> How do i setup the section  ? DMPlexCreateSection applies the given
>> DOF layout  per cell to all cells in the mesh.
>>
>> I am not sure if all the function calls inside
>> DMPlexCreateSectionIntial and DMPlexCreateSectionBCDof  are accessible
>> from Fotran.
>
>
> You don't want them anyway since they apply to the whole domain. The control
> flow could be:
>
>   DMPlexSetChart()
>   <loop over region 1>
>     DMPlexSetDof() and DMPlexSetFieldDof()
>   <loop over region 2>
>     DMPlexSetDof() and DMPlexSetFieldDof()
>   <loop over BC>
>     DMPlexSetConstraintDof() and DMPlexSetFieldConstraintDof()
>   DMPlexSetUp()
>   <loop over BC>
>     DMPlexSetConstraintIndices() and DMPlexSetFieldConstraintIndices()
>
> We could try and package some of this up if it looks generic.
>
>   Thanks,
>
>      Matt
>
>>
>> Thanks
>> Reddy
>>
>> --
>> -----------------------------------------------------
>> Dharmendar Reddy Palle
>
>
>
>
> --
> What most experimenters take for granted before they begin their experiments
> is infinitely more interesting than any results to which their experiments
> lead.
> -- Norbert Wiener



-- 
-----------------------------------------------------


More information about the petsc-users mailing list