!C
!C***
!C*** hpcmw_eps_fvm_global_output
!C***
!C
      subroutine hpcmw_eps_fvm_global_output
      use hpcmw_eps_fvm_all
      implicit REAL*8 (A-H,O-Z)

      integer, dimension(:), allocatable :: rcounts, displs
      integer, dimension(:), allocatable :: NODE_ID_G
      integer, dimension(:), allocatable :: NEWtoOLD
      real(kind=kreal), dimension(:), allocatable :: VAL
!C
!C-- INIT.
      allocate (rcounts(PETOT), displs(0:PETOT))
      rcounts= 0
      displs = 0


      call MPI_allGATHER                                                &
     &    (intNODE_tot, 1, MPI_INTEGER, rcounts, 1, MPI_INTEGER,        &
     &     MPI_COMM_WORLD, ierr)


      do ip= 1, PETOT
        displs(ip)= displs(ip-1) + rcounts(ip)
      enddo

      NODE_tot_G= displs(PETOT)

      allocate (NODE_ID_G(NODE_tot_G), NEWtoOLD(NODE_tot_G))
      allocate (VAL(NODE_tot_G))

!C
!C-- GLOBAL ARRAY
 

    call MPI_allGATHERv                                               &
     &    (NODE_GLOBAL, intNODE_tot,        MPI_INTEGER,                &
     &     NODE_ID_G  , rcounts, displs(0), MPI_INTEGER,                &
     &     MPI_COMM_WORLD, ierr)

      call MPI_allGATHERv                                               &
     &    (DELPHI, intNODE_tot,        MPI_DOUBLE_PRECISION,            &
     &     VAL   , rcounts, displs(0), MPI_DOUBLE_PRECISION,            &
     &     MPI_COMM_WORLD, ierr)


      if (my_rank.eq.0) then
        do i= 1, NODE_tot_G
          j= NODE_ID_G(i)
          NEWtoOLD(j)= i
        enddo

        IUNIT= 12
        open (IUNIT, file= AVSfile, status='unknown')
          do j= 1, NODE_tot_G
            ii= NEWtoOLD(j)
            write (IUNIT,'(i8,1pe16.6)') j, VAL(ii)
          enddo
        close (IUNIT)

      endif

      end subroutine hpcmw_eps_fvm_global_output