The TELEMAC-MASCARET system  trunk
p_init.F
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE p_init
3 ! *****************
4 !
5  &(chaine,ncar,ipid,ncsize)
6 !
7 !***********************************************************************
8 ! PARALLEL V6P3 21/08/2010
9 !***********************************************************************
10 !
11 !brief INITIALISES.
12 !+ REGISTERS PROGRAM WITH PARASTATION.
13 !
14 !history HANS HERRMANN (HANOVER)
15 !+ **/06/1996
16 !+
17 !+
18 !
19 !history REINHARD HINKELMANN (HANOVER)
20 !+ 08/06/1996
21 !+
22 !+ MODIFIED
23 !
24 !history J-M HERVOUET (LNH)
25 !+ 17/12/1996
26 !+
27 !+ MODIFIED
28 !
29 !history RAINER JOHANNI (SGI MUNICH)
30 !+ **/10/1999
31 !+
32 !+ ADAPTED FOR MPI
33 !
34 !history J.A. JANKOWSKI (BAW KARLSRUHE)
35 !+ 28/12/1999
36 !+
37 !+ RELEASE 5.0 MODIFIED
38 !
39 !history P. VEZOLLE (IBM)
40 !+ 16/05/2008
41 !+ V5P9
42 !+ MODIFIED (SIZE OF EXTENSION)
43 !
44 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
45 !+ 13/07/2010
46 !+ V6P0
47 !+ Translation of French comments within the FORTRAN sources into
48 !+ English comments
49 !
50 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
51 !+ 21/08/2010
52 !+ V6P0
53 !+ Creation of DOXYGEN tags for automated documentation and
54 !+ cross-referencing of the FORTRAN sources
55 !
56 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57 !| CHAINE |---| WORKING DIRECTORY
58 !| IPID |---| PROCESSUS ID
59 !| NCAR |---| SIZE OF THE CHARACTER STRING
60 !| NCSIZE |---| NUMBER OF MPI PROCESSUS
61 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62 !
65  IMPLICIT NONE
66 !
67 !
68 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
69 !
70  INTEGER, INTENT(OUT) :: NCAR,IPID,NCSIZE
71  CHARACTER(LEN=MAXLENTMPDIR), INTENT(OUT) :: CHAINE
72 !
73 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
74 !
75 #if defined HAVE_MPI
76  INTEGER IER,NPREAD
77 !
78  CHARACTER(LEN=MAXLENTMPDIR+5) EXE
79 !
80  LOGICAL YAPARA,INIT
81  INTEGER :: ID
82  CHARACTER(LEN=11) PNUMBER
83  CHARACTER(LEN=13) MYNAM
84 !
85 !-----------------------------------------------------------------------
86 ! MPI IS SILENT WHEN EVERYTHING IS GOING ON PROPERLY
87 ! DEFAULT LANGUAGE 2 AND STANDARD OUTPUT 6
88 ! IN ORDER TO SEE ERROR MESSAGES (TO THE MASTER!)
89 ! THE SUBROUTINE CALLED NEXT IS READ_CONFIG !
90 ! THIS IS NOT PRETTY...
91 !
92  ncar = 0
93  chaine =' '
94  ipid=0
95  ncsize=0
96 !
97  lng=2
98 !
99 ! INITIALISES MPI
100 !
101  init = .false.
102  CALL mpi_initialized(init,ier)
103  IF(.NOT.init) THEN
104 # ifdef COMPAD
105  CALL ampi_init(ier)
106 # else
107  CALL mpi_init(ier)
108 # endif
109  IF(ier.NE.0) THEN
110  WRITE(lu,*) 'P_INIT: ERROR IN MPI_INIT'
111  WRITE(lu,*) 'MPI ERROR ',ier
112  CALL plante(1)
113  stop
114  ENDIF
115  ENDIF
116 !
117 ! OBTAINS IPID, IT IS VIRTUALLY THE PROCESSOR NUMBER (RANK)
118 !
119  CALL mpi_comm_rank(comm,ipid,ier)
120  IF(ier.NE.0) THEN
121  WRITE(lu,*) 'P_INIT: ERROR IN MPI_COMM_RANK'
122  WRITE(lu,*) 'MPI ERROR ',ier
123  CALL plante(1)
124  stop
125  ENDIF
126 !
127 ! OBTAINS NCSIZE
128 !
129  CALL mpi_comm_size(comm,ncsize,ier)
130  IF(ier.NE.0) THEN
131  WRITE(lu,*) 'P_INIT: ERROR IN MPI_COMM_SIZE'
132  WRITE(lu,*) 'MPI ERROR ',ier
133  CALL plante(1)
134  stop
135  ENDIF
136 !
137 ! MANIPULATES MASTER'S AND SLAVES' STANDART OUTPUT TO FILES PE#LOG.TXT
138 !
139  IF(ncsize.GE.1) THEN
140  pnumber = '00000-00000'
141 !
142  IF((ncsize-1).LT.10) THEN
143  WRITE(pnumber(05:05),'(I1)') ncsize-1
144  ELSEIF((ncsize-1).LT.100) THEN
145  WRITE(pnumber(04:05),'(I2)') ncsize-1
146  ELSEIF((ncsize-1).LT.1000) THEN
147  WRITE(pnumber(03:05),'(I3)') ncsize-1
148  ELSEIF((ncsize-1).LT.10000) THEN
149  WRITE(pnumber(02:05),'(I4)') ncsize-1
150  ELSE
151  WRITE(pnumber(01:05),'(I5)') ncsize-1
152  ENDIF
153 !
154  IF(ipid.LT.10) THEN
155  WRITE(pnumber(11:11),'(I1)') ipid
156  ELSEIF(ipid.LT.100) THEN
157  WRITE(pnumber(10:11),'(I2)') ipid
158  ELSEIF(ipid.LT.1000) THEN
159  WRITE(pnumber(9:11),'(I3)') ipid
160  ELSEIF(ipid.LT.10000) THEN
161  WRITE(pnumber(8:11),'(I4)') ipid
162  ELSE
163  WRITE(pnumber(7:11),'(I5)') ipid
164  ENDIF
165  WRITE(mynam,'("PE", A11)') pnumber
166 !
167  ENDIF
168 !
169  IF(ipid.EQ.0) THEN
170  IF(.NOT. std_output) THEN
171  CALL get_free_id(lu)
172  OPEN(unit=lu,file=mynam//'.LOG', form='FORMATTED',
173  & status='UNKNOWN')
174  ENDIF
175  WRITE(lu,*) 'MASTER PROCESSOR NUMBER ',
176  & ipid,' OF THE GROUP OF ',ncsize
177  ELSE
178 ! THIS IS NOW HANDLED VIA mpirun OPTIONS
179  CALL get_free_id(lu)
180  OPEN(unit=lu,file=mynam//'.LOG', form='FORMATTED',
181  & status='UNKNOWN')
182  WRITE(lu,*) 'SLAVE PROCESSOR NUMBER ',
183  & ipid,' IN THE GROUP OF ',ncsize
184  ENDIF
185 !
186 ! READS THE NUMBER OF PROCESSORS AND NAME OF THE EXECUTABLE
187 !
188  ncar=0
189  npread=1
190  yapara=.false.
191  INQUIRE(file='./PARAL',exist=yapara)
192  IF(yapara) THEN
193  CALL get_free_id(id)
194  OPEN(id,file='PARAL',form='FORMATTED',action='READ')
195  READ(id,*) npread
196  IF(npread.NE.ncsize) THEN
197  WRITE (lu,*)
198  & 'P_INIT: FILE PARAL IS INCONSISTENT WITH MPI PARAMETERS'
199  WRITE (lu,*) 'MPI NCSIZE = ',ncsize
200  WRITE (lu,*) 'PARAL NCSIZE = ',npread
201  ENDIF
202  READ(id,*) ncar
203  IF(ncar.GT.maxlentmpdir) THEN
204  WRITE(lu,*) 'LENGTH OF TMP DIR STRING IS TO BIG'
205  WRITE(lu,*) 'IT IS ',ncar,' LONG AND SHOULD NOT EXCEED',
206  & maxlentmpdir
207  CALL plante(1)
208  ENDIF
209  READ(id,100) chaine
210 100 FORMAT(a250)
211  exe(1:ncar+5)=chaine(1:ncar) // 'A.EXE'
212  WRITE(lu,*) 'EXECUTABLE FILE: ',exe(1:ncar+5)
213  CLOSE(id)
214  ENDIF
215 !
216 ! THE BARRIER USUALLY COMES UNEXPECTED
217 !
218  CALL mpi_barrier(comm,ier)
219  IF (ier.NE.0) THEN
220  WRITE(lu,*) 'P_INIT: ERROR MPI_BARRIER'
221  WRITE(lu,*) 'MPI ERROR ',ier
222  CALL plante(1)
223  stop
224  ENDIF
225 #else
226  ncar = 0
227  chaine =' '
228  ipid=0
229  ncsize=0
230  IF(.NOT. std_output) THEN
231  CALL get_free_id(lu)
232  OPEN(unit=lu,file='PE.LOG', form='FORMATTED',
233  & status='UNKNOWN')
234  ENDIF
235 #endif
236 !
237 !-----------------------------------------------------------------------
238 !
239  RETURN
240  END
integer, parameter maxlentmpdir
subroutine p_init(CHAINE, NCAR, IPID, NCSIZE)
Definition: p_init.F:7