The TELEMAC-MASCARET system  trunk
bief_open_files.f
Go to the documentation of this file.
1 ! **************************
2  SUBROUTINE bief_open_files
3 ! **************************
4 !
5  &(code,files,nfiles,path,ncar,icode,fullname)
6 !
7 !***********************************************************************
8 ! BIEF V7P1
9 !***********************************************************************
10 !
11 !brief OPENS FILES DECLARED IN THE STEERING FILE.
12 !
13 !note STEERING AND DICTIONARY FILES ARE OPENED AND CLOSED
14 !+ IN LECDON
15 !
16 !history J-M HERVOUET (LNHE)
17 !+ 12/10/2009
18 !+ V6P0
19 !+
20 !
21 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
22 !+ 13/07/2010
23 !+ V6P0
24 !+ Translation of French comments within the FORTRAN sources into
25 !+ English comments
26 !
27 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
28 !+ 21/08/2010
29 !+ V6P0
30 !+ Creation of DOXYGEN tags for automated documentation and
31 !+ cross-referencing of the FORTRAN sources
32 !
33 !history J-M HERVOUET (EDF R&D, LNHE)
34 !+ 27/11/2013
35 !+ V6P3
36 !+ Opening by all processors of ACTION='WRITE' file precluded. In this
37 !+ case only the processor 0 will do it.
38 !
39 !history J-M HERVOUET (EDF R&D, LNHE)
40 !+ 26/12/2013
41 !+ V7P0
42 !+ Checking the declared format when possible : case of a SERAFIN file
43 !+ in READ mode.
44 !
45 !history Y AUDOUIN (LNHE)
46 !+ 25/05/2015
47 !+ V7P0
48 !+ Modification to comply with the hermes module
49 !
50 !history J. GRASSET (Daresbury Lab & EDF)
51 !+ 01/05/2018
52 !+ Add code for managing concatenated mesh
53 !
54 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 !| CODE |-->| NAME OF CALLING PROGRAMME
56 !| FILES |-->| STRUCTURES OF CODE FILES
57 !| ICODE |---| NUMERO DU CODE EN CAS DE COUPLAGE
58 !| NCAR |-->| NUMBER OF CHARACTERS IN THE PATH
59 !| NFILES |-->| NUMBER OF FILES
60 !| PATH |-->| FULL NAME OF THE PATH WHERE THE CASE IS
61 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62 !
63  USE bief, ex_bief_open_files => bief_open_files
66 !
68  IMPLICIT NONE
69 !
70 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
71 !
72  INTEGER , INTENT(IN) :: NFILES
73  CHARACTER(LEN=24) , INTENT(IN) :: CODE
74  TYPE(bief_file) , INTENT(INOUT) :: FILES(nfiles)
75  CHARACTER(LEN=PATH_LEN), INTENT(IN) :: PATH
76  INTEGER , INTENT(IN) :: NCAR,ICODE
77  LOGICAL , INTENT(IN) :: FULLNAME
78 !
79 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
80 !
81  INTEGER I, II, ICLI, IERR
82  LOGICAL :: IS_CONCATENATE, RDONLY_PARAL
83 !
84  CHARACTER(LEN=11) :: FORME,EXTENS
85  CHARACTER(LEN=300) :: FILE_NAME
86  CHARACTER(LEN=300) :: CLI_NAME
87  EXTERNAL extens
88 !
89 !-----------------------------------------------------------------------
90 !
91 ! MESSAGE
92 !
93  WRITE(lu,*) 'OPENING FILES FOR ',code
94 !
95 !
96 ! DECODES THE SUBMIT STRING FOR THE FILES IN THE STEERING FILE
97 !
98  DO i=1,nfiles
99 !
100  is_concatenate=.false.
101  rdonly_paral=.false.
102  IF(files(i)%NAME(1:1).NE.' ') THEN
103 !
104  WRITE(lu,*) 'OPENING: ', trim(files(i)%TELNAME), '-',
105  & trim(files(i)%NAME)
106 ! GET LOGICAL UNIT
107  CALL get_free_id(files(i)%LU)
108 !
109  IF(files(i)%BINASC.EQ.'ASC') THEN
110  forme='FORMATTED '
111  ELSE
112  forme='UNFORMATTED'
113  ENDIF
114 !
115 ! OPENS THE FILE
116  ! If fullname name is true we use the real name of the file not the temporary foldare name
117  IF(fullname) THEN
118  file_name = files(i)%NAME
119  ELSE
120  file_name = path(1:ncar)//trim(files(i)%TELNAME)
121  ENDIF
122 !
123  ! Boundary file will be opened by the hermes module
124  IF(files(i)%TYPE.EQ.'CONLIM') cycle
125 !
126  IF((files(i)%FMT(1:7).EQ.'SERAFIN')
127  & .OR.(files(i)%FMT.EQ.'MED ')) THEN
128  ! Get the boundary confitions file
129  icli = 0
130  IF(files(i)%ACTION.EQ.'READ ') THEN
131  !CONCATENATE FILES EXISTS ONLY IN READONLY MODE
132  IF(partel_concat)is_concatenate = .true.
133  !IF IT'S A PARAL FILE IN READ ONLY MODE, THEN THERE IS
134  !ONLY A SINGLE FILE OPENED BY ALL THE PROCESSES
135  IF(files(i)%TYPE(1:5).EQ.'PARAL')THEN
136  rdonly_paral = .true.
137  is_concatenate = .false.
138  ENDIF
139  DO ii=1,nfiles
140  IF(files(ii)%NAME(1:1).NE.' ') THEN
141  IF(files(ii)%TYPE(1:6).EQ.'CONLIM') THEN
142  icli = ii
143  EXIT
144  ENDIF
145  ENDIF
146  ENDDO
147  IF(icli.EQ.0) THEN
148  WRITE(lu,*) 'NO BOUNDARY CONDITIONS FILE'
149  ENDIF
150  ENDIF
151 !
152  ! Rename file_name and cli_name
153  IF(fullname) THEN
154  file_name = path(1:ncar)//trim(files(i)%NAME)
155  IF(icli.NE.0) THEN
156  cli_name = path(1:ncar)//trim(files(icli)%NAME)
157  ENDIF
158  ELSE
159  file_name = path(1:ncar)//trim(files(i)%TELNAME)
160  IF(icli.NE.0) THEN
161  cli_name = path(1:ncar)//trim(files(icli)%TELNAME)
162  ENDIF
163  ENDIF
164 
165  IF((ncsize>1).AND.(files(i)%TYPE(1:4)/='SCAL')) THEN
166  IF(is_concatenate)THEN
167  file_name=trim(file_name)//'-CONCAT'
168  cli_name=trim(cli_name)//'-CONCAT'
169  ELSE IF(.NOT. rdonly_paral)THEN
170  file_name=trim(file_name)//extens(ncsize-1,ipid)
171  cli_name=trim(cli_name)//extens(ncsize-1,ipid)
172  ELSE IF(rdonly_paral)THEN
173  file_name=trim(file_name)
174  cli_name=trim(cli_name)
175  ENDIF
176  ENDIF
177 
178  IF(files(i)%TYPE(1:4).EQ.'SCAL') THEN
179  ! If the file is a scalar type on the processor zero is opning it
180  ! And it a read or readwrite file
181  IF(ipid.EQ.0.OR.files(i)%ACTION(1:4).EQ.'READ') THEN
182  CALL open_mesh(files(i)%FMT, trim(file_name),
183  & files(i)%LU, files(i)%ACTION, ierr)
184  CALL check_call(ierr,'BIEF_OPEN_FILES:OPEN_MESH')
185  IF(icli.NE.0) THEN
186  CALL open_bnd(files(i)%FMT, trim(cli_name),
187  & files(i)%LU, files(icli)%ACTION, ierr)
188  CALL check_call(ierr,'BIEF_OPEN_FILES:OPEN_BND')
189  ENDIF
190  ENDIF
191  ELSE
192  IF(is_concatenate)THEN
193  CALL open_mesh(files(i)%FMT,trim(file_name),files(i)%LU,
194  & files(i)%ACTION, ierr, ipid+1)
195  ELSE
196  CALL open_mesh(files(i)%FMT,trim(file_name),files(i)%LU,
197  & files(i)%ACTION, ierr)
198  ENDIF
199  CALL check_call(ierr,'BIEF_OPEN_FILES:OPEN_MESH')
200  IF(icli.NE.0) THEN
201  IF(is_concatenate)THEN
202  CALL open_bnd(files(i)%FMT, trim(cli_name),
203  & files(i)%LU, files(icli)%ACTION, ierr,
204  & ipid+1)
205  ELSE
206  CALL open_bnd(files(i)%FMT, trim(cli_name),
207  & files(i)%LU, files(icli)%ACTION, ierr)
208  ENDIF
209  CALL check_call(ierr,'BIEF_OPEN_FILES:OPEN_BND')
210  ENDIF
211  ENDIF
212  IF(ierr.NE.0) THEN
213  WRITE(lu,*) 'ERROR WHILE OPENING: ', trim(file_name)
214  WRITE(lu,*) 'AND: ', trim(cli_name)
215  WRITE(lu,*) 'IN ',files(i)%FMT,' FORMAT '
216  WRITE(lu,*) 'IN ',files(i)%ACTION,' MODE'
217  WRITE(lu,*) 'ERROR ',ierr
218  CALL plante(1)
219  stop
220  ENDIF
221 !
222  ELSE
223 !
224  IF(ncsize.LE.1) THEN
225 ! SCALAR
226  OPEN(files(i)%LU,file=file_name,
227  & form=forme,action=files(i)%ACTION)
228  ELSE
229 ! PARALLEL, FILE TYPE: SCAL
230 ! ALL PROCESSORS CANNOT OPEN THE SAME FILE FOR WRITING
231 ! IN THIS CASE, ONLY PROCESSOR 0 MAY OPEN AND WRITE
232  IF(files(i)%TYPE(1:4).EQ.'SCAL') THEN
233  IF(ipid.EQ.0.OR.files(i)%ACTION(1:5).NE.'WRITE') THEN
234  OPEN(files(i)%LU,
235  & file=file_name,
236  & form=forme,action=files(i)%ACTION)
237  ENDIF
238 ! PARALLEL, OTHER FILE TYPE
239  ELSE IF(files(i)%TYPE(1:5).EQ.'PARAL' .AND.
240  & files(i)%ACTION .EQ. 'READ ')THEN
241  OPEN(files(i)%LU,
242  & file=trim(file_name),
243  & form=forme,action=files(i)%ACTION)
244  ELSE
245  OPEN(files(i)%LU,
246  & file=trim(file_name)
247  & //extens(ncsize-1,ipid),
248  & form=forme,action=files(i)%ACTION)
249  ENDIF
250  ENDIF
251 !
252  ENDIF
253 !
254  ENDIF
255 !
256  ENDDO
257 !
258 ! SETS AND STORES THE CODE NAME
259 !
260  namecode = code
261  nnamecode(icode) = code
262 !
263 !
264 !-----------------------------------------------------------------------
265 !
266  RETURN
267  END
268 
character(len=24), dimension(6) nnamecode
character(len=24) namecode
subroutine open_mesh(FFORMAT, FILE_NAME, FILE_ID, OPENMODE, IERR, MESH_NUMBER)
Definition: open_mesh.f:7
subroutine bief_open_files(CODE, FILES, NFILES, PATH, NCAR, ICODE, FULLNAME)
subroutine open_bnd(FFORMAT, FILE_NAME, FILE_ID, OPENMODE, IERR, MESH_NUMBER)
Definition: open_bnd.f:7
Definition: bief.f:3