1 subroutine eslnum ( idfmed, nomamd, degre,
3 > nbmapo, nbsegm, nbtria, nbtetr,
4 > nbquad, nbhexa, nbpent, nbpyra,
7 > ulsort, langue, codret )
8 c ______________________________________________________________________
12 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
14 c Version originale enregistree le 18 juin 1996 sous le numero 96036
15 c aupres des huissiers de justice Simart et Lavoir a Clamart
16 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
17 c aupres des huissiers de justice
18 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
20 c HOMARD est une marque deposee d'Electricite de France
26 c ______________________________________________________________________
28 c Entree-Sortie - Lecture des NUMerotations
30 c Par defaut, on part du principe que les elements externes sont
31 c numerotes dans cet ordre :
32 c tetraedres, triangles, segments, mailles-points,
33 c quadrangles, hexaedres, pyramides, pentaedres
34 c Voir eslmm2 pour confirmation.
36 c Si la table de renumerotation est fournie, on ecrase la
38 c ______________________________________________________________________
40 c . nom . e/s . taille . description .
41 c .____________________________________________________________________.
42 c . idfmed . e . 1 . unite logique du maillage d'entree .
43 c . nomamd . e . char64 . nom du maillage MED .
44 c . degre . e . 1 . degre du maillage .
45 c . nbnoto . e . 1 . nombre de noeuds dans le maillage .
46 c . nbelem . e . 1 . nombre d'elements dans le maillage .
47 c . nbmapo . e . 1 . nombre de mailles-points .
48 c . nbsegm . e . 1 . nombre de segments .
49 c . nbtria . e . 1 . nombre de triangles .
50 c . nbtetr . e . 1 . nombre de tetraedres .
51 c . nbhexa . e . 1 . nombre d'hexaedres .
52 c . nbpyra . e . 1 . nombre de pyramides .
53 c . nbpent . e . 1 . nombre de pentaedres .
54 c . nuelex . s . nbelem . numerotation des elements en exterieur .
55 c . nunoex . s . nbnoto . numerotation des noeuds en exterieur .
56 c . numano . s . 1 . numero maximum des noeuds .
57 c . numael . s . 1 . numero maximum des elements .
58 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
59 c . langue . e . 1 . langue des messages .
60 c . . . . 1 : francais, 2 : anglais .
61 c . codret . es . 1 . code de retour des modules .
62 c . . . . 0 : pas de probleme .
63 c . . . . 1 : probleme .
64 c ______________________________________________________________________
67 c 0. declarations et dimensionnement
70 c 0.1. ==> generalites
76 parameter ( nompro = 'ESLNUM' )
89 integer nbnoto, nbelem
90 integer nbmapo, nbsegm, nbtria, nbtetr
91 integer nbquad, nbhexa, nbpent, nbpyra
92 integer nunoex(nbnoto), nuelex(nbelem)
93 integer numano, numael
97 integer ulsort, langue, codret
99 c 0.4. ==> variables locales
104 integer typnoe, typseg, typtri, typqua
105 integer typtet, typhex, typpyr, typpen
106 integer ibtetr, ibtria, ibsegm, ibmapo
107 integer ibquad , ibhexa, ibpyra, ibpent
108 integer codre1, codre2, codre3, codre4, codre5
109 integer codre6, codre7, codre8, codre9
111 integer ntabno, ntabpo, ntabse, ntabtr, ntabqu
112 integer ntabte, ntabhe, ntabpy, ntabpe
114 integer datype, chgt, tsf
117 parameter ( nbmess = 10 )
118 character*80 texte(nblang,nbmess)
119 c ______________________________________________________________________
125 c 1.1. ==> les messages
129 #ifdef _DEBUG_HOMARD_
130 write (ulsort,texte(langue,1)) 'Entree', nompro
135 c 2. grandeurs de base
139 if ( degre.eq.1 ) then
159 ibsegm = nbtetr + nbtria + 1
160 ibmapo = nbtetr + nbtria + nbsegm + 1
161 ibquad = nbtetr + nbtria + nbsegm + nbmapo + 1
162 ibhexa = nbtetr + nbtria + nbsegm + nbmapo + nbquad + 1
163 ibpyra = nbtetr + nbtria + nbsegm + nbmapo + nbquad + nbhexa + 1
164 ibpent = nbtetr + nbtria + nbsegm + nbmapo + nbquad + nbhexa
172 c 3. les renumerotations
174 #ifdef _DEBUG_HOMARD_
175 write (ulsort,*) '3. les renumerotations ; codret = ', codret
178 c 3.1. ==> initialisation a la non renumerotation
180 if ( codret.eq.0 ) then
182 do 311 , iaux = 1, nbnoto
185 do 312 , iaux = 1, nbelem
193 c 3.2. ==> le nombre de noeuds et de mailles a renumeroter
195 if ( codret.eq.0 ) then
197 #ifdef _DEBUG_HOMARD_
198 write (ulsort,texte(langue,3)) 'MMHNME_NO', nompro
200 call mmhnme ( idfmed, nomamd, numdt, numit,
201 > ednoeu, typnoe, datype, ednoda, chgt, tsf,
203 call mmhnme ( idfmed, nomamd, numdt, numit,
204 > edmail, edpoi1, datype, ednoda, chgt, tsf,
206 call mmhnme ( idfmed, nomamd, numdt, numit,
207 > edmail, typseg, datype, ednoda, chgt, tsf,
209 call mmhnme ( idfmed, nomamd, numdt, numit,
210 > edmail, typtri, datype, ednoda, chgt, tsf,
212 call mmhnme ( idfmed, nomamd, numdt, numit,
213 > edmail, typqua, datype, ednoda, chgt, tsf,
215 call mmhnme ( idfmed, nomamd, numdt, numit,
216 > edmail, typtet, datype, ednoda, chgt, tsf,
218 call mmhnme ( idfmed, nomamd, numdt, numit,
219 > edmail, typhex, datype, ednoda, chgt, tsf,
221 call mmhnme ( idfmed, nomamd, numdt, numit,
222 > edmail, typpyr, datype, ednoda, chgt, tsf,
224 call mmhnme ( idfmed, nomamd, numdt, numit,
225 > edmail, typpen, datype, ednoda, chgt, tsf,
228 codre0 = min ( codre1, codre2, codre3, codre4, codre5,
229 > codre6, codre7, codre8, codre9 )
230 codret = max ( abs(codre0), codret,
231 > codre1, codre2, codre3, codre4, codre5,
232 > codre6, codre7, codre8, codre9 )
235 #ifdef _DEBUG_HOMARD_
236 if ( codret.eq.0 ) then
237 1000 format(a,' = ',10i13)
238 write (ulsort,1000) 'ntabno', ntabno
239 write (ulsort,1000) 'ntabpo', ntabpo
240 write (ulsort,1000) 'ntabse', ntabse
241 write (ulsort,1000) 'ntabtr', ntabtr
242 write (ulsort,1000) 'ntabqu', ntabqu
243 write (ulsort,1000) 'ntabte', ntabte
244 write (ulsort,1000) 'ntabhe', ntabhe
245 write (ulsort,1000) 'ntabpy', ntabpy
246 write (ulsort,1000) 'ntabpe', ntabpe
248 write (ulsort,1000) 'codrei',
249 > codre1, codre2, codre3, codre4, codre5,
250 > codre6, codre7, codre8, codre9
254 c 3.3. ==> les tables de renumerotation
256 c 3.3.1. ==> les noeuds
258 if ( codret.eq.0 ) then
259 if ( nbnoto.gt.0 .and. ntabno.eq.nbnoto ) then
260 #ifdef _DEBUG_HOMARD_
261 write (ulsort,texte(langue,3)) 'MMHENR_NO', nompro
263 call mmhenr ( idfmed, nomamd, numdt, numit,
264 > ednoeu, typnoe, nunoex,
266 if ( codret.eq.0 ) then
267 do 331 , iaux = 1, nbnoto
268 numano = max(numano,nunoex(iaux))
274 c 3.3.2. ==> les mailles-points
276 if ( codret.eq.0 ) then
277 if ( nbmapo.gt.0 .and. ntabpo.eq.nbmapo ) then
278 #ifdef _DEBUG_HOMARD_
279 write (ulsort,texte(langue,3)) 'MMHENR_MP', nompro
281 call mmhenr ( idfmed, nomamd, numdt, numit,
282 > edmail, edpoi1, nuelex(ibmapo),
284 if ( codret.eq.0 ) then
285 jaux = ibmapo + nbmapo - 1
286 do 332 , iaux = ibmapo , jaux
287 numael = max(numael,nuelex(iaux))
293 c 3.3.3. ==> les segments
295 if ( codret.eq.0 ) then
296 if ( nbsegm.gt.0 .and. ntabse.eq.nbsegm ) then
297 #ifdef _DEBUG_HOMARD_
298 write (ulsort,texte(langue,3)) 'MMHENR_AR', nompro
300 call mmhenr ( idfmed, nomamd, numdt, numit,
301 > edmail, typseg, nuelex(ibsegm),
303 if ( codret.eq.0 ) then
304 jaux = ibsegm + nbsegm - 1
305 do 333 , iaux = ibsegm , jaux
306 numael = max(numael,nuelex(iaux))
312 c 3.3.4. ==> les triangles
314 if ( codret.eq.0 ) then
315 if ( nbtria.gt.0 .and. ntabtr.eq.nbtria ) then
316 #ifdef _DEBUG_HOMARD_
317 write (ulsort,texte(langue,3)) 'MMHENR_TR', nompro
319 call mmhenr ( idfmed, nomamd, numdt, numit,
320 > edmail, typtri, nuelex(ibtria),
322 if ( codret.eq.0 ) then
323 jaux = ibtria + nbtria - 1
324 do 334 , iaux = ibtria, jaux
325 numael = max(numael,nuelex(iaux))
331 c 3.3.5. ==> les tetraedres
333 if ( codret.eq.0 ) then
334 if ( nbtetr.gt.0 .and. ntabte.eq.nbtetr ) then
335 #ifdef _DEBUG_HOMARD_
336 write (ulsort,texte(langue,3)) 'MMHENR_TE', nompro
338 call mmhenr ( idfmed, nomamd, numdt, numit,
339 > edmail, typtet, nuelex(ibtetr),
341 if ( codret.eq.0 ) then
342 jaux = ibtetr + nbtetr - 1
343 do 335 , iaux = ibtetr, jaux
344 numael = max(numael,nuelex(iaux))
350 c 3.3.6. ==> les quadrangles
352 if ( codret.eq.0 ) then
353 if ( nbquad.gt.0 .and. ntabqu.eq.nbquad ) then
354 #ifdef _DEBUG_HOMARD_
355 write (ulsort,texte(langue,3)) 'MMHENR_QU', nompro
357 call mmhenr ( idfmed, nomamd, numdt, numit,
358 > edmail, typqua, nuelex(ibquad),
360 if ( codret.eq.0 ) then
361 jaux = ibquad + nbquad - 1
362 do 336 , iaux = ibquad, jaux
363 numael = max(numael,nuelex(iaux))
369 c 3.3.7. ==> les hexaedres
371 if ( codret.eq.0 ) then
372 if ( nbhexa.gt.0 .and. ntabhe.eq.nbhexa ) then
373 #ifdef _DEBUG_HOMARD_
374 write (ulsort,texte(langue,3)) 'MMHENR_HE', nompro
376 call mmhenr ( idfmed, nomamd, numdt, numit,
377 > edmail, typhex, nuelex(ibhexa),
379 if ( codret.eq.0 ) then
380 jaux = ibhexa + nbhexa - 1
381 do 337 , iaux = ibhexa, jaux
382 numael = max(numael,nuelex(iaux))
388 c 3.3.8. ==> les pyramides
390 if ( codret.eq.0 ) then
391 if ( nbpyra.gt.0 .and. ntabpy.eq.nbpyra ) then
392 #ifdef _DEBUG_HOMARD_
393 write (ulsort,texte(langue,3)) 'MMHENR_PY', nompro
395 call mmhenr ( idfmed, nomamd, numdt, numit,
396 > edmail, typpyr, nuelex(ibpyra),
398 if ( codret.eq.0 ) then
399 jaux = ibpyra + nbpyra - 1
400 do 338 , iaux = ibpyra, jaux
401 numael = max(numael,nuelex(iaux))
407 c 3.3.9. ==> les pentaedres
409 if ( codret.eq.0 ) then
410 if ( nbpent.gt.0 .and. ntabpe.eq.nbpent ) then
411 #ifdef _DEBUG_HOMARD_
412 write (ulsort,texte(langue,3)) 'MMHENR_PE', nompro
414 call mmhenr ( idfmed, nomamd, numdt, numit,
415 > edmail, typpen, nuelex(ibpent),
417 if ( codret.eq.0 ) then
418 jaux = ibpent + nbpent - 1
419 do 339 , iaux = ibpent, jaux
420 numael = max(numael,nuelex(iaux))
430 if ( codret.ne.0 ) then
434 write (ulsort,texte(langue,1)) 'Sortie', nompro
435 write (ulsort,texte(langue,2)) codret
439 #ifdef _DEBUG_HOMARD_
440 write (ulsort,texte(langue,1)) 'Sortie', nompro