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