1#include "petsc/finclude/petsc.h" 2program ex97f90 3 use petsc 4 implicit none 5 6 ! Get the fortran kind associated with PetscInt and PetscReal so that we can use literal constants. 7 PetscInt :: dummyPetscInt 8 PetscReal :: dummyPetscreal 9 integer, parameter :: kPI = kind(dummyPetscInt) 10 integer, parameter :: kPR = kind(dummyPetscReal) 11 12 type(tDM) :: dm 13 type(tDMLabel) :: label 14 character(len=PETSC_MAX_PATH_LEN) :: ifilename, iobuffer 15 DMPolytopeType :: cellType 16 PetscInt :: pStart, pEnd, p 17 PetscErrorCode :: ierr 18 PetscBool :: flg 19 20 PetscCallA(PetscInitialize(ierr)) 21 22 PetscCallA(PetscOptionsGetString(PETSC_NULL_OPTIONS, PETSC_NULL_CHARACTER, '-i', ifilename, flg, ierr)) 23 PetscCheckA(flg, PETSC_COMM_WORLD, PETSC_ERR_ARG_OUTOFRANGE, 'missing input file name -i <input file name>') 24 25 PetscCallA(DMPlexCreateFromFile(PETSC_COMM_WORLD, ifilename, PETSC_NULL_CHARACTER, PETSC_TRUE, dm, ierr)) 26 PetscCallA(DMPlexDistributeSetDefault(dm, PETSC_FALSE, ierr)) 27 PetscCallA(PetscObjectSetName(dm, 'ex97f90', ierr)) 28 PetscCallA(DMSetFromOptions(dm, ierr)) 29 PetscCallA(DMViewFromOptions(dm, PETSC_NULL_OBJECT, '-dm_view', ierr)) 30 31 PetscCallA(DMGetLabel(dm, 'celltype', label, ierr)) 32 PetscCallA(DMLabelView(label, PETSC_VIEWER_STDOUT_WORLD, ierr)) 33 PetscCallA(DMPlexGetHeightStratum(dm, 0_kPI, pStart, pEnd, ierr)) 34 do p = pStart, pEnd - 1 35 PetscCallA(DMPlexGetCellType(dm, p, cellType, ierr)) 36 write (IOBuffer, '("cell: ",i3," type: ",i3,"\n")') p, cellType 37 PetscCallA(PetscPrintf(PETSC_COMM_SELF, IOBuffer, ierr)) 38 end do 39 PetscCallA(DMDestroy(dm, ierr)) 40 41 PetscCallA(PetscFinalize(ierr)) 42end program ex97f90 43 44! /*TEST 45! build: 46! requires: !complex 47! testset: 48! args: -i ${wPETSC_DIR}/share/petsc/datafiles/meshes/doublet-tet.msh -dm_view 49! nsize: 1 50! test: 51! suffix: 0 52! args: 53! TEST*/ 54