Salome HOME
Homard executable
[modules/homard.git] / src / tool / AP_Conversion / pcmate.F
1       subroutine pcmate ( elemen, nbele0,
2      >                    somare, np2are,
3      >                    aretri,
4      >                    tritet, cotrte, aretet,
5      >                    hettet, famtet, cfatet,
6      >                    nnosca, ntesca, ntesho,
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 - TEtraedres
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 . tritet . e   .nbtecf*4. numeros des 4 triangles des tetraedres     .
41 c . cotrte . e   .nbtecf*4. code des 4 triangles des tetraedres        .
42 c . aretet . e   .nbteca*6. numeros des 6 aretes des tetraedres        .
43 c . hettet . e   . nbteto . historique de l'etat des tetraedres        .
44 c . famtet . e   . nbteto . famille des tetraedres                     .
45 c . cfatet .     . nctfte. codes des familles des tetraedres          .
46 c .        .     . nbftet .   1 : famille MED                          .
47 c .        .     .        .   2 : type de tetraedres                   .
48 c .        .     .        . + l : appartenance a l'equivalence l       .
49 c . nnosca . e   . rsnoto . numero des noeuds du code de calcul        .
50 c . ntesca .  s  . rsteto . numero des tetraedres du calcul            .
51 c . ntesho .  s  . nbele0 . numero des tetraedres dans HOMARD          .
52 c . famele . es  . nbele0 . famille med des elements                   .
53 c . noeele . es  . nbele0 . noeuds des elements                        .
54 c .        .     . *nbmane.                                            .
55 c . typele . es  . nbele0 . type des elements                          .
56 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
57 c . langue . e   .    1   . langue des messages                        .
58 c .        .     .        . 1 : francais, 2 : anglais                  .
59 c . codret . es  .    1   . code de retour des modules                 .
60 c .        .     .        . 0 : pas de probleme                        .
61 c .        .     .        . 1 : probleme                               .
62 c ______________________________________________________________________
63 c
64 c====
65 c 0. declarations et dimensionnement
66 c====
67 c
68 c 0.1. ==> generalites
69 c
70       implicit none
71       save
72 c
73       character*6 nompro
74       parameter ( nompro = 'PCMATE' )
75 c
76 #include "nblang.h"
77 #include "coftex.h"
78 c
79 c 0.2. ==> communs
80 c
81 #include "envex1.h"
82 c
83 #include "impr02.h"
84 #include "envca1.h"
85 c
86 #include "nbfami.h"
87 #include "nombar.h"
88 #include "nombtr.h"
89 #include "nombte.h"
90 c
91 #include "nombsr.h"
92 c
93 #include "dicfen.h"
94 c
95 c 0.3. ==> arguments
96 c
97       integer elemen
98       integer nbele0
99 c
100       integer somare(2,nbarto), np2are(nbarto)
101       integer aretri(nbtrto,3)
102       integer tritet(nbtecf,4), cotrte(nbtecf,4), aretet(nbteca,6)
103       integer hettet(nbteto)
104 c
105       integer cfatet(nctfte,nbftet), famtet(nbteto)
106 c
107       integer nnosca(rsnoto)
108       integer ntesca(rsteto), ntesho(nbele0)
109 c
110       integer famele(nbele0), noeele(nbele0,nbmane)
111       integer typele(nbele0)
112 c
113       integer ulsort, langue, codret
114 c
115 c 0.4. ==> variables locales
116 c
117       integer letetr, letet0
118       integer etat
119       integer iaux
120       integer listar(6), listso(4)
121 c
122       integer nbmess
123       parameter ( nbmess = 20 )
124       character*80 texte(nblang,nbmess)
125 c
126 c 0.5. ==> initialisations
127 c ______________________________________________________________________
128 c
129 c====
130 c 1. initialisations
131 c====
132 c
133 c 1.1. ==> messages
134 c
135 #include "impr01.h"
136 c
137 #include "impr03.h"
138 c
139 #ifdef _DEBUG_HOMARD_
140       write (ulsort,texte(langue,1)) 'Entree', nompro
141       call dmflsh (iaux)
142 #endif
143 c
144 #ifdef _DEBUG_HOMARD_
145       write(ulsort,90002) 'nbtecf, nbteca =', nbtecf, nbteca
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 , rsteto
155         ntesca(iaux) = 0
156    21 continue
157 c
158       do 22 , iaux = 1 , nbele0
159         ntesho(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                                    la face fi est opposee au sommet ni
169 c                     n1
170 c                     *
171 c                    .  ..
172 c                   .     . . a3
173 c                  .        .  .
174 c                 .           .   .
175 c             a1 .          a2  .    .  n4
176 c               .                 .    *
177 c              .                  . .   .
178 c             .        a4    .        .  . a6
179 c            .          .               . .
180 c           .      .                      ..
181 c          .  .                             .
182 c         *..................................*
183 c       n2               a5                  n3
184 c
185         do 31 , letet0 = 1 , nbteto
186 c
187           letetr = letet0
188 c
189 #ifdef _DEBUG_HOMARD_
190       write (ulsort,texte(langue,11)) mess14(langue,2,3), letetr
191 #endif
192 c
193           etat = mod( hettet(letetr) , 100 )
194 c
195           if ( etat.eq.0 .or. hierar.ne.0 ) then
196 c
197             elemen = elemen + 1
198 #ifdef _DEBUG_HOMARD_
199             write (ulsort,texte(langue,14)) elemen
200             write (ulsort,*) 'triangles',(tritet(letetr,iaux),iaux=1,4)
201 #endif
202             ntesho(elemen) = letetr
203             ntesca(letetr) = elemen
204 c
205             call utaste ( letetr,
206      >                    nbtrto, nbtecf, nbteca,
207      >                    somare, aretri,
208      >                    tritet, cotrte, aretet,
209      >                    listar, listso )
210 #ifdef _DEBUG_HOMARD_
211             write (ulsort,90002) "sommets", listso
212 #endif
213 c
214             noeele(elemen,1) = nnosca(listso(1))
215             noeele(elemen,2) = nnosca(listso(2))
216             noeele(elemen,3) = nnosca(listso(3))
217             noeele(elemen,4) = nnosca(listso(4))
218             famele(elemen) = cfatet(cofamd,famtet(letetr))
219             typele(elemen) = cfatet(cotyel,famtet(letetr))
220 c
221           endif
222 c
223    31   continue
224 c
225 c====
226 c 4. Conversion en quadratique
227 c====
228 c
229       else
230 c
231 c                                    la face fi est opposee au sommet ni
232 c                     n1
233 c                     *
234 c                    .  ..
235 c                   .     . . a3
236 c                  .        .  *n8
237 c                 .           .   .
238 c             a1 .          a2  *    .  n4
239 c             n5*               n7.    *
240 c              .                  . .   .
241 c             .        a5    .        .  . a6
242 c            .          *n9             . *n10
243 c           .      .                      ..
244 c          .  .                             .
245 c         *................*.................*
246 c       n2              a4 n6                n3
247 c
248 c
249         do 41 , letet0 = 1 , nbteto
250 c
251           letetr = letet0
252 c
253 #ifdef _DEBUG_HOMARD_
254       write (ulsort,texte(langue,11)) mess14(langue,2,3), letetr
255 #endif
256 c
257           etat = mod( hettet(letetr) , 100 )
258 c
259           if ( etat.eq.0 .or. hierar.ne.0 ) then
260 c
261             elemen = elemen + 1
262 #ifdef _DEBUG_HOMARD_
263             write (ulsort,texte(langue,14)) elemen
264             write (ulsort,*) 'triangles',(tritet(letetr,iaux),iaux=1,3)
265 #endif
266             ntesho(elemen) = letetr
267             ntesca(letetr) = elemen
268 c
269             call utaste ( letetr,
270      >                    nbtrto, nbtecf, nbteca,
271      >                    somare, aretri,
272      >                    tritet, cotrte, aretet,
273      >                    listar, listso )
274 #ifdef _DEBUG_HOMARD_
275             write (ulsort,90002) "sommets", listso
276 #endif
277 c
278             noeele(elemen,1)  = nnosca(listso(1))
279             noeele(elemen,2)  = nnosca(listso(2))
280             noeele(elemen,3)  = nnosca(listso(3))
281             noeele(elemen,4)  = nnosca(listso(4))
282             noeele(elemen,5)  = nnosca(np2are(listar(1)))
283             noeele(elemen,6)  = nnosca(np2are(listar(4)))
284             noeele(elemen,7)  = nnosca(np2are(listar(2)))
285             noeele(elemen,8)  = nnosca(np2are(listar(3)))
286             noeele(elemen,9)  = nnosca(np2are(listar(5)))
287             noeele(elemen,10) = nnosca(np2are(listar(6)))
288 cgn            write (ulsort,*) (noeele(elemen,iaux),iaux=5,10)
289             famele(elemen) = cfatet(cofamd,famtet(letetr))
290             typele(elemen) = cfatet(cotyel,famtet(letetr))
291 c
292           endif
293 c
294    41   continue
295 c
296       endif
297 c
298 c====
299 c 5. la fin
300 c====
301 c
302       if ( codret.ne.0 ) then
303 c
304 #include "envex2.h"
305 c
306       write (ulsort,texte(langue,1)) 'Sortie', nompro
307       write (ulsort,texte(langue,2)) codret
308 c
309       endif
310 c
311 #ifdef _DEBUG_HOMARD_
312       write (ulsort,texte(langue,1)) 'Sortie', nompro
313       call dmflsh (iaux)
314 #endif
315 c
316       end