1 subroutine utnc03 ( option, nbanci, numfin,
3 > somare, filare, merare,
4 > ngenar, nouare, tabaux,
5 > ulsort, langue, codret )
6 c ______________________________________________________________________
10 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
12 c Version originale enregistree le 18 juin 1996 sous le numero 96036
13 c aupres des huissiers de justice Simart et Lavoir a Clamart
14 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
15 c aupres des huissiers de justice
16 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
18 c HOMARD est une marque deposee d'Electricite de France
24 c ______________________________________________________________________
26 c UTilitaire - Non Conformite - phase 03
28 c On change les numeros des aretes concernees par les non-conformites
29 c On les regroupe par generations, en commencant par celle sans mere
30 c puis celle avec mere, puis celle avec une mere et une grand-mere,
32 c On regroupe ensuite les fratries.
33 c Enfin, on etablit la bonne convention de numerotation des aretes
35 c ______________________________________________________________________
37 c . nom . e/s . taille . description .
38 c .____________________________________________________________________.
39 c . option . e . 1 . option de l'operation de renumerotation .
40 c . . . . 0 : dans chaque fratrie, on classe les .
42 c . . . . -n : decalage des aretes ayant une .
43 c . . . . ascendance de n generations .
44 c . . . . n : on regroupe par fratries les aretes .
45 c . . . . ayant une ascendance de n generations.
46 c . nbanci . e . 1 . nombre d'aretes de non conformite initiale .
47 c . . . . egal au nombre d'aretes recouvrant 2 autres.
48 c . numfin . es . 1 . numero d'ordre maximal pour le classement .
49 c . arreca . e .2*nbanci. liste des aretes recouvrant une autre .
50 c . arrecb . e .2*nbanci. liste des aretes recouvertes par une autre .
51 c . somare . e .2*nbarto. numeros des extremites d'arete .
52 c . filare . e . nbarto . premiere fille des aretes .
53 c . merare . e . nbarto . mere des aretes .
54 c . ngenar . e . nbarto . nombre de generations au-dessus des aretes .
55 c . nouare . s .0:nbarto. nouveau numero des aretes .
56 c . tabaux . a .3*nbanci. tableau auxiliaire .
57 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
58 c . langue . e . 1 . langue des messages .
59 c . . . . 1 : francais, 2 : anglais .
60 c . codret . es . 1 . code de retour des modules .
61 c . . . . 0 : pas de probleme .
62 c . . . . -1 : mauvaise option .
63 c . . . . >0 : erreur dans le traitement de l'option .
64 c ______________________________________________________________________
67 c 0. declarations et dimensionnement
70 c 0.1. ==> generalites
76 parameter ( nompro = 'UTNC03' )
92 integer arreca(2*nbanci), arrecb(2*nbanci)
93 integer somare(2,nbarto)
94 integer filare(nbarto), merare(nbarto)
95 integer ngenar(nbarto), nouare(0:nbarto)
96 integer tabaux(3,nbanci)
98 integer ulsort, langue, codret
100 c 0.4. ==> variables locales
102 integer iaux, jaux, kaux
104 integer laret1, laret2, laretg
107 parameter ( nbmess = 20 )
108 character*80 texte(nblang,nbmess)
110 c 0.5. ==> initialisations
111 c ______________________________________________________________________
121 #ifdef _DEBUG_HOMARD_
122 write (ulsort,texte(langue,1)) 'Entree', nompro
126 texte(1,4) = '(''Nombre de non-conformites :'',i10))'
127 texte(1,5) = '(''Traitement numero'',i3))'
129 > '(''Mise en coherence des '',a,''dans les fratries de '',a)'
130 texte(1,7) = '(''Decalage des '',a,'' de generation'',i3)'
131 texte(1,8) = '(''Regroupement des '',a,'' de generation'',i3)'
132 texte(1,9) = '(''Classement avant'',i10)'
133 texte(1,10) = '(i10,1x,a,''dans la generation'',i10)'
134 texte(1,11) = '(''Nouveau numero du '',a,i10,'' : '',i10)'
135 texte(1,12) = '(''Il devrait etre '',a,i10)'
136 texte(1,18) = '(''Generation du '',a,i10,'' :'',i4)'
137 texte(1,19) = '(''Examen du '',a,i10)'
138 texte(1,20) = '(''.. couvert par le '',a,i10)'
140 texte(2,4) = '(''Number of non-conformal situations :'',i10))'
141 texte(2,5) = '(''Treatment #'',i3)'
143 > '(''Coherence of '',a,''in brotherhood of '',a)'
144 texte(2,7) = '(''Renumbering of '',a,'' in generation'',i3)'
145 texte(2,8) = '(''Gathering of '',a,'' in generation'',i3)'
146 texte(2,9) = '(''Sort before'',i10)'
147 texte(2,10) = '(i10,1x,a,''in generation'',i10)'
148 texte(2,11) = '(''New # for '',a,i10,'' : '',i10)'
149 texte(2,12) = '(''It should be '',a,i10)'
150 texte(2,18) = '(''Generation of '',a,i10,'' :'',i4)'
151 texte(2,19) = '(''Examination of '',a,'' #'',i10)'
152 texte(2,20) = '(''.. covered by '',a,'' #'',i10)'
154 c 1.2. ==> initialisation
158 if ( option.lt.0 ) then
160 elseif ( option.gt.0 ) then
164 #ifdef _DEBUG_HOMARD_
165 write (ulsort,texte(langue,4)) nbanci
167 #ifdef _DEBUG_HOMARD_
168 write (ulsort,texte(langue,5)) option
169 if ( option.eq.0 ) then
170 write (ulsort,texte(langue,6)) mess14(langue,3,-1),
173 if ( option.lt.0 ) then
174 write (ulsort,texte(langue,7)) mess14(langue,3,1), numgen
175 write (ulsort,texte(langue,9)) numfin
177 write (ulsort,texte(langue,8)) mess14(langue,3,1), numgen
182 c 1.3. ==> Aucune renumerotation au depart
184 do 12 , iaux = 0 , nbarto
189 c 2. option < 0 : on rassemble les aretes de meme generation
190 c on les deplace vers la fin, en prenant soin de ne pas ecraser
191 c les generations plus jeunes (d'ou le demarrage a ifin)
194 if ( option.lt.0 ) then
198 do 21 , iaux = 1 , nbarto
200 if ( codret.eq.0 ) then
202 if ( ngenar(iaux).eq.numgen .and. iaux.le.ifin ) then
204 #ifdef _DEBUG_HOMARD_
205 write (ulsort,texte(langue,19)) mess14(langue,1,1), iaux
207 do 211 , jaux = ifin, 1, -1
208 if ( jaux.eq.iaux ) then
210 elseif ( ngenar(jaux).lt.numgen ) then
214 #ifdef _DEBUG_HOMARD_
215 write (ulsort,texte(langue,19)) mess14(langue,1,1),iaux
216 write (ulsort,*) iaux,' devient', jaux
235 #ifdef _DEBUG_HOMARD_
236 write (ulsort,texte(langue,10)) numfin-ifin,
237 > mess14(langue,3,1), numgen
243 c 3. option > 0 : au sein d'une generation, les aretes sont regroupees
247 elseif ( option.gt.0 ) then
249 c 3.1. ==> Regroupement des triplets de filles adoptives et de mere
250 c 3.1.1. ==> Aucun regroupement au depart
252 do 31 , iaux = 1 , nbanci
260 c 3.2. ==> On regroupe les triplets de filles adoptives et de mere
261 c pour la generation de fille numgen
263 if ( codret.eq.0 ) then
267 do 32 , iaux = 1 , ifin
269 if ( codret.eq.0 ) then
271 laret1 = arrecb(iaux)
273 if ( ngenar(laret1).eq.numgen ) then
275 laretg = arreca(iaux)
277 #ifdef _DEBUG_HOMARD_
278 write (ulsort,texte(langue,19)) mess14(langue,1,1), laret1
279 write (ulsort,texte(langue,20)) mess14(langue,1,1), laretg
282 c on cherche si on a deja place l'arete jumelle de laret1
283 c . si oui, on place l'arete courante en position 2
284 c . si non, on place l'arete courante en position 1 et on
285 c enregistre la mere adoptive
287 do 321 , jaux = 1, kaux
289 if ( tabaux(3,jaux).eq.laretg ) then
290 if ( ngenar(tabaux(1,jaux)).ne.numgen ) then
291 write (ulsort,texte(langue,18)) mess14(langue,1,1),
293 write (ulsort,texte(langue,18)) mess14(langue,1,1),
294 > tabaux(1,jaux), ngenar(tabaux(1,jaux))
295 write (ulsort,texte(langue,20)) mess14(langue,1,1), laretg
298 tabaux(2,jaux) = laret1
305 tabaux(1,kaux) = laret1
306 tabaux(3,kaux) = laretg
316 cgn if ( codret.eq.0 ) then
317 cgn call utvars ( 1, 2, kaux, tabaux,
319 cgn > ulsort, langue, codret )
320 cgn write (ulsort,*) 'dans ',nompro,' ',1, 2,codret
323 cgn if ( codret.eq.0 ) then
324 cgn call utvars ( 2, 3, kaux, tabaux,
326 cgn > ulsort, langue, codret )
327 cgn write (ulsort,*) 'dans ',nompro,' ',2,3,codret
330 cgn if ( codret.eq.0 ) then
331 cgn call utvars ( 3, 1, kaux, tabaux,
333 cgn > ulsort, langue, codret )
334 cgn write (ulsort,*) 'dans ',nompro,' ',3,1,codret
337 c 3.3. ==> Les places 1 et 2 de tabaux contiennent les 2 numeros actuels
338 c de 2 aretes soeurs, dans la generation numgen. Il y a kaux
339 c couples de ce genre.
340 c Ces aretes ont leurs numeros inferieurs a numfin.
341 c On va les placer 2 par 2 a partir de numfin, en descendant.
343 if ( codret.eq.0 ) then
347 do 33 , iaux = 1 , kaux
349 if ( codret.eq.0 ) then
351 laret1 = tabaux(1,iaux)
352 laret2 = tabaux(2,iaux)
354 #ifdef _DEBUG_HOMARD_
355 cgn if (laret1.eq.15935)then
356 write (ulsort,texte(langue,19)) mess14(langue,1,1), laret1
357 write (ulsort,texte(langue,19)) mess14(langue,1,1), laret2
358 write (ulsort,texte(langue,20)) mess14(langue,1,1), tabaux(3,iaux)
362 nouare(laret1) = ifin
363 nouare(laret2) = ifin - 1
371 #ifdef _DEBUG_HOMARD_
372 write (ulsort,texte(langue,10)) numfin-ifin,
373 > mess14(langue,3,1), numgen
377 cgn write (ulsort,9999) (iaux, nouare(iaux),iaux=1,nbarto)
378 cgn 9999 format('nouare(',i10,') = ',i10)
383 c 5. option numero 0 : dans une fratrie, les soeurs sont rangees selon
384 c les numeros des sommets de l'arete mere (cf. cmrda1)
387 elseif ( option.eq.0 ) then
389 do 50 , iaux = 1 , nbarto
391 cgn write (ulsort,*) 'arete ',iaux,' de fille ',filare(iaux)
392 if ( filare(iaux).gt.0 ) then
394 laret1 = filare(iaux)
395 laret2 = filare(iaux) + 1
396 cgn write (ulsort,*) '.. ',laret1, ' de ', somare(1,laret1),
397 cgn >' a ',somare(2,laret1),' de mere ',merare(laret1)
398 cgn write (ulsort,*) '.. ',laret2, ' de ', somare(1,laret2),
399 cgn >' a ',somare(2,laret2),' de mere ',merare(laret2)
401 if ( merare(laret2).eq.iaux ) then
403 if ( somare(1,laret1).gt.somare(1,laret2) ) then
404 cgn write (ulsort,*) 'echange des aretes ',laret1, ' et ', laret2
405 nouare(laret1) = laret2
406 nouare(laret2) = laret1
417 c 6. option autre : impossible
430 cgn write (ulsort,*) 'nouare :'
431 cgn write (ulsort,5555) (nouare(iaux),iaux=1,nbarto)
432 cgn 5555 format(10i8)
434 if ( codret.ne.0 ) then
438 write (ulsort,texte(langue,1)) 'Sortie', nompro
439 write (ulsort,texte(langue,2)) codret
443 #ifdef _DEBUG_HOMARD_
444 write (ulsort,texte(langue,1)) 'Sortie', nompro