Salome HOME
Homard executable
[modules/homard.git] / src / tool / Utilitaire / utora3.F
1       subroutine utora3 ( orient,
2      >                    a0, a1, a2, a3,
3      >                    coonoe, somare,
4      >                    ulsort, langue, codret )
5 c ______________________________________________________________________
6 c
7 c                             H O M A R D
8 c
9 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
10 c
11 c Version originale enregistree le 18 juin 1996 sous le numero 96036
12 c aupres des huissiers de justice Simart et Lavoir a Clamart
13 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
14 c aupres des huissiers de justice
15 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
16 c
17 c    HOMARD est une marque deposee d'Electricite de France
18 c
19 c Copyright EDF 1996
20 c Copyright EDF 1998
21 c Copyright EDF 2002
22 c Copyright EDF 2020
23 c ______________________________________________________________________
24 c
25 c    UTilitaire - ORientation d'Aretes d'un paquet de 3
26 c    --           --            -                     -
27 c
28 c  Determine dans quel sens le paquet des aretes (a1,a2,a3) tourne
29 c  relativement a l'arete a0
30 c
31 c  Si a0 s'enfonce dans le plan courant :
32 c           positif                      negatif
33 c            a1                             a1
34 c             .                              .
35 c             .                              .
36 c             .                              .
37 c            a0                             a0
38 c           .   .                          .   .
39 c         .       .                      .       .
40 c       .           .                  .           .
41 c     a3             a2              a2            a3
42 c
43 c ______________________________________________________________________
44 c .        .     .        .                                            .
45 c .  nom   . e/s . taille .           description                      .
46 c .____________________________________________________________________.
47 c . orient .  s  .   1    .  1 : dans le sens positif                  .
48 c .        .     .        . -1 : dans le sens negatif                  .
49 c . a0     . e   .   1    . arete orientant                            .
50 c . a1-3   . e   .   1    . aretes a placer                            .
51 c . coonoe . e   .nbnoto*3. coordonnees des noeuds                     .
52 c . somare . es  .2*nbarto. numeros des extremites d'arete             .
53 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
54 c . langue . e   .    1   . langue des messages                        .
55 c .        .     .        . 1 : francais, 2 : anglais                  .
56 c . codret . es  .    1   . code de retour des modules                 .
57 c .        .     .        . 0 : pas de probleme                        .
58 c ______________________________________________________________________
59 c
60 c====
61 c 0. declarations et dimensionnement
62 c====
63 c
64 c 0.1. ==> generalites
65 c
66       implicit none
67       save
68 c
69       character*6 nompro
70       parameter ( nompro = 'UTORA3' )
71 c
72 #include "nblang.h"
73 c
74 c 0.2. ==> communs
75 c
76 #include "envex1.h"
77 c
78 #include "envca1.h"
79 #include "nombno.h"
80 #include "nombar.h"
81 #include "impr02.h"
82 c
83 c 0.3. ==> arguments
84 c
85       integer orient
86       integer a0, a1, a2, a3
87       integer somare(2,nbarto)
88 c
89       double precision coonoe(nbnoto,sdim)
90 c
91       integer ulsort, langue, codret
92 c
93 c 0.4. ==> variables locales
94 c
95       integer iaux, jaux
96       integer lenoeu
97 c
98       double precision daux(3)
99       double precision v0(3), v1(3), v2(3), v3(3)
100       double precision prm1, prm2, prm3
101 c
102       integer nbmess
103       parameter ( nbmess = 10 )
104       character*80 texte(nblang,nbmess)
105 c
106 c 0.5. ==> initialisations
107 c
108 c====
109 c 1. initialisations
110 c====
111 c 1.1. ==> messages
112 c
113 #include "impr01.h"
114 c
115 #ifdef _DEBUG_HOMARD_
116       write (ulsort,texte(langue,1)) 'Entree', nompro
117       call dmflsh (iaux)
118 #endif
119 c
120 #include "impr03.h"
121 c
122       codret = 0
123 c
124 c====
125 c 2. Arete definissant l'orientation
126 c====
127 c
128       lenoeu = somare(1,a0)
129       do 21 , iaux = 1 , sdim
130         daux(iaux) = coonoe(lenoeu,iaux)
131         v0(iaux) = coonoe(somare(2,a0),iaux) - daux(iaux)
132    21 continue
133 c
134 #ifdef _DEBUG_HOMARD_
135           if ( a0.eq.-8 ) then
136       write (ulsort,90001) 'origine arete orientante',a0,lenoeu
137       write (ulsort,90004) 'sommet origine ',(daux(iaux),iaux=1,sdim)
138       write (ulsort,90004) 'arete orientante',(v0(iaux),iaux=1,3)
139           endif
140 #endif
141 c
142 c====
143 c 3. Aretes a positionner
144 c====
145 c 3.1. ==> vecteur de l'arete 1
146 c
147       if ( somare(1,a1).eq.lenoeu ) then
148         jaux = 2
149       else
150         jaux = 1
151       endif
152       do 31 , iaux = 1 , sdim
153         v1(iaux) = coonoe(somare(jaux,a1),iaux) - daux(iaux)
154    31 continue
155 c
156 c 3.2. ==> vecteur de l'arete 2
157 c
158       if ( somare(1,a2).eq.lenoeu ) then
159         jaux = 2
160       else
161         jaux = 1
162       endif
163       do 32 , iaux = 1 , sdim
164         v2(iaux) = coonoe(somare(jaux,a2),iaux) - daux(iaux)
165    32 continue
166 c
167 c 3.3. ==> vecteur de l'arete 3
168 c
169       if ( somare(1,a3).eq.lenoeu ) then
170         jaux = 2
171       else
172         jaux = 1
173       endif
174       do 33 , iaux = 1 , sdim
175         v3(iaux) = coonoe(somare(jaux,a3),iaux) - daux(iaux)
176    33 continue
177 c
178 #ifdef _DEBUG_HOMARD_
179           if ( a0.eq.-8 ) then
180       write (ulsort,90004) 'arete 1',(v1(iaux),iaux=1,3)
181       write (ulsort,90004) 'arete 2',(v2(iaux),iaux=1,3)
182       write (ulsort,90004) 'arete 3',(v3(iaux),iaux=1,3)
183             endif
184 #endif
185 c
186 c====
187 c 4. calcul des produits mixtes
188 c  Si a0 s'enfonce dans le plan courant :
189 c            a1
190 c             .
191 c             .
192 c             .
193 c            a0
194 c               .
195 c                 .
196 c                   .
197 c                    a2
198 c  Le produit mixte (a0,a1,a2) est >0 tant que a2 est "a droite" de a1,
199 c  comme sur la figure. Il devient <0 quand a2 passe "a gauche".
200 c  En examinant successivement les 3 produits, on en deduit la
201 c  position relative de (a1,a2,a3)
202 c====
203 c
204       call utprmi ( v0, v1, v2, prm1 )
205       call utprmi ( v0, v1, v3, prm2 )
206       call utprmi ( v0, v2, v3, prm3 )
207 #ifdef _DEBUG_HOMARD_
208       if ( a0.eq.-8 ) then
209       write (ulsort,90004) 'produits mixtes',prm1, prm2, prm3
210        endif
211 #endif
212 c
213       if ( ( prm1.ge.0.d0 .and. prm2.le.0.d0 ) .or.
214      >     ( prm1.ge.0.d0 .and. prm2.ge.0.d0 .and. prm3.ge.0.d0 ) .or.
215      >     ( prm1.le.0.d0 .and. prm2.le.0.d0 .and. prm3.ge.0.d0 ) )
216      >       then
217         orient =  1
218       else
219         orient = -1
220       endif
221 #ifdef _DEBUG_HOMARD_
222       if ( a0.eq.-8 ) then
223       write (ulsort,90002) 'orient',orient
224       endif
225 #endif
226 c
227 c====
228 c 5. la fin
229 c====
230 c
231       if ( codret.ne.0 ) then
232 c
233 #include "envex2.h"
234 c
235       write (ulsort,texte(langue,1)) 'Sortie', nompro
236       write (ulsort,texte(langue,2)) codret
237 c
238       endif
239 c
240 #ifdef _DEBUG_HOMARD_
241       write (ulsort,texte(langue,1)) 'Sortie', nompro
242       call dmflsh (iaux)
243 #endif
244 c
245       end