The TELEMAC-MASCARET system  trunk
homere_partel.f
Go to the documentation of this file.
1 ! *********************
2  PROGRAM homere_partel
3 ! *********************
4 !
5 !
6 !***********************************************************************
7 ! PARALLEL V6P2 21/08/2010
8 !***********************************************************************
9 !
10 !brief PREPROCESSING STEP BEFORE A PARALLEL COMPUTATION
11 !
12 !history Y. AUDOUIN (EDF)
13 !+ 09/2012
14 !+ V7P0
15 !+ FIRST VERSION
16 !
17 !history V STOBIAC (EDF)
18 !+ 09/2014
19 !+ V7P0
20 !+ READING OF THE MESH FORMAT
21 !
22 !history Y. AUDOUIN (EDF)
23 !+ 09/2012
24 !+ V7P0
25 !+ Reorganizing reading of parameters
26 !
27 !history Y. AUDOUIN (EDF)
28 !+ 21/05/2015
29 !+ V7P0
30 !+ Adding call to partel_resonly
31 !
32 !history C. COULET (ARTELIA)
33 !+ 01/09/2016
34 !+ V7P2
35 !+ Modification to add the weir file management
36 !
37 !history J. GRASSET (Daresbury Lab & EDF)
38 !+ 01/05/2018
39 !+ Add code for managing concatenated mesh
40 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42 !
45  IMPLICIT NONE
46 !
47 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
48 !
49  CHARACTER(LEN=PATH_LEN) :: NAMEINP,NAMEGEO
50  CHARACTER(LEN=PATH_LEN) :: NAMECLI
51  INTEGER :: NPARTS
52  INTEGER :: PMETHOD
53  CHARACTER(LEN=PATH_LEN) :: NAMESEC
54  CHARACTER(LEN=PATH_LEN) :: NAMEZFI
55  CHARACTER(LEN=PATH_LEN) :: NAMESEU
56  CHARACTER(LEN=8) :: GEOFORMAT,INPFORMAT
57  CHARACTER(LEN=3) :: CONCATSTR
58 !
59  LOGICAL :: RES_ONLY
60  LOGICAL :: IS
61  INTEGER I_LENCLI, I_LENINP, I_LENGEO
62 !
63  CHARACTER(LEN=11) :: EXTENS
64  EXTERNAL extens
65 !
66 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 !
68 !
69  lng=2 ! JE NE PARLE PAS FRANCAIS, JE SUIS BARBARIEN
70  lu=6 ! FORTRAN STANDARD OUPUT CHANNEL
71  li=5 ! FORTRAN STANDARD INPUT CHANNEL
72 !
73 !----------------------------------------------------------------------
74 ! INTRODUCE YOURSELF
75 !
76  WRITE(lu,*) ' '
77  WRITE(lu,*) '+-------------------------------------------------+'
78  WRITE(lu,*) ' PARTEL/PARRES: TELEMAC METISOLOGIC PARTITIONER'
79  WRITE(lu,*) ' '
80  WRITE(lu,*) ' REBEKKA KOPMANN & JACEK A. JANKOWSKI (BAW)'
81  WRITE(lu,*) ' JEAN-MICHEL HERVOUET (LNHE)'
82  WRITE(lu,*) ' CHRISTOPHE DENIS (SINETICS) '
83  WRITE(lu,*) ' YOANN AUDOUIN (LNHE) '
84  WRITE(lu,*) ' PARTEL (C) COPYRIGHT 2000-2002 '
85  WRITE(lu,*) ' BUNDESANSTALT FUER WASSERBAU, KARLSRUHE'
86  WRITE(lu,*) ' '
87  WRITE(lu,*) ' METIS 5.0.2 (C) COPYRIGHT 2012 '
88  WRITE(lu,*) ' REGENTS OF THE UNIVERSITY OF MINNESOTA '
89  WRITE(lu,*) ' '
90  WRITE(lu,*) ' BIEF ',version,' (C) COPYRIGHT 2012 EDF'
91  WRITE(lu,*) '+-------------------------------------------------+'
92  WRITE(lu,*) ' '
93  WRITE(lu,*) ' '
94  WRITE(lu,*) ' MAXIMUM NUMBER OF PARTITIONS: ',maxnproc
95  WRITE(lu,*) ' '
96  WRITE(lu,*) '+--------------------------------------------------+'
97  WRITE(lu,*) ' '
98 !
99 !----------------------------------------------------------------------
100 ! NAMES OF THE INPUT FILES:
101 !
102 !
103  WRITE(lu,*) '--INPUT FILE NAME <INPUT_NAME>: '
104  READ(li,*) nameinp
105 !
106  IF (nameinp.EQ.' ') THEN
107  WRITE (lu,*) ' NO FILENAME '
108  CALL plante(1)
109  stop
110  ELSE
111  WRITE(lu,*) 'INPUT: ',trim(nameinp)
112  ENDIF
113 
114  INQUIRE (file=nameinp,exist=is)
115  IF (.NOT.is) THEN
116  WRITE (lu,*)' FILE DOES NOT EXIST: ',trim(nameinp)
117  CALL plante(1)
118  stop
119  ENDIF
120 
121  IF (code(1:1).EQ.' ') THEN
122  code = nameinp(1:3)
123  ENDIF
124 !
125  WRITE(lu,*)
126  & '--INPUT FILE FORMAT <INPFORMAT> [MED,SERAFIN,SERAFIND]: '
127  READ(li,*) inpformat
128  IF ( (inpformat .NE. 'MED ') .AND.
129  & (inpformat(1:7) .NE. 'SERAFIN') ) THEN
130  WRITE(lu,*)
131  & ' FILE FORMAT MUST BE "MED" OR "SERAFIN" OR "SERAFIND" '
132  CALL plante(1)
133  stop
134  ELSE
135  WRITE(lu,*) ' INPUT: ', inpformat
136  ENDIF
137 !
138  WRITE(lu, *) '--BOUNDARY CONDITIONS FILE NAME: '
139  READ(li,*) namecli
140  IF (namecli.EQ.' ') THEN
141  WRITE (lu,*) ' NO FILENAME '
142  CALL plante(1)
143  stop
144  ELSE
145  WRITE(lu,*) 'INPUT: ',trim(namecli)
146  ENDIF
147 !
148  INQUIRE (file=namecli,exist=is)
149  IF (.NOT.is) THEN
150  WRITE (lu,*) 'FILE DOES NOT EXIST: ',trim(namecli)
151  CALL plante(1)
152  stop
153  ENDIF
154 !
155  WRITE(lu,fmt='(A,I6,A)')
156  & '--NUMBER OF PARTITIONS <NPARTS> [2 -',maxnproc,']: '
157  READ(li,*) nparts
158 !
159  IF ( (nparts > maxnproc) .OR. (nparts < 2) ) THEN
160  WRITE(lu,fmt='(A,I6,A)')
161  & ' NUMBER OF PARTITIONS MUST BE IN [2 -',maxnproc,']'
162  CALL plante(1)
163  stop
164  ELSE
165  WRITE(lu,*)' INPUT: ', nparts
166  ENDIF
167 !
168  WRITE(lu,*) ' PARTITIONING METHOD <PMETHOD>
169  & [1 (METIS) OR 2 (SCOTCH)]: '
170  READ(li,*) pmethod
171  IF ( (pmethod > 2) .OR. (pmethod < 1) ) THEN
172  WRITE(lu,
173  & '('' PARTITIONING METHOD MUST BE 1 OR 2'')')
174  CALL plante(1)
175  stop
176  ELSE
177  WRITE(lu,*) '--INPUT: ', pmethod
178  ENDIF
179 
180 !
181 ! #### THE SECTIONS FILE NAME
182 !
183  namesec = ' '
184  WRITE(lu,*)'--CONTROL SECTIONS FILE NAME (OR RETURN) : '
185  READ(li,'(A)') namesec
186 !
187  IF(namesec(1:1) .NE. ' ') THEN
188  WRITE(lu,*) 'INPUT: ',trim(namesec)
189  INQUIRE (file=namesec,exist=is)
190  IF (.NOT.is) THEN
191  WRITE (lu,*) ' FILE DOES NOT EXIST: ',trim(namesec)
192  CALL plante(1)
193  stop
194  ENDIF
195  ELSE
196  WRITE(lu,*) ' NO SECTIONS '
197  ENDIF
198 !
199 ! #### THE ZONES FILE NAME
200 !
201  namezfi = ' '
202  WRITE(lu,*) '--CONTROL ZONES FILE NAME (OR RETURN) : '
203  READ(li,'(A)') namezfi
204 !
205  IF(namezfi(1:1) .NE. ' ') THEN
206  WRITE(lu,*) 'INPUT: ',trim(namezfi)
207  INQUIRE (file=namezfi,exist=is)
208  IF (.NOT.is) THEN
209  WRITE (lu,*) ' FILE DOES NOT EXIST: ', trim(namezfi)
210  CALL plante(1)
211  stop
212  ENDIF
213  ELSE
214  WRITE(lu,*) ' NO ZONES '
215  ENDIF
216 !
217 ! #### THE WEIRS FILE NAME
218 !
219  nameseu = ' '
220  WRITE(lu,*) '--WEIR FILE NAME (OR RETURN) : '
221  READ(li,'(A)') nameseu
222 !
223  IF(nameseu(1:1) .NE. ' ') THEN
224  WRITE(lu,*) 'INPUT: ',trim(nameseu)
225  INQUIRE (file=nameseu,exist=is)
226  IF (.NOT.is) THEN
227  WRITE (lu,*) ' FILE DOES NOT EXIST: ', trim(nameseu)
228  CALL plante(1)
229  stop
230  ENDIF
231  ELSE
232  WRITE(lu,*) ' NO WEIRS '
233  ENDIF
234 !
235 ! Geometry file
236 !
237  WRITE(lu,*) '--GEOMETRY FILE NAME <INPUT_NAME>: '
238  READ(li,*) namegeo
239 !
240  IF (namegeo.EQ.' ') THEN
241  WRITE (lu,*) ' NO FILENAME '
242  CALL plante(1)
243  stop
244  ELSE
245  WRITE(lu,*) 'INPUT: ',trim(namegeo)
246  ENDIF
247 
248  INQUIRE (file=namegeo,exist=is)
249  IF (.NOT.is) THEN
250  WRITE (lu,*)' FILE DOES NOT EXIST: ',trim(namegeo)
251  CALL plante(1)
252  stop
253  ENDIF
254 !
255  WRITE(lu,*)
256  & '--GEOMETRY FILE FORMAT <GEOFORMAT> [MED,SERAFIN,SERAFIND]: '
257  READ(li,*) geoformat
258  IF ( (geoformat .NE. 'MED ') .AND.
259  & (geoformat(1:7) .NE. 'SERAFIN') ) THEN
260  WRITE(lu,*)
261  & ' FILE FORMAT MUST BE "MED" OR "SERAFIN" OR "SERAFIND" '
262  CALL plante(1)
263  stop
264  ELSE
265  WRITE(lu,*) ' INPUT: ', geoformat
266  ENDIF
267 !
268 ! Concatenate files
269 !
270  WRITE(lu,*) '--CONCATENATE FILES <YES-NO>: '
271  READ(li,*) concatstr
272 !
273  IF (concatstr.NE.'YES'.AND.concatstr.NE.'NO') THEN
274  WRITE (lu,*) 'DONT KNOW IF I SHOUD CONCATENATE:'
275  & //trim(concatstr)
276  CALL plante(1)
277  stop
278  ELSE
279  WRITE(lu,*) 'CONCATENATE: ',trim(concatstr)
280  IF(concatstr=='YES')THEN
281  partel_concat=.true.
282  ELSE
283  partel_concat=.false.
284  ENDIF
285  ENDIF
286 !
287  ! Check if the geometry has already been partitionned
288  IF(partel_concat)THEN
289  INQUIRE(file=trim(namegeo)//'-CONCAT', exist=res_only)
290  ELSE
291  INQUIRE(file=trim(namegeo)//extens(nparts-1,0), exist=res_only)
292  ENDIF
293  IF(namegeo.EQ.nameinp) res_only = .false.
294 
295 !
296 ! FIND THE INPUT FILE CORE NAME LENGTH
297 !
298  i_leninp = len(trim(nameinp))
299 !
300  IF (i_leninp > path_len) THEN
301  WRITE(lu,*) ' '
302  WRITE(lu,*) 'ATTENTION:'
303  WRITE(lu,*) 'THE NAME OF THE INPUT FILE:'
304  WRITE(lu,*) nameinp
305  WRITE(lu,*) 'IS LONGER THAN ',path_len,' CHARACTERS'
306  WRITE(lu,*) 'WHICH IS THE LONGEST APPLICABLE NAME FOR TELEMAC '
307  WRITE(lu,*) 'INPUT AND OUTPUT FILES. STOPPED. '
308  CALL plante(1)
309  stop
310  ENDIF
311 !
312 ! CORE NAME LENGTH
313 !
314  i_lencli = len(trim(namecli))
315 !
316  IF (i_lencli > path_len) THEN
317  WRITE(lu,*) ' '
318  WRITE(lu,*) 'ATTENTION:'
319  WRITE(lu,*) 'THE NAME OF THE BOUNDARY CONDITIONS FILE:'
320  WRITE(lu,*) namecli
321  WRITE(lu,*) 'IS LONGER THAN ',path_len,' CHARACTERS'
322  WRITE(lu,*) 'WHICH IS THE LONGEST APPLICABLE NAME FOR TELEMAC '
323  WRITE(lu,*) 'INPUT AND OUTPUT FILES. STOPPED. '
324  CALL plante(1)
325  stop
326  ENDIF
327 !
328 ! FIND THE GEOMETRY FILE CORE NAME LENGTH
329 !
330  i_lengeo = len(trim(namegeo))
331 !
332  IF (i_lengeo > path_len) THEN
333  WRITE(lu,*) ' '
334  WRITE(lu,*) 'ATTENTION:'
335  WRITE(lu,*) 'THE NAME OF THE GEOMETRY FILE:'
336  WRITE(lu,*) namegeo
337  WRITE(lu,*) 'IS LONGER THAN ',path_len,' CHARACTERS'
338  WRITE(lu,*) 'WHICH IS THE LONGEST APPLICABLE NAME FOR TELEMAC '
339  WRITE(lu,*) 'INPUT AND OUTPUT FILES. STOPPED. '
340  CALL plante(1)
341  stop
342  ENDIF
343 !
344  IF(res_only) THEN
345  ! Reading geometry from xxxGEO
346  CALL parres(namegeo, nameinp, nparts, geoformat, inpformat)
347  ELSE
348  CALL partel(nameinp, namecli, nparts, pmethod, inpformat,
349  & namesec, namezfi, nameseu)
350  ENDIF
351 !
352  stop 0
353  END PROGRAM
subroutine parres(NAMEGEO, NAMEINP, NPARTS, GEOFORMAT, INPFORMAT)
Definition: parres.f:6
integer, parameter maxnproc
subroutine partel(NAMEINP, NAMECLI, NPARTS, PMETHOD, FFORMAT, NAMESEC, NAMEZFI, NAMESEU)
Definition: partel.F:7
program homere_partel
Definition: homere_partel.f:3
character(len=3) code
integer, parameter path_len
character(len=6), parameter version