Salome HOME
Homard executable
[modules/homard.git] / src / tool / AP_Conversion / pcmapy.F
1       subroutine pcmapy ( elemen, nbele0,
2      >                    somare, np2are,
3      >                    aretri,
4      >                    facpyr, cofapy, arepyr,
5      >                    hetpyr, fampyr, cfapyr,
6      >                    nnosca, npysca, npysho,
7      >                    famele, noeele, typele,
8      >                    ulsort, langue, codret )
9 c ______________________________________________________________________
10 c
11 c                             H O M A R D
12 c
13 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
14 c
15 c Version originale enregistree le 18 juin 1996 sous le numero 96036
16 c aupres des huissiers de justice Simart et Lavoir a Clamart
17 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
18 c aupres des huissiers de justice
19 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
20 c
21 c    HOMARD est une marque deposee d'Electricite de France
22 c
23 c Copyright EDF 1996
24 c Copyright EDF 1998
25 c Copyright EDF 2002
26 c Copyright EDF 2020
27 c ______________________________________________________________________
28 c
29 c    aPres adaptation - Conversion - MAillage connectivite - PYramides
30 c     -                 -            --                      --
31 c ______________________________________________________________________
32 c .        .     .        .                                            .
33 c .  nom   . e/s . taille .           description                      .
34 c .____________________________________________________________________.
35 c . elemen . es  .   1    . numero du dernier element cree             .
36 c . nbele0 . e   .   1    . estimation du nombre d'elements            .
37 c . somare . e   .2*nbarto. numeros des extremites d'arete             .
38 c . np2are . e   . nbarto . numero du noeud p2 milieu d'arete          .
39 c . aretri . e   .nbtrto*3. numeros des 3 aretes des triangles         .
40 c . facpyr . e   .nbpycf*5. numeros des 5 faces des pyramides          .
41 c . cofapy . e   .nbpycf*5. codes des faces des pyramides              .
42 c . arepyr . e   .nbpyca*8. numeros des 8 aretes des pyramides         .
43 c . hetpyr . e   . nbpyto . historique de l'etat des pyramides         .
44 c . fampyr . e   . nbpyto . famille des pyramides                      .
45 c . cfapyr .     . nctfhe. codes des familles des pyramides            .
46 c .        .     . nbfpyr .   1 : famille MED                          .
47 c .        .     .        .   2 : type d'pyramides                     .
48 c . nnosca . e   . rsnoto . numero des noeuds du code de calcul        .
49 c . npysca .  s  . rspyto . numero des pyramides dans le calcul sortie .
50 c . npysho .  s  . nbele0 . numero des pyramides dans HOMARD           .
51 c . famele . es  . nbele0 . famille med des elements                   .
52 c . noeele . es  . nbele0 . noeuds des elements                        .
53 c .        .     . *nbmane.                                            .
54 c . typele . es  . nbele0 . type des elements                          .
55 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
56 c . langue . e   .    1   . langue des messages                        .
57 c .        .     .        . 1 : francais, 2 : anglais                  .
58 c . codret . es  .    1   . code de retour des modules                 .
59 c .        .     .        . 0 : pas de probleme                        .
60 c .        .     .        . 1 : probleme                               .
61 c ______________________________________________________________________
62 c
63 c====
64 c 0. declarations et dimensionnement
65 c====
66 c
67 c 0.1. ==> generalites
68 c
69       implicit none
70       save
71 c
72       character*6 nompro
73       parameter ( nompro = 'PCMAPY' )
74 c
75 #include "nblang.h"
76 #include "coftex.h"
77 c
78 c 0.2. ==> communs
79 c
80 #include "envex1.h"
81 c
82 #include "impr02.h"
83 #include "envca1.h"
84 c
85 #include "nbfami.h"
86 #include "nombar.h"
87 #include "nombtr.h"
88 #include "nombpy.h"
89 c
90 #include "nombsr.h"
91 c
92 #include "dicfen.h"
93 c
94 c 0.3. ==> arguments
95 c
96       integer elemen
97       integer nbele0
98 c
99       integer somare(2,nbarto), np2are(nbarto)
100       integer aretri(nbtrto,3)
101       integer facpyr(nbpycf,5), cofapy(nbpycf,5), arepyr(nbpyca,8)
102       integer hetpyr(nbpyto)
103 c
104       integer cfapyr(nctfpy,nbfpyr), fampyr(nbpyto)
105 c
106       integer nnosca(rsnoto)
107       integer npysca(rspyto), npysho(nbele0)
108 c
109       integer famele(nbele0), noeele(nbele0,nbmane)
110       integer typele(nbele0)
111 c
112       integer ulsort, langue, codret
113 c
114 c 0.4. ==> variables locales
115 c
116       integer lapyra, lapyr0
117       integer etat
118       integer iaux
119       integer listar(8), listso(13), nomiar(8)
120 c
121       integer nbmess
122       parameter ( nbmess = 20 )
123       character*80 texte(nblang,nbmess)
124 c
125 c 0.5. ==> initialisations
126 c ______________________________________________________________________
127 c
128 c====
129 c 1. initialisations
130 c====
131 c
132 #include "impr01.h"
133 c
134 #include "impr03.h"
135 c
136 #ifdef _DEBUG_HOMARD_
137       write (ulsort,texte(langue,1)) 'Entree', nompro
138       call dmflsh (iaux)
139 #endif
140 c
141 #ifdef _DEBUG_HOMARD_
142       write(ulsort,90002) 'nbpycf, nbpyca', nbpycf, nbpyca
143       write(ulsort,90002) 'nbele0, nbmane', nbele0, nbmane
144       write(ulsort,90002) 'degre', degre
145 cgn      write(ulsort,*) cfapyr
146 #endif
147 c
148 #include "impr06.h"
149 c
150 c====
151 c 2. initialisations des renumerotations
152 c====
153 c
154       do 21 , iaux = 1 , rspyto
155         npysca(iaux) = 0
156    21 continue
157 c
158       do 22 , iaux = 1 , nbele0
159         npysho(iaux) = 0
160    22 continue
161 c
162 c====
163 c 3. Conversion en lineaire
164 c====
165 c
166       if ( degre.eq.1 ) then
167 c
168 c                            S5
169 c                            x
170 c                         . . . .
171 c                       .  .   .   .
172 c                     .   .     .     .
173 c                   .    .       .       .
174 c                 .     .        x .         .
175 c               .      .     .   S2    .        .
176 c             .       .  .                 .       .
177 c           .        .                         .      .
178 c         .      .  .                              .     .
179 c       .    .     .                                   .    .
180 c     .  .        .                                        .   .
181 c S1 .           .                                             .  .
182 c  x .         .                                                  .  .
183 c         .    .                                                      .
184 c             x--------------------------------------------------------x
185 c           S4                                                        S3
186 c
187 c    . Les noeuds (1,2,3,4) definissent un quadrangle a orientation
188 c      vers l'exterieur
189 c
190         do 31 , lapyr0 = 1 , nbpyto
191 c
192           lapyra = lapyr0
193 c
194 #ifdef _DEBUG_HOMARD_
195       write (ulsort,texte(langue,11)) mess14(langue,2,5), lapyra
196 #endif
197 c
198           etat = mod( hetpyr(lapyra) , 100 )
199 c
200           if ( etat.eq.0 .or. hierar.ne.0 ) then
201 c
202             elemen = elemen + 1
203 #ifdef _DEBUG_HOMARD_
204             write (ulsort,texte(langue,14)) elemen
205 #endif
206             npysho(elemen) = lapyra
207             npysca(lapyra) = elemen
208 c
209 #ifdef _DEBUG_HOMARD_
210       write (ulsort,texte(langue,3)) 'UTASPY', nompro
211 #endif
212             call utaspy ( lapyra,
213      >                    nbtrto, nbpycf, nbpyca,
214      >                    somare, aretri,
215      >                    facpyr, cofapy, arepyr,
216      >                    listar, listso )
217 c
218 cgn      write (ulsort,90002) 'listar', (listar(iaux),iaux = 1 , 8)
219 cgn      write (ulsort,90002) 'listso', (listso(iaux),iaux = 1 , 5)
220 c
221 c     Attention : utaspy donne la numerotation dans la convention homard
222 c                 il faut permuter les sommets 2/4 pour obtenir
223 c                 la numerotation dans la convention med
224 c
225             noeele(elemen,1) = nnosca(listso(1))
226             noeele(elemen,2) = nnosca(listso(4))
227             noeele(elemen,3) = nnosca(listso(3))
228             noeele(elemen,4) = nnosca(listso(2))
229             noeele(elemen,5) = nnosca(listso(5))
230 c
231             famele(elemen) = cfapyr(cofamd,fampyr(lapyra))
232             typele(elemen) = cfapyr(cotyel,fampyr(lapyra))
233 c
234 #ifdef _DEBUG_HOMARD_
235             if ( noeele(elemen,1).ne.-54117 ) then
236             write (ulsort,*) 'fampyr = ', fampyr(lapyra)
237             write (ulsort,texte(langue,14)) elemen
238             write (ulsort,texte(langue,15))
239      >             (noeele(elemen,iaux),iaux=1,5)
240             write (ulsort,*) 'Famille MED = ',famele(elemen),
241      >                       ', Type MED = ',typele(elemen)
242             endif
243 #endif
244 c
245           endif
246 c
247   31   continue
248 c
249 c====
250 c 4. Conversion en quadratique
251 c====
252 c
253       else
254 c
255 c                            S5
256 c                            x
257 c                         . . . .
258 c                       .  .   .   .
259 c                     .   .   N11     .
260 c                   .    .       .       .
261 c                 .     .        x .         .
262 c             N10.      .     .   S2    .        .N12
263 c             .       .  .                 .       .
264 c           .        .                         .      .
265 c         .      .  .N13                           .     .
266 c       .    .     .                            N7     .    .
267 c     .  .  N6    .                                        .   .
268 c S1 .           .                                             .  .
269 c  x .         .                                                  .  .
270 c         .    .                                                      .
271 c       N9    x--------------------------------------------------------x
272 c           S4                           N8                          S3
273 c
274 c    . Les noeuds (1,2,3,4) definissent un quadrangle a orientation
275 c      vers l'exterieur
276 c
277 c            Au sens homard      au sens MED
278 c          arete  1 de s1 a s5 | de s1 a s5
279 c          arete  2 de s2 a s5 | de s4 a s5
280 c          arete  3 de s3 a s5 | de s3 a s5
281 c          arete  4 de s4 a s5 | de s2 a s5
282 c          arete  5 de s1 a s2 | de s1 a s4
283 c          arete  6 de s2 a s3 | de s4 a s3
284 c          arete  7 de s3 a s4 | de s3 a s2
285 c          arete  8 de s4 a s1 | de s2 a s1
286 c       Tableau de travail nomiar :
287 c       nomiar(i) contient le numero local au sens MED du noeud porte
288 c       par l'arete de numero local i au sens homard
289 c
290         nomiar( 1) = 10
291         nomiar( 2) = 13
292         nomiar( 3) = 12
293         nomiar( 4) = 11
294         nomiar( 5) =  9
295         nomiar( 6) =  8
296         nomiar( 7) =  7
297         nomiar( 8) =  6
298 c
299         do 41 , lapyr0 = 1 , nbpyto
300 c
301           lapyra = lapyr0
302 c
303 #ifdef _DEBUG_HOMARD_
304       write (ulsort,texte(langue,11)) mess14(langue,2,5), lapyra
305 #endif
306 c
307           etat = mod( hetpyr(lapyra) , 100 )
308 c
309           if ( etat.eq.0 .or. hierar.ne.0 ) then
310 c
311             elemen = elemen + 1
312 #ifdef _DEBUG_HOMARD_
313             write (ulsort,texte(langue,14)) elemen
314 #endif
315             npysho(elemen) = lapyra
316             npysca(lapyra) = elemen
317 c
318 c
319 #ifdef _DEBUG_HOMARD_
320       write (ulsort,texte(langue,3)) 'UTASPY', nompro
321 #endif
322             call utaspy ( lapyra,
323      >                    nbtrto, nbpycf, nbpyca,
324      >                    somare, aretri,
325      >                    facpyr, cofapy, arepyr,
326      >                    listar, listso )
327 c
328 cgn      write (ulsort,90002) 'listar', (listar(iaux),iaux = 1 , 8)
329 cgn      write (ulsort,90002) 'listso', (listso(iaux),iaux = 1 , 5)
330 c
331 c     Attention : utaspy donne la numerotation dans la convention homard
332 c                 il faut permuter les sommets 2/4 pour obtenir la
333 c                 numerotation dans la convention med
334 c
335             noeele(elemen,1) = nnosca(listso(1))
336             noeele(elemen,2) = nnosca(listso(4))
337             noeele(elemen,3) = nnosca(listso(3))
338             noeele(elemen,4) = nnosca(listso(2))
339             noeele(elemen,5) = nnosca(listso(5))
340 c
341 c     Les noeuds au milieu des aretes
342 c
343             do 411 , iaux = 1 , 8
344               noeele(elemen,nomiar(iaux)) = nnosca(np2are(listar(iaux)))
345   411       continue
346 c
347             famele(elemen) = cfapyr(cofamd,fampyr(lapyra))
348             typele(elemen) = cfapyr(cotyel,fampyr(lapyra))
349 c
350 #ifdef _DEBUG_HOMARD_
351             if ( elemen.eq.-601 ) then
352             write (ulsort,*) 'fampyr = ', fampyr(lapyra)
353             write (ulsort,texte(langue,14)) elemen
354             write (ulsort,texte(langue,15))
355      >             (noeele(elemen,iaux),iaux=1,13)
356             write (ulsort,*) 'Famille MED = ',famele(elemen),
357      >                       ', Type MED = ',typele(elemen)
358             endif
359 #endif
360 c
361           endif
362 c
363   41   continue
364 c
365       endif
366 c
367 c====
368 c 5. la fin
369 c====
370 c
371       if ( codret.ne.0 ) then
372 c
373 #include "envex2.h"
374 c
375       write (ulsort,texte(langue,1)) 'Sortie', nompro
376       write (ulsort,texte(langue,2)) codret
377 c
378       endif
379 c
380 #ifdef _DEBUG_HOMARD_
381       write (ulsort,texte(langue,1)) 'Sortie', nompro
382       call dmflsh (iaux)
383 #endif
384 c
385       end