1 subroutine utvar0 ( typver, numele, nbaret, listar, somare,
3 > ulsort, langue, codret )
4 c ______________________________________________________________________
8 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
10 c Version originale enregistree le 18 juin 1996 sous le numero 96036
11 c aupres des huissiers de justice Simart et Lavoir a Clamart
12 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
13 c aupres des huissiers de justice
14 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
16 c HOMARD est une marque deposee d'Electricite de France
22 c ______________________________________________________________________
24 c UTilitaire - Verification des ARetes - 0
26 c ______________________________________________________________________
28 c . nom . e/s . taille . description .
29 c .____________________________________________________________________.
30 c . typver . e . 1 . type de verification : .
31 c . . . . 0 : boucle fermee .
32 c . . . . -1 : continuite, ouverture aux 2 extremites.
33 c . . . . n>0 : de l'element de type n ad-hoc .
34 c . numele . e . 1 . numero de l'element si typver = 0 .
35 c . nbaret . e . 1 . nombre d'aretes a examiner .
36 c . listar . e . nbaret . liste des aretes a examiner .
37 c . somare . e . 2*nbar . numeros des extremites d'arete .
38 c . ulbila . e . 1 . unite logique d'ecriture du bilan .
39 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
40 c . langue . e . 1 . langue des messages .
41 c . . . . 1 : francais, 2 : anglais .
42 c . codret . es . 1 . code de retour des modules .
43 c . . . . 0 : pas de probleme .
44 c . . . . 1 : pas assez d'arete dans la liste .
45 c . . . . 2 : mauvais type de verification .
46 c . . . . 10 : les aretes ne se suivent pas .
47 c . . . . 11 : la suite des aretes ne ferme pas .
48 c ______________________________________________________________________
51 c 0. declarations et dimensionnement
54 c 0.1. ==> generalites
60 parameter ( nompro = 'UTVAR0' )
72 integer typver, numele, nbaret
73 integer listar(nbaret)
77 integer ulsort, langue, codret
79 c 0.4. ==> variables locales
81 integer iaux, jaux, kaux
84 integer laret1, laret2
94 parameter ( nbmess = 20 )
95 character*80 texte(nblang,nbmess)
97 c 0.5. ==> initialisations
99 data nbaref / 1, 3, 6, 4, 8, 12, 9 /
101 c Pour chaque sommet j, arsoxx(i,j) donne le numero local dec
102 c la i-eme arete qui y aboutit.
104 c pour un tetraedre :
106 c a1 est l'arete entre s1 et s2
107 c a2 est l'arete entre s1 et s3
108 c a3 est l'arete entre s1 et s4
109 c a4 est l'arete entre s2 et s3
110 c a5 est l'arete entre s2 et s4
111 c a6 est l'arete entre s3 et s4
113 data arsote / 1, 2, 3, 1, 4, 5, 2, 4, 6, 3, 5, 6 /
117 c a1 est l'arete entre s1 et s2
118 c a2 est l'arete entre s1 et s4
119 c a3 est l'arete entre s2 et s3
120 c a4 est l'arete entre s3 et s4
121 c a5 est l'arete entre s1 et s6
122 c a6 est l'arete entre s2 et s5
123 c a7 est l'arete entre s4 et s7
124 c a8 est l'arete entre s3 et s8
125 c a9 est l'arete entre s5 et s6
126 c a10 est l'arete entre s6 et s7
127 c a11 est l'arete entre s5 et s8
128 c a12 est l'arete entre s7 et s8
130 data arsohe / 1, 2, 5, 1, 3, 6, 3, 4, 8, 2, 4, 7,
131 > 6, 9, 11, 5, 9, 10, 7, 10, 12, 8, 11, 12 /
133 c pour une pyramide :
135 c a1 est l'arete entre s1 et s5
136 c a2 est l'arete entre s2 et s5
137 c a3 est l'arete entre s3 et s5
138 c a4 est l'arete entre s4 et s5
139 c a5 est l'arete entre s1 et s2
140 c a6 est l'arete entre s2 et s3
141 c a7 est l'arete entre s3 et s4
142 c a8 est l'arete entre s4 et s1
144 data arsopy / 1, 5, 8, 0, 2, 5, 6, 0, 3, 6, 7, 0,
145 > 4, 7, 8, 0, 1, 2, 3, 4 /
147 c pour un pentaedre :
149 c a1 est l'arete entre s1 et s3
150 c a2 est l'arete entre s1 et s2
151 c a3 est l'arete entre s2 et s3
152 c a4 est l'arete entre s4 et s6
153 c a5 est l'arete entre s4 et s5
154 c a6 est l'arete entre s5 et s6
155 c a7 est l'arete entre s1 et s4
156 c a8 est l'arete entre s2 et s5
157 c a9 est l'arete entre s3 et s6
159 data arsope / 1, 2, 7, 2, 3, 8, 1, 3, 9, 4, 5, 7,
161 c ______________________________________________________________________
169 #ifdef _DEBUG_HOMARD_
170 write (ulsort,texte(langue,1)) 'Entree', nompro
174 texte(1,4) = '(5x,''Controle des '',a)'
175 texte(1,5) = '(''Il faut au moins 2 aretes dans la liste !'')'
176 texte(1,6) = '(''Mauvais type de verification (typver) :'',i8)'
177 texte(1,7) = '(/,a,'' numero'',i8)'
178 texte(1,8) = '(''Nombre d''''aretes attendues :'',i8)'
179 texte(1,9) = '(''Nombre d''''aretes fournies :'',i8)'
180 texte(1,10) = '(''Les aretes ne se suivent pas :'')'
181 texte(1,11) = '(''La suite des aretes ne ferme pas :'')'
182 texte(1,12) = '(''La suite des aretes n''''est pas conforme :'')'
183 texte(1,20) = '(''Controle impossible'',/)'
185 texte(2,4) = '(5x,''Control of the '',a)'
186 texte(2,5) = '(''At least 2 edges in the list !'')'
187 texte(2,6) = '(''Bad choice for checking (typver) :'',i8)'
188 texte(2,7) = '(/,a,'' #'',i8)'
189 texte(2,8) = '(''Number of expected edges :'',i8)'
190 texte(2,9) = '(''Number of given edges :'',i8)'
191 texte(2,10) = '(''Edges are not following each other :'')'
192 texte(2,11) = '(''The list of edges is not closed :'')'
193 texte(2,12) = '(''The list of edges is not correct :'')'
194 texte(2,20) = '(''Control cannot be done.'',/)'
196 #ifdef _DEBUG_HOMARD_
197 write (ulsort,texte(langue,4)) mess14(langue,3,1)
203 c 2. verifications prealables
206 c 2.1. ==> Au moins 2 aretes dans la liste !
208 if ( nbaret.le.1 ) then
210 write (ulsort,texte(langue,4)) mess14(langue,3,1)
211 write (ulsort,texte(langue,5))
216 c 2.2. ==> Le bon code de controle
218 if ( typver.lt.-1 .or.
222 write (ulsort,texte(langue,6)) typver
225 c 2.2. ==> Le bon nombre d'aretes pour un element
227 elseif ( typver.gt.0 ) then
229 if ( nbaret.ne.nbaref(typver) ) then
230 write (ulsort,texte(langue,7)) mess14(langue,2,typver),
232 write (ulsort,texte(langue,8)) nbaref(typver)
233 write (ulsort,texte(langue,9)) nbaret
241 if ( codret.ne.0 ) then
242 write (ulsort,texte(langue,20))
243 write (ulbila,texte(langue,20))
247 c 3. verification pour un tetraedre
250 #ifdef _DEBUG_HOMARD_
251 if ( typver.ge.3 .and. typver.le.7 ) then
252 write (ulsort,texte(langue,4)) mess14(langue,3,typver)
256 if ( typver.eq.3 ) then
259 #ifdef _DEBUG_HOMARD_
260 write (ulsort,texte(langue,3)) 'UTVAR1', nompro
262 call utvar1 ( iaux, arsote, listar, somare,
263 > ulsort, langue, codret )
266 c 4. verification pour un hexaedre
269 elseif ( typver.eq.6 ) then
272 #ifdef _DEBUG_HOMARD_
273 write (ulsort,texte(langue,3)) 'UTVAR1', nompro
275 call utvar1 ( iaux, arsohe, listar, somare,
276 > ulsort, langue, codret )
279 c 5. verification pour une pyramide
282 elseif ( typver.eq.5 ) then
286 c examen du iaux-eme sommet local
289 if ( iaux.le.4 ) then
295 do 511 , jaux = 1 , 2
297 s1 = somare(jaux,listar(arsopy(1,iaux)))
298 if ( s1.eq.somare(1,listar(arsopy(2,iaux))) .or.
299 > s1.eq.somare(2,listar(arsopy(2,iaux))) ) then
302 if ( s1.eq.somare(1,listar(arsopy(3,iaux))) .or.
303 > s1.eq.somare(2,listar(arsopy(3,iaux))) ) then
306 if ( iaux.eq.5 ) then
307 if ( s1.eq.somare(1,listar(arsopy(4,iaux))) .or.
308 > s1.eq.somare(2,listar(arsopy(4,iaux))) ) then
314 if ( kaux.ne.kvoulu ) then
321 c 6. verification pour un pentaedre
324 elseif ( typver.eq.7 ) then
327 #ifdef _DEBUG_HOMARD_
328 write (ulsort,texte(langue,3)) 'UTVAR1', nompro
330 call utvar1 ( iaux, arsope, listar, somare,
331 > ulsort, langue, codret )
334 c 7. verification de continuite pour les autres types d'element
339 c 7.1. ==> recherche du premier sommet
343 if ( somare(1,laret1).eq.somare(1,laret2) ) then
344 lesom1 = somare(2,laret1)
346 elseif ( somare(1,laret1).eq.somare(2,laret2) ) then
347 lesom1 = somare(2,laret1)
349 elseif ( somare(2,laret1).eq.somare(1,laret2) ) then
350 lesom1 = somare(1,laret1)
352 elseif ( somare(2,laret1).eq.somare(2,laret2) ) then
353 lesom1 = somare(1,laret1)
359 c 7.2. ==> poursuite de la liste
361 do 72 , iaux = 3 , nbaret
363 if ( codret.eq.0 ) then
366 laret2 = listar(iaux)
368 if ( somare(jaux,laret1).eq.somare(1,laret2) ) then
370 elseif ( somare(jaux,laret1).eq.somare(2,laret2) ) then
382 if ( typver.ge.0 ) then
383 if ( lesom1.ne.somare(jaux,laret2) ) then
391 cgn if ( mod(numele,2).eq.0)codret=10
394 c 8. impressions en cas d'erreur
397 if ( codret.ne.0 ) then
399 if ( ulsort.ne.ulbila ) then
405 do 81 , kaux = 1 , jaux
407 if ( kaux.eq.1 ) then
413 if ( typver.gt.0 ) then
414 write (ulaux,texte(langue,7)) mess14(langue,2,typver), numele
416 if ( codret.ge.10 ) then
417 write (ulaux,texte(langue,codret))
420 write (ulaux,8000) mess14(langue,2,1),
421 > mess14(langue,2,-1), mess14(langue,2,-1)
422 do 810 , iaux = 1 , nbaret
423 laret1 = listar(iaux)
424 write (ulaux,8001) laret1, somare(1,laret1), somare(2,laret1)
432 >/,'* ',a14,'* ',a14,'1 * ',a14,'2 *'
434 8001 format('*',i10,' *',2(i10,' *'))
435 8002 format(53('*'),/)
443 if ( codret.ne.0 ) then
447 write (ulsort,texte(langue,1)) 'Sortie', nompro
448 write (ulsort,texte(langue,2)) codret
452 #ifdef _DEBUG_HOMARD_
453 write (ulsort,texte(langue,1)) 'Sortie', nompro