1 subroutine utb05a ( choix,
7 > tritet, cotrte, aretet, hettet,
8 > quahex, coquhe, arehex, hethex,
9 > facpyr, cofapy, arepyr, hetpyr,
10 > facpen, cofape, arepen, hetpen,
12 > nbeexa, tbiau1, tbiau2, tabaur, tabau2,
14 > ulsort, langue, codret )
15 c ______________________________________________________________________
19 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
21 c Version originale enregistree le 18 juin 1996 sous le numero 96036
22 c aupres des huissiers de justice Simart et Lavoir a Clamart
23 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
24 c aupres des huissiers de justice
25 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
27 c HOMARD est une marque deposee d'Electricite de France
33 c ______________________________________________________________________
35 c UTilitaire - Bilan - option 05 - etape a
37 c remarque : utb05a et utb19a sont des clones
38 c ______________________________________________________________________
40 c but : controle de la qualite des mailles
41 c ______________________________________________________________________
43 c . nom . e/s . taille . description .
44 c .____________________________________________________________________.
45 c . choix . e . 1 . choix du traitement .
46 c . . . . 0 : creation et affichage des histogrammes .
47 c . . . . 2 : sortie de la qualite des triangles .
48 c . . . . 3 : sortie de la qualite des tetraedres .
49 c . . . . 4 : sortie de la qualite des quadrangles .
50 c . . . . 5 : sortie de la qualite des pyramides .
51 c . . . . 6 : sortie de la qualite des hexaedres .
52 c . . . . 7 : sortie de la qualite des pentaedres .
53 c . coonoe . e . nbnoto . coordonnees des noeuds .
55 c . somare . e .2*nbarto. numeros des extremites d'arete .
56 c . hettri . e . nbtrto . historique de l'etat des triangles .
57 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
58 c . famtri . e . nbtrto . famille des triangles .
59 c . cfatri . e . nctftr*. codes des familles des triangles .
60 c . . . nbftri . 1 : famille MED .
61 c . . . . 2 : type de triangle .
62 c . . . . 3 : numero de surface de frontiere .
63 c . . . . 4 : famille des aretes internes apres raf.
64 c . . . . + l : appartenance a l'equivalence l .
65 c . hetqua . e . nbquto . historique de l'etat des quadrangles .
66 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
67 c . famqua . e . nbquto . famille des quadrangles .
68 c . cfaqua . e . nctfqu*. codes des familles des quadrangles .
69 c . . . nbfqua . 1 : famille MED .
70 c . . . . 2 : type de quadrangle .
71 c . . . . 3 : numero de surface de frontiere .
72 c . . . . 4 : famille des aretes internes apres raf.
73 c . . . . 5 : famille des triangles de conformite .
74 c . . . . 6 : famille de sf active/inactive .
75 c . . . . + l : appartenance a l'equivalence l .
76 c . hettet . e . nbteto . historique de l'etat des tetraedres .
77 c . tritet . e .nbtecf*4. numeros des 4 triangles des tetraedres .
78 c . cotrte . e .nbtecf*4. code des 4 triangles des tetraedres .
79 c . aretet . e .nbteca*6. numeros des 6 aretes des tetraedres .
80 c . hethex . e . nbheto . historique de l'etat des hexaedres .
81 c . quahex . e .nbhecf*6. numeros des 6 quadrangles des hexaedres .
82 c . coquhe . e .nbhecf*6. codes des 6 quadrangles des hexaedres .
83 c . arehex . e .nbheca12. numeros des 12 aretes des hexaedres .
84 c . hetpyr . e . nbpyto . historique de l'etat des pyramides .
85 c . facpyr . e .nbpycf*5. numeros des 5 faces des pyramides .
86 c . cofapy . e .nbpycf*5. codes des faces des pyramides .
87 c . arepyr . e .nbpyca*8. numeros des 8 aretes des pyramides .
88 c . hetpen . e . nbpeto . historique de l'etat des pentaedres .
89 c . facpen . e .nbpecf*5. numeros des 5 faces des pentaedres .
90 c . cofape . e .nbpecf*5. code des 5 faces des pentaedres .
91 c . arepen . e .nbpeca*9. numeros des 9 aretes des pentaedres .
92 c . nbeexa . s . 1 . nombre d'entites examinees .
93 c . tbiau1 . a . * . liste des entites examinees .
94 c . tbiau2 . a . * . tableau entier auxiliaire .
95 c . tabaur . a . * . qualite des entites .
96 c . tabau2 . a . * . qualite des entites .
97 c . nbiter . e . 1 . numero de l'iteration courante .
98 c . ulbila . e . 1 . unite logique d'ecriture du bilan .
99 c . ulsort . e . 1 . unite logique de la sortie generale .
100 c . langue . e . 1 . langue des messages .
101 c . . . . 1 : francais, 2 : anglais .
102 c . codret . s . 1 . code de retour des modules .
103 c . . . . 0 : pas de probleme .
104 c . . . . 1 : probleme .
105 c .____________________________________________________________________.
108 c 0. declarations et dimensionnement
111 c 0.1. ==> generalites
117 parameter ( nompro = 'UTB05A' )
141 double precision coonoe(nbnoto,sdim)
142 double precision tabaur(*)
143 double precision tabau2(*)
147 integer somare(2,nbarto)
148 integer hettri(nbtrto), aretri(nbtrto,3)
149 integer cfatri(nctftr,nbftri), famtri(nbtrto)
150 integer hetqua(nbquto), arequa(nbquto,4)
151 integer cfaqua(nctfqu,nbfqua), famqua(nbquto)
152 integer tritet(nbtecf,4), cotrte(nbtecf,4), aretet(nbteca,6)
153 integer hettet(nbteto)
154 integer quahex(nbhecf,6), coquhe(nbhecf,6), arehex(nbheca,12)
155 integer hethex(nbheto)
156 integer facpyr(nbpycf,5), cofapy(nbpycf,5), arepyr(nbpyca,8)
157 integer hetpyr(nbpyto)
158 integer facpen(nbpecf,5), cofape(nbpecf,5), arepen(nbpeca,9)
159 integer hetpen(nbpeto)
161 integer tbiau1(*), tbiau2(*)
165 integer ulsort, langue, codret
167 c 0.4. ==> variables locales
169 integer letria, lequad
173 double precision daux1, daux2
174 double precision tbdaux(1)
177 parameter (nbmess = 10 )
178 character*80 texte(nblang,nbmess)
180 c 0.5. ==> initialisations
181 c ______________________________________________________________________
189 #ifdef _DEBUG_HOMARD_
190 write (ulsort,texte(langue,1)) 'Entree', nompro
195 > '(//,3x,''QUALITES DES MAILLES'',/,3x,20(''=''))'
196 texte(1,5) = '(3x,''Qualite '',a,'' des '',a,'' : '',g12.5)'
197 texte(1,6) = '(3x,''Nombre de '',a,'' a examiner : '',i8)'
198 texte(1,7) = '(3x,''Nombre de '',a,'' aplatis : '',i8)'
201 > '(//,3x,''QUALITIES OF MESHES'',/,3x,19(''=''))'
202 texte(2,5) = '(3x,''Quality '',a,'' of '',a,'': '',g12.5)'
203 texte(2,6) = '(3x,''Number of '',a,'' to be examined: '',i8)'
204 texte(2,7) = '(3x,''Number of flat '',a,'': '',i8)'
208 write (ulsort,texte(langue,4))
209 if ( ulbila.ne.ulsort ) then
210 write (ulbila,texte(langue,4))
215 nbvoto = nbteto + nbpyto + nbheto + nbpeto
218 c 2. calcul des qualites des tetraedres
221 if ( choix.eq.0 .or. choix.eq.3 ) then
223 if ( nbteto.ne.0 ) then
227 #ifdef _DEBUG_HOMARD_
228 write (ulsort,texte(langue,3)) 'UTB05C_te', nompro
231 > iaux, nbteto, nbtecf, nbteca,
234 > hettet, tritet, cotrte, aretet,
236 > nbeexa, tbiau1, tbiau2, tabaur, tabau2,
238 > ulsort, langue, codret )
245 c 3. calcul des qualites des pyramides
247 #ifdef _DEBUG_HOMARD_
248 write (ulsort,90002) '3. pyramides ; codret', codret
251 if ( codret.eq.0 ) then
253 if ( choix.eq.0 .or. choix.eq.5 ) then
255 if ( nbpyto.ne.0 ) then
259 #ifdef _DEBUG_HOMARD_
260 write (ulsort,texte(langue,3)) 'UTB05C_py', nompro
263 > iaux, nbpyto, nbpycf, nbpyca,
266 > hetpyr, facpyr, cofapy, arepyr,
268 > nbeexa, tbiau1, tbiau2, tabaur, tabau2,
270 > ulsort, langue, codret )
279 c 4. calcul des qualites des hexaedres
281 #ifdef _DEBUG_HOMARD_
282 write (ulsort,90002) '4. hexaedres ; codret', codret
285 if ( codret.eq.0 ) then
287 if ( choix.eq.0 .or. choix.eq.6 ) then
289 if ( nbheto.ne.0 ) then
293 #ifdef _DEBUG_HOMARD_
294 write (ulsort,texte(langue,3)) 'UTB05C_he', nompro
297 > iaux, nbheto, nbhecf, nbheca,
300 > hethex, quahex, coquhe, arehex,
302 > nbeexa, tbiau1, tbiau2, tabaur, tabau2,
304 > ulsort, langue, codret )
313 c 5. calcul des qualites des pentaedres
315 #ifdef _DEBUG_HOMARD_
316 write (ulsort,90002) '5. pentaedres ; codret', codret
319 if ( codret.eq.0 ) then
321 if ( choix.eq.0 .or. choix.eq.7 ) then
323 if ( nbpeto.ne.0 ) then
327 #ifdef _DEBUG_HOMARD_
328 write (ulsort,texte(langue,3)) 'UTB05C_pe', nompro
331 > iaux, nbpeto, nbpecf, nbpeca,
334 > hetpen, facpen, cofape, arepen,
336 > nbeexa, tbiau1, tbiau2, tabaur, tabau2,
338 > ulsort, langue, codret )
347 c 6. calcul des qualites des triangles d'un maillage 2d ou 2,5d
349 #ifdef _DEBUG_HOMARD_
350 write (ulsort,90002) '6. triangles ; codret', codret
353 if ( codret.eq.0 ) then
355 if ( choix.eq.0 .or. choix.eq.2 ) then
357 if ( nbtrto.ne.0 ) then
359 c 6.1. ==> liste des triangles a examiner :
360 c . en l'absence de tetraedre, pentaedre et pyramide, ce sont
361 c tous les triangles actifs ;
362 c . en presence de tetraedre, pentaedre ou pyramide, ce sont les
363 c triangles actifs qui sont des elements de calcul
367 if ( nbteto.eq.0 .and. nbpeto.eq.0 .and. nbpyto.eq.0 ) then
369 do 611 , letria = 1 , nbtrto
370 if ( mod(hettri(letria),10).eq.0 ) then
372 tbiau1(nbeexa) = letria
378 do 612 , letria = 1 , nbtrto
379 if ( mod(hettri(letria),10).eq.0 .and.
380 > cfatri(cotyel,famtri(letria)).ne.0 ) then
382 tbiau1(nbeexa) = letria
388 #ifdef _DEBUG_HOMARD_
389 write (ulsort,texte(langue,6)) mess14(langue,3,2), nbeexa
393 #ifdef _DEBUG_HOMARD_
394 write (ulsort,90002) '6.2. calcul ; codret', codret
397 if ( nbeexa.gt.0 ) then
399 do 62 , iaux = 1 , nbeexa
401 letria = tbiau1(iaux)
403 call utqtri ( letria, daux1, daux2,
404 > coonoe, somare, aretri )
412 c 6.3. ==> impression sur la sortie standard et sur un fichier
413 c a exploiter par xmgrace
415 if ( choix.eq.0 ) then
417 if ( nbeexa.gt.0 ) then
422 #ifdef _DEBUG_HOMARD_
423 write (ulsort,texte(langue,3)) 'UTB05B tri', nompro
425 call utb05b ( jaux, iaux, nbeexa, tabaur, tbdaux,
426 > nbiter, rafdef, nbvoto,
429 > ulsort, langue, codret )
442 c 7. calcul des qualites des quadrangles d'un maillage 2d ou 2,5d
444 #ifdef _DEBUG_HOMARD_
445 write (ulsort,90002) '7. quadrangles ; codret', codret
448 if ( codret.eq.0 ) then
450 if ( choix.eq.0 .or. choix.eq.4 ) then
452 if ( nbquto.ne.0 ) then
454 c 7.1. ==> liste des quadrangles a examiner :
455 c . en l'absence d'hexaedre, pentaedre et pyramide, ce sont
456 c tous les quadrangles actifs ;
457 c . en presence d'hexaedre, pentaedre ou pyramide, ce sont les
458 c quadrangles actifs qui sont des elements de calcul
462 if ( nbheto.eq.0 .and. nbpeto.eq.0 .and. nbpyto.eq.0 ) then
464 do 711 , lequad = 1 , nbquto
465 if ( mod(hetqua(lequad),100).eq.0 ) then
467 tbiau1(nbeexa) = lequad
473 do 712 , lequad = 1 , nbquto
474 if ( mod(hetqua(lequad),100).eq.0 .and.
475 > cfaqua(cotyel,famqua(lequad)).ne.0 ) then
477 tbiau1(nbeexa) = lequad
483 #ifdef _DEBUG_HOMARD_
484 write (ulsort,texte(langue,6)) mess14(langue,3,4), nbeexa
488 #ifdef _DEBUG_HOMARD_
489 write (ulsort,90002) '7.2. calcul ; codret', codret
492 if ( nbeexa.gt.0 ) then
494 do 72 , iaux = 1 , nbeexa
496 lequad = tbiau1(iaux)
498 call utqqua ( lequad, daux1, daux2,
499 > coonoe, somare, arequa )
507 c 7.3. ==> impression sur la sortie standard et sur un fichier
508 c a exploiter par xmgrace
510 if ( choix.eq.0 ) then
512 if ( nbeexa.gt.0 ) then
517 #ifdef _DEBUG_HOMARD_
518 write (ulsort,texte(langue,3)) 'UTB05B qua', nompro
520 call utb05b ( jaux, iaux, nbeexa, tabaur, tbdaux,
521 > nbiter, rafdef, nbvoto,
524 > ulsort, langue, codret )
540 if ( codret.ne.0 ) then
544 write (ulsort,texte(langue,1)) 'Sortie', nompro
545 write (ulsort,texte(langue,2)) codret
549 #ifdef _DEBUG_HOMARD_
550 write (ulsort,texte(langue,1)) 'Sortie', nompro