interface
  Subroutine PetscFortranPrintToFileUnit(unit,str,ierr)
    use, intrinsic :: ISO_C_binding
    import tPetscViewer
    integer unit
    character(len=*), intent(in) :: str
    PetscErrorCode, intent(out):: ierr
  End Subroutine
  Subroutine PetscViewerASCIIOpenWithFileUnit(comm,unit,lab,ierr)
    use, intrinsic :: ISO_C_binding
    import tPetscViewer
    MPI_Comm, intent(in) :: comm
    integer, intent(in) :: unit
    PetscViewer, intent(out) :: lab
    PetscErrorCode, intent(out):: ierr
  End Subroutine
  Subroutine PetscViewerASCIISetFileUnit(lab,unit,ierr)
    use, intrinsic :: ISO_C_binding
    import tPetscViewer
    PetscViewer, intent(in) :: lab
    integer, intent(in) :: unit
    PetscErrorCode, intent(out):: ierr
  End Subroutine
end interface

Interface PetscViewerBinaryWrite
  Subroutine PetscViewerBinaryWriteInt(v,a,cnt,tmp,ierr)
    use, intrinsic :: ISO_C_binding
    import tPetscViewer
    PetscViewer v
    PetscInt a(*)
    PetscInt cnt
    PetscBool  tmp
    PetscErrorCode, intent(out):: ierr
  End Subroutine

  Subroutine PetscViewerBinaryWriteScalar(v,a,cnt,tmp,ierr)
    use, intrinsic :: ISO_C_binding
    import tPetscViewer
    PetscViewer v
    PetscScalar a(*)
    PetscInt cnt
    PetscBool  tmp
    PetscErrorCode, intent(out):: ierr
  End Subroutine

#if defined(PETSC_USE_COMPLEX)
  Subroutine PetscViewerBinaryWriteReal(v,a,cnt,tmp,ierr)
    use, intrinsic :: ISO_C_binding
    import tPetscViewer
    PetscViewer v
    PetscReal a(*)
    PetscInt cnt
    PetscBool  tmp
    PetscErrorCode, intent(out):: ierr
  End Subroutine
#endif
End Interface PetscViewerBinaryWrite

Interface PetscViewerBinaryRead
  Subroutine PetscViewerBinaryReadInt(v,a,cnt,ierr)
    use, intrinsic :: ISO_C_binding
    import tPetscViewer
    PetscViewer v
    PetscInt a(*)
    PetscInt cnt
    PetscErrorCode, intent(out):: ierr
  End Subroutine

  Subroutine PetscViewerBinaryReadScalar(v,a,cnt,ierr)
    use, intrinsic :: ISO_C_binding
    import tPetscViewer
    PetscViewer v
    PetscScalar a(*)
    PetscInt cnt
    PetscErrorCode, intent(out):: ierr
  End Subroutine

#if defined(PETSC_USE_COMPLEX)
  Subroutine PetscViewerBinaryReadReal(v,a,cnt,ierr)
    use, intrinsic :: ISO_C_binding
    import tPetscViewer
    PetscViewer v
    PetscReal a(*)
    PetscInt cnt
    PetscErrorCode, intent(out):: ierr
  End Subroutine
#endif
End Interface PetscViewerBinaryRead

interface PetscViewerHDF5WriteAttribute
subroutine PetscViewerHDF5WriteAttributeInt(viewer,parent,name,value,ierr)
  use, intrinsic :: ISO_C_binding
  import tPetscViewer
  PetscViewer :: viewer
  character(len=*), intent(in) :: parent,name
  PetscInt, intent(in) :: value
  PetscErrorCode, intent(out):: ierr
end subroutine PetscViewerHDF5WriteAttributeInt

subroutine PetscViewerHDF5WriteAttributeScalar(viewer,parent,name,value,ierr)
  use, intrinsic :: ISO_C_binding
  import tPetscViewer
  PetscViewer :: viewer
  character(len=*), intent(in) :: parent,name
  PetscScalar, intent(in) :: value
  PetscErrorCode, intent(out):: ierr
end subroutine PetscViewerHDF5WriteAttributeScalar

#if defined(PETSC_USE_COMPLEX)
subroutine PetscViewerHDF5WriteAttributeReal(viewer,parent,name,value,ierr)
  use, intrinsic :: ISO_C_binding
  import tPetscViewer
  PetscViewer :: viewer
  character(len=*), intent(in) :: parent,name
  PetscReal, intent(in) :: value
  PetscErrorCode, intent(out):: ierr
end subroutine PetscViewerHDF5WriteAttributeReal
#endif

end interface PetscViewerHDF5WriteAttribute
