1 subroutine uttoqu (s1, s2, s3, s4, coonoe, torsio)
2 c ______________________________________________________________________
6 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
8 c Version originale enregistree le 18 juin 1996 sous le numero 96036
9 c aupres des huissiers de justice Simart et Lavoir a Clamart
10 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
11 c aupres des huissiers de justice
12 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
14 c HOMARD est une marque deposee d'Electricite de France
20 c ______________________________________________________________________
22 c UTilitaire : TOrsion d'un QUadrangle
24 c ______________________________________________________________________
26 c . nom . e/s . taille . description .
27 c .____________________________________________________________________.
28 c .s1/2/3/4. e . 1 . les noeuds de la face .
29 c . coonoe . e . nbnoto . coordonnees des noeuds .
31 c . torsio . s . 1 . torsion de la face entre 0, plane, et 2 .
32 c .____________________________________________________________________.
35 c 0. declarations et dimensionnement
38 c 0.1. ==> generalites
49 integer s1, s2, s3, s4
51 double precision coonoe(nbnoto,3)
52 double precision torsio
54 c 0.4. ==> variables locales
58 double precision n1(3), n2(3)
59 double precision vs1s2(3), vs1s3(3)
60 double precision vs1s4(3), vs2s4(3), vs3s4(3)
66 c 1. Traitement par la diagonale s1/s3
70 c -------------------------
76 c -------------------------
78 c Attention a prendre la meme orientation pour les deux normales !
80 c 1.1. ==> Vecteur normal au triangle (s1,s2,s3)
82 cgn write(*,90002) 'triangle des sommets', s1, s2, s3
83 vs1s2(1) = coonoe(s2,1) - coonoe(s1,1)
84 vs1s2(2) = coonoe(s2,2) - coonoe(s1,2)
85 vs1s2(3) = coonoe(s2,3) - coonoe(s1,3)
87 vs1s3(1) = coonoe(s3,1) - coonoe(s1,1)
88 vs1s3(2) = coonoe(s3,2) - coonoe(s1,2)
89 vs1s3(3) = coonoe(s3,3) - coonoe(s1,3)
91 n1(1) = vs1s3(2)*vs1s2(3) - vs1s3(3)*vs1s2(2)
92 n1(2) = vs1s3(3)*vs1s2(1) - vs1s3(1)*vs1s2(3)
93 n1(3) = vs1s3(1)*vs1s2(2) - vs1s3(2)*vs1s2(1)
95 daux = sqrt(n1(1)*n1(1)+n1(2)*n1(2)+n1(3)*n1(3))
97 n1(iaux) = n1(iaux)/daux
99 cgn write(*,92010) 11, n1
101 c 1.2. ==> Vecteur normal au triangle (s1,s4,s3)
103 cgn write(*,90002) 'triangle des sommets', s1, s3, s4
104 vs1s4(1) = coonoe(s4,1) - coonoe(s1,1)
105 vs1s4(2) = coonoe(s4,2) - coonoe(s1,2)
106 vs1s4(3) = coonoe(s4,3) - coonoe(s1,3)
108 n2(1) = vs1s3(2)*vs1s4(3) - vs1s3(3)*vs1s4(2)
109 n2(2) = vs1s3(3)*vs1s4(1) - vs1s3(1)*vs1s4(3)
110 n2(3) = vs1s3(1)*vs1s4(2) - vs1s3(2)*vs1s4(1)
112 daux = sqrt(n2(1)*n2(1)+n2(2)*n2(2)+n2(3)*n2(3))
114 n2(iaux) = -n2(iaux)/daux
116 cgn write(*,92010) 12, n2
118 c 1.3. ==> Produit scalaire des vecteurs normaux
120 torsio = n1(1)*n2(1) + n1(2)*n2(2) + n1(3)*n2(3)
121 cgn write(*,92010) n1(1)*n2(1) + n1(2)*n2(2) + n1(3)*n2(3)
124 c 2. Traitement par la diagonale s2/s4
128 c -------------------------
134 c -------------------------
136 c Attention a prendre la meme orientation pour les deux normales !
138 c 2.1. ==> Vecteur normal au triangle (s4,s1,s2)
140 cgn write(*,90002) 'triangle des sommets', s4,s1,s2
141 vs2s4(1) = coonoe(s4,1) - coonoe(s2,1)
142 vs2s4(2) = coonoe(s4,2) - coonoe(s2,2)
143 vs2s4(3) = coonoe(s4,3) - coonoe(s2,3)
145 n1(1) = vs2s4(2)*vs1s4(3) - vs2s4(3)*vs1s4(2)
146 n1(2) = vs2s4(3)*vs1s4(1) - vs2s4(1)*vs1s4(3)
147 n1(3) = vs2s4(1)*vs1s4(2) - vs2s4(2)*vs1s4(1)
149 daux = sqrt(n1(1)*n1(1)+n1(2)*n1(2)+n1(3)*n1(3))
151 n1(iaux) = n1(iaux)/daux
153 cgn write(*,92010) 21, n1
155 c 2.2. ==> Vecteur normal au triangle (s1,s4,s3)
157 cgn write(*,90002) 'triangle des sommets', s4, s2, s3
158 vs3s4(1) = coonoe(s4,1) - coonoe(s3,1)
159 vs3s4(2) = coonoe(s4,2) - coonoe(s3,2)
160 vs3s4(3) = coonoe(s4,3) - coonoe(s3,3)
162 n2(1) = vs3s4(2)*vs2s4(3) - vs3s4(3)*vs2s4(2)
163 n2(2) = vs3s4(3)*vs2s4(1) - vs3s4(1)*vs2s4(3)
164 n2(3) = vs3s4(1)*vs2s4(2) - vs3s4(2)*vs2s4(1)
166 daux = sqrt(n2(1)*n2(1)+n2(2)*n2(2)+n2(3)*n2(3))
168 n2(iaux) = n2(iaux)/daux
170 cgn write(*,92010) 22, n2
172 c 2.3. ==> Produit scalaire des vecteurs normaux
174 torsio = min ( torsio, n1(1)*n2(1) + n1(2)*n2(2) + n1(3)*n2(3) )
175 cgn write(*,92010) n1(1)*n2(1) + n1(2)*n2(2) + n1(3)*n2(3)
178 c 3. Torsion : Le produit scalaire des vecteurs normaux vaut 1 s'ils
179 c sont colineaires. La torsion vaudra alors 0. A l'extreme, pour
180 c deux triangles opposes, le produit scalaire vaut -1 et la
182 c Remarque : on prend la valeur absolue pour eviter les affichages
186 torsio = abs(1.d0 - torsio)