quantum-espresso/Modules/io_global.f90

138 lines
3.8 KiB
Fortran

!
! Copyright (C) 2002-2004 FPMD & PWSCF group
! This file is distributed under the terms of the
! GNU General Public License. See the file `License'
! in the root directory of the present distribution,
! or http://www.gnu.org/copyleft/gpl.txt .
!
!----------------------------------------------------------------------------
MODULE io_global
!----------------------------------------------------------------------------
!
IMPLICIT NONE
!
PRIVATE
SAVE
!
PUBLIC :: io_global_start, meta_io_global_start, io_global_getionode, io_global_getmeta
PUBLIC :: stdout, ionode, ionode_id, meta_ionode, meta_ionode_id
PUBLIC :: xmlinputunit, xmloutputunit, xmltmpunit
!
INTEGER :: stdout = 6 ! unit connected to standard output
INTEGER :: ionode_id = 0 ! index of the i/o node
LOGICAL :: ionode = .TRUE. ! identifies the i/o node
INTEGER :: meta_ionode_id = 0 ! index of the i/o node for meta-codes
LOGICAL :: meta_ionode = .TRUE. ! identifies the i/o node for meta-codes
LOGICAL :: first = .TRUE.
INTEGER :: xmlinputunit ! unit connected to the xml input
INTEGER :: xmloutputunit = 51 ! unit connected to the xml output
INTEGER :: xmltmpunit = 52 ! unit connected to the temp xml output
!
CONTAINS
!
!-----------------------------------------------------------------------
SUBROUTINE io_global_start( mpime, ionode_set )
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
INTEGER, INTENT(IN) :: mpime, ionode_set
!
!
IF ( mpime == ionode_set ) THEN
!
ionode = .TRUE.
!
ELSE
!
ionode = .FALSE.
!
END IF
!
ionode_id = ionode_set
!
first = .FALSE.
!
RETURN
!
END SUBROUTINE io_global_start
!
!-----------------------------------------------------------------------
SUBROUTINE meta_io_global_start( mpime, ionode_set )
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
INTEGER, INTENT(IN) :: mpime, ionode_set
!
!
IF ( mpime == ionode_set ) THEN
!
meta_ionode = .TRUE.
!
ELSE
!
meta_ionode = .FALSE.
!
END IF
!
meta_ionode_id = ionode_set
!
first = .FALSE.
!
RETURN
!
END SUBROUTINE meta_io_global_start
!
!
!
!-----------------------------------------------------------------------
SUBROUTINE io_global_getionode( ionode_out, ionode_id_out )
!-----------------------------------------------------------------------
!
IMPLICIT NONE
!
LOGICAL, INTENT(OUT) :: ionode_out
INTEGER, INTENT(OUT) :: ionode_id_out
!
!
IF ( first ) &
CALL errore( ' io_global_getionode ', ' ionode not yet defined ', 1 )
!
ionode_out = ionode
ionode_id_out = ionode_id
!
RETURN
!
END SUBROUTINE io_global_getionode
!
!
!-----------------------------------------------------------------------
SUBROUTINE io_global_getmeta( myrank, root )
!-----------------------------------------------------------------------
!
! ... writes in module variables meta_ionode_id and meta_ionode
!
IMPLICIT NONE
!
INTEGER, INTENT(IN) :: myrank, root
!
!
IF(myrank == root) THEN
!
meta_ionode = .true.
!
ELSE
meta_ionode = .false.
!
ENDIF
!
meta_ionode_id = root
!
RETURN
!
END SUBROUTINE io_global_getmeta
!
!
END MODULE io_global