program ex1f90 #include use petscdm use petscdmlabel implicit NONE type(tDM) :: dm, dmDist character(len=PETSC_MAX_PATH_LEN) :: filename PetscBool :: interpolate = PETSC_FALSE PetscBool :: flg PetscErrorCode :: ierr PetscInt :: izero izero = 0 call PetscInitialize(PETSC_NULL_CHARACTER,ierr) if (ierr .ne. 0) then print*,'Unable to initialize PETSc' stop endif call PetscOptionsGetString(PETSC_NULL_OPTIONS,PETSC_NULL_CHARACTER,"-i",filename,flg,ierr);CHKERRA(ierr) call PetscOptionsGetBool(PETSC_NULL_OPTIONS,PETSC_NULL_CHARACTER,"-interpolate",interpolate,flg,ierr);CHKERRA(ierr) call DMPlexCreateFromFile(PETSC_COMM_WORLD,filename,interpolate,dm,ierr);CHKERRA(ierr) call DMPlexDistribute(dm,izero,PETSC_NULL_SF,dmDist,ierr);CHKERRA(ierr) if (dmDist /= PETSC_NULL_DM) then call DMDestroy(dm,ierr);CHKERRA(ierr) dm = dmDist end if call ViewLabels(dm,PETSC_VIEWER_STDOUT_WORLD,ierr);CHKERRA(ierr) call DMDestroy(dm,ierr);CHKERRA(ierr) call PetscFinalize(ierr) contains subroutine ViewLabels(dm,viewer,ierr) type(tDM) :: dm type(tPetscViewer) :: viewer PetscErrorCode :: ierr DMLabel :: label type(tIS) :: labelIS character(len=PETSC_MAX_PATH_LEN):: labelName,IObuffer PetscInt :: numLabels,l call DMGetNumLabels(dm, numLabels, ierr);CHKERRQ(ierr); write(IObuffer,*) 'Number of labels: ', numLabels, '\n' call PetscViewerASCIIPrintf(viewer, IObuffer, ierr);CHKERRQ(ierr) do l = 0, numLabels-1 call DMGetLabelName(dm, l, labelName, ierr);CHKERRQ(ierr) write(IObuffer,*) 'label ',l,' name: ',trim(labelName),'\n' call PetscViewerASCIIPrintf(viewer, IObuffer, ierr);CHKERRQ(ierr) call PetscViewerASCIIPrintf(viewer, "IS of values\n", ierr);CHKERRQ(ierr) call DMGetLabel(dm, labelName, label, ierr);CHKERRQ(ierr) call DMLabelGetValueIS(label, labelIS, ierr);CHKERRQ(ierr) ! call PetscViewerASCIIPushTab(viewer,ierr);CHKERRQ(ierr) call ISView(labelIS, viewer, ierr);CHKERRQ(ierr) ! call PetscViewerASCIIPopTab(viewer,ierr);CHKERRQ(ierr) call ISDestroy(labelIS, ierr);CHKERRQ(ierr) call PetscViewerASCIIPrintf(viewer, "\n", ierr);CHKERRQ(ierr) end do call PetscViewerASCIIPrintf(viewer,"\n\nCell Set label IS\n",ierr);CHKERRQ(ierr) call DMGetLabel(dm, "Cell Sets", label, ierr);CHKERRQ(ierr) call DMLabelGetValueIS(label, labelIS, ierr);CHKERRQ(ierr) call ISView(labelIS, viewer, ierr);CHKERRQ(ierr) call ISDestroy(labelIS, ierr);CHKERRQ(ierr) end subroutine viewLabels end program ex1F90 !/*TEST ! ! test: ! suffix: 0 ! args: -i ${wPETSC_DIR}/share/petsc/datafiles/meshes/blockcylinder-50.exo -interpolate ! requires: exodusii ! !TEST*/