1 subroutine utb11d ( nbbloc, option, tabau4,
8 > ulsort, langue, codret )
9 c ______________________________________________________________________
13 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
15 c Version originale enregistree le 18 juin 1996 sous le numero 96036
16 c aupres des huissiers de justice Simart et Lavoir a Clamart
17 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
18 c aupres des huissiers de justice
19 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
21 c HOMARD est une marque deposee d'Electricite de France
27 c ______________________________________________________________________
29 c UTilitaire - Bilan sur le maillage - option 11 - phase d
31 c ______________________________________________________________________
33 c analyse de la connexite des aretes
34 c ______________________________________________________________________
36 c . nom . e/s . taille . description .
37 c .____________________________________________________________________.
38 c . nbbloc . s . 1 . nombre de blocs .
39 c . option . e . 1 . 0 : on prend toutes les aretes .
40 c . . . . 1 : on prend les aretes actives de HOMARD .
41 c . . . . 2 : on prend les aretes actives du calcul .
42 c . tabau4 . e . nbarto . indicateurs sur les aretes a examiner : .
43 c . . . . 0 : on ne traite pas l'arete .
44 c . . . . >0 : on traite l'arete .
45 c . hetare . e . nbarto . historique de l'etat des aretes .
46 c . somare . e .2*nbarto. numeros des extremites d'arete .
47 c . povoso . e .0:nbnoto. pointeur des voisins par noeud .
48 c . voisom . e . nvosom . aretes voisines de chaque noeud .
49 c . famare . e . nbarto . famille des aretes .
50 c . cfaare . e . nctfar*. codes des familles des aretes .
51 c . . . nbfare . 1 : famille MED .
52 c . . . . 2 : type de segment .
53 c . . . . 3 : orientation .
54 c . . . . 4 : famille d'orientation inverse .
55 c . . . . 5 : numero de ligne de frontiere .
56 c . . . . > 0 si concernee par le suivi de frontiere.
57 c . . . . <= 0 si non concernee .
58 c . . . . 6 : famille frontiere active/inactive .
59 c . . . . 7 : numero de surface de frontiere .
60 c . . . . + l : appartenance a l'equivalence l .
61 c . lapile . a . * . tableau de travail .
62 c . tabau2 . a . nbnoto . tableau de travail .
63 c . nublar . s . nbarto . numero du bloc pour chaque arete .
64 c . ulbila . e . 1 . unite logique d'ecriture du bilan .
65 c . . . . si 0 : on n'ecrit rien .
66 c . ulsort . e . 1 . unite logique de la sortie generale .
67 c . langue . e . 1 . langue des messages .
68 c . . . . 1 : francais, 2 : anglais .
69 c . codret . s . 1 . code de retour des modules .
70 c . . . . 0 : pas de probleme .
71 c . . . . 1 : probleme .
72 c .____________________________________________________________________.
75 c 0. declarations et dimensionnement
78 c 0.1. ==> generalites
84 parameter ( nompro = 'UTB11D' )
101 integer nbbloc, option
102 integer tabau4(nbarto)
103 integer hetare(nbarto), somare(2,nbarto)
104 integer povoso(0:nbnoto), voisom(*)
105 integer famare(nbarto), cfaare(nctfar,nbfare)
108 integer tabau2(nbnoto)
109 integer nublar(nbarto)
112 integer ulsort, langue, codret
114 c 0.4. ==> variables locales
116 integer iaux, jaux, kaux, laux, maux, ldeb, lfin
124 parameter (nbmess = 10 )
125 character*80 texte(nblang,nbmess)
127 c 0.5. ==> initialisations
128 c ______________________________________________________________________
136 #ifdef _DEBUG_HOMARD_
137 write (ulsort,texte(langue,1)) 'Entree', nompro
141 texte(1,4) = '(/,3x,''. Connexite des '',a)'
142 texte(1,10) = '(''.. Impression du bloc'',i8)'
144 texte(2,4) = '(/,3x,''. Connexity of '',a)'
145 texte(2,10) = '(''.. Printing of block #'',i8)'
147 #ifdef _DEBUG_HOMARD_
148 write (ulsort,texte(langue,4)) mess14(langue,3,1)
149 write (ulsort,*) 'option =', option
152 c 1.3. ==> Aucun bloc au depart
154 do 13 , iaux = 1 , nbarto
163 #ifdef _DEBUG_HOMARD_
164 write (ulsort,*) '2. blocs d''aretes ; codret =', codret
170 do 22 , larete = 1 , nbarto
172 #ifdef _DEBUG_HOMARD_
173 write (ulsort,*) 'Debut boucle 22, avant le bloc',nbbloc+1,
174 >', larete =', larete, tabau4(larete)
177 c On examine les aretes presentes dans la liste transmise
179 if ( tabau4(larete).eq.1 ) then
181 c On examine les faces qui ne sont pas deja dans un bloc
183 if ( nublar(larete).eq.0 ) then
185 #ifdef _DEBUG_HOMARD_
186 write (ulsort,*) 'larete =', larete,
187 > ', etat =', hetare(larete),
188 > ', type =',cfaare(cotyel,famare(larete))
191 if ( option.gt.0 ) then
193 etat = mod( hetare(larete) , 10 )
194 if ( option.gt.1 ) then
195 if ( cfaare(cotyel,famare(larete)).eq.0 ) then
206 if ( etat.eq.0 ) then
208 c 2.1. ==> on commence un nouveau bloc :
209 c 2.1.1. ==> impression des caracteristiques du bloc precedent
211 if ( ulbila.gt.0 .and. nbbloc.ge.1 ) then
213 c 2.1.1.1. ==> recherche des noeuds de ce bloc
215 if ( codret.eq.0 ) then
218 #ifdef _DEBUG_HOMARD_
219 write (ulsort,texte(langue,3)) 'UTB11E', nompro
221 call utb11e ( iaux, nbbloc, nublar,
224 > tbiaux, tbiaux, tbiaux, tbiaux,
225 > jaux, jaux, jaux, jaux,
227 > ulsort, langue, codret )
231 c 2.1.1.2. ==> impression veritable
233 if ( codret.eq.0 ) then
235 #ifdef _DEBUG_HOMARD_
236 write (ulsort,texte(langue,10)) nbbloc
237 write (ulsort,*) nublar
242 #ifdef _DEBUG_HOMARD_
243 write (ulsort,texte(langue,3)) 'UTB11F', nompro
245 call utb11f ( nbbloc, jaux, kaux, kaux,
246 > nublar, tabau2, tabau3, tabau4,
248 > ulsort, langue, codret )
254 c 2.1.2. ==> initialisations
258 #ifdef _DEBUG_HOMARD_
259 write (ulsort,*) 'debut du bloc ',nbbloc,' avec elem = ', elem
264 #ifdef _DEBUG_HOMARD_
265 cgn write (ulsort,*) 'bloc ',nbbloc,' avec elem = ', elem
268 c 2.2. ==> memorisation du bloc pour l'element courant
270 nublar(elem) = nbbloc
271 cgn print *,'elem,nbbloc ',elem, nbbloc
273 c 2.3. ==> mise des voisins dans la pile
275 do 222 , iaux = 1 , 2
277 c 2.3.1. ==> reperage des voisins de elem par son iaux-ieme sommet
279 jaux = somare(iaux,elem)
280 ldeb = povoso(jaux-1)+1
283 c 2.3.2. ==> examen des voisins
285 do 2221 , laux = ldeb, lfin
288 if ( nublar(kaux).eq.0 ) then
290 if ( tabau4(kaux).eq.1 ) then
291 if ( option.gt.0 ) then
292 etat = mod( hetare(kaux) , 10 )
293 cgn write (ulsort,*) kaux,' : etat = ', etat,
294 cgn > ', type =',cfaare(cotyel,famare(kaux))
295 if ( option.gt.1 ) then
296 if ( cfaare(cotyel,famare(kaux)).eq.0 ) then
303 cgn print *,'==> etat ',etat
304 if ( etat.eq.0 ) then
305 do 2222 , maux = 1 , lgpile
306 if ( lapile(maux).eq.kaux ) then
310 cgn write (ulsort,*) '==> ajout de', kaux
312 lapile(lgpile) = kaux
313 #ifdef _DEBUG_HOMARD_
314 write (ulsort,1789) (lapile(maux), maux = 1 , lgpile)
326 c 2.4. ==> on passe a l'element suivant de la pile
328 if ( lgpile.gt.0 ) then
330 elem = lapile(lgpile)
335 #ifdef _DEBUG_HOMARD_
336 write (ulsort,*) 'fin du bloc', nbbloc
343 c 2.5. ==> on continue la liste des aretes en prevision d'un eventuel
351 c 3. impression du dernier bloc
353 #ifdef _DEBUG_HOMARD_
354 write(ulsort,*) '3. impression dernier bloc ; codret = ', codret
357 if ( codret.eq.0 ) then
359 if ( ulbila.gt.0 .and. nbbloc.gt.0 ) then
361 c 3.1. ==> recherche des noeuds de ce bloc
363 if ( codret.eq.0 ) then
366 #ifdef _DEBUG_HOMARD_
367 write (ulsort,texte(langue,3)) 'UTB11E', nompro
369 call utb11e ( iaux, nbbloc, nublar,
372 > tbiaux, tbiaux, tbiaux, tbiaux,
373 > jaux, jaux, jaux, jaux,
375 > ulsort, langue, codret )
379 c 3.2. ==> impression veritable
381 if ( codret.eq.0 ) then
383 #ifdef _DEBUG_HOMARD_
384 write (ulsort,texte(langue,10)) nbbloc
385 cgn write (ulsort,*) nublar
390 if ( nbbloc.eq.1 ) then
397 #ifdef _DEBUG_HOMARD_
398 write (ulsort,texte(langue,3)) 'UTB11F', nompro
400 call utb11f ( iaux, jaux, kaux, kaux,
401 > nublar, tabau2, tabau3, tabau4,
403 > ulsort, langue, codret )
406 3000 format(5x,58('*'))
416 if ( codret.ne.0 ) then
420 write (ulsort,texte(langue,1)) 'Sortie', nompro
421 write (ulsort,texte(langue,2)) codret
425 #ifdef _DEBUG_HOMARD_
426 write (ulsort,texte(langue,1)) 'Sortie', nompro