From ff370bdf050b8e0e4da42b99f157485acd5727cc Mon Sep 17 00:00:00 2001 From: cavazzon Date: Sat, 19 Jan 2008 11:20:06 +0000 Subject: [PATCH] - 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 --- PW/seqopn.f90 | 3 +- PW/startup.f90 | 184 +++++++++++++++++++++++++++++++++++++------------ 2 files changed, 141 insertions(+), 46 deletions(-) diff --git a/PW/seqopn.f90 b/PW/seqopn.f90 index 35684e0a4..7de5f67bc 100644 --- a/PW/seqopn.f90 +++ b/PW/seqopn.f90 @@ -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, diff --git a/PW/startup.f90 b/PW/startup.f90 index d99d2b6e9..5f747e155 100644 --- a/PW/startup.f90 +++ b/PW/startup.f90 @@ -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