Salome HOME
Homard executable
[modules/homard.git] / src / tool / Utilitaire / utcoq3.F
1       subroutine utcoq3 ( hetare, somare, filare, a1, a2, a3, a4,
2      >                    numdec, ai, aj, ak, al, afij, afil,
3      >                    saiaj, sajak, sakal, salai, ni,
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 - decoupage de COnformite d'un Quadrangle
26 c    --                        --              -
27 c                           en 3 triangles
28 c                              -
29 c ______________________________________________________________________
30 c .        .     .        .                                            .
31 c .  nom   . e/s . taille .           description                      .
32 c .____________________________________________________________________.
33 c . hetare . e   . nbaret . historique de l'etat des aretes            .
34 c . somare . e   .2*nbaret. numeros des extremites d'arete             .
35 c . filare . e   . nbaret . premiere fille des aretes                  .
36 c .a1,..,a4. e   . 1      . les numeros d'arete du quadrangle          .
37 c . numdec .  s  . 1      . numero local de l'arete decoupee           .
38 c .   ai   .  s  . 1      . l'arete du quadrangle qui est decoupee     .
39 c .aj,ak,al.  s  . 1      . les 3 autres aretes dans l'ordre oriente   .
40 c .  afij  .  s  . 1      . fille de ai allant vers saiaj              .
41 c .  afil  .  s  . 1      . fille de ai allant vers salai              .
42 c . saiaj  .  s  . 1      . sommet commun aux aretes i et j            .
43 c . sajak  .  s  . 1      . sommet commun aux aretes j et k            .
44 c . sakal  .  s  . 1      . sommet commun aux aretes k et l            .
45 c . salai  .  s  . 1      . sommet commun aux aretes l et i            .
46 c .   ni   .  s  . 1      . milieu de l'arete ai                       .
47 c . ulsort . e   .   1    . unite logique de la sortie generale        .
48 c . langue . e   .    1   . langue des messages                        .
49 c .        .     .        . 1 : francais, 2 : anglais                  .
50 c . codret . es  .    1   . code de retour des modules                 .
51 c .        .     .        . 0 : pas de probleme                        .
52 c ______________________________________________________________________
53 c
54 c       saiaj         afij       ai/ni       afil         salai
55 c           ._____________________________________________.
56 c           .                      .                      .
57 c           .                     . .                     .
58 c           .                    .   .                    .
59 c           .                   .     .                   .
60 c           .                  .       .                  .
61 c           .                 .         .                 .
62 c           .       nf2      .           .       nf3      .
63 c           .               .             .               .
64 c           .              .               .              .
65 c           .             .                 .             .
66 c        aj .            .                   .            . al
67 c           .           .anijk           anikl.           .
68 c           .          .                       .          .
69 c           .         .                         .         .
70 c           .        .                           .        .
71 c           .       .                             .       .
72 c           .      .               nf1             .      .
73 c           .     .                                 .     .
74 c           .    .                                   .    .
75 c           .   .                                     .   .
76 c           .  .                                       .  .
77 c           . .                                         . .
78 c           ._____________________________________________.
79 c       sajak                       ak                    sakal
80 c
81 c
82 c====
83 c 0. declarations et dimensionnement
84 c====
85 c
86 c 0.1. ==> generalites
87 c
88       implicit none
89       save
90 c
91       character*6 nompro
92       parameter ( nompro = 'UTCOQ3' )
93 c
94 #include "nblang.h"
95 c
96 c 0.2. ==> communs
97 c
98 #include "envex1.h"
99 c
100 #include "ope1a4.h"
101 c
102 c 0.3. ==> arguments
103 c
104       integer hetare(*), somare(2,*), filare(*)
105       integer numdec
106       integer a1, a2, a3, a4
107       integer ai, aj, ak, al
108       integer afij, afil
109       integer saiaj, sajak, sakal, salai
110       integer ni
111 c
112       integer ulsort, langue, codret
113 c
114 c 0.4. ==> variables locales
115 c
116       integer arete(4)
117       integer iaux
118 c
119       integer nbmess
120       parameter ( nbmess = 10 )
121       character*80 texte(nblang,nbmess)
122 c 0.5. ==> initialisations
123 c ______________________________________________________________________
124 c
125 c====
126 c 1. messages
127 c====
128 c
129 #include "impr01.h"
130 c
131 #ifdef _DEBUG_HOMARD_
132       write (ulsort,texte(langue,1)) 'Entree', nompro
133       call dmflsh (iaux)
134 #endif
135 c
136       texte(1,10) ='(''Impossible de trouver l''''arete coupee.''))'
137 c
138       texte(2,10) ='(''Cut edge cannot be found.'')'
139 c
140 #include "impr03.h"
141 c
142       codret = 0
143 c
144 c====
145 c 2. recherche du numero local de l'arete coupee
146 c====
147 c
148       arete(1) = a1
149       arete(2) = a2
150       arete(3) = a3
151       arete(4) = a4
152 c
153       do 20 , iaux = 1 , 4
154         if ( mod(hetare(arete(iaux)),10).eq.2 ) then
155           numdec = iaux
156           goto 21
157         endif
158   20  continue
159 c
160       write (ulsort,texte(langue,10))
161       codret = 1
162 c
163   21  continue
164 cgn      write (ulsort,90002) 'numdec', numdec
165 c
166 c====
167 c 3. les numeros globaux des noeuds et des aretes
168 c====
169 c
170       if ( codret.eq.0 ) then
171 c
172 c 3.1. ==> l'arete coupee
173 c
174       ai = arete(numdec)
175 c
176 c 3.2. ==> les autres aretes sont dans le meme ordre de rotation
177 c
178       iaux = per1a4(1,numdec)
179       aj = arete(iaux)
180 c
181       iaux = per1a4(1,iaux)
182       ak = arete(iaux)
183 c
184       iaux = per1a4(1,iaux)
185       al = arete(iaux)
186 c
187 c 3.3. ==> les sommets du quadrangle
188 c
189       call utsoqu ( somare, ai, aj, ak, al,
190      >              saiaj, sajak, sakal, salai )
191 c
192 c 3.4. ==> le decoupage de l'arete ai
193 c
194       iaux = filare(ai)
195       if ( somare(1,iaux).eq.saiaj ) then
196         afij = iaux
197         afil = iaux + 1
198       else
199         afij = iaux + 1
200         afil = iaux
201       endif
202 c
203       ni = somare(2,afij)
204 c
205       endif
206 c
207 c====
208 c 4. la fin
209 c====
210 c
211       if ( codret.ne.0 ) then
212 c
213 #include "envex2.h"
214 c
215       write (ulsort,texte(langue,1)) 'Sortie', nompro
216       write (ulsort,texte(langue,2)) codret
217 c
218       endif
219 c
220 #ifdef _DEBUG_HOMARD_
221       write (ulsort,texte(langue,1)) 'Sortie', nompro
222       call dmflsh (iaux)
223 #endif
224 c
225       end