SUBROUTINE open_phdf5_for_write(filename,sysdepinfo,Hndl,initialized,ireturn) 1,1
  IMPLICIT NONE

  CHARACTER(*), INTENT(IN)  :: filename
  CHARACTER(*), INTENT(IN)  :: sysdepinfo
  LOGICAL,      INTENT(IN)  :: initialized
  INTEGER,      INTENT(OUT) :: Hndl
  INTEGER,      INTENT(OUT) :: ireturn

  INCLUDE  'mpif.h'
  
  INTEGER :: Comm_compute , Comm_io

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code .....
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  Comm_compute = MPI_COMM_WORLD
  Comm_io      = MPI_COMM_WORLD

  IF(.NOT. initialized) CALL ext_phdf5_ioinit(sysdepinfo,ireturn)
  CALL ext_phdf5_open_for_write_begin(FileName, Comm_compute, Comm_io,  &
                     SysDepInfo, Hndl, ireturn)

  CALL ext_phdf5_open_for_write_commit ( Hndl , ireturn )

 RETURN
END SUBROUTINE open_phdf5_for_write


SUBROUTINE  close_phdf5_for_write(Hndl,ireturn) 1

  IMPLICIT NONE
  INTEGER, INTENT(IN)  :: Hndl
  INTEGER, INTENT(OUT) :: ireturn

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code .....
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  CALL ext_phdf5_ioclose( Hndl, ireturn )

  RETURN
END SUBROUTINE close_phdf5_for_write


SUBROUTINE shutdown_phdf5_io(ireturn) 2
  IMPLICIT NONE
  INTEGER, INTENT(OUT) :: ireturn

  CALL ext_phdf5_ioexit(ireturn)
  RETURN
END SUBROUTINE


SUBROUTINE put_phdf5_dom_ti_char(Hndl,attname,attstr,ireturn) 1

  IMPLICIT NONE
  INTEGER,      INTENT(IN)  :: Hndl
  CHARACTER(*), INTENT(IN)  :: attname
  CHARACTER(*), INTENT(IN)  :: attstr
  INTEGER,      INTENT(OUT) :: ireturn

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code .....
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  CALL ext_phdf5_put_dom_ti_char(Hndl,TRIM(attname),TRIM(attstr),ireturn)

  RETURN
END SUBROUTINE put_phdf5_dom_ti_char


SUBROUTINE put_phdf5_dom_ti_integer(Hndl,attname,attval,ireturn) 1

  IMPLICIT NONE
  INTEGER,      INTENT(IN)  :: Hndl
  CHARACTER(*), INTENT(IN)  :: attname
  INTEGER,      INTENT(IN)  :: attval
  INTEGER,      INTENT(OUT) :: ireturn

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code .....
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  CALL ext_phdf5_put_dom_ti_integer(Hndl,TRIM(attname),attval,1,ireturn)

  RETURN
END SUBROUTINE put_phdf5_dom_ti_integer


SUBROUTINE put_phdf5_dom_ti_real(Hndl,attname,attval,attsiz,ireturn) 2

  IMPLICIT NONE
  INTEGER,      INTENT(IN)  :: Hndl
  CHARACTER(*), INTENT(IN)  :: attname
  REAL,         INTENT(IN)  :: attval
  INTEGER,      INTENT(IN)  :: attsiz
  INTEGER,      INTENT(OUT) :: ireturn

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code .....
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  CALL ext_phdf5_put_dom_ti_real(Hndl,TRIM(attname),attval,attsiz,ireturn)

  RETURN
END SUBROUTINE put_phdf5_dom_ti_real


SUBROUTINE put_phdf5_dom_td_char(Hndl,varname,CurrDate,DateStr,ireturn) 1

  IMPLICIT NONE

  INTEGER,      INTENT(IN)  :: Hndl
  CHARACTER(*), INTENT(IN)  :: varname
  CHARACTER(*), INTENT(IN)  :: CurrDate
  CHARACTER(*), INTENT(IN)  :: DateStr
  INTEGER,      INTENT(OUT) :: ireturn

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code .....
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  CALL ext_phdf5_put_dom_td_char(Hndl,varname,CurrDate(1:19),           &
                                 DateStr(1:19),ireturn)

  RETURN
END SUBROUTINE put_phdf5_dom_td_char


SUBROUTINE write_phdf5_field(Hndl,DateStr,VarName,Desc,Units,Stagger,   & 5
                             Field,FieldType, DomainDesc,               &
                             MemoryOrder,DimNames,                      &
                             DomainStart,DomainEnd,                     &
                             MemoryStart,MemoryEnd,                     &
                             PatchStart,PatchEnd, ireturn)
  IMPLICIT NONE

  INTEGER,       INTENT(IN)  :: Hndl
  CHARACTER*(*), INTENT(IN)  :: DateStr
  CHARACTER*(*), INTENT(IN)  :: VarName
  CHARACTER*(*), INTENT(IN)  :: Desc
  CHARACTER*(*), INTENT(IN)  :: Units
  CHARACTER*(*), INTENT(IN)  :: Stagger

  INTEGER,       INTENT(IN)  :: Field
  INTEGER,       INTENT(IN)  :: FieldType
  INTEGER,       INTENT(IN)  :: DomainDesc
  CHARACTER*(*), INTENT(IN)  :: MemoryOrder
  CHARACTER*(*), INTENT(IN)  :: DimNames
  INTEGER,       INTENT(IN)  :: DomainStart(3), DomainEnd(3)
  INTEGER,       INTENT(IN)  :: MemoryStart(3), MemoryEnd(3)
  INTEGER,       INTENT(IN)  :: PatchStart(3),  PatchEnd(3)
  INTEGER,       INTENT(OUT) :: ireturn

  INCLUDE  'mpif.h'

  INTEGER  :: Comm, IOComm

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code ... ...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  Comm   = MPI_COMM_WORLD
  IOComm = MPI_COMM_WORLD

  CALL ext_phdf5_write_field( Hndl , DateStr , VarName ,                &
                              Field , FieldType , Comm , IOComm ,       &
                              DomainDesc , MemoryOrder , Stagger , DimNames , &
                              DomainStart, DomainEnd,                   &
                              MemoryStart, MemoryEnd,                   &
                              PatchStart,  PatchEnd,                    &
                              ireturn )
  IF (ireturn /= 0) WRITE(0,*) 'ERROR in ext_phdf5_write_field for ',VarName

  CALL ext_phdf5_put_var_ti_char(Hndl,'description',Varname,Desc,ireturn)
  IF (ireturn /= 0) WRITE(0,*) 'ERROR in ext_phdf5_put_var_ti_char,     &
                              & description for ',VarName

  CALL ext_phdf5_put_var_ti_char(Hndl,'units',      Varname,Units, ireturn )
  IF (ireturn /= 0) WRITE(0,*) 'ERROR in ext_phdf5_put_var_ti_char,     &
                              & units for ',VarName

  CALL ext_phdf5_put_var_ti_char(Hndl,'stagger',    Varname,Stagger,ireturn)
  IF (ireturn /= 0) WRITE(0,*) 'ERROR in ext_phdf5_put_var_ti_char,     &
                              & stagger for ',VarName

  RETURN
END SUBROUTINE write_phdf5_field


SUBROUTINE write_phdf5_bdy(Hndl,DateStr,VarName,Desc,Units,Stagger,   & 8
                             Field,FieldType, DomainDesc,               &
                             MemoryOrder,DimNames,                      &
                             DomainStart,DomainEnd,                     &
                             MemoryStart,MemoryEnd,                     &
                             PatchStart,PatchEnd,                       &
                             IOFLAG, ireturn)
  IMPLICIT NONE

  INTEGER,       INTENT(IN)  :: Hndl
  CHARACTER*(*), INTENT(IN)  :: DateStr
  CHARACTER*(*), INTENT(IN)  :: VarName
  CHARACTER*(*), INTENT(IN)  :: Desc
  CHARACTER*(*), INTENT(IN)  :: Units
  CHARACTER*(*), INTENT(IN)  :: Stagger

  INTEGER,       INTENT(IN)  :: Field
  INTEGER,       INTENT(IN)  :: FieldType
  INTEGER,       INTENT(IN)  :: DomainDesc
  CHARACTER*(*), INTENT(IN)  :: MemoryOrder
  CHARACTER*(*), INTENT(IN)  :: DimNames
  INTEGER,       INTENT(IN)  :: DomainStart(3), DomainEnd(3)
  INTEGER,       INTENT(IN)  :: MemoryStart(3), MemoryEnd(3)
  INTEGER,       INTENT(IN)  :: PatchStart(3),  PatchEnd(3)
  LOGICAL,       INTENT(IN)  :: IOFLAG
  INTEGER,       INTENT(OUT) :: ireturn

  INCLUDE  'mpif.h'

  INTEGER  :: Comm, IOComm

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Begin of executable code ... ...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  Comm   = MPI_COMM_WORLD
  IOComm = MPI_COMM_WORLD

  CALL ext_phdf5_write_bdy( Hndl , DateStr , VarName ,                &
                            Field , FieldType , Comm , IOComm ,       &
                            DomainDesc , MemoryOrder , Stagger , DimNames , &
                            DomainStart, DomainEnd,                   &
                            MemoryStart, MemoryEnd,                   &
                            PatchStart,  PatchEnd,                    &
                            IOFLAG,      ireturn )
  IF (ireturn /= 0) WRITE(0,*) 'ERROR in ext_phdf5_write_field for ',VarName

  CALL ext_phdf5_put_var_ti_char(Hndl,'description',Varname,Desc,ireturn)
  IF (ireturn /= 0) WRITE(0,*) 'ERROR in ext_phdf5_put_var_ti_char,     &
                              & description for ',VarName

  CALL ext_phdf5_put_var_ti_char(Hndl,'units',      Varname,Units, ireturn )
  IF (ireturn /= 0) WRITE(0,*) 'ERROR in ext_phdf5_put_var_ti_char,     &
                              & units for ',VarName

  CALL ext_phdf5_put_var_ti_char(Hndl,'stagger',    Varname,Stagger,ireturn)
  IF (ireturn /= 0) WRITE(0,*) 'ERROR in ext_phdf5_put_var_ti_char,     &
                              & stagger for ',VarName

  RETURN
END SUBROUTINE write_phdf5_bdy