1 subroutine decfs1 ( 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 = 0 : norme L2
39 c - usacmp = 1 : norme infinie
40 c ______________________________________________________________________
41 c On parcourt toutes les entites qui sont decoupees par conformite :
42 c . si un indicateur d'erreur a ete defini sur au moins un des fils,
43 c on recupere la plus grande valeur
44 c Remarque : decfs0 et decfs1 sont des clones
45 c ______________________________________________________________________
47 c . nom . e/s . taille . description .
48 c .____________________________________________________________________.
49 c . hettri . e . nbtrto . historique de l'etat des triangles .
50 c . filtri . e . nbtrto . fils des triangles .
51 c . hetqua . e . nbquto . historique de l'etat des quadrangles .
52 c . filqua . e . nbquto . premier fils des quadrangles .
53 c . hettet . e . nbteto . historique de l'etat des tetraedres .
54 c . filtet . e . nbteto . premier fils des tetraedres .
55 c . hethex . e . nbheto . historique de l'etat des hexaedres .
56 c . filhex . e . nbheto . fils des hexaedres .
57 c . fhpyte . e .2*nbhedc. fhpyte(1,j) = numero de la 1ere pyramide .
58 c . . . . fille de l'hexaedre k tel que filhex(k) =-j.
59 c . . . . fhpyte(2,j) = numero du 1er tetraedre .
60 c . . . . fils de l'hexaedre k tel que filhex(k) = -j.
61 c . hetpen . e . nbpeto . historique de l'etat des pentaedres .
62 c . filpen . e . nbpeto . premier fils des pentaedres .
63 c . fppyte . e .2*nbpeco. fppyte(1,j) = numero de la 1ere pyramide .
64 c . . . . fille du pentaedre k tel que filpen(k) = -j.
65 c . . . . fppyte(2,j) = numero du 1er tetraedre .
66 c . . . . fils du pentaedre k tel que filpen(k) = -j .
67 c . nbvpyr . e . 1 . nombre de valeurs par pyramides .
68 c . nbvtet . e . 1 . nombre de valeurs par tetraedres .
69 c . nbvqua . e . 1 . nombre de valeurs par quadrangles .
70 c . nbvtri . e . 1 . nombre de valeurs par triangles .
71 c . trsupp . e . nbtrto . support pour les triangles .
72 c . trindr . es . nbtrto . valeurs reelles pour les triangles .
73 c . qusupp . e . nbquto . support pour les quadrangles .
74 c . quindr . es . nbquto . valeurs reelles pour les quadrangles .
75 c . tesupp . e . nbteto . support pour les tetraedres .
76 c . teindr . es . nbteto . valeurs reelles pour les tetraedres .
77 c . hesupp . e . nbheto . support pour les hexaedres .
78 c . heindr . es . nbheto . valeurs reelles pour les hexaedres .
79 c . pysupp . e . nbpyto . support pour les pyramides .
80 c . pyindr . es . nbpyto . valeurs reelles pour les pyramides .
81 c . pesupp . e . nbpeto . support pour les pentaedres .
82 c . peindr . es . nbpeto . valeurs reelles pour les pentaedres .
83 c . ulsort . e . 1 . unite logique de la sortie generale .
84 c . langue . e . 1 . langue des messages .
85 c . . . . 1 : francais, 2 : anglais .
86 c . codret . es . 1 . code de retour des modules .
87 c . . . . 0 : pas de probleme .
88 c . . . . sinon : nombre de tetraedres a problemes .
89 c ______________________________________________________________________
92 c 0. declarations et dimensionnement
95 c 0.1. ==> generalites
101 parameter ( nompro = 'DECFS1' )
121 integer hettri(nbtrto), filtri(nbtrto)
122 integer hetqua(nbquto), filqua(nbquto)
123 integer hettet(nbteto), filtet(nbteto)
124 integer hethex(nbheto), filhex(nbheto)
125 integer fhpyte(2,nbheco)
126 integer hetpen(nbpeto), filpen(nbpeto)
127 integer fppyte(2,nbpeco)
128 integer nbvtri, nbvqua
129 integer nbvtet, nbvpyr
130 integer trsupp(nbtrto)
131 integer qusupp(nbquto)
132 integer tesupp(nbteto)
133 integer hesupp(nbheto)
134 integer pysupp(nbpyto)
135 integer pesupp(nbpeto)
137 integer ulsort, langue, codret
139 double precision trindr(nbtrto)
140 double precision quindr(nbquto)
141 double precision teindr(nbteto)
142 double precision heindr(nbheto)
143 double precision pyindr(nbpyto)
144 double precision peindr(nbpeto)
146 c 0.4. ==> variables locales
148 integer iaux, jaux, kaux, laux
150 integer nbte, nbte0, nbte1, nbte2, nbte3, nbte4, nbte5
151 integer nbpy, nbpy0, nbpy1, nbpy2, nbpy3, nbpy4, nbpy5
154 double precision daux
157 logical yaintr, yainte, yainpy, yainqu
160 parameter ( nbmess = 10 )
161 character*80 texte(nblang,nbmess)
163 c 0.5. ==> initialisations
164 c ______________________________________________________________________
172 #ifdef _DEBUG_HOMARD_
173 write (ulsort,texte(langue,1)) 'Entree', nompro
177 texte(1,4) = '(''Suppression des conformites pour les '',a)'
179 texte(2,4) = '(''Suppression of the conformities for '',a)'
186 c 2. les triangles : transfert en presence d'indicateur d'erreurs
187 c sur les fils de conformite
190 #ifdef _DEBUG_HOMARD_
191 write (ulsort,texte(langue,4)) mess14(langue,3,2)
192 write (ulsort,90002) 'nbvtri', nbvtri
195 if ( nbvtri.gt.0 ) then
199 do 20 , iaux = 1 , nbtrto
201 etat = mod( hettri(iaux), 10 )
203 if ( etat.ge.1 .and. etat.le.3 ) then
204 cgn write (ulsort,90015) 'Etat du '//mess14(langue,1,2), iaux,
209 jaux = filtri(iaux) + kaux
210 if ( trsupp(jaux).ne.0 ) then
211 daux = max(daux,abs(trindr(jaux)))
216 if ( trsupp(iaux).ne.0 ) then
217 cgn write (ulsort,*) 'modif de trsupp(',iaux,'), valeur = ',daux
232 c 3. les quadrangles : transfert en presence d'indicateur d'erreurs
234 #ifdef _DEBUG_HOMARD_
235 write (ulsort,*) '3. Quadrangles ; codret = ', codret
236 write (ulsort,90002) 'nbvqua', nbvqua
239 if ( nbquto.ne.0 ) then
241 #ifdef _DEBUG_HOMARD_
242 write (ulsort,texte(langue,4)) mess14(langue,3,4)
245 if ( nbvqua.gt.0 ) then
251 if ( yainqu .or. yaintr ) then
253 do 30 , iaux = 1 , nbquto
255 etat = mod( hetqua(iaux), 100 )
256 cgn write (ulsort,90015) 'Etat du '//mess14(langue,1,4), iaux,
259 c 3.1. ==> les fils de conformite sont des quadrangles
261 if ( ( etat.eq.21 .or. etat.eq.22 .or.
262 > ( etat.ge.41 .and. etat.le.44 ) ) .and. yainqu ) then
266 if ( etat.eq.21 .or. etat.eq.22 ) then
271 do 301 , kaux = 0, laux
273 if ( qusupp(jaux).ne.0 ) then
274 daux = max(daux,abs(quindr(jaux)))
279 if ( qusupp(iaux).ne.0 ) then
283 c 3.2. ==> les fils de conformite qui sont des triangles
285 elseif ( etat.ge.31 .and. etat.le.34 .and. yaintr ) then
291 if ( trsupp(jaux).ne.0 ) then
292 daux = max(daux,abs(trindr(jaux)))
297 if ( qusupp(iaux).ne.0 ) then
310 c 4. les tetraedres : transfert en presence d'indicateur d'erreurs
311 c sur les fils de conformite
313 #ifdef _DEBUG_HOMARD_
314 write (ulsort,*) '4. Tetraedres ; codret = ', codret
316 #ifdef _DEBUG_HOMARD_
317 write (ulsort,texte(langue,4)) mess14(langue,3,3)
318 write (ulsort,90002) 'nbvtet', nbvtet
321 if ( nbvtet.gt.0 ) then
328 do 40 , iaux = 1 , nbteto
330 etat = mod( hettet(iaux), 100 )
332 cgn write (ulsort,90015) 'Etat du '//mess14(langue,1,3), iaux,
335 c nombre d'entites de conformite selon les modes de decoupage
337 if ( ( etat.ge.21 .and. etat.le.36 ) ) then
342 elseif ( etat.ge.41 .and. etat.le.47 ) then
352 do 401 , kaux = 0, nbte
353 jaux = filtet(iaux) + kaux
354 if ( tesupp(jaux).ne.0 ) then
355 daux = max(daux,abs(teindr(jaux)))
356 cgn write (ulsort,*) '... valeur = ',daux
361 if ( tesupp(iaux).ne.0 ) then
362 cgn write (ulsort,*) 'modif de tesupp(',iaux,'), valeur = ',daux
377 c 5. les pyramides : pas de transfert car pas de decoupage mais
378 c reperage de la presence d'indicateurs
380 #ifdef _DEBUG_HOMARD_
381 write (ulsort,*) '5. pyramides ; codret = ', codret
383 #ifdef _DEBUG_HOMARD_
384 write (ulsort,texte(langue,4)) mess14(langue,3,5)
385 write (ulsort,90002) 'nbvpyr', nbvpyr
388 if ( nbvpyr.gt.0 ) then
401 #ifdef _DEBUG_HOMARD_
402 write (ulsort,*) '6. Hexaedres ; codret = ', codret
405 if ( nbheto.ne.0 .and. ( yainte .or. yainpy ) ) then
407 #ifdef _DEBUG_HOMARD_
408 write (ulsort,texte(langue,4)) mess14(langue,3,6)
409 write (ulsort,90002) 'nbvtet', nbvtet
410 write (ulsort,90002) 'nbvpyr', nbvpyr
413 do 60 , iaux = 1 , nbheto
415 etat = mod(hethex(iaux),1000)
416 #ifdef _DEBUG_HOMARD_
417 write (ulsort,90015) 'Etat du '//mess14(langue,1,6), iaux,
421 c nombre d'entites de conformite selon les modes de decoupage
423 if ( etat.ge.11 ) then
425 bindec = chbiet(etat)
426 #ifdef _DEBUG_HOMARD_
427 write (ulsort,90015) 'etat', etat, ' ==> code binaire', bindec
430 if ( nbvpyr.gt.0 ) then
435 if ( nbvtet.gt.0 ) then
449 #ifdef _DEBUG_HOMARD_
450 write (ulsort,90002) '... nbpy/nbte', nbpy, nbte
455 fils = fhpyte(1,-filhex(iaux))
456 cgn write (ulsort,*) '.. fils pyramide = ', fils
457 do 601 , kaux = 1, nbpy
458 cgn write (ulsort,*) '.... pyramide ', fils, pysupp(fils)
459 if ( pysupp(fils).ne.0 ) then
460 cgn write (ulsort,*) '.... ', fils, pyindr(fils)
461 daux = max(daux,abs(pyindr(fils)))
467 fils = fhpyte(2,-filhex(iaux))
468 cgn write (ulsort,*) '.. fils tetraedre = ', fils
469 do 602 , kaux = 1, nbte
470 cgn write (ulsort,*) '.... tetraedre ', fils, tesupp(fils)
471 if ( tesupp(fils).ne.0 ) then
472 daux = max(daux,abs(teindr(fils)))
478 if ( hesupp(iaux).ne.0 ) then
479 cgn write (ulsort,*) 'modif de hesupp(',iaux,'), valeur = ',daux
492 #ifdef _DEBUG_HOMARD_
493 write (ulsort,*) '7. Pentaedres ; codret = ', codret
496 if ( nbpeto.ne.0 .and. ( yainte .or. yainpy ) ) then
498 #ifdef _DEBUG_HOMARD_
499 write (ulsort,texte(langue,4)) mess14(langue,3,7)
500 write (ulsort,90002) 'nbvtet', nbvtet
501 write (ulsort,90002) 'nbvpyr', nbvpyr
504 if ( nbvtet.gt.0 ) then
520 if ( nbvpyr.gt.0 ) then
536 do 70 , iaux = 1 , nbpeto
538 etat = mod( hetpen(iaux), 100 )
539 #ifdef _DEBUG_HOMARD_
540 write (ulsort,90015) 'Etat du '//mess14(langue,1,7), iaux,
545 if ( ( etat.ge. 1 .and. etat.le.6 ) ) then
551 elseif ( ( etat.ge.17 .and. etat.le.19 ) ) then
557 elseif ( etat.ge.21 .and. etat.le.26 ) then
563 elseif ( etat.ge.31 .and. etat.le.36 ) then
569 elseif ( etat.ge.43 .and. etat.le.45 ) then
575 elseif ( etat.ge.51 .and. etat.le.52 ) then
585 #ifdef _DEBUG_HOMARD_
586 write (ulsort,90002) '... nbpy/nbte', nbpy, nbte
591 fils = fppyte(1,-filpen(iaux))
592 cgn write (ulsort,*) '.. fils pyramide = ', fils
593 do 701 , kaux = 0, nbpy
595 cgn write (ulsort,*) '.... pyramide ', jaux, pysupp(jaux)
596 if ( pysupp(jaux).ne.0 ) then
597 cgn write (ulsort,*) '.... ', jaux, pyindr(jaux)
598 daux = max(daux,abs(pyindr(jaux)))
603 fils = fppyte(2,-filpen(iaux))
604 cgn write (ulsort,*) '.. fils tetraedre = ', fils
605 do 702 , kaux = 0, nbte
607 if ( tesupp(jaux).ne.0 ) then
608 cgn write (ulsort,*) '.... ', jaux, teindr(jaux)
609 daux = max(daux,abs(teindr(jaux)))
614 if ( pesupp(iaux).ne.0 ) then
615 cgn write (ulsort,*) 'modif de pesupp(',iaux,'), valeur = ',daux
629 if ( codret.ne.0 ) then
633 write (ulsort,texte(langue,1)) 'Sortie', nompro
634 write (ulsort,texte(langue,2)) codret
635 write (ulsort,texte(langue,6)) codret
639 #ifdef _DEBUG_HOMARD_
640 write (ulsort,texte(langue,1)) 'Sortie', nompro