[petsc-users] query DMPlexCreateSection
Dharmendar Reddy
dharmareddy84 at gmail.com
Fri Jan 10 13:19:17 CST 2014
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()
> DMPlexSetUp()
> <loop over BC>
> DMPlexSetConstraintIndices() and DMPlexSetFieldConstraintIndices()
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
--
-----------------------------------------------------
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