1 subroutine decfs0 ( hettri, filtri,
4 > hethex, filhex, fhpyte,
5 > hetpen, filpen, fppyte,
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 traitement des DEcisions - mise en ConFormite - Suppression
38 c - usacmp = 2 : valeur relative
39 c ______________________________________________________________________
40 c On parcourt toutes les entites qui sont decoupees par conformite :
41 c . si un indicateur d'erreur a ete defini sur au moins un des fils,
42 c on recupere la plus grande valeur
43 c Remarque : decfs0 et decfs1 sont des clones
44 c ______________________________________________________________________
46 c . nom . e/s . taille . description .
47 c .____________________________________________________________________.
48 c . hettri . e . nbtrto . historique de l'etat des triangles .
49 c . filtri . e . nbtrto . fils des triangles .
50 c . hetqua . e . nbquto . historique de l'etat des quadrangles .
51 c . filqua . e . nbquto . premier fils des quadrangles .
52 c . hettet . e . nbteto . historique de l'etat des tetraedres .
53 c . filtet . e . nbteto . premier fils des tetraedres .
54 c . hethex . e . nbheto . historique de l'etat des hexaedres .
55 c . filhex . e . nbheto . fils des hexaedres .
56 c . fhpyte . e .2*nbhedc. fhpyte(1,j) = numero de la 1ere pyramide .
57 c . . . . fille de l'hexaedre k tel que filhex(k) =-j.
58 c . . . . fhpyte(2,j) = numero du 1er tetraedre .
59 c . . . . fils de l'hexaedre k tel que filhex(k) = -j.
60 c . hetpen . e . nbpeto . historique de l'etat des pentaedres .
61 c . filpen . e . nbpeto . premier fils des pentaedres .
62 c . fppyte . e .2*nbpeco. fppyte(1,j) = numero de la 1ere pyramide .
63 c . . . . fille du pentaedre k tel que filpen(k) = -j.
64 c . . . . fppyte(2,j) = numero du 1er tetraedre .
65 c . . . . fils du pentaedre k tel que filpen(k) = -j .
66 c . nbvpyr . e . 1 . nombre de valeurs par pyramides .
67 c . nbvtet . e . 1 . nombre de valeurs par tetraedres .
68 c . nbvqua . e . 1 . nombre de valeurs par quadrangles .
69 c . nbvtri . e . 1 . nombre de valeurs par triangles .
70 c . trsupp . e . nbtrto . support pour les triangles .
71 c . trindr . es . nbtrto . valeurs reelles pour les triangles .
72 c . qusupp . e . nbquto . support pour les quadrangles .
73 c . quindr . es . nbquto . valeurs reelles pour les quadrangles .
74 c . tesupp . e . nbteto . support pour les tetraedres .
75 c . teindr . es . nbteto . valeurs reelles pour les tetraedres .
76 c . hesupp . e . nbheto . support pour les hexaedres .
77 c . heindr . es . nbheto . valeurs reelles pour les hexaedres .
78 c . pysupp . e . nbpyto . support pour les pyramides .
79 c . pyindr . es . nbpyto . valeurs reelles pour les pyramides .
80 c . pesupp . e . nbpeto . support pour les pentaedres .
81 c . peindr . es . nbpeto . valeurs reelles pour les pentaedres .
82 c . ulsort . e . 1 . unite logique de la sortie generale .
83 c . langue . e . 1 . langue des messages .
84 c . . . . 1 : francais, 2 : anglais .
85 c . codret . es . 1 . code de retour des modules .
86 c . . . . 0 : pas de probleme .
87 c . . . . sinon : nombre de tetraedres a problemes .
88 c ______________________________________________________________________
91 c 0. declarations et dimensionnement
94 c 0.1. ==> generalites
100 parameter ( nompro = 'DECFS0' )
120 integer hettri(nbtrto), filtri(nbtrto)
121 integer hetqua(nbquto), filqua(nbquto)
122 integer hettet(nbteto), filtet(nbteto)
123 integer hethex(nbheto), filhex(nbheto)
124 integer fhpyte(2,nbheco)
125 integer hetpen(nbpeto), filpen(nbpeto)
126 integer fppyte(2,nbpeco)
127 integer nbvtri, nbvqua
128 integer nbvtet, nbvpyr
129 integer trsupp(nbtrto)
130 integer qusupp(nbquto)
131 integer tesupp(nbteto)
132 integer hesupp(nbheto)
133 integer pysupp(nbpyto)
134 integer pesupp(nbpeto)
136 integer ulsort, langue, codret
138 double precision trindr(nbtrto)
139 double precision quindr(nbquto)
140 double precision teindr(nbteto)
141 double precision heindr(nbheto)
142 double precision pyindr(nbpyto)
143 double precision peindr(nbpeto)
145 c 0.4. ==> variables locales
147 integer iaux, jaux, kaux, laux
149 integer nbte, nbte0, nbte1, nbte2, nbte3, nbte4, nbte5
150 integer nbpy, nbpy0, nbpy1, nbpy2, nbpy3, nbpy4, nbpy5
153 double precision daux
156 logical yaintr, yainte, yainpy, yainqu
159 parameter ( nbmess = 10 )
160 character*80 texte(nblang,nbmess)
162 c 0.5. ==> initialisations
163 c ______________________________________________________________________
171 #ifdef _DEBUG_HOMARD_
172 write (ulsort,texte(langue,1)) 'Entree', nompro
176 texte(1,4) = '(''Suppression des conformites pour les '',a)'
178 texte(2,4) = '(''Suppression of the conformities for '',a)'
185 c 2. les triangles : transfert en presence d'indicateur d'erreurs
186 c sur les fils de conformite
189 #ifdef _DEBUG_HOMARD_
190 write (ulsort,texte(langue,4)) mess14(langue,3,2)
191 write (ulsort,90002) 'nbvtri', nbvtri
194 if ( nbvtri.gt.0 ) then
198 do 20 , iaux = 1 , nbtrto
200 etat = mod( hettri(iaux), 10 )
202 if ( etat.ge.1 .and. etat.le.3 ) then
203 cgn write (ulsort,90015) 'Etat du '//mess14(langue,1,2), iaux,
208 jaux = filtri(iaux) + kaux
209 if ( trsupp(jaux).ne.0 ) then
210 daux = max(daux,trindr(jaux))
215 if ( trsupp(iaux).ne.0 ) then
216 cgn write (ulsort,*) 'modif de trsupp(',iaux,'), valeur = ',daux
231 c 3. les quadrangles : transfert en presence d'indicateur d'erreurs
233 #ifdef _DEBUG_HOMARD_
234 write (ulsort,*) '3. Quadrangles ; codret = ', codret
237 if ( nbquto.ne.0 ) then
239 #ifdef _DEBUG_HOMARD_
240 write (ulsort,texte(langue,4)) mess14(langue,3,4)
243 if ( nbvqua.gt.0 ) then
249 if ( yainqu .or. yaintr ) then
251 do 30 , iaux = 1 , nbquto
253 etat = mod( hetqua(iaux), 100 )
254 cgn write (ulsort,90015) 'Etat du '//mess14(langue,1,4), iaux,
257 c 3.1. ==> les fils de conformite sont des quadrangles
259 if ( ( etat.eq.21 .or. etat.eq.22 .or.
260 > ( etat.ge.41 .and. etat.le.44 ) ) .and. yainqu ) then
264 if ( etat.eq.21 .or. etat.eq.22 ) then
269 do 301 , kaux = 0, laux
271 if ( qusupp(jaux).ne.0 ) then
272 daux = max(daux,quindr(jaux))
277 if ( qusupp(iaux).ne.0 ) then
281 c 3.2. ==> les fils de conformite qui sont des triangles
283 elseif ( etat.ge.31 .and. etat.le.34 .and. yaintr ) then
289 if ( trsupp(jaux).ne.0 ) then
290 daux = max(daux,trindr(jaux))
295 if ( qusupp(iaux).ne.0 ) then
308 c 4. les tetraedres : transfert en presence d'indicateur d'erreurs
309 c sur les fils de conformite
311 #ifdef _DEBUG_HOMARD_
312 write (ulsort,*) '4. Tetraedres ; codret = ', codret
314 #ifdef _DEBUG_HOMARD_
315 write (ulsort,texte(langue,4)) mess14(langue,3,3)
316 write (ulsort,90002) 'nbvtet', nbvtet
319 if ( nbvtet.gt.0 ) then
326 do 40 , iaux = 1 , nbteto
328 etat = mod( hettet(iaux), 100 )
330 cgn write (ulsort,90015) 'Etat du '//mess14(langue,1,3), iaux,
333 c nombre d'entites de conformite selon les modes de decoupage
335 if ( ( etat.ge.21 .and. etat.le.36 ) ) then
340 elseif ( etat.ge.41 .and. etat.le.47 ) then
350 do 401 , kaux = 0, nbte
351 jaux = filtet(iaux) + kaux
352 if ( tesupp(jaux).ne.0 ) then
353 daux = max(daux,teindr(jaux))
358 if ( tesupp(iaux).ne.0 ) then
359 cgn write (ulsort,*) 'modif de tesupp(',iaux,'), valeur = ',daux
374 c 5. les pyramides : pas de transfert car pas de decoupage mais
375 c reperage de la presence d'indicateurs
377 #ifdef _DEBUG_HOMARD_
378 write (ulsort,*) '5. pyramides ; codret = ', codret
380 #ifdef _DEBUG_HOMARD_
381 write (ulsort,texte(langue,4)) mess14(langue,3,5)
382 write (ulsort,90002) 'nbvpyr', nbvpyr
385 if ( nbvpyr.gt.0 ) then
398 #ifdef _DEBUG_HOMARD_
399 write (ulsort,*) '6. Hexaedres ; codret = ', codret
402 if ( nbheto.ne.0 .and. ( yainte .or. yainpy ) ) then
404 #ifdef _DEBUG_HOMARD_
405 write (ulsort,texte(langue,4)) mess14(langue,3,6)
406 write (ulsort,90002) 'nbvtet', nbvtet
407 write (ulsort,90002) 'nbvpyr', nbvpyr
410 do 60 , iaux = 1 , nbheto
412 etat = mod(hethex(iaux),1000)
413 #ifdef _DEBUG_HOMARD_
414 write (ulsort,90015) 'Etat du '//mess14(langue,1,6), iaux,
418 c nombre d'entites de conformite selon les modes de decoupage
420 if ( etat.ge.11 ) then
422 bindec = chbiet(etat)
423 #ifdef _DEBUG_HOMARD_
424 write (ulsort,90015) 'etat', etat, ' ==> code binaire', bindec
427 if ( nbvpyr.gt.0 ) then
432 if ( nbvtet.gt.0 ) then
446 #ifdef _DEBUG_HOMARD_
447 write (ulsort,90002) '... nbpy/nbte', nbpy, nbte
452 fils = fhpyte(1,-filhex(iaux))
453 cgn write (ulsort,*) '.. fils pyramide = ', fils
454 do 601 , kaux = 1, nbpy
455 cgn write (ulsort,*) '.... pyramide ', fils, pysupp(fils)
456 if ( pysupp(fils).ne.0 ) then
457 cgn write (ulsort,*) '.... ', fils, pyindr(fils)
458 daux = max(daux,pyindr(fils))
464 fils = fhpyte(2,-filhex(iaux))
465 cgn write (ulsort,*) '.. fils tetraedre = ', fils
466 do 602 , kaux = 1, nbte
467 cgn write (ulsort,*) '.... tetraedre ', fils, tesupp(fils)
468 if ( tesupp(fils).ne.0 ) then
469 daux = max(daux,teindr(fils))
475 if ( hesupp(iaux).ne.0 ) then
476 cgn write (ulsort,*) 'modif de hesupp(',iaux,'), valeur = ',daux
489 #ifdef _DEBUG_HOMARD_
490 write (ulsort,*) '7. Pentaedres ; codret = ', codret
493 if ( nbpeto.ne.0 .and. ( yainte .or. yainpy ) ) then
495 #ifdef _DEBUG_HOMARD_
496 write (ulsort,texte(langue,4)) mess14(langue,3,7)
497 write (ulsort,90002) 'nbvtet', nbvtet
498 write (ulsort,90002) 'nbvpyr', nbvpyr
501 if ( nbvtet.gt.0 ) then
517 if ( nbvpyr.gt.0 ) then
533 do 70 , iaux = 1 , nbpeto
535 etat = mod( hetpen(iaux), 100 )
536 #ifdef _DEBUG_HOMARD_
537 write (ulsort,90015) 'Etat du '//mess14(langue,1,7), iaux,
542 if ( ( etat.ge. 1 .and. etat.le.6 ) ) then
548 elseif ( ( etat.ge.17 .and. etat.le.19 ) ) then
554 elseif ( etat.ge.21 .and. etat.le.26 ) then
560 elseif ( etat.ge.31 .and. etat.le.36 ) then
566 elseif ( etat.ge.43 .and. etat.le.45 ) then
572 elseif ( etat.ge.51 .and. etat.le.52 ) then
582 #ifdef _DEBUG_HOMARD_
583 write (ulsort,90002) '... nbpy/nbte', nbpy, nbte
588 fils = fppyte(1,-filpen(iaux))
589 cgn write (ulsort,*) '.. fils pyramide = ', fils
590 do 701 , kaux = 0, nbpy
592 cgn write (ulsort,*) '.... pyramide ', jaux, pysupp(jaux)
593 if ( pysupp(jaux).ne.0 ) then
594 cgn write (ulsort,*) '.... ', jaux, pyindr(jaux)
595 daux = max(daux,pyindr(jaux))
600 fils = fppyte(2,-filpen(iaux))
601 cgn write (ulsort,*) '.. fils tetraedre = ', fils
602 do 702 , kaux = 0, nbte
604 if ( tesupp(jaux).ne.0 ) then
605 cgn write (ulsort,*) '.... ', jaux, teindr(jaux)
606 daux = max(daux,teindr(jaux))
611 if ( pesupp(iaux).ne.0 ) then
612 cgn write (ulsort,*) 'modif de pesupp(',iaux,'), valeur = ',daux
626 if ( codret.ne.0 ) then
630 write (ulsort,texte(langue,1)) 'Sortie', nompro
631 write (ulsort,texte(langue,2)) codret
632 write (ulsort,texte(langue,6)) codret
636 #ifdef _DEBUG_HOMARD_
637 write (ulsort,texte(langue,1)) 'Sortie', nompro