File: /nfs/home/0/users/jenkins/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=64) :: 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 IMPLICIT NONE
285
286
287
288
289 INTEGER, INTENT(inout) :: IER
290
291
292
293
294 CHARACTER(len=64) :: LOGFILE
295 CHARACTER(len=64) :: FILE_NAME
296
297 LOGICAL :: DO_NOTHING
298
299 INTEGER :: NB
300
301
302
303
304 = .TRUE.
305
306
307 INQUIRE(UNIT=UNIT_LOG, OPENED=DO_NOTHING)
308 IF(DO_NOTHING) RETURN
309
310
311 = ''
312 NB = INDEX(RUN_NAME,' ')
313
314
315 IF(numPEs == 1) THEN
316 WRITE(LOGFILE,"(A)")RUN_NAME(1:(NB-1))
317 ELSEIF(numPEs < 10) THEN
318 WRITE(LOGFILE,"(A,'_',I1.1)") RUN_NAME(1:(NB-1)), myPE
319 ELSEIF(numPEs < 100) THEN
320 WRITE(LOGFILE,"(A,'_',I2.2)") RUN_NAME(1:(NB-1)), myPE
321 ELSEIF(numPEs < 1000) THEN
322 WRITE(LOGFILE,"(A,'_',I3.3)") RUN_NAME(1:(NB-1)), myPE
323 ELSEIF(numPEs < 10000) THEN
324 WRITE(LOGFILE,"(A,'_',I4.4)") RUN_NAME(1:(NB-1)), myPE
325 ELSE
326 WRITE(LOGFILE,"(A,'_',I8.8)") RUN_NAME(1:(NB-1)), myPE
327 ENDIF
328
329
330
331 = len_trim(LOGFILE)+1
332 CALL OPEN_FILE(LOGFILE, NB, UNIT_LOG, '.LOG', FILE_NAME, &
333 'APPEND', 'SEQUENTIAL', 'FORMATTED', 132, IER)
334
335 RETURN
336 END SUBROUTINE OPEN_PE_LOG
337