1 subroutine eslmm1 ( idfmed, nomamd, lnomam,
4 > degre, mailet, homolo, nbmane,
5 > nbelem, nbmaae, nbmafe,
6 > nbmapo, nbsegm, nbtria, nbtetr,
7 > nbquad, nbhexa, nbpent, nbpyra,
8 > nbfmed, ngrouc, nbgrm,
9 > nbequi, nbeqno, nbeqmp, nbeqar,
12 > ulsort, langue, codret )
13 c ______________________________________________________________________
17 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
19 c Version originale enregistree le 18 juin 1996 sous le numero 96036
20 c aupres des huissiers de justice Simart et Lavoir a Clamart
21 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
22 c aupres des huissiers de justice
23 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
25 c HOMARD est une marque deposee d'Electricite de France
31 c ______________________________________________________________________
33 c Entree-Sortie - Lecture du Maillage au format MED - phase 1
35 c Remarque : on suppose que le maillage est conforme
36 c ______________________________________________________________________
38 c . nom . e/s . taille . description .
39 c .____________________________________________________________________.
40 c . idfmed . e . 1 . identificateur du fichier de .
41 c . . . . maillage d'entree .
42 c . nomamd . e . char64 . nom du maillage MED .
43 c . lnomam . e . 1 . longueur du nom du maillage voulu .
44 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
45 c . langue . e . 1 . langue des messages .
46 c . . . . 1 : francais, 2 : anglais .
47 c . codret . es . 1 . code de retour des modules .
48 c . . . . 0 : pas de probleme .
49 c . . . . 1 : probleme .
50 c ______________________________________________________________________
53 c 0. declarations et dimensionnement
56 c 0.1. ==> generalites
62 parameter ( nompro = 'ESLMM1' )
78 integer sdimca, mdimca
79 integer degre, mailet, homolo, nbmane
80 integer nbelem, nbmaae, nbmafe,
81 > nbmapo, nbsegm, nbtria, nbtetr,
82 > nbquad, nbhexa, nbpent, nbpyra,
83 > nbfmed, ngrouc, nbgrm,
84 > nbequi, nbeqno, nbeqmp, nbeqar, nbeqtr, nbeqqu
90 integer ulsort, langue, codret
92 c 0.4. ==> variables locales
96 integer nbmai1, nbmai2
97 integer nbseg2, nbseg3
98 integer nbtri3, nbtri6, nbtri7
99 integer nbtet4, nbte10
100 integer nbqua4, nbqua8, nbqua9
101 integer nbhex8, nbhe20, nbhe27
102 integer nbpen6, nbpe15
103 integer nbpyr5, nbpy13
104 integer codre1, codre2, codre3, codre4, codre5
107 integer typnoe, typpoi, typseg, typtri, typqua
110 integer iaux1, iaux2, iaux3, iaux4, iaux5
113 integer nstep, nctcor
120 parameter ( nbmess = 150 )
121 character*80 texte(nblang,nbmess)
122 c ______________________________________________________________________
128 c 1.1. ==> les messages
132 #ifdef _DEBUG_HOMARD_
133 write (ulsort,texte(langue,1)) 'Entree', nompro
137 texte(1,4) = '(''Nombre de mailles '',a6,'' :'',i10)'
139 > '(''Ces types de mailles ne sont pas acceptees par HOMARD.'')'
141 texte(2,4) = '(''Number of meshes '',a6,'' :'',i10)'
143 > '(''These kinds of elements are not treated in HOMARD.'')'
165 do 11, jaux = 65 , iaux
166 titre(jaux:jaux) = ' '
170 c 2. recherche des differents nombres
172 c 2.1. ==> nombre de sommets
174 if ( codret.eq.0 ) then
176 #ifdef _DEBUG_HOMARD_
177 write (ulsort,texte(langue,3)) 'ESLMMN', nompro
179 call eslmmn ( idfmed, nomamd, lnomam,
181 > ulsort, langue, codret )
185 c 2.2. ==> les mailles
187 if ( codret.eq.0 ) then
189 #ifdef _DEBUG_HOMARD_
190 write (ulsort,texte(langue,3)) 'ESLNMA', nompro
192 call eslnma ( idfmed, nomamd, mdimca,
193 > nbelem, nbmapo, nbsegm, nbtria, nbtetr,
194 > nbquad, nbhexa, nbpyra, nbpent,
196 > nbtri3, nbtri6, nbtri7,
198 > nbqua4, nbqua8, nbqua9,
199 > nbhex8, nbhe20, nbhe27,
202 > ulsort, langue, codret )
206 if ( codret.eq.0 ) then
208 if ( nbhe27.gt.0 ) then
210 write (ulsort,texte(langue,4)) 'HEXA27', nbhe27
211 write (ulsort,texte(langue,5))
216 if ( nbtri7.gt.0 ) then
219 if ( nbqua9.gt.0 ) then
222 if ( nbhe27.gt.0 ) then
228 c 2.3. ==> nombre de familles et de groupes cumules
230 if ( codret.eq.0 ) then
232 #ifdef _DEBUG_HOMARD_
233 write (ulsort,texte(langue,3)) 'MFANFA', nompro
235 call mfanfa ( idfmed, nomamd, nbfmed, codret )
239 if ( codret.eq.0 ) then
241 do 23 , iaux = 1 , nbfmed
243 if ( codret.eq.0 ) then
245 #ifdef _DEBUG_HOMARD_
246 write (ulsort,texte(langue,3)) 'MFANFG', nompro
248 call mfanfg ( idfmed, nomamd, iaux, ngro, codre0 )
249 codret = max ( abs(codre0), codret )
251 ngrouc = ngrouc + ngro
252 nbgrm = max ( ngro, nbgrm )
264 if ( codret.eq.0 ) then
266 c 3.1. ==> Nombre de mailles
268 nbmai1 = nbtet4 + nbtri3 + nbseg2
269 > + nbqua4 + nbhex8 + nbpyr5 + nbpen6
270 nbmai2 = nbte10 + nbtri6 + nbseg3
271 > + nbqua8 + nbhe20 + nbpy13 + nbpe15
272 > + nbtri7 + nbqua9 + nbhe27
274 c 3.2. ==> nbmane : nombre maximal de noeud par element
276 if ( nbmai1.gt.0 ) then
278 if ( nbmai2.gt.0 ) then
279 write(ulsort,texte(langue,27)) nbmai1, nbmai2
285 if ( nbhexa.gt.0 ) then
287 elseif ( nbpent.gt.0 ) then
289 elseif ( nbpyra.gt.0 ) then
291 elseif ( nbtetr.gt.0 .or. nbquad.gt.0 ) then
293 elseif ( nbtria.gt.0 ) then
299 else if ( nbmai2.gt.0 ) then
303 if ( nbhe27.gt.0 ) then
305 elseif ( nbhe20.gt.0 ) then
307 elseif ( nbpent.gt.0 ) then
309 elseif ( nbpyra.gt.0 ) then
311 elseif ( nbtetr.gt.0 ) then
313 elseif ( nbqua9.gt.0 ) then
315 elseif ( nbqua8.gt.0 ) then
317 elseif ( nbtri7.gt.0 ) then
319 elseif ( nbtri6.gt.0 ) then
331 c 3.3. ==> nbmaae : nombre maximal d'aretes par element
332 c nbmafe : nombre maximal de faces par element
334 if ( nbhexa.gt.0 ) then
337 else if ( nbpent.gt.0 ) then
340 else if ( nbpyra.gt.0 ) then
343 else if ( nbtetr.gt.0 ) then
346 else if ( nbquad.gt.0 ) then
349 else if ( nbtria.gt.0 ) then
352 else if ( nbsegm.gt.0 ) then
359 c 4. les equivalences
360 c remarque : il faut le faire seulement maintenant, sinon on ne
361 c sait pas ce que valent typseg, typtri et typqua.
364 c 4.1. ==> le nombre d'equivalences
366 if ( codret.eq.0 ) then
368 #ifdef _DEBUG_HOMARD_
369 write (ulsort,texte(langue,3)) 'MEQNEQ', nompro
371 call meqneq ( idfmed, nomamd, nbequi, codret )
375 c 4.2. ==> combien de paires d'entites impliquees
384 if ( degre.eq.1 ) then
394 if ( codret.eq.0 ) then
398 do 42 , iaux = 1, nbequi
400 c 4.2.1. ==> nom et description de l'equivalence
402 if ( codret.eq.0 ) then
404 #ifdef _DEBUG_HOMARD_
405 write (ulsort,texte(langue,3)) 'MEQEQI', nompro
407 call meqeqi ( idfmed, nomamd, iaux,
408 > saux64, sau200, nstep, nctcor, codret )
412 c 4.2.2. ==> si l'equivalence est interdite, on passe a la suivante
414 if ( codret.eq.0 ) then
416 if ( saux64.eq.eqinte ) then
425 c 4.2.3. ==> nombre d'entites dans chaque categorie
427 if ( codret.eq.0 ) then
429 #ifdef _DEBUG_HOMARD_
430 write (ulsort,texte(langue,3)) 'MEQCSZ', nompro
432 call meqcsz ( idfmed, nomamd, saux64, numdt, numit,
436 if ( nbmapo.ne.0 ) then
437 call meqcsz ( idfmed, nomamd, saux64, numdt, numit,
445 if ( nbsegm.ne.0 ) then
446 call meqcsz ( idfmed, nomamd, saux64, numdt, numit,
454 if ( nbtria.ne.0 ) then
455 call meqcsz ( idfmed, nomamd, saux64, numdt, numit,
463 if ( nbquad.ne.0 ) then
464 call meqcsz ( idfmed, nomamd, saux64, numdt, numit,
472 codre0 = min ( codre1, codre2, codre3, codre4, codre5 )
473 codret = max ( abs(codre0), codret,
474 > codre1, codre2, codre3, codre4, codre5 )
478 if ( codret.eq.0 ) then
480 nbeqno = nbeqno + iaux1
481 nbeqmp = nbeqmp + iaux2
482 nbeqar = nbeqar + iaux3
483 nbeqtr = nbeqtr + iaux4
484 nbeqqu = nbeqqu + iaux5
494 if ( codret.eq.0 ) then
496 nbequi = nbequi - jaux
498 if ( nbeqtr.ne.0 .or. nbeqqu.ne.0 ) then
500 elseif ( nbeqar.ne.0 ) then
502 elseif ( nbeqno.ne.0 ) then
514 if ( codret.eq.0 ) then
516 write(ulsort,texte(langue,22)) nomamd(1:lnomam)
527 if ( degre.eq.1 ) then
533 tbiaux(2,iaux) = tbiaux(2,iaux-1) + 3
538 if ( langue.eq.1 ) then
539 c 12345678901234567890123456789012
540 saux32 = 'dans le fichier '
542 saux32 = 'in the file '
544 #ifdef _DEBUG_HOMARD_
545 write (ulsort,texte(langue,3)) 'UTINMA', nompro
547 call utinma ( iaux, saux32,
548 > sdimca, mdimca, degre,
549 > nbnoto, jaux, jaux, jaux,
552 > nbmapo, tbiaux(1,2), tbiaux(1,3), tbiaux(1,4),
553 > tbiaux(1,5), tbiaux(1,6), tbiaux(1,8), tbiaux(1,7),
555 > nbmane, nbmaae, nbmafe,
556 > ulsort, langue, codret)
558 write(ulsort,texte(langue,29)) nbfmed
559 write(ulsort,texte(langue,31)) ngrouc
561 if ( nbequi.ne.0 ) then
562 write(ulsort,texte(langue,41)) nbequi
563 write(ulsort,texte(langue,42)) mess14(langue,3,-1), nbeqno
573 if ( tbiaux(1,iaux).gt.0 ) then
574 write(ulsort,texte(langue,42))
575 > mess14(langue,3,tbiaux(2,iaux)), tbiaux(3,iaux)
586 if ( codret.ne.0 ) then
590 write (ulsort,texte(langue,1)) 'Sortie', nompro
591 write (ulsort,texte(langue,2)) codret
595 #ifdef _DEBUG_HOMARD_
596 write (ulsort,texte(langue,1)) 'Sortie', nompro