subroutine hpcmw_eps_fvm_input_grid
      use hpcmw_eps_fvm_all
      implicit REAL*8 (A-H,O-Z)

      character(len=HPCMW_NAME_LEN) :: member
      character(len=80            ) :: LINE

!C 
!C +-------+
!C | FILES |
!C +-------+
!C===

      open (11, file='INPUT.DAT', status='unknown')
        read (11,'(a127)') HEADERgrid
        read (11,'(a127)') HEADERcomm
        read (11,'(a127)') AVSfile
        read (11,*) PVISFLAG
      close (11)


      allocate (hpcmw_eps_fvm_files(4))
      
      member= 'gridfile'
      call hpcmw_eps_fvm_define_file_name (member, HEADERgrid)

      member= 'commfile'
      call hpcmw_eps_fvm_define_file_name (member, HEADERcomm)
!C===


!C 
!C +------------+
!C | MESH INPUT |
!C +------------+
!C===
      IUNIT= 11
      open (IUNIT,file= hpcmw_eps_fvm_files(1), status='unknown')

!C
!C-- NODE
      read (IUNIT, '(10i10)') NODE_tot

      allocate (NODE_VOL(NODE_tot), NODE_COND(NODE_tot),                &
     &          NODE_XYZ(3*NODE_tot))

      do i= 1, NODE_tot
        read (IUNIT,'(i10,5e16.6)') ii, NODE_VOL(i), NODE_COND(i),      &
     &                              (NODE_XYZ(3*i-3+k), k=1, 3)
      enddo

!C
!C-- CONNECTION
      read (IUNIT,'(10i10)') CONN_tot
      allocate (CONN_NODE(2*CONN_tot), CONN_COEF(CONN_tot))
      do i= 1, CONN_tot
        read (IUNIT,'( 2i10, 3e16.6)') (CONN_NODE(2*i-2+k), k= 1, 2),   &
     &                                  AREA, D1, D2
        in1= CONN_NODE(2*i-1)
        in2= CONN_NODE(2*i  )
        C1 = NODE_COND(in1)
        C2 = NODE_COND(in2)
        CONN_COEF(i)= AREA / ( D1/C1 + D2/C2 )
      enddo

!C
!C-- DIRICHLET
      read (IUNIT,'(10i10)') FIX_NODE_tot
      allocate (FIX_NODE_ID(FIX_NODE_tot), FIX_NODE_COEF(FIX_NODE_tot))
      allocate (FIX_NODE_VAL(FIX_NODE_tot))

      do i= 1, FIX_NODE_tot
        read (IUNIT, '(i10, 3e16.6)')                                   &
     &        FIX_NODE_ID(i), AREA, DIST, FIX_NODE_VAL(i)
        icel= FIX_NODE_ID(i)
        COND= NODE_COND(icel)
        FIX_NODE_COEF(i)= AREA / (DIST/COND)
      enddo

!C
!C-- NEUMANN
      read (IUNIT,'(10i10)') SURF_NODE_tot
      allocate                                                          &
     &  (SURF_NODE_ID  (SURF_NODE_tot), SURF_NODE_FLUX(SURF_NODE_tot))

      do i= 1, SURF_NODE_tot
        read (IUNIT, '(i10, 3e16.6)') SURF_NODE_ID(i), AREA, FLUX 
        SURF_NODE_FLUX(i)= AREA*FLUX
      enddo

!C
!C-- BODY FLUX
      read (IUNIT,'(10i10)') BODY_NODE_tot

      allocate (BODY_NODE_FLUX(NODE_tot))
      BODY_FLUX= 0.d0
      do i= 1, BODY_NODE_tot
        read (IUNIT, '(i10, 3e16.6)') icel, FLUX
        BODY_NODE_FLUX(icel)= FLUX * NODE_VOL(icel) 
      enddo

      close (IUNIT)
!C===

!C 
!C +------------+
!C | COMM INPUT |
!C +------------+
!C===
      IUNIT= 12
      open (IUNIT,file= hpcmw_eps_fvm_files(4), status='unknown')

      read (IUNIT,'(a)') LINE
      read (IUNIT,'(6i12)') n_neighbor_pe

      allocate (neighbor_pe(n_neighbor_pe))
      allocate (import_index(0:n_neighbor_pe))
      allocate (export_index(0:n_neighbor_pe))

      import_index= 0
      export_index= 0

      read (IUNIT,'(a)') LINE
      read (IUNIT,'(6i12)') (neighbor_pe(k), k= 1, n_neighbor_pe)


      read (IUNIT,'(a)') LINE
      read (IUNIT,'(6i12)') (import_index(k), k= 1, n_neighbor_pe)
      nn= import_index(n_neighbor_pe)
      allocate (import_item(nn))
      read (IUNIT,'(a)') LINE
      read (IUNIT,'(6i12)') (import_item(k), k= 1, nn)

      read (IUNIT,'(a)') LINE
      read (IUNIT,'(6i12)') (export_index(k), k= 1, n_neighbor_pe)
      nn= export_index(n_neighbor_pe)
      allocate (export_item(nn))
      read (IUNIT,'(a)') LINE
      read (IUNIT,'(6i12)') (export_item(k), k= 1, nn)

      read (IUNIT,'(a)') LINE
      read (IUNIT,'(6i12)') intNODE_tot

      read (IUNIT,'(a)') LINE
      read (IUNIT,'(6i12)') nn

      allocate (NODE_GLOBAL(nn))
      read (IUNIT,'(a)') LINE
      read (IUNIT,'(6i12)') (NODE_GLOBAL(k), k= 1, nn)
     
      close (IUNIT)
!C===

      end subroutine hpcmw_eps_fvm_input_grid