Salome HOME
Homard executable
[modules/homard.git] / src / tool / Utilitaire / utb3f1.h
1 c
2 c 2.1. ==> les aretes et les sommets de cette pyramide active
3 c          vi(1->3) = coordonnees du sommet si
4 c
5 #ifdef _DEBUG_HOMARD_
6         if ( glop.ne.0 ) then
7         write (ulsort,90002) mess14(langue,2,typenh), lapyra
8 cgn   write(ulsort,90112) 'faces',lapyra,(facpyr(lapyra,iaux),iaux=1,5)
9         endif
10 #endif
11 c
12           if ( lapyra.le.nbpycf ) then
13 c
14             call utarpy ( lapyra,
15      >                    nbtrto, nbpycf,
16      >                    aretri, facpyr, cofapy,
17      >                    listar )
18 c
19           else
20 c
21             do 210 , iaux = 1 , 8
22               listar(iaux) = arepyr(lapyra-nbpycf,iaux)
23   210       continue
24 c
25           endif
26 c
27           call utsopy ( somare, listar, sommet )
28 c
29           if ( degre.eq.2 ) then
30             do 211 , iaux = 1 , 8
31               sommet(5+iaux) = np2are(listar(iaux))
32   211       continue
33           endif
34 c
35 c 2.2. ==> le parallelepipede enveloppe
36 c
37           v1(1) = coonoe(sommet(1),1)
38           v1(2) = coonoe(sommet(1),2)
39           v1(3) = coonoe(sommet(1),3)
40 c
41           v2(1) = coonoe(sommet(2),1)
42           v2(2) = coonoe(sommet(2),2)
43           v2(3) = coonoe(sommet(2),3)
44 c
45           v3(1) = coonoe(sommet(3),1)
46           v3(2) = coonoe(sommet(3),2)
47           v3(3) = coonoe(sommet(3),3)
48 c
49           v4(1) = coonoe(sommet(4),1)
50           v4(2) = coonoe(sommet(4),2)
51           v4(3) = coonoe(sommet(4),3)
52 c
53           v5(1) = coonoe(sommet(5),1)
54           v5(2) = coonoe(sommet(5),2)
55           v5(3) = coonoe(sommet(5),3)
56 c
57           xmin = min(v1(1),v2(1),v3(1),v4(1),v5(1))
58           xmax = max(v1(1),v2(1),v3(1),v4(1),v5(1))
59           ymin = min(v1(2),v2(2),v3(2),v4(2),v5(2))
60           ymax = max(v1(2),v2(2),v3(2),v4(2),v5(2))
61           zmin = min(v1(3),v2(3),v3(3),v4(3),v5(3))
62           zmax = max(v1(3),v2(3),v3(3),v4(3),v5(3))
63 c
64           logaux(1) = .true.
65           logaux(2) = .true.
66           logaux(3) = .true.
67           logaux(4) = .true.
68           logaux(5) = .true.
69 c
70 c 2.3. ==> on passe en revue tous les autres sommets qui ne sont pas des
71 c          sommets isoles.
72 c       . on ne s'interesse qu'a ceux qui sont contenus dans le
73 c         parallelepide enveloppe de la pyramide
74 c       . ensuite, on elimine les noeuds coincidents
75 c       . on recherche si le noeud est a l'interieur de la pyramide
76 c         cela est vrai si le noeud et un sommet sont du meme cote du
77 c         plan forme par les trois autres sommets. pour cela, on regarde
78 c         si les produits mixtes (ab,ac,ad) et (ab,ac,an) sont de meme
79 c         signe pour les quatre permutations circulaires sur (a,b,c,d)
80 c       . on elimine les cinq noeuds de la pyramide
81 c
82 c         Remarque hyper importante : il ne faut faire les affectations
83 c         de vn(2) et vn(3) que si c'est utile car elles coutent
84 c         tres cheres (30% du temps total !)
85 c         Remarque hyper importante : il vaut mieux mettre en dernier
86 c         le test sur l'identite de lenoeu avec les noeuds
87 c         de la pyramide car on gagne aussi 40% !
88 c         En revanche, inutile de deplier davantage les tests
89 c
90 cgn      call gtfims (93)