149c89c76SBlaise Bourdinprogram ex95f90 249c89c76SBlaise Bourdin#include "petsc/finclude/petsc.h" 349c89c76SBlaise Bourdin use petsc 449c89c76SBlaise Bourdin implicit none 549c89c76SBlaise Bourdin#include "exodusII.inc" 649c89c76SBlaise Bourdin 749c89c76SBlaise Bourdin ! Get the Fortran kind associated with PetscInt and PetscReal so that we can use literal constants. 849c89c76SBlaise Bourdin PetscInt :: dummyPetscInt 949c89c76SBlaise Bourdin PetscReal :: dummyPetscreal 1049c89c76SBlaise Bourdin PetscBool :: flg 1149c89c76SBlaise Bourdin integer,parameter :: kPI = kind(dummyPetscInt) 1249c89c76SBlaise Bourdin integer,parameter :: kPR = kind(dummyPetscReal) 1349c89c76SBlaise Bourdin integer :: nNodalVar = 4 1449c89c76SBlaise Bourdin integer :: nZonalVar = 3 1549c89c76SBlaise Bourdin integer :: i 1649c89c76SBlaise Bourdin 1749c89c76SBlaise Bourdin PetscErrorCode :: ierr 1849c89c76SBlaise Bourdin type(tDM) :: dm, pdm 1949c89c76SBlaise Bourdin character(len=PETSC_MAX_PATH_LEN) :: ifilename,ofilename,IOBuffer 200a5cf5d8SBlaise Bourdin PetscInt :: order = 1 2149c89c76SBlaise Bourdin type(tPetscViewer) :: viewer 2249c89c76SBlaise Bourdin character(len = MXNAME),dimension(4) :: nodalVarName = ["U_x ", & 2349c89c76SBlaise Bourdin "U_y ", & 2449c89c76SBlaise Bourdin "Alpha", & 2549c89c76SBlaise Bourdin "Beta "] 2649c89c76SBlaise Bourdin character(len = MXNAME),dimension(3) :: zonalVarName = ["Sigma_11", & 2749c89c76SBlaise Bourdin "Sigma_12", & 2849c89c76SBlaise Bourdin "Sigma_22"] 2949c89c76SBlaise Bourdin character(len = MXNAME) :: varName 3049c89c76SBlaise Bourdin 3149c89c76SBlaise Bourdin PetscCallA(PetscInitialize(PETSC_NULL_CHARACTER,ierr)) 3249c89c76SBlaise Bourdin if (ierr /= 0) then 3349c89c76SBlaise Bourdin print*,'Unable to initialize PETSc' 3449c89c76SBlaise Bourdin stop 3549c89c76SBlaise Bourdin endif 3649c89c76SBlaise Bourdin 3749c89c76SBlaise Bourdin PetscCallA(PetscOptionsBegin(PETSC_COMM_WORLD,PETSC_NULL_CHARACTER,'PetscViewer_ExodusII test','ex95f90',ierr)) 38*ccfd86f1SBarry Smith PetscCallA(PetscOptionsString("-i", "Filename to read", "ex95f90", ifilename, ifilename, flg, ierr)) 3949c89c76SBlaise Bourdin PetscCheckA(flg,PETSC_COMM_WORLD,PETSC_ERR_ARG_OUTOFRANGE,'missing input file name -i <input file name>') 40*ccfd86f1SBarry Smith PetscCallA(PetscOptionsString("-o", "Filename to write", "ex95f90", ofilename, ofilename, flg, ierr)) 4149c89c76SBlaise Bourdin PetscCheckA(flg,PETSC_COMM_WORLD,PETSC_ERR_ARG_OUTOFRANGE,'missing output file name -o <output file name>') 4249c89c76SBlaise Bourdin PetscCallA(PetscOptionsEnd(ierr)) 4349c89c76SBlaise Bourdin 4449c89c76SBlaise Bourdin ! Read the mesh in any supported format 4549c89c76SBlaise Bourdin PetscCallA(DMPlexCreateFromFile(PETSC_COMM_WORLD, ifilename,PETSC_NULL_CHARACTER,PETSC_TRUE,dm,ierr)) 46*ccfd86f1SBarry Smith PetscCallA(DMPlexDistributeSetDefault(dm, PETSC_FALSE,ierr)) 47*ccfd86f1SBarry Smith PetscCallA(DMSetFromOptions(dm,ierr)) 48*ccfd86f1SBarry Smith PetscCallA(PetscObjectSetName(dm, "ex95f90", ierr)) 49*ccfd86f1SBarry Smith PetscCallA(DMViewFromOptions(dm, PETSC_NULL_OBJECT,'-dm_view',ierr)) 5049c89c76SBlaise Bourdin 5149c89c76SBlaise Bourdin ! enable exodus debugging information 5249c89c76SBlaise Bourdin#ifdef PETSC_USE_DEBUG 5349c89c76SBlaise Bourdin PetscCallA(exopts(EXVRBS+EXDEBG,ierr)) 5449c89c76SBlaise Bourdin#endif 5549c89c76SBlaise Bourdin 5649c89c76SBlaise Bourdin ! Create the exodus file 5749c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIIOpen(PETSC_COMM_WORLD,ofilename,FILE_MODE_WRITE,viewer,ierr)) 5849c89c76SBlaise Bourdin 5949c89c76SBlaise Bourdin ! Save the geometry to the file, erasing all previous content 6049c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIISetOrder(viewer,order,ierr)) 6149c89c76SBlaise Bourdin PetscCallA(DMView(dm,viewer,ierr)) 6249c89c76SBlaise Bourdin PetscCallA(PetscViewerView(viewer,PETSC_VIEWER_STDOUT_WORLD,ierr)) 6349c89c76SBlaise Bourdin PetscCall(PetscViewerFlush(viewer,ierr)) 6449c89c76SBlaise Bourdin 6549c89c76SBlaise Bourdin PetscCallA(DMPlexDistribute(dm,0_kPI,PETSC_NULL_SF,pdm,ierr)) 6649c89c76SBlaise Bourdin if (pdm /= PETSC_NULL_DM) Then 6749c89c76SBlaise Bourdin pdm = dm 6849c89c76SBlaise Bourdin end if 6949c89c76SBlaise Bourdin 7049c89c76SBlaise Bourdin ! Testing Variable Number 7149c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIISetZonalVariable(viewer, nZonalVar, ierr)) 7249c89c76SBlaise Bourdin nZonalVar = -1 7349c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIIGetZonalVariable(viewer, nZonalVar, ierr)) 7449c89c76SBlaise Bourdin Write(IOBuffer,'("Number of zonal variables:", I2,"\n")') nZonalVar 7549c89c76SBlaise Bourdin PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr)) 7649c89c76SBlaise Bourdin 7749c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIISetNodalVariable(viewer, nNodalVar, ierr)) 7849c89c76SBlaise Bourdin nNodalVar = -1 7949c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIIGetNodalVariable(viewer, nNodalVar, ierr)) 8049c89c76SBlaise Bourdin Write(IOBuffer,'("Number of nodal variables:", I2,"\n")') nNodalVar 8149c89c76SBlaise Bourdin PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr)) 8249c89c76SBlaise Bourdin PetscCallA(PetscViewerView(viewer, PETSC_VIEWER_STDOUT_WORLD, ierr)) 8349c89c76SBlaise Bourdin 8449c89c76SBlaise Bourdin ! Test of PetscViewerExodusIISet[Nodal/Zonal]VariableName 8549c89c76SBlaise Bourdin PetscCallA(PetscPrintf(PETSC_COMM_WORLD, "Testing PetscViewerExodusIISet[Nodal/Zonal]VariableName\n", ierr)) 8649c89c76SBlaise Bourdin do i = 1, nZonalVar 8749c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIISetZonalVariableName(viewer, i-1, zonalVarName(i), ierr)) 8849c89c76SBlaise Bourdin end do 8949c89c76SBlaise Bourdin do i = 1, nNodalVar 9049c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIISetNodalVariableName(viewer, i-1, nodalVarName(i), ierr)) 9149c89c76SBlaise Bourdin end do 9249c89c76SBlaise Bourdin PetscCall(PetscViewerFlush(viewer,ierr)) 9349c89c76SBlaise Bourdin PetscCallA(PetscViewerView(viewer, PETSC_VIEWER_STDOUT_WORLD, ierr)) 9449c89c76SBlaise Bourdin 9549c89c76SBlaise Bourdin do i = 1, nZonalVar 9649c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIIGetZonalVariableName(viewer, i-1, varName, ierr)) 9749c89c76SBlaise Bourdin Write(IOBuffer,'(" zonal variable:", I2,": ",A,"\n")') i,varName 9849c89c76SBlaise Bourdin PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr)) 9949c89c76SBlaise Bourdin end do 10049c89c76SBlaise Bourdin do i = 1, nNodalVar 10149c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIIGetNodalVariableName(viewer, i-1, varName, ierr)) 10249c89c76SBlaise Bourdin Write(IOBuffer,'(" nodal variable:", I2,": ",A,"\n")') i,varName 10349c89c76SBlaise Bourdin PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr)) 10449c89c76SBlaise Bourdin end do 10549c89c76SBlaise Bourdin PetscCallA(PetscViewerDestroy(viewer, ierr)) 10649c89c76SBlaise Bourdin 10749c89c76SBlaise Bourdin ! Test of PetscViewerExodusIIGet[Nodal/Zonal]VariableName 10849c89c76SBlaise Bourdin nZonalVar = -1 10949c89c76SBlaise Bourdin nNodalVar = -1 11049c89c76SBlaise Bourdin PetscCallA(PetscPrintf(PETSC_COMM_WORLD, "\n\nReopenning the output file in Read-only mode\n", ierr)) 11149c89c76SBlaise Bourdin PetscCallA(PetscPrintf(PETSC_COMM_WORLD, "Testing PetscViewerExodusIIGet[Nodal/Zonal]VariableName\n", ierr)) 11249c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIIOpen(PETSC_COMM_WORLD, ofilename, FILE_MODE_APPEND, viewer, ierr)) 11349c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIISetOrder(viewer, order, ierr)) 11449c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIIGetZonalVariable(viewer, nZonalVar, ierr)) 11549c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIIGetNodalVariable(viewer, nNodalVar, ierr)) 11649c89c76SBlaise Bourdin 11749c89c76SBlaise Bourdin do i = 1, nZonalVar 11849c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIIGetZonalVariableName(viewer, i-1, varName, ierr)) 11949c89c76SBlaise Bourdin Write(IOBuffer,'(" zonal variable:", I2,": ",A,"\n")') i,varName 12049c89c76SBlaise Bourdin PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr)) 12149c89c76SBlaise Bourdin end do 12249c89c76SBlaise Bourdin do i = 1, nNodalVar 12349c89c76SBlaise Bourdin PetscCallA(PetscViewerExodusIIGetNodalVariableName(viewer, i-1, varName, ierr)) 12449c89c76SBlaise Bourdin Write(IOBuffer,'(" nodal variable:", I2,": ",A,"\n")') i,varName 12549c89c76SBlaise Bourdin PetscCallA(PetscPrintf(PETSC_COMM_WORLD,IOBuffer,ierr)) 12649c89c76SBlaise Bourdin end do 12749c89c76SBlaise Bourdin 12849c89c76SBlaise Bourdin PetscCallA(DMDestroy(dm,ierr)) 12949c89c76SBlaise Bourdin PetscCallA(PetscViewerDestroy(viewer, ierr)) 13049c89c76SBlaise Bourdin PetscCallA(PetscFinalize(ierr)) 13149c89c76SBlaise Bourdinend program ex95f90 13249c89c76SBlaise Bourdin 13349c89c76SBlaise Bourdin/*TEST 13449c89c76SBlaise Bourdin 13549c89c76SBlaise Bourdin build: 13649c89c76SBlaise Bourdin requires: exodusii pnetcdf !complex 13749c89c76SBlaise Bourdin test: 13849c89c76SBlaise Bourdin suffix: 0 13949c89c76SBlaise Bourdin nsize: 1 14049c89c76SBlaise Bourdin args: -i ${wPETSC_DIR}/share/petsc/datafiles/meshes/FourSquareT-large.exo -o FourSquareT-large_out.exo 14149c89c76SBlaise Bourdin 14249c89c76SBlaise BourdinTEST*/ 143