The TELEMAC-MASCARET system  trunk
parres.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE parres
3 ! *****************
4  & (namegeo, nameinp, nparts, geoformat, inpformat)
5 !
6 !
7 !***********************************************************************
8 ! PARALLEL V7P1
9 !***********************************************************************
10 !
11 !BRIEF PARTIONNING A FILE USING AN ALREADY PARTIONNED GEOMETRY FILE
12 !
13 !HISTORY Y AUDOUIN (LNHE)
14 !+ 26/05/2015
15 !+ V7P1
16 !+ CREATION OF THE FILE
17 !
18 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19 !| NAMEGEO |<--| NAME OF THE GEOMETRY FILE
20 !| NAMEINP |<--| NAME OF THE FILE TO BE PARTITIONNED
21 !| NPARTS |<--| NUMBER OF PARTITIONS
22 !| GEOFORMAT |<--| FORMAT OF THE GEOMETRY FILE
23 !| INPFORMAT |<--| FORMAT OF THE FILE TO BE PARTITIONED
24 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25 !
30  USE bief, ONLY : read_mesh_info
31 !
33  IMPLICIT NONE
34 !
35 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36 
37  CHARACTER(LEN=PATH_LEN), INTENT(IN) :: NAMEGEO
38  CHARACTER(LEN=PATH_LEN), INTENT(IN) :: NAMEINP
39  INTEGER, INTENT(IN) :: NPARTS
40  CHARACTER(LEN=8), INTENT(INOUT) :: GEOFORMAT
41  CHARACTER(LEN=8), INTENT(INOUT) :: INPFORMAT
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !
44  INTEGER :: NGEO=7,ninp=8,ninp_par=9
45  CHARACTER(LEN=PATH_LEN) :: NAMEGEO_PAR
46  CHARACTER(LEN=PATH_LEN) :: NAMEINP_PAR
47  INTEGER :: I,J,IERR
48  INTEGER :: IPART
49 ! VARIABLE INFORMATION
50  CHARACTER(LEN=32),ALLOCATABLE :: VARLIST(:)
51  CHARACTER(LEN=16),ALLOCATABLE :: VAR_NAME(:)
52  CHARACTER(LEN=16),ALLOCATABLE :: VAR_UNIT(:)
53  CHARACTER(LEN=80) :: TITLE
54  INTEGER NVAR_INP,NVAR_GEO
55  INTEGER NTIMESTEP,IVAR,ITIME
56  DOUBLE PRECISION :: TIMES
57  DOUBLE PRECISION,ALLOCATABLE :: VAL(:),VAL_INP(:)
58 ! GEOMETRY INFORMATION
59  INTEGER NPOIN_GEO,TYP_ELM_GEO,NELEM_GEO,NPTFR_GEO,NPTIR_GEO,
60  & ndp_geo,nplan_geo
61  INTEGER NPOIN_INP,TYP_ELM_INP,NELEM_INP,NPTFR_INP,NPTIR_INP,
62  & ndp_inp,nplan_inp
63  INTEGER :: NPOIN2,NELEM2
64  INTEGER :: NPOIN_P,NELEM_P
65 ! Connectivity table
66  INTEGER, ALLOCATABLE :: IKLES(:),IKLE3D(:)
67  INTEGER, ALLOCATABLE :: IKLE(:)
68 ! local to global numbering array
69  INTEGER, ALLOCATABLE :: KNOLG(:),KNOLG3D(:)
70 ! Coordinates 2d and 3d
71  DOUBLE PRECISION, ALLOCATABLE :: X(:),X3D(:)
72  DOUBLE PRECISION, ALLOCATABLE :: Y(:),Y3D(:)
73  INTEGER :: FULLDATE(6),DATE(3),TIME(3)
74  INTEGER :: MESH_DIM
75 ! TIME MEASURING
76  INTEGER TDEB, TFIN, TEMPS, PARSEC
77  LOGICAL TIMECOUNT
78 !
79 ! EXTENS
80  CHARACTER(LEN=11) :: EXTENS
81  EXTERNAL extens
82 !
83 !----------------------------------------------------------------------
84 !
85  WRITE(lu,*) '+---- PARRES: BEGINNING -------------+'
86  WRITE(lu,*) '+---- USING GEOMETRY FILE: ',trim(namegeo)
87  CALL system_clock (count=temps, count_rate=parsec)
88  timecount = .true.
89  IF (parsec==0) timecount = .false. ! COUNT_RATE == 0 : NO CLOCK
90  IF (timecount) tdeb = temps
91 !
92 !----------------------------------------------------------------------
93 !
94 !----------------------------------------------------------------------
95 !
96 !
97 ! INITIALISING MPI
98 !
99 ! OPEN THE FULL INPUT FILE
100  CALL open_mesh(inpformat,nameinp,ninp,'READ ',ierr)
101  CALL check_call(ierr,'PARRES:OPEN_MESH:NINP')
102  ! LOOPING
103  DO ipart = 1,nparts
104  WRITE(lu,*) 'TREATING SUB-DOMAIN ', ipart
105  IF(partel_concat)THEN
106  namegeo_par = trim(namegeo)//'-CONCAT'
107  nameinp_par = trim(nameinp)//'-CONCAT'
108 ! OPEN THE PARTITIONNED GEO FILE
109  CALL open_mesh(geoformat,namegeo_par,ngeo,'READ ',
110  & ierr,ipart)
111  CALL check_call(ierr,'PARRES:OPEN_MESH:NGEO')
112 ! OPEN THE PARTIONNED INPUT FILE
113  CALL open_mesh(inpformat,nameinp_par,ninp_par,'WRITE ',
114  & ierr,ipart)
115  CALL check_call(ierr,'PARRES:OPEN_MESH:NINP_PAR')
116  ELSE
117  namegeo_par = trim(namegeo)//extens(nparts-1,ipart-1)
118  nameinp_par = trim(nameinp)//extens(nparts-1,ipart-1)
119 ! OPEN THE PARTITIONNED GEO FILE
120  CALL open_mesh(geoformat,namegeo_par,ngeo,'READ ',ierr)
121  CALL check_call(ierr,'PARRES:OPEN_MESH:NGEO')
122 ! OPEN THE PARTIONNED INPUT FILE
123  CALL open_mesh(inpformat,nameinp_par,ninp_par,'WRITE ',
124  & ierr)
125  CALL check_call(ierr,'PARRES:OPEN_MESH:NINP_PAR')
126  ENDIF
127 !
128 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
129 !
130 ! HEADER INFORMATION
131 !
132 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
133 !
134 ! BUILDING THE PARTIONNED INP FILE HEADER SAME AS THE ONE IN THE FULL INP FILE
135 !
136  CALL get_mesh_title(inpformat,ninp,title,ierr)
137  CALL check_call(ierr,'PARRES:GET_MESH_TITLE:NINP')
138 !
139  CALL get_data_nvar(inpformat,ninp,nvar_inp,ierr)
140  CALL check_call(ierr,'PARRES:GET_DATA_NVAR:NINP')
141 !
142  ALLOCATE(varlist(nvar_inp),stat=ierr)
143  CALL check_allocate(ierr,'PARRES:VARLIST')
144  ALLOCATE(var_name(nvar_inp),stat=ierr)
145  CALL check_allocate(ierr,'PARRES:VAR_NAME')
146  ALLOCATE(var_unit(nvar_inp),stat=ierr)
147  CALL check_allocate(ierr,'PARRES:VAR_UNIT')
148  CALL get_data_var_list(inpformat,ninp,nvar_inp,var_name,
149  & var_unit,ierr)
150  CALL check_call(ierr,'PARRES:GET_DATA_CAR_LIST:NINP')
151 ! merging name and unit in one variable for the writing later on
152  DO i=1,nvar_inp
153  varlist(i)(1:16) = var_name(i)
154  varlist(i)(17:32) = var_unit(i)
155  ENDDO
156  DEALLOCATE(var_unit)
157  DEALLOCATE(var_name)
158 ! WRITING PARTITIONNED INP FILE HEADER
159  CALL set_header(inpformat,ninp_par,title,nvar_inp,varlist,ierr)
160  CALL check_call(ierr,'PARRRES:SET_HEADER:NINP_PAR')
161 !
162 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
163 !
164 ! MESH INFORMATION
165 !
166 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
167 ! GET MESH INFORMATION FROM THE GEOMETRY
168  CALL read_mesh_info(geoformat,ngeo,title,nvar_geo,npoin_geo,
169  & typ_elm_geo,nelem_geo,nptfr_geo,nptir_geo,
170  & ndp_geo,nplan_geo,x_orig,y_orig)
171 ! GET MESH INFORMATION FROM THE INP FILE
172  CALL read_mesh_info(inpformat,ninp,title,nvar_inp,npoin_inp,
173  & typ_elm_inp,nelem_inp,nptfr_inp,nptir_inp,
174  & ndp_inp,nplan_inp,x_orig,y_orig)
175  IF(nplan_inp.GT.1) THEN
176  WRITE(lu,*) ' '
177  WRITE(lu,*) '3D MESH DETECTED'
178  npoin2 = npoin_inp/nplan_inp
179  nelem2 = nelem_inp/(nplan_inp-1)
180  WRITE(lu,*) 'NDP NODES PER ELEMENT: ',ndp_inp
181  WRITE(lu,*) 'ELEMENT TYPE : ',typ_elm_inp
182  WRITE(lu,*) 'NPLAN NUMBER OF MESH LEVELS: ',nplan_inp
183  WRITE(lu,*) 'NPOIN2 NUMBER OF 2D MESH NODES: ',npoin2
184  WRITE(lu,*) 'NPOIN NUMBER OF 3D MESH NODES: ',npoin_inp
185  WRITE(lu,*) 'NELEM2 NUMBER OF 2D MESH ELEMENTS: ',nelem2
186  WRITE(lu,*) 'NELEM NUMBER OF 3D MESH ELEMENTS: ',nelem_inp
187  IF (mod(npoin_inp,nplan_inp).NE.0) THEN
188  WRITE (lu,*) 'BUT NPOIN2 /= NPOIN3/NPLAN!'
189  CALL plante(1)
190  stop
191  ENDIF
192  IF (mod(nelem_inp,(nplan_inp-1)).NE.0) THEN
193  WRITE (lu,*) 'BUT NELEM2 /= NELEM3/NPLAN!'
194  CALL plante(1)
195  stop
196  ENDIF
197  WRITE(lu,*) ' '
198  WRITE(lu,*) 'THE INPUT FILE ASSUMED TO BE 3D'
199  mesh_dim = 3
200  ! NUMBER OF POINT IN THE PARTIOTIONNED MESH
201  npoin_p = npoin_geo*nplan_inp
202  nelem_p = nelem_geo*(nplan_inp-1)
203  ELSE
204  WRITE(lu,*) ' '
205  WRITE(lu,*) 'ONE-LEVEL MESH.'
206  WRITE(lu,*) 'NDP NODES PER ELEMENT: ',ndp_inp
207  WRITE(lu,*) 'ELEMENT TYPE : ',typ_elm_inp
208  WRITE(lu,*) 'NPOIN NUMBER OF MESH NODES: ',npoin_inp
209  WRITE(lu,*) 'NELEM NUMBER OF MESH ELEMENTS: ',nelem_inp
210  WRITE(lu,*) ' '
211  npoin2 = npoin_inp
212  nelem2 = nelem_inp
213  WRITE(lu,*) 'THE INPUT FILE ASSUMED TO BE 2D'
214  mesh_dim = 2
215  ! NUMBER OF POINT IN THE PARTIOTIONNED MESH
216  npoin_p = npoin_geo
217  nelem_p = nelem_geo
218  ENDIF
219 ! ALLOCATION OF MESH ARRAYS
220  ALLOCATE (ikle(nelem_geo*ndp_geo),stat=ierr)
221  CALL check_allocate(ierr, 'PARRES:IKLES')
222  ALLOCATE (ikles(nelem_geo*ndp_geo),stat=ierr)
223  CALL check_allocate(ierr, 'PARRES:IKLES')
224  ALLOCATE (knolg(npoin_geo),stat=ierr)
225  CALL check_allocate(ierr, 'PARRES:KNOLG')
226  ALLOCATE (x(npoin_geo),stat=ierr)
227  CALL check_allocate(ierr, 'PARRES:X')
228  ALLOCATE (y(npoin_geo),stat=ierr)
229  CALL check_allocate(ierr, 'PARRES:Y')
230 !
231 ! READING THE CONNECTIVITY FROM GEO
232 !
233  CALL get_mesh_connectivity(geoformat,ngeo,typ_elm_geo,ikles,
234  & nelem_geo,ndp_geo,ierr)
235  CALL check_call(ierr,'PARRES:GET_MESH_CONNECTIVITY:NGEO')
236 !
237 ! READING THE COORDINATES FROM GEO
238 !
239  CALL get_mesh_coord(geoformat,ngeo,1,mesh_dim,npoin_geo,x,ierr)
240  CALL check_call(ierr,'PARRES:GET_MESH_COORD:NGEO:X')
241  CALL get_mesh_coord(geoformat,ngeo,2,mesh_dim,npoin_geo,y,ierr)
242  CALL check_call(ierr,'PARRES:GET_MESH_COORD:NGEO:Y')
243 !
244 ! READING LOCAL TO GLOBAL NUMBERING I.E. KNOLG FORM GEO
245 !
246  CALL get_mesh_l2g_numbering(geoformat,ngeo,knolg,npoin_geo,ierr)
247  CALL check_call(ierr,'PARRES:GET_MESH_L2G_NUMBERING:NGEO')
248 !
249 ! READING THE DATE AND TIME FROM THE INP FILE
250 !
251  fulldate(:) = 0
252  CALL get_mesh_date(inpformat,ninp,fulldate,ierr)
253  CALL check_call(ierr,'PARRES:GET_MESH_DATE:NINP')
254  date(1) = fulldate(1)
255  date(2) = fulldate(2)
256  date(3) = fulldate(3)
257  time(1) = fulldate(4)
258  time(2) = fulldate(5)
259  time(3) = fulldate(6)
260 !
261 ! WRITING MESH IN PARTITIONNED INP FILE
262 !
263 ! When in 3d building 3d connectivity, coordinates, knolg from 2d geometry
264 ! No such thing as 3d geometry in telemac (only in estel)
265  IF(nplan_inp.GT.1) THEN
266 ! BUILDING 3D IKLES (TRANSFORMING TRIANGLE INTO PRISM)
267  ALLOCATE (ikle3d(nelem_geo*(nplan_inp-1)*ndp_inp),stat=ierr)
268  CALL check_allocate(ierr, 'PARRES:IKLE3D')
269  DO i=1,nplan_inp-1
270  DO j=1,nelem_geo
271  ikle3d(j + (i-1)*nelem_geo + (1-1)*nelem_p) =
272  & ikles(1+(j-1)*ndp_geo) + (i-1)*npoin_geo
273  ikle3d(j + (i-1)*nelem_geo + (2-1)*nelem_p) =
274  & ikles(2+(j-1)*ndp_geo) + (i-1)*npoin_geo
275  ikle3d(j + (i-1)*nelem_geo + (3-1)*nelem_p) =
276  & ikles(3+(j-1)*ndp_geo) + (i-1)*npoin_geo
277  ikle3d(j + (i-1)*nelem_geo + (4-1)*nelem_p) =
278  & ikles(1+(j-1)*ndp_geo) + (i )*npoin_geo
279  ikle3d(j + (i-1)*nelem_geo + (5-1)*nelem_p) =
280  & ikles(2+(j-1)*ndp_geo) + (i )*npoin_geo
281  ikle3d(j + (i-1)*nelem_geo + (6-1)*nelem_p) =
282  & ikles(3+(j-1)*ndp_geo) + (i )*npoin_geo
283  ENDDO
284  ENDDO
285 ! BUILDING 3D X AND Y
286  ALLOCATE (x3d(npoin_geo*nplan_inp),stat=ierr)
287  CALL check_allocate(ierr, 'PARRES:IKLE3D')
288  ALLOCATE (y3d(npoin_geo*nplan_inp),stat=ierr)
289  CALL check_allocate(ierr, 'PARRES:IKLE3D')
290  DO i=1,nplan_inp
291  DO j=1,npoin_geo
292  x3d(j + (i-1)*npoin_geo) = x(j)
293  y3d(j + (i-1)*npoin_geo) = y(j)
294  ENDDO
295  ENDDO
296 
297 ! BUILDING 3D KNOLG
298  ALLOCATE (knolg3d(npoin_geo*nplan_inp),stat=ierr)
299  CALL check_allocate(ierr, 'PARRES:IKLE3D')
300  DO i=1,nplan_inp
301  DO j=1,npoin_geo
302  knolg3d(j + (i-1)*npoin_geo) =
303  & knolg(j) + (i-1)*npoin2
304  ENDDO
305  ENDDO
306 ! WRITING MESH INFORMATION INTO PARTIONNED INPUT
307  CALL set_mesh(inpformat,ninp_par,mesh_dim,typ_elm_inp,ndp_inp,
308  & nptfr_geo,nptir_geo,nelem_p,npoin_p,
309  & ikle3d,knolg3d,knolg3d,x3d,y3d,nplan_inp,
310  & date,time,x_orig,y_orig,ierr)
311  DEALLOCATE(ikle3d)
312  DEALLOCATE(x3d,y3d)
313 
314  ELSE
315  ! 2D writing of the mesh
316  ! Switching from ikle(ndp,nelem) to ikle(nelem,ndp)
317  DO i=1,nelem_geo
318  DO j=1,ndp_geo
319  ikle(i + (j-1)*nelem_geo) = ikles(j + (i-1)*(ndp_geo))
320  ENDDO
321  ENDDO
322 
323  CALL set_mesh(inpformat,ninp_par,mesh_dim,typ_elm_geo,ndp_geo,
324  & nptfr_geo,nptir_geo,nelem_geo,npoin_geo,
325  & ikle,knolg,knolg,x,y,nplan_geo,date,time,
326  & x_orig,y_orig,ierr)
327  ENDIF
328  DEALLOCATE(x,y)
329  DEALLOCATE(ikles)
330  DEALLOCATE(ikle)
331 ! CLOSING GEO FILE NOT NEEDED ANYMORE
332  CALL close_mesh(geoformat,ngeo,ierr)
333  CALL check_call(ierr,'PARRES:CLOSE_MESH:NGEO')
334 !
335 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
336 !
337 ! DATA VALUES
338 !
339 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
340 
341  CALL get_data_ntimestep(inpformat,ninp,ntimestep,ierr)
342  CALL check_call(ierr,'PARRES:GET_DATA_NTIMESTEP:NINP')
343 !
344  ALLOCATE(val_inp(npoin_inp),stat=ierr)
345  CALL check_allocate(ierr,'PARRES:VAL_INP')
346  ALLOCATE(val(npoin_p),stat=ierr)
347  CALL check_allocate(ierr,'PARRES:VAL')
348 ! LOOPING ON THE TIMESTEP AND VARIABLE OF INP FILE
349  DO itime=1,ntimestep
350  CALL get_data_time(inpformat,ninp,itime-1,times,ierr)
351  CALL check_call(ierr,'PARTEL:GET_DATA_TIME:NINP')
352  WRITE(lu,*) ' -- WRITING TIMESTEP',itime-1,' AT',REAL(times)
353  ! Loop on all the variables
354  DO ivar=1,nvar_inp
355  CALL get_data_value(inpformat,ninp,itime-1,
356  & varlist(ivar)(1:16),val_inp,
357  & npoin_inp,ierr)
358  ! GETTING THE VALUE NEEDED FOR THAT PARTITION
359  IF(nplan_inp.GT.1) THEN
360  DO i=1,npoin_p
361  val(i) = val_inp(knolg3d(i))
362  ENDDO
363  ELSE
364  DO i=1,npoin_p
365  val(i) = val_inp(knolg(i))
366  ENDDO
367  ENDIF
368  CALL add_data(inpformat,ninp_par,varlist(ivar),times,
369  & itime-1,ivar.EQ.1,val,npoin_p,ierr)
370  CALL check_call(ierr,'PARRES:ADD_DATA:NINP_PAR')
371  ENDDO
372  ENDDO
373 !
374  DEALLOCATE(val)
375  DEALLOCATE(val_inp)
376  DEALLOCATE(varlist)
377  DEALLOCATE(knolg)
378  IF(nplan_inp.GT.1) DEALLOCATE(knolg3d)
379 
380  CALL close_mesh(inpformat,ninp_par,ierr,ipart)
381  CALL check_call(ierr,'PARRES:CLOSE_MESH:NINP_PAR')
382 !
383  ENDDO ! IPART
384 !
385  CALL close_mesh(inpformat,ninp,ierr)
386  CALL check_call(ierr,'PARRES:CLOSE_MESH:NINP')
387 !
388 ! END OF RUN
389 !
390 ! CALL P_EXIT()
391  IF (timecount) THEN
392  CALL system_clock (count=temps, count_rate=parsec)
393  tfin = temps
394  WRITE(lu,*) 'OVERALL TIMING: ',
395  & (1.0*(tfin-tdeb))/(1.0*parsec),' SECONDS'
396  WRITE(lu,*) ' '
397  ENDIF
398 
399  WRITE(lu,*) '+---- PARRES: NORMAL TERMINATION ----+'
400  WRITE(lu,*) ' '
401 !
402 !----------------------------------------------------------------------
403 !
404  RETURN
405  END SUBROUTINE parres
subroutine add_data(FFORMAT, FILE_ID, VAR_NAME, TIME, RECORD, FIRST_VAR, VAR_VALUE, N, IERR)
Definition: add_data.f:8
subroutine close_mesh(FFORMAT, FILE_ID, IERR, MESH_NUMBER)
Definition: close_mesh.f:7
subroutine set_mesh(FFORMAT, FILE_ID, MESH_DIM, TYPELM, NDP, NPTFR, NPTIR, NELEM, NPOIN, IKLE, IPOBO, KNOLG, X, Y, NPLAN, DATE, TIME, X_ORIG, Y_ORIG, IERR, Z, IN_PLACE)
Definition: set_mesh.f:9
subroutine get_data_nvar(FFORMAT, FID, NVAR, IERR)
Definition: get_data_nvar.f:7
subroutine parres(NAMEGEO, NAMEINP, NPARTS, GEOFORMAT, INPFORMAT)
Definition: parres.f:6
subroutine get_data_var_list(FFORMAT, FID, NVAR, VARLIST, UNITLIST, IERR)
subroutine get_data_value(FFORMAT, FID, RECORD, VAR_NAME, RES_VALUE, N, IERR)
Definition: get_data_value.f:7
subroutine read_mesh_info(FFORMAT, NFIC, TITLE, NVAR, NPOIN, TYP_ELEM, NELEM, NPTFR, NPTIR, NDP, NPLAN, X_ORIG, Y_ORIG, TYP_BND_ELEM, NELEBD)
Definition: read_mesh_info.f:8
subroutine get_mesh_title(FFORMAT, FID, TITLE, IERR)
Definition: get_mesh_title.f:7
subroutine get_mesh_date(FFORMAT, FID, DATE, IERR)
Definition: get_mesh_date.f:7
subroutine set_header(FFORMAT, FILE_ID, TITLE, NVAR, VAR_NAME, IERR)
Definition: set_header.f:7
subroutine get_mesh_coord(FFORMAT, FID, JDIM, NDIM, NPOIN, COORD, IERR)
Definition: get_mesh_coord.f:7
subroutine get_mesh_connectivity(FFORMAT, FID, TYP_ELEM, IKLE, NELEM, NDP, IERR)
subroutine open_mesh(FFORMAT, FILE_NAME, FILE_ID, OPENMODE, IERR, MESH_NUMBER)
Definition: open_mesh.f:7
subroutine get_data_time(FFORMAT, FID, RECORD, TIME, IERR)
Definition: get_data_time.f:7
subroutine get_mesh_l2g_numbering(FFORMAT, FID, KNOLG, NPOIN, IERR)
subroutine get_data_ntimestep(FFORMAT, FID, NTIMESTEP, IERR)
Definition: bief.f:3