PROGRAM write_DG
!
! This program reads in a 3-D discontinuous Galerkin grid,
! reads in vertex ceneterd arrays on
! the grid, and then calls routines in the Rocketeer API 
! to write out HDF file Plot_T.hdf.
!
! Written by Robert Fiedler, 5/27/99.
! Modified by Nahil Sobh    8/23/00
! Modified by Robert Fiedler, 12/13/02
!
      USE mod_HDF_writer_API

      implicit NONE
!
      INTEGER        Number_Of_Elements  &
                   , Number_Of_Nodes

      CHARACTER*(10) filename     ! Name of the HDF file
      character*(12) infile       ! Input data file
      character*(32) long_name
      integer mesh, ios
      logical append

      INTEGER,      ALLOCATABLE :: Connectivity          (:,:)
      REAL(MYREAL), ALLOCATABLE :: xyz                   (:,:)  &
                            , Temperature_At_Center (:  )       &
                            , Temperature           (:  )

      CHARACTER*(8) time                   ! Physical problem time
!

      INTEGER node, element

      infile = 'input_560_70'
      OPEN(8,FILE=infile,IOSTAT=ios)
      IF (ios .ne. 0) THEN
        PRINT *,'write_DG requires file ',infile
        STOP
      ENDIF
      READ(8,*) filename
      READ(8,*) Number_Of_Nodes  &
              , Number_Of_Elements

      ALLOCATE( Connectivity(Number_Of_Elements,8 ) )
      ALLOCATE( xyz         (Number_Of_Nodes,3 ) )
      ALLOCATE( Temperature_At_Center        (  Number_Of_Elements) )
      ALLOCATE( Temperature        (  Number_Of_Nodes   ) )

      !----------------------------------------------------------------!
      ! Reads Nodal Coordinates and Temperature                        !
      !----------------------------------------------------------------!
      DO node=1, Number_Of_Nodes                                       !
          READ(8,*) xyz(node,:), Temperature(node)                     !
      END DO                                                           !
!      xyz(:,3) = xyz(:,3)/20.
      xyz(:,1) = xyz(:,1)/20.
      !----------------------------------------------------------------!

      !----------------------------------------------------------------!
      ! Reads Element Connectivity and calculates Average Temperature  !
      !----------------------------------------------------------------!
      DO element=1, Number_Of_Elements                                 !
                                                                       !
          READ(8,*) Connectivity(element,:)                            !
                Temperature_At_Center(element) =   &                   !
          SUM ( Temperature( Connectivity(element,:) )  ) / 8.0        !
                                                                       !
      END DO                                                           !
      !----------------------------------------------------------------!
 
! Write the HDF file

      write(time,'(F4.2)') 1.0
      mesh = 4  ! Discontinuous Galerkin
      append = .false.

! Write block header

      call w_block_header  &
       (filename, filename, 'block_001', time, 'iron', mesh, 0,  &
        0, append)
!
! Write geometry data
!
      call w_geometry_unstr  &
       (filename, filename, 'block_001', 'iron', 'm',  &
        'x', 'y', 'z', Number_Of_Nodes, 0, Number_Of_Elements, 8,  &
         Connectivity, xyz(:,1), xyz(:,2), xyz(:,3))
!
! Write scalar variable (cell centered)
!
      long_name = 'Avg. Temperature at time '//time

      call w_scalar_unstr  &
       (filename, long_name, 'Center_Temperature', 'oK',  &
        Number_Of_Elements, 0, Temperature_At_Center)

!
! Write scalar variable (vertex centered)
!
      long_name = 'Temperature at time '//time

      call w_scalar_unstr  &
       (filename, long_name, 'T', 'oK',  &
        Number_Of_Nodes, 0, temperature)

      end