The TELEMAC-MASCARET system  trunk
read_mesh_info.f
Go to the documentation of this file.
1 ! *************************
2  SUBROUTINE read_mesh_info
3 ! *************************
4 !
5  &(fformat,nfic,title,nvar,npoin,typ_elem,nelem,nptfr,nptir,
6  & ndp,nplan,x_orig,y_orig,typ_bnd_elem,nelebd)
7 !
8 !***********************************************************************
9 ! HERMES V6P3 21/08/2010
10 !***********************************************************************
11 !
12 !BRIEF READS OR COMPUTES THE VALUES OF NPOIN, NELEM, NPTFR,
13 !+ MXPTVS, MXELVS IN THE GEOMETRY FILE (CHANNEL NGEO).
14 !
15 !
16 !history Y AUDOUIN (LNHE)
17 !+ 21/05/2015
18 !+ V7P0
19 !+ First version.
20 !
21 !
22 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23 !| FFORMAT |-->| FORMAT OF THE FILE
24 !| TITLE |<--| TITLE OF THE MESH
25 !| NVAR |<--| NUMBER OF VARIABLES
26 !| NPOIN |<--| NUMBER OF MESH NODES
27 !| TYP_ELEM |<--| TYPE OF ELEMENT
28 !| NELEM |<--| NUMBER OF ELEMENTS
29 !| NDP |<--| NUMBER OF ELEMENT FACES
30 !| NPLAN |<--| NUMBER OF PLAN
31 !| NPTFR |<--| NUMBER OF BOUNDARY NODES
32 !| NPTIR |<--| NUMBER OF INTERFACES
33 !| NFIC |<--| FILE TO READ
34 !| X_ORIG |<--| Off set of the X coordinates
35 !| Y_ORIG |<--| Off set of the Y coordinates
36 !| TYP_BND_ELEM |<--| TYPE OF BOUNDARY ELEMENTS
37 !| NELEBD |<--| NUMBER OF BOUNDARY ELEMENTS
38 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 !
41  USE bief, ONLY: ncsize
42 !
44  IMPLICIT NONE
45 !
46 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
47 !
48  CHARACTER(LEN=8), INTENT(IN) :: FFORMAT ! FILE FORMAT
49  CHARACTER(LEN=80), INTENT(OUT) :: TITLE
50  INTEGER, INTENT(OUT) :: NVAR ! NUMBER OF VARIABLES
51  INTEGER, INTENT(OUT) :: NPOIN ! NUMBER OF MESH NODES
52  INTEGER, INTENT(OUT) :: TYP_ELEM ! TYPE OF ELEMENT
53  INTEGER, INTENT(OUT) :: NELEM ! NUMBER OF ELEMENTS
54  INTEGER, INTENT(OUT) :: NDP ! NUMBER OF ELEMENT FACES
55  INTEGER, INTENT(OUT) :: NPLAN ! NUMBER OF PLAN
56  INTEGER, INTENT(OUT) :: NPTFR ! NUMBER OF BOUNDARY NODES
57  INTEGER, INTENT(OUT) :: NPTIR ! NUMBER OF INTERFACES
58  INTEGER, INTENT(OUT) :: X_ORIG ! X ORIGIN
59  INTEGER, INTENT(OUT) :: Y_ORIG ! Y_ORIGIN
60  INTEGER, INTENT(IN) :: NFIC ! FILE TO READ
61  INTEGER,OPTIONAL,INTENT(OUT) :: TYP_BND_ELEM ! TYPE OF BND ELEMENTS
62  INTEGER,OPTIONAL,INTENT(OUT) :: NELEBD ! NUMBER OF BOUNDARY ELEMENTS
63 !
64 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 !
66  INTEGER IERR,NDIM
67  INTEGER NNELEBD, TYP, TYP_BND
68  INTEGER NNELEM
69 !
70 !-----------------------------------------------------------------------
71 !
72  CALL get_mesh_title(fformat,nfic,title,ierr)
73  CALL check_call(ierr,'READ_MESH_INFO:GET_MESH_TITLE')
74 !
75  CALL get_data_nvar(fformat,nfic,nvar,ierr)
76  CALL check_call(ierr,'READ_MESH_INFO:GET_DATA_NVAR')
77 !
78 ! IDENTIFY THE MESH ELEMENT TYPE AND READ THE NUMBER OF ELEMENT
79 !
80  CALL get_mesh_dimension(fformat,nfic,ndim,ierr)
81  CALL check_call(ierr,'READ_MESH_INFO:GET_MESH_DIMENSION')
82  IF(ndim.EQ.3) THEN
83  ! TEST FOR TETRAEDRON
85  CALL get_mesh_nelem(fformat,nfic,typ,nnelem,ierr)
86  CALL check_call(ierr,
87  & 'READ_MESH_INFO:GET_MESH_NELEM:TETRAHEDRON')
88  IF(nnelem.EQ.0) THEN
89  ! TEST FOR PRISM
90  typ = prism_elt_type
91  CALL get_mesh_nelem(fformat,nfic,typ,nnelem,ierr)
92  CALL check_call(ierr,
93  & 'READ_MESH_INFO:GET_MESH_NELEM:PRISM')
94  IF(nnelem.EQ.0) THEN
95  WRITE(lu,*) 'NO 3D ELEMENTS IN A 3D MESH'
96  CALL plante(1)
97  ENDIF
98  ENDIF
99  ELSE
100  ! TEST FOR TRIANGLE
101  typ = triangle_elt_type
102  CALL get_mesh_nelem(fformat,nfic,typ,nnelem,ierr)
103  CALL check_call(ierr,'READ_MESH_INFO:GET_MESH_NELEM:TRIANGLE')
104  IF(nnelem.EQ.0) THEN
105  ! TEST FOR QUADRANGLE
106  typ = quadrangle_elt_type
107  CALL get_mesh_nelem(fformat,nfic,typ,nnelem,ierr)
108  CALL check_call(ierr,
109  & 'READ_MESH_INFO:GET_MESH_NELEM:QUADRANGLE')
110  IF(nnelem.EQ.0) THEN
111  WRITE(lu,*) 'NO 2D ELEMENTS IN A 2D MESH'
112  CALL plante(1)
113  ENDIF
114  ENDIF
115  ENDIF
116  typ_elem = typ
117  nelem = nnelem
118 !
119 ! IDENTIFY THE BOUNDARY ELEMENT TYPE AND READ THE NUMBER OF ELEMENT
120 !
121  IF(ndim.EQ.3) THEN
122  ! TEST FOR TRIANGLE
123  typ_bnd = triangle_bnd_elt_type
124  CALL get_bnd_nelem(fformat,nfic,typ_bnd,nnelebd,ierr)
125  CALL check_call(ierr,
126  & 'READ_MESH_INFO:GET_MESH_NELEM:TRIANGLE_BND')
127  IF(nnelebd.EQ.0) THEN
128  WRITE(lu,*) 'NO BND ELEMENTS IN A 3D MESH'
129  ENDIF
130  ELSE
131  ! TEST FOR EDGE
132  typ_bnd = edge_bnd_elt_type
133  IF(ncsize.GT.1) typ_bnd = point_bnd_elt_type
134  CALL get_bnd_nelem(fformat,nfic,typ_bnd,nnelebd,ierr)
135  CALL check_call(ierr,
136  & 'READ_MESH_INFO:GET_MESH_NELEM:EDGE')
137  IF(nnelebd.EQ.0) THEN
138  ! TEST FOR POINTS
139  typ_bnd = point_bnd_elt_type
140  CALL get_bnd_nelem(fformat,nfic,typ_bnd,nnelebd,ierr)
141  CALL check_call(ierr,
142  & 'READ_MESH_INFO:GET_MESH_NELEM:POINT')
143  IF(nnelebd.EQ.0) THEN
144  WRITE(lu,*) 'NO BND ELEMENTS IN A 2D MESH'
145  ! Only stop if in serial cause the
146  typ_bnd = type_null
147  ENDIF
148  ENDIF
149  ENDIF
150  IF(PRESENT(nelebd)) nelebd = nnelebd
151  IF(PRESENT(typ_bnd_elem)) typ_bnd_elem = typ_bnd
152 !
153  CALL get_mesh_npoin(fformat,nfic,typ,npoin,ierr)
154  CALL check_call(ierr,'READ_MESH_INFO:GET_MESH_NPOIN')
155 !
156  CALL get_mesh_npoin_per_element(fformat,nfic,typ,ndp,ierr)
157  CALL check_call(ierr,'READ_MESH_INFO:GET_MESH_NPOIN_PER_ELEMENT')
158 !
159  CALL get_mesh_nplan(fformat,nfic,nplan,ierr)
160  CALL check_call(ierr,'READ_MESH_INFO:GET_MESH_NPLAN')
161 !
162  ! Getting the number of boundary points
163  ! If we are in parallel partel will have compute boundary on node
164  IF(ncsize.GT.1) THEN
165  typ_bnd = point_bnd_elt_type
166  ENDIF
167  CALL get_bnd_npoin(fformat,nfic,typ_bnd,nptfr,ierr)
168  CALL check_call(ierr,'READ_MESH_INFO:GET_MESH_NPOIN:NPTFR')
169 !
170  ! TODO: See If nptir is actually used before leclim same for nptfr
171  nptir = 0
172  IF(ncsize.GT.1) THEN
173  CALL get_mesh_nptir(fformat,nfic,nptir,ierr)
174  CALL check_call(ierr,'READ_MESH_INFO:GET_MESH_NPTIR')
175  ENDIF
176 
177  CALL get_mesh_orig(fformat,nfic,x_orig,y_orig,ierr)
178  CALL check_call(ierr,'READ_MESH_INFO:GET_MESH_ORIG')
179 !
180 ! IF(PRESENT(NELEBD).AND.) THEN
181 ! CALL GET_MESH_NELEM(FFORMAT,NFIC,TYP_BND,NELEBD,IERR)
182 ! CALL CHECK_CALL(IERR,'READ_MESH_INFO:GET_MESH_NELEM:BND_ELEM')
183 ! ENDIF
184 !
185 ! PRINTOUT FORMATS:
186 !
187  WRITE(lu,301) title(1:72)
188  WRITE(lu,501) nelem,npoin
189  IF(title(73:80).EQ.'SERAFIN ') THEN
190  WRITE(lu,*) ' SINGLE PRECISION FORMAT (R4)'
191  ELSEIF(title(73:80).EQ.'SERAFIND') THEN
192  WRITE(lu,*) ' DOUBLE PRECISION FORMAT (R8)'
193  ELSE
194  WRITE(lu,*) ' FORMAT NOT INDICATED IN TITLE'
195  ENDIF
196  WRITE(lu,*) ' '
197 !
198  IF(npoin.LT.3) THEN
199  WRITE(lu,24) npoin
200  CALL plante(1)
201  stop
202  ENDIF
203 !
204 24 FORMAT(1x,'READ_MESH_INFO : NUMBER OF POINTS IN THE MESH: ',
205  & 1i9,/,1x,
206  & ' NUMBER OF BOUNDARY POINTS: ',1i8,/,1x,
207  & ' WRONG DATA, PROGRAMME STOPPED')
208 301 FORMAT(1x,//,1x,'READ_MESH_INFO: TITLE= ',a72)
209 501 FORMAT(12x,'NUMBER OF ELEMENTS:',1i9,/,
210  & 12x,'NUMBER OF POINTS:',1i9,/)
211 !
212 !-----------------------------------------------------------------------
213 !
214  RETURN
215  END
subroutine get_mesh_nptir(FFORMAT, FID, NPTIR, IERR)
Definition: get_mesh_nptir.f:7
subroutine get_mesh_npoin(FFORMAT, FID, TYP_ELEM, NPOIN, IERR)
Definition: get_mesh_npoin.f:7
subroutine get_bnd_npoin(FFORMAT, FID, TYPE_BND_ELEM, NPTFR, IERR)
Definition: get_bnd_npoin.f:7
subroutine get_mesh_orig(FFORMAT, FID, X_ORIG, Y_ORIG, IERR)
Definition: get_mesh_orig.f:7
integer, parameter prism_elt_type
subroutine get_data_nvar(FFORMAT, FID, NVAR, IERR)
Definition: get_data_nvar.f:7
integer, parameter triangle_elt_type
subroutine get_bnd_nelem(FFORMAT, FID, TYPE_BND_ELEM, NELEM, IERR)
Definition: get_bnd_nelem.f:7
integer, parameter point_bnd_elt_type
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_nelem(FFORMAT, FID, TYP_ELEM, NELEM, IERR)
Definition: get_mesh_nelem.f:7
subroutine get_mesh_npoin_per_element(FFORMAT, FID, TYP_ELEM, NDP, IERR)
subroutine get_mesh_dimension(FFORMAT, FID, NDIM, IERR)
integer, parameter edge_bnd_elt_type
subroutine get_mesh_title(FFORMAT, FID, TITLE, IERR)
Definition: get_mesh_title.f:7
integer, parameter triangle_bnd_elt_type
integer, parameter tetrahedron_elt_type
integer, parameter quadrangle_elt_type
subroutine get_mesh_nplan(FFORMAT, FID, NPLAN, IERR)
Definition: get_mesh_nplan.f:7
integer, parameter type_null
Definition: bief.f:3