The TELEMAC-MASCARET system  trunk
fm3sel.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE fm3sel
3 ! *****************
4 !
5  &(x,y,npoin,nbor,nfic,std,nvar,texte,textlu,varcla,nvarcl,
6  & titre,sorleo,nsor,w,ikle,
7  & ikles,itrav,nelem,nptfr,ndp,mxptvs,mxelvs,date,time,
8  & debu,suit,ecri,listin,iparam,ipobo,x_orig,y_orig)
9 !
10 !***********************************************************************
11 ! PROGICIEL STBTEL V5.2 02/01/96 J-M HERVOUET (LNH) 30 71 80 18
12 !
13 !***********************************************************************
14 !
15 ! COMME FMTSEL, MAIS LA DIMENSION DE SORLEO EST
16 ! PARAMETREE.
17 !
18 ! FONCTIONS : LECTURE DU FICHIER GEOMETRIQUE AU STANDARD SELAFIN
19 ! ECRITURE DU FICHIER GEOMETRIQUE AU STANDARD SELAFIN
20 !
21 ! LES FONCTIONS DE CE SOUS-PROGRAMME PEUVENT ETRE PILOTEES AVEC
22 ! LES ARGUMENTS DEBU, SUIT, ET ECRI
23 !
24 ! ATTENTION : 1) SI DEBU, SUIT ET ECRIT SONT A .FALSE.
25 ! FM3SEL LIT LA GEOMETRIE.
26 !
27 ! 2) SI DEBU ITRAV DOIT ETRE LE TABLEAU IA DES ENTIERS
28 ! ET ON NE DOIT PAS SE SERVIR DE IKLE ET IKLES
29 ! CAR LE SOUS-PROGRAMME DE POINTEURS N'A PAS ENCORE
30 ! ETE APPELE.
31 !-----------------------------------------------------------------------
32 ! ARGUMENTS
33 ! .________________.____.______________________________________________
34 ! | NOM |MODE| ROLE
35 ! |________________|____|______________________________________________
36 ! | X,Y |<-->| COORDONNEES DU MAILLAGE.
37 ! | NPOIN |<-->| NOMBRE DE POINTS DU MAILLAGE.
38 ! | NBOR | -->| NUMEROTAION GLOBALE DES POINTS DE BORD.
39 ! | NFIC | -->| NUMERO DE CANAL DU FICHIER A LIRE OU ECRIRE.
40 ! | STAND | -->| NON UTILISE
41 ! | STD | -->| BINAIRE DU FICHIER (STD, IBM, I3E)
42 ! | NVAR |<-->| NOMBRE DE VARIABLES DANS LE FICHIER
43 ! | TEXTE |<-->| NOMS ET UNITES DES VARIABLES.
44 ! | TEXTLU |<-->| NOMS ET UNITES DES VARIABLES QU'ON VA LIRE.
45 ! | VARCLA | -->| TABLEAU CONTENANT LES VARIABLES CLANDESTI-NES.
46 ! | NVARCL | -->| NOMBRE DE VARIABLES CLANDESTI-NES.
47 ! | TITRE |<-->| TITRE DU FICHIER.
48 ! | SORLEO | -->| VARIABLES QUE L'ON SOUHAITE ECRIRE DANS LE
49 ! | | | FICHIER (TABLEAU DE 26 LOGIQUES)
50 ! | NSOR | -->| DIMENSION DE SOLRLEO
51 ! | W | -->| TABLEAU DE TRAVAIL CONSIDERE ICI COMME REEL
52 ! | | | DE TAILLE NPOIN.
53 ! | IKLE |<-->| TABLE DE CONNECTIVITE (I.E. PASSAGE DE LA
54 ! | | | NUMEROTATION LOCALE DES POINTS D'UN ELEMENT
55 ! | | | A LA NUMEROTATION GLOBALE
56 ! | IKLES | -->| TABLEAU DE TRAVAIL SERVANT A MODIFIER IKLE
57 ! | | | DIMENSION NELEM * NDP
58 ! | ITRAV | -->| TABLEAU DE TRAVAIL ENTIER DE DIMENSION NPOIN
59 ! | NELEM |<-->| NOMBRE D'ELEMENTS DU MAILLAGE.
60 ! | NPTFR |<-->| NOMBRE DE POINTS FRONTIERE DU DOMAINE.
61 ! | NDP |<-->| NOMBRE DE SOMMETS PAR ELEMENT.
62 ! | DEBU | -->| ON LIT UNIQUEMENT LE DEBUT DU FICHIER POUR
63 ! | | | CONNAITRE LES NOMBRES DE POINTS AVEC LESQUELS
64 ! | | | ON POURRA CONSTRUIRE LES POINTEURS.
65 ! | SUIT | -->| ON LIT TOUTE LA PARTIE GEOMETRIE DU FICHIER
66 ! | | | POUR SE PLACER SUR LES ENREGISTREMENTS DES
67 ! | | | RESULTATS.
68 ! | ECRI | -->| ON ECRIT LA PARTIE GEOMETRIE DU FICHIER
69 ! | LISTIN | -->| ECRITURE D'INFORMATIONS SUR LISTING (OU NON)
70 ! |________________|____|______________________________________________
71 ! MODE : -->(DONNEE NON MODIFIEE), <--(RESULTAT), <-->(DONNEE MODIFIEE)
72 !-----------------------------------------------------------------------
73 !
74 ! PROGRAMMES APPELES : LIT , ECRIT
75 !
76 !***********************************************************************
77 !
78 ! LISTE DES ENREGISTREMENTS DU FICHIER GEOMETRIQUE:
79 !
80 ! 1 : TITRE DE L'ETUDE
81 ! 2 : NOMBRE DE FONCTIONS LUES SUR LA GRILLE 1 ET LA GRILLE 2.
82 ! 3 : NOM ET UNITE DES VARIABLES
83 ! 4 : 1,0,0,0,0,0,0,0,0,0
84 ! 5 : NELEM,NPOIN,NDP,1
85 ! 6 : IKLE
86 ! 7 : IPOBO TABLEAU DE DIMENSION NPOIN, 0 POUR LES POINTS
87 ! INTERIEURS, UN NUMERO SINON.
88 ! 8 : X
89 ! 9 : Y
90 !
91 ! CE QUI SUIT N'EST PAS FAIT DANS FM3SEL.
92 !
93 ! 10 : TEMPS
94 ! 11 : VARIABLES DECLAREES EN 3 (DANS L'ORDRE DES DECLARATIONS)
95 !
96 !***********************************************************************
97 !
100  & nptir, out_format
101  USE interface_stbtel, ex_fm3sel => fm3sel
102  USE interface_hermes
103  IMPLICIT NONE
104 !
105  DOUBLE PRECISION, INTENT(IN) :: X(*),Y(*)
106  REAL, INTENT(INOUT) :: W(*)
107 ! IKLE(NELEM,NDP) IKLES(NDP,NELEM)
108  INTEGER, INTENT(IN) :: NBOR(*)
109  INTEGER, INTENT(INOUT) :: IKLE(*),IKLES(*),ITRAV(*)
110  INTEGER, INTENT(INOUT) :: NPOIN,NVAR,MXPTVS,MXELVS,TIME(3),DATE(3)
111  INTEGER, INTENT(IN) :: NFIC,NVARCL,NSOR
112  INTEGER, INTENT(INOUT) :: NELEM,NPTFR,NDP
113  INTEGER, INTENT(IN) :: IPARAM(10),IPOBO(*)
114  LOGICAL, INTENT(IN) :: DEBU,SUIT,ECRI,LISTIN,SORLEO(*)
115  CHARACTER(LEN=3), INTENT(IN) :: STD
116  CHARACTER(LEN=72), INTENT(IN) :: TITRE
117 ! NSOR NSOR+NVARCL
118  CHARACTER(LEN=32), INTENT(IN) :: TEXTE(*),VARCLA(nvarcl)
119  CHARACTER(LEN=32), INTENT(INOUT) :: TEXTLU(*)
120  INTEGER, INTENT(IN) :: X_ORIG, Y_ORIG
121 !
122  INTEGER IELEM,I,IB(10)
123 
124  CHARACTER(LEN=32), ALLOCATABLE :: VAR_INFO(:)
125  INTEGER DATETIME(6), IVAR, IERR
126  CHARACTER(LEN=80) :: TITSEL
127 !
128 !-----------------------------------------------------------------------
129 !
130  IF(ecri) THEN
131  ! COMPUTE NVAR
132  nvar=0
133  DO i=1,nsor
134  IF(sorleo(i)) nvar = nvar + 1
135  ENDDO
136  nvar = nvar + nvarcl
137 
138  ALLOCATE(var_info(nvar))
139  ivar = 1
140  DO i=1,nsor
141  IF(sorleo(i)) THEN
142  var_info(ivar) = texte(i)(1:32)
143  ivar = ivar + 1
144  ENDIF
145  ENDDO
146  IF(nvarcl.NE.0) THEN
147  DO i=1,nvarcl
148  var_info(ivar) = varcla(i)(1:32)
149  ivar = ivar + 1
150  ENDDO
151  ENDIF
152 
153 
154  titsel = repeat(' ', 80)
155  titsel(1:72) = titre
156 
157  CALL set_header(out_format,nfic,titsel,nvar,var_info,ierr)
158 
159  IF(nptir.EQ.0) THEN
160  DO i=1,npoin
161  itrav(i) = 0
162  ENDDO
163  DO i =1,nptfr
164  itrav(nbor(i)) = i
165  ENDDO
166  ELSE
167  itrav(1:nptfr) = 0
168  ENDIF
169 
170  CALL set_mesh(out_format,nfic,2,typ_elem,ndp,nptfr,nptir,
171  & nelem,npoin,ikle,itrav(1:npoin),itrav(1:npoin),
172  & x,y,0,date,time,x_orig,y_orig,ierr)
173 
174  ELSE IF (debu) THEN
175  CALL get_mesh_connectivity(out_format,nfic,typ_elem,
176  & itrav(1+npoin:nelem*ndp+npoin+1),nelem,ndp,ierr)
177 
178  CALL get_bnd_ipobo(out_format,nfic,npoin,nptfr,
179  & typ_bnd_elem,itrav(1:npoin),ierr)
180  nptfr = 0
181  IF(npoin.GE.1) THEN
182  DO i = 1 , npoin
183  IF(itrav(i).NE.0) nptfr = nptfr + 1
184  ENDDO
185  ENDIF
186 ! ITRAV(1) : IPOBO ITRAV(1+NPOIN) : IKLES
187 ! ITRAV(1+NPOIN+NDP*NELEM) : TABLEAU DE TRAVAIL.
188  CALL mxptel(mxptvs,mxelvs,itrav(1+npoin),
189  & itrav(1+npoin+ndp*nelem),
190  & npoin,nelem,ndp,itrav,listin)
191 ! IPOBO EST MODIFIE PAR MXPTEL
192 
193  ELSE
194  ! LIT ACTION
195  CALL get_mesh_date(out_format,nfic,datetime,ierr)
196  CALL check_call(ierr, 'FM3SEL:GET_MESH_DATA')
197  date = datetime(1:3)
198  time = datetime(4:6)
199 
200  CALL get_mesh_nelem(out_format,nfic,typ_elem,nelem,ierr)
201  CALL check_call(ierr, 'GET_MESH_NELEM:TRIA')
202 
203  CALL get_mesh_npoin(out_format,nfic,typ_elem,npoin,ierr)
204  CALL check_call(ierr, 'GET_MESH_NPOIN:TRIA')
205 
206  CALL get_mesh_connectivity(out_format,nfic,typ_elem,ikles,
207  & nelem,ndp,ierr)
208  CALL check_call(ierr, 'GET_MESH_CONNECTIVITY:TRIA')
209 
210  CALL get_mesh_npoin_per_element(out_format,nfic,typ_elem,
211  & ib(3),ierr)
212 
213  DO i = 1,ndp
214  DO ielem = 1,nelem
215  ikle((i-1)*nelem+ielem) = ikles((ielem-1)*ndp+i)
216  ENDDO
217  ENDDO
218  ENDIF
219 !
220  IF(debu.AND.listin) THEN
221  WRITE(lu,301) titre
222  WRITE(lu,501) nptfr,nelem,npoin
223  IF(npoin.LT.3.OR.nptfr.LT.3.OR.nptfr.GE.npoin) THEN
224  WRITE(lu,24) npoin,nptfr
225  CALL plante(1)
226  stop
227  ENDIF
228  ENDIF
229 !
230 !-----------------------------------------------------------------------
231 !
232 ! FORMATS D'IMPRESSION :
233 !
234 24 FORMAT(1x,'FM3SEL : NUMBER OF POINTS IN THE MESH: ',1i9,/,1x,
235  & ' NUMBER OF BOUNDARY POINTS: ',1i9,/,1x,
236  & ' WRONG DATA, PROGRAMME STOPPED')
237 301 FORMAT(1x,//,1x,'TITLE: ',a72,/)
238 501 FORMAT(1x,'NUMBER OF BOUNDARY POINTS: ',1i9,/,1x,
239  &'NUMBER OF ELEMENTS:',1i9,/,1x,'NUMBER OF POINTS:',1i9)
240 !
241 !-----------------------------------------------------------------------
242 !
243  RETURN
244  END
subroutine get_mesh_npoin(FFORMAT, FID, TYP_ELEM, NPOIN, IERR)
Definition: get_mesh_npoin.f:7
subroutine mxptel(MXPTVS, MXELVS, IKLES, IELM, NPOIN, NELEM, NDP, IPOBO, LISTIN)
Definition: mxptel.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_bnd_ipobo(FFORMAT, FID, NPOIN, NELEBD, TYP_BND_ELEM, IPOBO, IERR)
Definition: get_bnd_ipobo.f:7
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 fm3sel(X, Y, NPOIN, NBOR, NFIC, STD, NVAR, TEXTE, TEXTLU, VARCLA, NVARCL, TITRE, SORLEO, NSOR, W, IKLE, IKLES, ITRAV, NELEM, NPTFR, NDP, MXPTVS, MXELVS, DATE, TIME, DEBU, SUIT, ECRI, LISTIN, IPARAM, IPOBO, X_ORIG, Y_ORIG)
Definition: fm3sel.f:10
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_connectivity(FFORMAT, FID, TYP_ELEM, IKLE, NELEM, NDP, IERR)