File: RELATIVE:/../../../mfix.git/model/open_files.f
1
2
3
4
5
6
7
8
9 SUBROUTINE OPEN_FILES(RUN_NAME, RUN_TYPE, N_SPX)
10
11 USE machine
12 USE funits
13 USE compar
14 USE cdist
15
16 use error_manager
17
18 IMPLICIT NONE
19
20
21 INTEGER :: IER(0:numPEs-1)
22
23 CHARACTER(LEN=*) :: RUN_NAME
24
25 CHARACTER(LEN=*) :: RUN_TYPE
26
27 INTEGER :: N_SPX
28
29 CHARACTER(len=4) :: EXT
30
31 CHARACTER(len=255) :: FILE_NAME
32
33 INTEGER :: LC
34
35 INTEGER :: NB
36 CHARACTER(len=35) :: EXT_END
37 CHARACTER(len=10) :: CSTATUS
38
39 CHARACTER(len=32) :: CER
40
41
42
43
44 CALL INIT_ERR_MSG("OPEN_FILES")
45
46
47 = 0
48
49
50 = '.SPx'
51
52
53 = '123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
54
55
56
57
58 = INDEX(RUN_NAME,' ')
59
60
61 IF(myPE == PE_IO) CALL OPEN_FILE (RUN_NAME, NB, UNIT_OUT, '.OUT',&
62 FILE_NAME, 'UNKNOWN', 'SEQUENTIAL','FORMATTED',132, IER(myPE))
63
64
65 IF(ERROR_OPENING(IER)) THEN
66 WRITE(ERR_MSG,3000)
67 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
68 ENDIF
69
70
71
72
73 SELECT CASE (TRIM(RUN_TYPE))
74
75
76
77 CASE ('NEW')
78
79 IF(myPE==PE_IO .OR. bDist_IO) THEN
80
81
82 CALL OPEN_FILE (RUN_NAME, NB, UNIT_RES, '.RES', FILE_NAME, &
83 'NEW', 'DIRECT', 'UNFORMATTED', OPEN_N1, IER(myPE))
84
85 IF (IER(myPE) == 100) THEN
86 WRITE(ERR_MSG, 1000)'RES', 'NEW', trim(FILE_NAME)
87 CALL FLUSH_ERR_MSG
88 GO TO 100
89 ELSEIF(IER(myPE) /= 0) THEN
90 CER=''; WRITE(CER,*)
91 WRITE(ERR_MSG, 2000) trim(FILE_NAME), trim(CER)
92 CALL FLUSH_ERR_MSG
93 GO TO 100
94 ENDIF
95
96
97 DO LC = 1, N_SPX
98 EXT(4:4) = ext_end(LC:LC)
99 CALL OPEN_FILE(RUN_NAME, NB, UNIT_SPX+LC, EXT,FILE_NAME,&
100 'NEW', 'DIRECT', 'UNFORMATTED', OPEN_N1, IER(myPE))
101
102 IF (IER(myPE) == 100) THEN
103 WRITE(ERR_MSG, 1000)EXT(2:4), 'NEW', trim(FILE_NAME)
104 CALL FLUSH_ERR_MSG
105 GO TO 100
106 ELSEIF(IER(myPE) /= 0) THEN
107 CER=''; WRITE(CER,*)
108 WRITE(ERR_MSG, 2000) trim(FILE_NAME), trim(CER)
109 CALL FLUSH_ERR_MSG
110 GO TO 100
111 ENDIF
112 ENDDO
113 ENDIF
114
115
116
117
118 CASE ('RESTART_1')
119
120
121 IF(myPE == PE_IO .or. bDist_IO) THEN
122 CALL OPEN_FILE(RUN_NAME, NB, UNIT_RES, '.RES', FILE_NAME, &
123 'OLD', 'DIRECT', 'UNFORMATTED', OPEN_N1, IER(myPE))
124
125 IF (IER(myPE) == 101) THEN
126 WRITE(ERR_MSG, 1001)'RES', 'RESTART_1',trim(FILE_NAME)
127 CALL FLUSH_ERR_MSG
128 GO TO 100
129 ELSEIF(IER(myPE) /= 0) THEN
130 CER=''; WRITE(CER,*)
131 WRITE(ERR_MSG, 2000) trim(FILE_NAME), trim(CER)
132 CALL FLUSH_ERR_MSG
133 GO TO 100
134 ENDIF
135
136
137 DO LC = 1, N_SPX
138 EXT(4:4) = EXT_END(LC:LC)
139 CALL OPEN_FILE (RUN_NAME,NB, UNIT_SPX+LC,EXT, FILE_NAME,&
140 'OLD', 'DIRECT', 'UNFORMATTED', OPEN_N1, IER(myPE))
141
142 IF (IER(myPE) == 101) THEN
143 WRITE(ERR_MSG, 1001) EXT(2:4), 'RESTART_1', &
144 trim(FILE_NAME)
145 CALL FLUSH_ERR_MSG
146 GO TO 100
147 ELSEIF(IER(myPE) /= 0) THEN
148 CER=''; WRITE(CER,*)
149 WRITE(ERR_MSG, 2000) trim(FILE_NAME), trim(CER)
150 CALL FLUSH_ERR_MSG
151 GO TO 100
152 ENDIF
153 END DO
154 ENDIF
155
156
157
158
159 CASE ('RESTART_2')
160
161 = 'OLD'
162 IF(myPE == PE_IO .OR. bDist_IO) THEN
163 IF(bStart_with_one_res) CSTATUS = 'UNKNOWN'
164 CALL OPEN_FILE (RUN_NAME, NB, UNIT_RES, '.RES', FILE_NAME, &
165 CSTATUS,'DIRECT', 'UNFORMATTED', OPEN_N1, IER(myPE))
166
167 IF (IER(myPE) == 101) THEN
168 WRITE(ERR_MSG, 1001)'RES', 'RESTART_2',trim(FILE_NAME)
169 CALL FLUSH_ERR_MSG
170 GO TO 100
171 ELSEIF(IER(myPE) /= 0) THEN
172 CER=''; WRITE(CER,*)
173 WRITE(ERR_MSG, 2000) trim(FILE_NAME), trim(CER)
174 CALL FLUSH_ERR_MSG
175 GO TO 100
176 ENDIF
177
178
179 DO LC = 1, N_SPX
180 EXT(4:4) = EXT_END(LC:LC)
181 CALL OPEN_FILE (RUN_NAME,NB,UNIT_SPX+LC, EXT, FILE_NAME,&
182 'NEW' , 'DIRECT', 'UNFORMATTED', OPEN_N1, IER(myPE))
183
184 IF (IER(myPE) == 100) THEN
185 WRITE(ERR_MSG, 1000)EXT(2:4), 'RESTART_2', &
186 trim(FILE_NAME)
187 CALL FLUSH_ERR_MSG
188 GO TO 100
189 ELSEIF(IER(myPE) /= 0) THEN
190 CER=''; WRITE(CER,*)
191 WRITE(ERR_MSG, 2000) trim(FILE_NAME), trim(CER)
192 CALL FLUSH_ERR_MSG
193 GO TO 100
194 ENDIF
195 END DO
196 ENDIF
197
198 CASE DEFAULT
199 WRITE(ERR_MSG, 3000)
200 CALL FLUSH_ERR_MSG
201 GO TO 100
202
203 END SELECT
204
205
206 IF(ERROR_OPENING(IER)) CALL MFIX_EXIT(myPE)
207
208
209 CALL FINL_ERR_MSG
210
211 RETURN
212
213 1000 FORMAT('Error 1000: ',A,' file detected but RUN_TYPE=',A/, &
214 'Cannot open file: ',A)
215
216 1001 FORMAT('Error 1001: ',A,' file missing for RUN_TYPE=',A/, &
217 'Cannot open file: ',A)
218
219 2000 FORMAT('Error 2000: Unknown error opening file ',A,/ &
220 'Error code: ',A)
221
222 3000 FORMAT('Error 3000: Unknown run type: ',A)
223
224
225 CONTAINS
226
227
228
229
230
231
232
233
234
235 LOGICAL FUNCTION ERROR_OPENING(IER_l)
236
237
238 use mpi_utility, only: GLOBAL_ALL_SUM
239
240
241 INTEGER, INTENT(IN) :: IER_L(0:numPEs-1)
242
243 = .FALSE.
244
245 CALL GLOBAL_ALL_SUM(IER)
246
247 IF(sum(IER_l) /= 0) ERROR_OPENING = .TRUE.
248
249 RETURN
250 END FUNCTION ERROR_OPENING
251
252 END SUBROUTINE OPEN_FILES
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269 SUBROUTINE OPEN_PE_LOG(IER)
270
271
272
273
274 USE funits, only: UNIT_LOG
275
276 USE run, only: RUN_NAME
277
278 USE compar, only: myPE
279
280 USE compar, only: numPEs
281
282 use funits, only: DMP_LOG
283
284 use funits, only: LOG_WAS_CLOSED
285
286 IMPLICIT NONE
287
288
289
290
291 INTEGER, INTENT(inout) :: IER
292
293
294
295
296 CHARACTER(len=255) :: LOGFILE
297 CHARACTER(len=255) :: FILE_NAME
298
299 LOGICAL :: DO_NOTHING
300
301 INTEGER :: NB
302
303
304
305
306 = .TRUE.
307
308
309 INQUIRE(UNIT=UNIT_LOG, OPENED=DO_NOTHING)
310 IF(DO_NOTHING) RETURN
311
312
313 = .TRUE.
314
315
316 = ''
317 NB = INDEX(RUN_NAME,' ')
318
319
320 IF(numPEs == 1) THEN
321 WRITE(LOGFILE,"(A)")RUN_NAME(1:(NB-1))
322 ELSEIF(numPEs < 10) THEN
323 WRITE(LOGFILE,"(A,'_',I1.1)") RUN_NAME(1:(NB-1)), myPE
324 ELSEIF(numPEs < 100) THEN
325 WRITE(LOGFILE,"(A,'_',I2.2)") RUN_NAME(1:(NB-1)), myPE
326 ELSEIF(numPEs < 1000) THEN
327 WRITE(LOGFILE,"(A,'_',I3.3)") RUN_NAME(1:(NB-1)), myPE
328 ELSEIF(numPEs < 10000) THEN
329 WRITE(LOGFILE,"(A,'_',I4.4)") RUN_NAME(1:(NB-1)), myPE
330 ELSE
331 WRITE(LOGFILE,"(A,'_',I8.8)") RUN_NAME(1:(NB-1)), myPE
332 ENDIF
333
334
335
336 = len_trim(LOGFILE)+1
337 CALL OPEN_FILE(LOGFILE, NB, UNIT_LOG, '.LOG', FILE_NAME, &
338 'APPEND', 'SEQUENTIAL', 'FORMATTED', 132, IER)
339
340 RETURN
341 END SUBROUTINE OPEN_PE_LOG
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358 SUBROUTINE CLOSE_PE_LOG
359
360
361
362
363 USE funits, only: UNIT_LOG
364
365 use funits, only: DMP_LOG
366
367 use funits, only: LOG_WAS_CLOSED
368
369 IMPLICIT NONE
370
371
372
373
374
375 IF(LOG_WAS_CLOSED) THEN
376
377 = .FALSE.
378
379 = .FALSE.
380
381 CLOSE(UNIT_LOG)
382 ENDIF
383
384 RETURN
385 END SUBROUTINE CLOSE_PE_LOG
386