- change of the dimension of variable nd_nmbr to allow

run with more than 1000 processors per image.
  Not an elegant solution to set nd_nmbr in startup.


git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@4636 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
cavazzon 2008-01-19 11:20:06 +00:00
parent d719120799
commit ff370bdf05
2 changed files with 141 additions and 46 deletions

View File

@ -53,7 +53,8 @@ subroutine seqopn (unit, extension, formatt, exst)
if (extension.eq.' ') call errore ('seqopn','filename extension not given',2)
filename = trim(prefix) // "." // trim(extension)
if ( trim(nd_nmbr) == '1' .or. trim(nd_nmbr) == '01'.or. &
trim(nd_nmbr) == '001') then
trim(nd_nmbr) == '001' .or. trim(nd_nmbr) == '0001'.or. &
trim(nd_nmbr) == '00001' .or. trim(nd_nmbr) == '000001' ) then
!
! do not add processor number to files opened by processor 1
! in parallel execution: if only the first processor writes,

View File

@ -59,7 +59,7 @@ SUBROUTINE startup( nd_nmbr, code, version )
!
IMPLICIT NONE
!
CHARACTER (LEN=3) :: nd_nmbr
CHARACTER (LEN=6) :: nd_nmbr
CHARACTER (LEN=6) :: version
CHARACTER (LEN=9) :: code, cdate, ctime
CHARACTER (LEN=80) :: np
@ -149,52 +149,9 @@ SUBROUTINE startup( nd_nmbr, code, version )
! ... set the processor label for files ( remember that
! ... me_image = 0 : ( nproc_image - 1 ) )
!
nd_nmbr = ' '
!
node_number = ( me_image + 1 )
!
IF ( nproc_image < 10 ) THEN
!
WRITE( nd_nmbr(1:1), '(I1)' ) node_number
!
ELSE IF ( nproc_image < 100 ) THEN
!
IF ( node_number < 10 ) THEN
!
nd_nmbr = '0'
!
WRITE( nd_nmbr(2:2), '(I1)' ) node_number
!
ELSE
!
WRITE( nd_nmbr(1:2), '(I2)' ) node_number
!
END IF
!
ELSEIF (nproc_image < 1000) THEN
!
IF ( node_number < 10 ) THEN
!
nd_nmbr = '00'
!
WRITE( nd_nmbr(3:3), '(I1)' ) node_number
!
ELSE IF ( node_number < 100 ) THEN
!
nd_nmbr = '0'
!
WRITE( nd_nmbr(2:3), '(I2)' ) node_number
!
ELSE
!
WRITE( nd_nmbr, '(I3)' ) node_number
!
END IF
ELSE
!
call errore('startup','too many nodes, correct startup', 1)
!
END IF
CALL set_nd_nmbr( nd_nmbr, node_number, nproc_image )
!
! ... stdout is printed only by the root_image ( set in init_pool() )
!
@ -254,4 +211,141 @@ SUBROUTINE startup( nd_nmbr, code, version )
!
RETURN
!
CONTAINS
!
SUBROUTINE set_nd_nmbr( nd_nmbr, node_number, nproc_image )
!
IMPLICIT NONE
!
CHARACTER(LEN=6), INTENT(OUT) :: nd_nmbr
INTEGER, INTENT(IN) :: node_number
INTEGER, INTENT(IN) :: nproc_image
!
nd_nmbr = ' '
!
IF ( nproc_image < 10 ) THEN
!
WRITE( nd_nmbr(1:1), '(I1)' ) node_number
!
ELSE IF ( nproc_image < 100 ) THEN
!
IF ( node_number < 10 ) THEN
!
nd_nmbr = '0'
!
WRITE( nd_nmbr(2:2), '(I1)' ) node_number
!
ELSE
!
WRITE( nd_nmbr(1:2), '(I2)' ) node_number
!
END IF
!
ELSEIF (nproc_image < 1000) THEN
!
nd_nmbr = '00'
!
IF ( node_number < 10 ) THEN
!
!
WRITE( nd_nmbr(3:3), '(I1)' ) node_number
!
ELSE IF ( node_number < 100 ) THEN
!
WRITE( nd_nmbr(2:3), '(I2)' ) node_number
!
ELSE
!
WRITE( nd_nmbr, '(I3)' ) node_number
!
END IF
!
ELSEIF (nproc_image < 10000) THEN
!
nd_nmbr = '000'
!
IF ( node_number < 10 ) THEN
!
WRITE( nd_nmbr(4:4), '(I1)' ) node_number
!
ELSE IF ( node_number < 100 ) THEN
!
WRITE( nd_nmbr(3:4), '(I2)' ) node_number
!
ELSE IF ( node_number < 1000 ) THEN
!
WRITE( nd_nmbr(2:4), '(I3)' ) node_number
!
ELSE
!
WRITE( nd_nmbr, '(I4)' ) node_number
!
END IF
!
ELSEIF (nproc_image < 100000) THEN
!
nd_nmbr = '0000'
!
IF ( node_number < 10 ) THEN
!
WRITE( nd_nmbr(5:5), '(I1)' ) node_number
!
ELSE IF ( node_number < 100 ) THEN
!
WRITE( nd_nmbr(4:5), '(I2)' ) node_number
!
ELSE IF ( node_number < 1000 ) THEN
!
WRITE( nd_nmbr(3:5), '(I3)' ) node_number
!
ELSE IF ( node_number < 10000 ) THEN
!
WRITE( nd_nmbr(2:5), '(I4)' ) node_number
!
ELSE
!
WRITE( nd_nmbr, '(I5)' ) node_number
!
END IF
!
ELSEIF (nproc_image < 1000000) THEN
!
nd_nmbr = '00000'
!
IF ( node_number < 10 ) THEN
!
WRITE( nd_nmbr(6:6), '(I1)' ) node_number
!
ELSE IF ( node_number < 100 ) THEN
!
WRITE( nd_nmbr(5:6), '(I2)' ) node_number
!
ELSE IF ( node_number < 1000 ) THEN
!
WRITE( nd_nmbr(4:6), '(I3)' ) node_number
!
ELSE IF ( node_number < 10000 ) THEN
!
WRITE( nd_nmbr(3:6), '(I4)' ) node_number
!
ELSE IF ( node_number < 100000 ) THEN
!
WRITE( nd_nmbr(2:6), '(I5)' ) node_number
!
ELSE
!
WRITE( nd_nmbr, '(I6)' ) node_number
!
END IF
!
ELSE
!
call errore('startup','too many nodes, correct startup', 1)
!
END IF
!
RETURN
!
END SUBROUTINE set_nd_nmbr
!
END SUBROUTINE startup