1 subroutine debil1 ( tyconf,
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 traitement des DEcisions - BILan de la conformite - 1
31 c ______________________________________________________________________
33 c . nom . e/s . taille . description .
34 c .____________________________________________________________________.
35 c . tyconf . e . 1 . 0 : conforme .
36 c . . . . 1 : non-conforme avec au minimum 2 aretes .
37 c . . . . non decoupees en 2 .
38 c . . . . 2 : non-conforme avec 1 seul noeud .
39 c . . . . pendant par arete .
40 c . . . . 3 : non-conforme fidele a l'indicateur .
41 c . . . . -1 : conforme, avec des boites pour les .
42 c . . . . quadrangles, hexaedres et pentaedres .
43 c . . . . -2 : non-conforme avec au maximum 1 arete .
44 c . . . . decoupee en 2 (boite pour les .
45 c . . . . quadrangles, hexaedres et pentaedres) .
46 c . . . . -2 : non-conforme avec au maximum 1 arete .
47 c . . . . decoupee en 2 (boite pour les .
48 c . . . . quadrangles, hexaedres et pentaedres) .
49 c . decfac . es . -nbquto. decision sur les faces (quad. + tri.) .
51 c . decare . es . nbarto . decisions des aretes .
52 c . hetare . e . nbarto . historique de l'etat des aretes .
53 c . hettri . e . nbtrto . historique de l'etat des triangles .
54 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
55 c . hetqua . e . nbquto . historique de l'etat des quadrangles .
56 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
57 c . hethex . e . nbheto . historique de l'etat des hexaedres .
58 c . quahex . e .nbhecf*6. numeros des 6 quadrangles des hexaedres .
59 c . hetpen . e . nbpeto . historique de l'etat des pentaedres .
60 c . facpen . e .nbpecf*5. numeros des 5 faces des pentaedres .
61 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
62 c . langue . e . 1 . langue des messages .
63 c . . . . 1 : francais, 2 : anglais .
64 c . codret . es . 1 . code de retour des modules .
65 c . . . . 0 : pas de probleme .
66 c . . . . 1 : il existe encore des non conformites .
67 c ______________________________________________________________________
70 c 0. declarations et dimensionnement
73 c 0.1. ==> generalites
79 parameter ( nompro = 'DEBIL1' )
97 integer decfac(-nbquto:nbtrto), decare(0:nbarto)
98 integer hetare(nbarto)
99 integer hettri(nbtrto), aretri(nbtrto,3)
100 integer hetqua(nbquto), arequa(nbquto,4)
101 integer hethex(nbheto), quahex(nbhecf,6)
102 integer hetpen(nbpeto), facpen(nbpecf,5)
104 integer ulsort, langue, codret
106 c 0.4. ==> variables locales
109 integer laface, faced, etatfa
110 integer larelo, larete, etatar
111 integer typenh, nbento, nbaret
112 integer nbarpb, nbarp0, nbarp1, nbarp2, aret01
117 parameter ( nbmess = 10 )
118 character*80 texte(nblang,nbmess)
120 c 0.5. ==> initialisations
121 c ______________________________________________________________________
129 #ifdef _DEBUG_HOMARD_
130 write (ulsort,texte(langue,1)) 'Entree', nompro
134 texte(1,4) = '(''Probleme avec un '',a)'
136 > '(a,''numero '',i10,'' : decision ='',i2,'', etat ='',i5)'
137 texte(1,6) = '(''Examen du '',a,'' numero'',i10)'
139 texte(2,4) = '(''Problem with a '',a)'
141 > '(a,''#'',i10,'' : decision='',i2,'', status='',i5)'
142 texte(2,6) = '(''Examination of the '',a,'' #'',i10)'
146 #ifdef _DEBUG_HOMARD_
147 write (ulsort,90002) 'tyconf', tyconf
151 c 2. on explore tous les faces actives a garder
152 c on verifie que les seules situations autorisees sont :
153 c pilraf = 1 ou 2 : libre
154 c pilraf = 3 : non-conforme avec 1 arete decoupee unique par element
162 c ------------- ---------------
170 c ------X------ --------X------
171 c --------------- --------X------
178 c ------X------ --------X------
179 c ==> il reste au moins deux aretes non coupees
180 c <==> le nombre d'aretes active ou a reactiver vaut :
181 c . 2 ou 3 pour un triangle
182 c . 2, 3 ou 4 pour un quadrangle
184 c pilraf = 4 : non-conforme avec 1 noeud pendant unique par arete
192 c ------------- ---------------
200 c ------X------ --------X------
209 c ------X------ --------X------
211 c -------X------- -------X-------
218 c --------X------ --------X------
219 c ==> tout est possible, sauf toutes les aretes coupees
220 c <==> le nombre d'aretes active ou a reactiver vaut :
221 c . 1, 2 ou 3 pour un triangle
222 c . 1, 2, 3 ou 4 pour un quadrangle
229 do 2 , typenh = 2, 4, 2
230 cgn write (ulsort,*) mess14(langue,2,typenh)
232 if ( typenh.eq.2 ) then
239 if ( tyconf.lt.0 ) then
246 do 20, laface = 1 , nbento
248 if ( typenh.eq.2 ) then
249 etatfa = mod( hettri(laface) , 10 )
252 etatfa = mod( hetqua(laface) , 100 )
255 cgn write (ulsort,1789)mess14(langue,1,typenh),
256 cgn > laface,etatfa,decfac(faced)
257 cgn 1789 format(a,i6,' etat=',i4,' decision=',i2)
259 if ( etatfa.eq.0 ) then
261 if ( decfac(faced).eq.0 ) then
263 c 2.1. ==> on compte les aretes actives a garder et les aretes
264 c inactives a reactiver
269 do 200 , larelo = 1 , nbaret
270 if ( typenh.eq.2 ) then
271 larete = aretri(laface,larelo)
273 larete = arequa(laface,larelo)
275 cgn write (ulsort,1789)'arete',larete,hetare(larete),decare(larete)
276 if ( decare(larete).eq.0 ) then
277 etatar = mod( hetare(larete) , 10 )
278 if ( etatar.eq.0 ) then
280 if ( aret01.eq.0 ) then
284 elseif ( decare(larete).eq.-1 ) then
286 if ( aret01.eq.0 ) then
291 cgn write (ulsort,*)'==> nbarpb = ',nbarpb
293 c 2.2. ==> probleme : les decisions sur les aretes sont incoherentes
294 c avec les decisions sur les faces
296 if ( nbarpb.eq.nbarp0 .or. nbarpb.eq.nbarp1 .or.
297 > nbarpb.eq.nbarp2 ) then
298 #ifdef _DEBUG_HOMARD_
299 write (ulsort,texte(langue,4)) mess14(langue,1,typenh)
300 if ( typenh.eq.2 ) then
301 iaux = hettri(laface)
303 iaux = hetqua(laface)
305 write (ulsort,texte(langue,5)) mess14(langue,2,typenh),
306 > laface, decfac(faced), iaux
307 do 220 , larelo = 1 , nbaret
308 if ( typenh.eq.2 ) then
309 larete = aretri(laface,larelo)
311 larete = arequa(laface,larelo)
313 write (ulsort,texte(langue,5)) mess14(langue,2,1),
314 > larete, decare(larete), hetare(larete)
332 c 3. Cas des pentaedres et du raffinement libre : tant que le
333 c raffinement par conformite des pentaedres ne sait pas gerer les
334 c escaliers, il faut forcer un raffinement local par boites de
337 #ifdef _DEBUG_HOMARD_
338 write (ulsort,90002) '3. Cas des pentaedres ; codret', codret
339 write(ulsort,90002) 'nbpeto', nbpeto
342 if ( ( tyconf.eq.0 ) .and. ( nbpeto.ne.0 ) ) then
344 do 30 , lepent = 1 , nbpeto
346 if ( mod(hetpen(lepent),100).eq.0 ) then
348 #ifdef _DEBUG_HOMARD_
349 write (ulsort,texte(langue,6)) mess14(langue,1,7), lepent
353 laface = facpen(lepent,iaux)
355 if ( decfac(-laface).eq.0 ) then
357 do 311 , larelo = 1 , 4
358 larete = arequa(laface,larelo)
359 if ( decare(larete).eq.0 ) then
360 etatar = mod( hetare(larete) , 10 )
361 if ( etatar.eq.2 ) then
364 elseif ( decare(larete).eq.2 ) then
368 cgn if ( nbarpb.ne.0 ) then
369 cgn write (ulsort,texte(langue,6)) mess14(langue,1,7), lepent
370 cgn write(ulsort,90002) '.. nbarpb', nbarpb
372 if ( nbarpb.eq.2 ) then
373 do 312 , larelo = 1 , 4
374 larete = arequa(laface,larelo)
375 if ( decare(larete).eq.0 ) then
376 etatar = mod( hetare(larete) , 10 )
377 if ( etatar.eq.0 ) then
397 c 4. On ne peut pas deraffiner sur deux niveaux d'un coup en presence
400 #ifdef _DEBUG_HOMARD_
401 write (ulsort,90002) '4. deraffinement 2 coups ; codret', codret
404 c 4.1. Cas des hexaedres
407 #ifdef _DEBUG_HOMARD_
408 write (ulsort,90002) '4.1. Cas des hexaedres ; codret', codret
409 write (ulsort,90002) 'nbhecf', nbhecf
412 if ( nbhecf.ne.0 ) then
414 do 410 , lehexa = 1 , nbhecf
416 if ( mod(hethex(lehexa),100).eq.9 ) then
418 #ifdef _DEBUG_HOMARD_
419 write (ulsort,texte(langue,6)) mess14(langue,1,6), lehexa
421 cgn if ( lehexa.eq.244 .or. lehexa.eq.344 .or.
422 cgn > (lehexa.ge.1017 .and. lehexa.le.1024))then
423 cgn write(ulsort,90112)'hethex', lehexa, hethex(lehexa)
424 cgn do 241 , iaux=1,6
425 cgn write(ulsort,90112)' decfac', quahex(lehexa,iaux),
426 cgn > decfac(-quahex(lehexa,iaux))
431 laface = quahex(lehexa,iaux)
433 if ( decfac(-laface).eq.-1 ) then
434 do 4111 , larelo = 1 , 4
435 larete = arequa(laface,larelo)
436 if ( decare(larete).eq. -1 ) then
453 c 4.2. Cas des pentaedres
455 #ifdef _DEBUG_HOMARD_
456 write (ulsort,90002) '4.2. Cas des pentaedres ; codret', codret
457 write (ulsort,90002) 'nbpecf', nbpecf
460 if ( nbpecf.ne.0 ) then
462 do 420 , lepent = 1 , nbpecf
464 if ( mod(hetpen(lepent),100).eq.9 ) then
466 #ifdef _DEBUG_HOMARD_
467 write (ulsort,texte(langue,6)) mess14(langue,1,7), lepent
471 laface = facpen(lepent,iaux)
473 if ( decfac(-laface).eq.-1 ) then
474 do 4211 , larelo = 1 , 4
475 larete = arequa(laface,larelo)
476 if ( decare(larete).eq. -1 ) then
495 c en mode normal, on imprime seulement s'il y a un pb de memoire
498 #ifdef _DEBUG_HOMARD_
499 if ( codret.ne.0 ) then
501 if ( codret.ne.0 .and. codret.ne.1 ) then
506 write (ulsort,texte(langue,1)) 'Sortie', nompro
507 write (ulsort,texte(langue,2)) codret
511 #ifdef _DEBUG_HOMARD_
512 write (ulsort,texte(langue,1)) 'Sortie', nompro