[petsc-users] query DMPlexCreateSection
Dharmendar Reddy
dharmareddy84 at gmail.com
Fri Jan 10 15:09:51 CST 2014
Well, I was wondering, if i could use:
DMPlexCreateSectionBCDof (1) and DMPlexCreateSectionBCIndicesAll (2)
as is done in DMPLexCreateSection
http://www.mcs.anl.gov/petsc/petsc-current/src/dm/impls/plex/plex.c.html#DMPlexCreateSection
Since I am trying to setup section for a problem with different number
of fields in different domains (regions). I redid the code for initial
section creation.
So the concern is if i am to setup BC's for the above scenario, is
the code going to be different from the sequence of calls inside (1)
and (2), once the initial section is defined.
Thanks
Reddy
Thanks
Reddy
On Fri, Jan 10, 2014 at 2:37 PM, Brad Aagaard <baagaard at usgs.gov> wrote:
> On 01/10/2014 11:19 AM, Dharmendar Reddy wrote:
>>
>> Hello,
>> I was able to create the petsc section as per your advice.
>>>
>>> DMPlexSetChart()
>>> <loop over region 1>
>>> DMPlexSetDof() and DMPlexSetFieldDof()
>>> <loop over region 2>
>>> DMPlexSetDof() and DMPlexSetFieldDof()
>>
>>
>> I could program the code upto this step.
>>
>> ! Create Section
>> call PetscSectionCreate(comm, section, ierr)
>> ! This call sets the number of fields in the section. Default number
>> of compents per field is 1
>> call PetscSectionSetNumFields(section, numField, ierr)
>> ! Set the number of componets per field
>> do fid=0,numField-1
>> call PetscSectionSetFieldComponents(section, fid, numComp(fid+1),
>> ierr)
>> end do
>> ! Set the chart for section
>> call DMPlexGetChart(meshDM, cellIdStart, cellIdEnd, ierr)
>> call PetscSectionSetChart(section, cellIdStart, cellIdEnd, ierr)
>> print*,'Sucessfully set chart',cellIdStart,cellIdEnd
>> rgnLabel = "region"
>> call DMPlexGetLabelIdIS(meshDM,rgnLabel,regionIS,ierr)
>> call ISView(regionIS,PETSC_VIEWER_STDOUT_SELF,ierr)
>> call ISGetIndicesF90(regionIS, regionId, ierr)
>> print*, 'region', regionId
>> do jc=1,size(regionId) ! Loop Over region1
>> rgnId = regionId(jc)
>> call DMPlexGetStratumIS(meshDM, "region",rgnId, regionCellIS, ierr)
>> !print*,'Number of cells in region',rgnId
>> call ISGetSize(regionCellIS, numCell, ierr)
>> !print*,'Number of cells in region',rgnId, 'is',numCell
>> call ISGetIndicesF90(regionCellIS, regionCell, ierr)
>> do ic=1,numCell ! Get the cells of this region and loop over Cells
>> cellId = regionCell(ic)
>> ! Get the dimension of the cell
>> call DMPlexGetLabelValue(meshDM, "depth", cellId, cellDim, ierr)
>> do fid=0,numField-1 ! Loop over fields
>> ! Set field only if the field is defined for this region
>> !print*, 'settinf Field
>> for',cellId,cellDim,fid,rgnId,numDof(fid+1,cellDim+1)
>> if(fieldInRegion(fid+1,rgnId)) then
>> call PetscSectionSetFieldDof(section, cellId, fid,
>> numDof(fid+1,cellDim+1), ierr)
>> end if
>> end do
>> call PetscSectionSetDof(section, cellId,
>> numDofTot(cellDim+1,rgnId), ierr)
>> end do
>> call ISRestoreIndicesF90(regionCellIS, regionCell, ierr)
>> end do
>> call ISRestoreIndicesF90(regionIS, regionId, ierr)
>>
>>
>> Now I need to work on the code for BC. Can you help me with a bit more
>> detail here.
>>>
>>> <loop over BC>
>>> DMPlexSetConstraintDof() and DMPlexSetFieldConstraintDof()
>
>
> Use DMPlexSetConstraintDof() to set the number of DOF constrained at each
> point on the BC. DMPlexSetFieldConstraintDof() is used if you have multiple
> fields in a section.
>
>
>>> DMPlexSetUp()
>>> <loop over BC>
>>> DMPlexSetConstraintIndices() and DMPlexSetFieldConstraintIndices()
>
>
> Use DMPlexSetConstraintIndices() to set the indices of the DOF that are
> constrained.
>
> For example, one might constrain the DOF normal and/or tangential to a
> boundary in an elasticity problem. You first set the size for all the
> points, allocate via DMPlexSetUp, and then set the indices for the
> constrained DOF at each point.
>
> Regards,
> Brad
>
>
>> 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
>>
>>
>>
>>
>
--
-----------------------------------------------------
Dharmendar Reddy Palle
Graduate Student
Microelectronics Research center,
University of Texas at Austin,
10100 Burnet Road, Bldg. 160
MER 2.608F, TX 78758-4445
e-mail: dharmareddy84 at gmail.com
Phone: +1-512-350-9082
United States of America.
Homepage: https://webspace.utexas.edu/~dpr342
More information about the petsc-users
mailing list