Actual source code: ex1f90.F90

  1: program  ex1f90
  2: #include <petsc/finclude/petscdmlabel.h>
  3:   use petscdm
  4:   implicit NONE

  6:   type(tDM)                         :: dm, dmDist
  7:   character(len=PETSC_MAX_PATH_LEN) :: filename
  8:   PetscBool                         :: interpolate = PETSC_FALSE
  9:   PetscBool                         :: flg
 10:   PetscErrorCode                    :: ierr
 11:   PetscInt                          :: izero
 12:   izero = 0

 14:   PetscCallA(PetscInitialize(ierr))
 15:   PetscCallA(PetscOptionsGetString(PETSC_NULL_OPTIONS,PETSC_NULL_CHARACTER,'-i',filename,flg,ierr))
 16:   PetscCallA(PetscOptionsGetBool(PETSC_NULL_OPTIONS,PETSC_NULL_CHARACTER,'-interpolate',interpolate,flg,ierr))

 18:   PetscCallA(DMPlexCreateFromFile(PETSC_COMM_WORLD,filename,'ex1f90_plex',interpolate,dm,ierr))
 19:   PetscCallA(DMPlexDistribute(dm,izero,PETSC_NULL_SF,dmDist,ierr))
 20:   if (.not. PetscObjectIsNull(dmDist)) then
 21:     PetscCallA(DMDestroy(dm,ierr))
 22:     dm = dmDist
 23:   end if

 25:   PetscCallA(ViewLabels(dm,PETSC_VIEWER_STDOUT_WORLD,ierr))
 26:   PetscCallA(DMDestroy(dm,ierr))
 27:   PetscCallA(PetscFinalize(ierr))

 29: contains
 30:   subroutine ViewLabels(dm,viewer,ierr)
 31:     type(tDM)                        :: dm
 32:     type(tPetscViewer)               :: viewer
 33:     PetscErrorCode                   :: ierr

 35:     DMLabel                          :: label
 36:     type(tIS)                        :: labelIS
 37:     character(len=PETSC_MAX_PATH_LEN):: labelName,IObuffer
 38:     PetscInt                         :: numLabels,l

 40:     PetscCall(DMGetNumLabels(dm, numLabels, ierr))
 41:     write(IObuffer,*) 'Number of labels: ', numLabels, '\n'
 42:     PetscCall(PetscViewerASCIIPrintf(viewer, IObuffer, ierr))
 43:     do l = 0, numLabels-1
 44:       PetscCall(DMGetLabelName(dm, l, labelName, ierr))
 45:       write(IObuffer,*) 'label ',l,' name: ',trim(labelName),'\n'
 46:       PetscCall(PetscViewerASCIIPrintf(viewer, IObuffer, ierr))

 48:       PetscCall(PetscViewerASCIIPrintf(viewer, 'IS of values\n', ierr))
 49:       PetscCall(DMGetLabel(dm, labelName, label, ierr))
 50:       PetscCall(DMLabelGetValueIS(label, labelIS, ierr))
 51: !      PetscCall(PetscViewerASCIIPushTab(viewer,ierr))
 52:       PetscCall(ISView(labelIS, viewer, ierr))
 53: !      PetscCall(PetscViewerASCIIPopTab(viewer,ierr))
 54:       PetscCall(ISDestroy(labelIS, ierr))
 55:       PetscCall(PetscViewerASCIIPrintf(viewer, '\n', ierr))
 56:     end do

 58:     PetscCall(PetscViewerASCIIPrintf(viewer,'\n\nCell Set label IS\n',ierr))
 59:     PetscCall(DMGetLabel(dm, 'Cell Sets', label, ierr))
 60:     PetscCall(DMLabelGetValueIS(label, labelIS, ierr))
 61:     PetscCall(ISView(labelIS, viewer, ierr))
 62:     PetscCall(ISDestroy(labelIS, ierr))
 63:   end subroutine viewLabels
 64: end program ex1F90

 66: !/*TEST
 67: !
 68: !  test:
 69: !    suffix: 0
 70: !    args: -i ${wPETSC_DIR}/share/petsc/datafiles/meshes/blockcylinder-50.exo -interpolate
 71: !    requires: exodusii
 72: !
 73: !TEST*/