Salome HOME
Homard executable
[modules/homard.git] / src / tool / Creation_Maillage / cmhomo.F
1       subroutine cmhomo ( noehom, arehom, trihom, quahom,
2      >                    somare, filare, hetare, np2are,
3      >                    aretri, filtri, hettri,
4      >                    arequa, filqua, hetqua,
5      >                    ulsort, langue, codret )
6 c ______________________________________________________________________
7 c
8 c                             H O M A R D
9 c
10 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
11 c
12 c Version originale enregistree le 18 juin 1996 sous le numero 96036
13 c aupres des huissiers de justice Simart et Lavoir a Clamart
14 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
15 c aupres des huissiers de justice
16 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
17 c
18 c    HOMARD est une marque deposee d'Electricite de France
19 c
20 c Copyright EDF 1996
21 c Copyright EDF 1998
22 c Copyright EDF 2002
23 c Copyright EDF 2020
24 c ______________________________________________________________________
25 c
26 c    Creation du Maillage - HOMOlogues
27 c    -           -          ----
28 c ______________________________________________________________________
29 c
30 c but : mise a jour des tables d'homologues
31 c
32 c   remarque importante : reperage des elements homologues
33 c     on prend la convention de reperage suivante : lorsque
34 c     l'on a deux faces periodiques 1 et 2, on attribue un signe a
35 c     chacune des faces. pour un noeud "i", noehom(i) est alors egal
36 c     a la valeur suivante :
37 c     - "le numero du noeud correspondant par periodicite
38 c        si i est sur la face 2"
39 c     - "l'oppose du numero du noeud correspondant par periodicite
40 c        si i est sur la face 1"
41 c
42 c     Donc, on etend cette convention a toutes les entites noeuds,
43 c     aretes, triangles et quadrangles :
44 c     enthom(i) = abs(homologue(i)) ssi i est sur la face 2
45 c     enthom(i) = -abs(homologue(i)) ssi i est sur la face 1
46 c     pour une entite situee sur l'axe, on prend la convention positive.
47 c
48 c ______________________________________________________________________
49 c .        .     .        .                                            .
50 c .  nom   . e/s . taille .           description                      .
51 c .____________________________________________________________________.
52 c . noehom . es  . nbnoto . ensemble des noeuds homologues             .
53 c . arehom . es  . nbarto . ensemble des aretes homologues             .
54 c . trihom . es  . nbtrto . ensemble des triangles homologues          .
55 c . quahom . es  . nbquto . ensemble des quadrangles homologues        .
56 c . somare . e   .2*nbarto. numeros des extremites d'arete             .
57 c . filare . e   . nbarto . premiere fille des aretes                  .
58 c . hetare . e   . nbarto . historique de l'etat des aretes            .
59 c . np2are . e   . nbarto . numero des noeuds p2 milieux d'aretes      .
60 c . aretri . e   .nbtrto*3. numeros des 3 aretes des triangles         .
61 c . filtri . e   . nbtrto . premier fils des triangles                 .
62 c . hettri . e   . nbtrto . historique de l'etat des triangles         .
63 c . arequa . e   .nbquto*4. numeros des 4 aretes des quadrangles       .
64 c . filqua . e   . nbquto . premier fils des quadrangles               .
65 c . hetqua . e   . nbquto . historique de l'etat des quadrangles       .
66 c . ulsort . e   .   1    . unite logique de la sortie generale        .
67 c . langue . e   .    1   . langue des messages                        .
68 c .        .     .        . 1 : francais, 2 : anglais                  .
69 c . codret . es  .    1   . code de retour des modules                 .
70 c .        .     .        . 0 : pas de probleme                        .
71 c ______________________________________________________________________
72 c
73 c====
74 c 0. declarations et dimensionnement
75 c====
76 c
77 c 0.1. ==> generalites
78 c
79       implicit none
80       save
81 c
82       character*6 nompro
83       parameter ( nompro = 'CMHOMO' )
84 c
85 #include "nblang.h"
86 c
87 c 0.2. ==> communs
88 c
89 #include "envex1.h"
90 c
91 #include "envca1.h"
92 #include "nombno.h"
93 #include "nombar.h"
94 #include "nombtr.h"
95 #include "nombqu.h"
96 c
97 c 0.3. ==> arguments
98 c
99       integer noehom(nbnoto), arehom(nbarto)
100       integer trihom(nbtrto), quahom(nbquto)
101       integer somare(2,nbarto), filare(nbarto), hetare(nbarto)
102       integer np2are(nbarto)
103       integer aretri(nbtrto,3), filtri(nbtrto), hettri(nbtrto)
104       integer arequa(nbquto,4), filqua(nbquto), hetqua(nbquto)
105 c
106       integer ulsort, langue, codret
107 c
108 c 0.4. ==> variables locales
109 c
110       integer iaux
111       integer areh
112 c
113       integer nbmess
114       parameter ( nbmess = 10 )
115       character*80 texte(nblang,nbmess)
116 c
117 c 0.5. ==> initialisations
118 c ______________________________________________________________________
119 c
120 c====
121 c 1. initialisations
122 c====
123 c
124 #include "impr01.h"
125 c
126 #ifdef _DEBUG_HOMARD_
127       write (ulsort,texte(langue,1)) 'Entree', nompro
128       call dmflsh (iaux)
129 #endif
130 c
131       codret = 0
132 c
133 c====
134 c 2. les tables des aretes
135 c    il faut commencer par les aretes pour pouvoir traiter les tables
136 c    des faces ensuite
137 c====
138 c
139 cgn           print *,'debut de ', nompro
140 cgn           print *,'trihom'
141 cgn           print 1788,(trihom(iaux),iaux=1,16)
142 cgn           print *,'quahom'
143 cgn           print 1787,(quahom(iaux),iaux=1,8)
144 cgn           print *,'arehom'
145 cgn           print 1789,(arehom(iaux),iaux=1,50)
146 cgn           print *,'noehom'
147 cgn           print 1789,(noehom(iaux),iaux=1,27)
148 cgn 1787 format(4I4)
149 cgn 1788 format(8I4)
150 cgn 1789 format(10I4)
151       if (codret.eq.0 ) then
152 c
153       if ( homolo.ge.2 ) then
154 c
155         call cmhoma ( noehom, arehom,
156      >                somare, filare, hetare,
157      >                ulsort, langue, codret )
158 c
159       endif
160 c
161       endif
162 c
163 c====
164 c 3. les tables des triangles
165 c====
166 c
167       if (codret.eq.0 ) then
168 c
169       if ( homolo.ge.3 .and. nbtrto.ne.0 ) then
170 c
171         call cmhomt ( arehom, trihom,
172      >                somare,
173      >                aretri, filtri, hettri,
174      >                ulsort, langue, codret )
175 c
176       endif
177 c
178       endif
179 c
180 c====
181 c 4. les tables des quadrangles et complements sur les triangles
182 c====
183 c
184       if (codret.eq.0 ) then
185 c
186       if ( homolo.ge.3 .and. nbquto.ne.0 ) then
187 c
188         call cmhomq ( noehom, arehom, trihom, quahom,
189      >                somare, aretri,
190      >                arequa, filqua, hetqua,
191      >                ulsort, langue, codret )
192 c
193       endif
194 c
195       endif
196 c
197 c====
198 c 5. les noeuds milieux en degre 2
199 c    on n'examine que les aretes tracees sur la face periodique 2
200 c    comme d'habitude, attention a l'axe ...
201 c====
202 c
203       if ( codret.eq.0 ) then
204 c
205       if ( homolo.ge.2 ) then
206 c
207       if ( degre.eq.2 ) then
208 c
209       do 51, iaux = 1, nbarto
210 c
211         if ( arehom(iaux).gt.0 ) then
212 c
213           areh = arehom(iaux)
214 c
215           noehom(np2are(iaux)) = np2are(areh)
216           if ( iaux.ne.areh ) then
217             noehom(np2are(areh)) = -np2are(iaux)
218           endif
219 c
220         endif
221 c
222    51 continue
223 c
224       endif
225 c
226       endif
227 c
228       endif
229 c
230 c====
231 c 6. decompte du nombre de paires d'entites homologues
232 c====
233 c
234       if ( codret.eq.0 ) then
235 c
236       call uthonh ( noehom, arehom,
237      >              trihom, quahom,
238      >              ulsort, langue, codret )
239 c
240       endif
241 c
242 c====
243 c 7. la fin
244 c====
245 c
246       if ( codret.ne.0 ) then
247 c
248 #include "envex2.h"
249 c
250       write (ulsort,texte(langue,1)) 'Sortie', nompro
251       write (ulsort,texte(langue,2)) codret
252 c
253       endif
254 c
255 cgn           print *,'fin de ', nompro
256 cgn           print *,'trihom'
257 cgn           print 1789,(trihom(iaux),iaux=1,nbtrto)
258 cgn           print *,'quahom'
259 cgn           print 1789,(quahom(iaux),iaux=1,nbquto)
260 cgn           print *,'arehom'
261 cgn           print 1789,(arehom(iaux),iaux=1,nbarto)
262 cgn           print *,'noehom'
263 cgn           print 1789,(noehom(iaux),iaux=1,nbnoto)
264 c
265 #ifdef _DEBUG_HOMARD_
266       write (ulsort,texte(langue,1)) 'Sortie', nompro
267       call dmflsh (iaux)
268 #endif
269 c
270       end