Salome HOME
Homard executable
[modules/homard.git] / src / tool / AP_Conversion / pcete1.F
1       subroutine pcete1 ( nbfonc, ngauss, deraff,
2      >                    prfcan, prfcap,
3      >                    hettet, anctet,
4      >                    filtet,
5      >                    nbante, anfite, anhete,
6      >                    nteeca, ntesca,
7      >                    vafoen, vafott,
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    aPres adaptation - Conversion de solution - aux noeuds par Element
29 c     -                 -                                       -
30 c                       TEtraedres - degre 1
31 c                       --                 -
32 c ______________________________________________________________________
33 c
34 c remarque : cette interpolation suppose que l'on est en presence de
35 c            variables intensives. C'est-a-dire independantes de la
36 c            taille de la maille.
37 c            Une densite par exemple mais pas une masse.
38 c ______________________________________________________________________
39 c .        .     .        .                                            .
40 c .  nom   . e/s . taille .           description                      .
41 c .____________________________________________________________________.
42 c . nbfonc . e   .    1   . nombre de fonctions aux points de Gauss    .
43 c . ngauss . e   .   1    . nbre de points de Gauss des fonctions pg   .
44 c . deraff . e   .    1   . vrai, s'il y a eu du deraffinement en      .
45 c .        .     .        . passant de l'iteration n a n+1 ; faux sinon.
46 c . prfcan . e   .   *    . En numero du calcul a l'iteration n :      .
47 c .        .     .        . 0 : l'entite est absente du profil         .
48 c .        .     .        . i : l'entite est au rang i dans le profil  .
49 c . prfcap . es  .   *    . En numero du calcul a l'iteration n+1 :    .
50 c .        .     .        . 0 : l'entite est absente du profil         .
51 c .        .     .        . 1 : l'entite est presente dans le profil   .
52 c . hettet . e   . nbteto . historique de l'etat des tetraedres        .
53 c . filtet . e   . nbteto . premier fils des tetraedres                .
54 c . nbante . e   .   1    . nombre de tetraedres decoupes par          .
55 c .        .     .        . conformite sur le maillage avant adaptation.
56 c . anfite . e   . nbante . tableau filtet du maillage de l'iteration n.
57 c . anhete . e   . nbante . tableau hettet du maillage de l'iteration n.
58 c . nteeca . e   .    *   . numero des tetraedres dans le calcul entree.
59 c . ntesca . e   . rsteto . numero des tetraedres dans le calcul sortie.
60 c . vafoen .   e . nbfonc*. variables en entree de l'adaptation        .
61 c .        .     .    *   .                                            .
62 c . vafott .   a . nbfonc*. tableau temporaire de la solution          .
63 c .        .     .    *   .                                            .
64 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
65 c . langue . e   .    1   . langue des messages                        .
66 c .        .     .        . 1 : francais, 2 : anglais                  .
67 c . codret . es  .    1   . code de retour des modules                 .
68 c .        .     .        . 0 : pas de probleme                        .
69 c .        .     .        . 1 : probleme                               .
70 c ______________________________________________________________________
71 c
72 c====
73 c 0. declarations et dimensionnement
74 c====
75 c
76 c 0.1. ==> generalites
77 c
78       implicit none
79       save
80 c
81       character*6 nompro
82       parameter ( nompro = 'PCETE1' )
83 c
84 #include "nblang.h"
85 #include "fracti.h"
86 c
87 c 0.2. ==> communs
88 c
89 #include "envex1.h"
90 c
91 #include "nombte.h"
92 #include "nombsr.h"
93 #include "nomber.h"
94 c
95 c 0.3. ==> arguments
96 c
97       integer nbfonc
98       integer ngauss
99       integer prfcan(*), prfcap(*)
100       integer hettet(nbteto), anctet(*)
101       integer filtet(nbteto)
102       integer nbante, anfite(nbante), anhete(nbante)
103       integer nteeca(reteto), ntesca(rsteto)
104 c
105       double precision vafoen(*)
106       double precision vafott(*)
107 c
108       logical deraff
109 c
110       integer ulsort, langue, codret
111 c
112 c 0.4. ==> variables locales
113 c
114       integer iaux
115 c
116 c     tehn   = TEtraedre courant en numerotation Homard a l'it. N
117 c     tehnp1 = TEtraedre courant en numerotation Homard a l'it. N+1
118 c
119       integer tehn, tehnp1
120 c
121 c     etan   = ETAt du tetraedre a l'iteration N
122 c     etanp1 = ETAt du tetraedre a l'iteration N+1
123 c
124       integer etan, etanp1
125 c
126       integer nbmess
127       parameter ( nbmess = 10 )
128       character*80 texte(nblang,nbmess)
129 c
130 c 0.5. ==> initialisations
131 c ______________________________________________________________________
132 c
133 c====
134 c 1. initialisations
135 c====
136 c
137 #include "pcimp0.h"
138 #include "impr01.h"
139 c
140 #ifdef _DEBUG_HOMARD_
141       write (ulsort,texte(langue,1)) 'Entree', nompro
142       call dmflsh (iaux)
143 #endif
144 c
145       codret = 0
146 c ______________________________________________________________________
147 c
148 c====
149 c 2. on boucle sur tous les tetraedres du maillage HOMARD n+1
150 c    on trie en fonction de l'etat du tetraedre dans le maillage n
151 c    on numerote les paragraphes en fonction de la documentation, a
152 c    savoir : le paragraphe doc.n.p traite de la mise a jour de solution
153 c    pour un tetraedre dont l'etat est passe de n a p.
154 c    les autres paragraphes sont numerotes classiquement
155 c    remarque : on a scinde en plusieurs programmes pour pouvoir passer
156 c    les options de compilation optimisees.
157 c====
158 c
159       if ( nbfonc.ne.0 ) then
160 c
161       do 20 , tehnp1 = 1 , nbteto
162 c
163 c 2.1. ==> caracteristiques du tetraedre :
164 c 2.1.1. ==> son numero homard dans le maillage precedent
165 c
166         if ( deraff ) then
167           tehn = anctet(tehnp1)
168         else
169           tehn = tehnp1
170         endif
171 c
172 c 2.1.2. ==> l'historique de son etat
173 c          On rappelle que l'etat vaut :
174 c      etan = 0 : le tetraedre etait actif.
175 c      etan = 21, ..., 26 : le tetraedre etait coupe en 2 selon
176 c                           l'arete 1, ..., 6 ; il y a eu deraffinement.
177 c      etan = 41, ..., 44 : le tetraedre etait coupe en 4 selon la
178 c                           face 1, ..., 4 ; il y a eu deraffinement.
179 c      etan = 45, 46, 47 : le tetraedre etait coupe en 4 selon la
180 c                          diagonale 1-6, 2-5, 3-4 ; il y a eu
181 c                          deraffinement.
182 c      etan = 55 : le tetraedre n'existait pas ; il a ete produit par
183 c                  un decoupage.
184 c      etan = 85, 86, 87 : le tetraedre etait coupe en 8 selon la
185 c                          diagonale 1-6, 2-5, 3-4 ; il y a eu
186 c                          deraffinement.
187 c
188         etanp1 = mod(hettet(tehnp1),100)
189         etan   = (hettet(tehnp1)-etanp1) / 100
190 c
191 cgn        write (ulsort,1792) 'Tetraedre', tehn, etan, tehnp1, etanp1
192 c
193 c=======================================================================
194 c doc.0.p. ==> etan = 0 : le tetraedre etait actif
195 c=======================================================================
196 c
197         if ( etan.eq.0 ) then
198 c
199 #ifdef _DEBUG_HOMARD_
200           write (ulsort,texte(langue,3)) 'PCSPT0', nompro
201 #endif
202 c
203           call pcspt0 ( etan, etanp1, tehn, tehnp1,
204      >                  prfcan, prfcap,
205      >                  filtet,
206      >                  nteeca, ntesca,
207      >                  nbfonc, ngauss, vafoen, vafott,
208      >                  ulsort, langue, codret )
209 c
210 c=======================================================================
211 c doc.21-26.p. ==> etan = 21, ..., 26 : le tetraedre etait coupe en 2
212 c=======================================================================
213 c
214         elseif ( etan.ge.21 .and. etan.le.26 ) then
215 c
216 #ifdef _DEBUG_HOMARD_
217           write (ulsort,texte(langue,3)) 'PCSPT2', nompro
218 #endif
219 c
220           call pcspt2 ( etan, etanp1, tehn, tehnp1,
221      >                  prfcan, prfcap,
222      >                  hettet, filtet, nbante, anfite,
223      >                  nteeca, ntesca,
224      >                  nbfonc, ngauss, vafoen, vafott,
225      >                  ulsort, langue, codret )
226 c
227 c=======================================================================
228 c doc.41-44.p. ==> etan = 41, ..., 44 : le tetraedre etait coupe en 4
229 c                  selon la face 1, 2, 3, 4
230 c doc.45-47.p. ==> etan = 45, 46, 47 : le tetraedre etait coupe en 4
231 c                  selon une diagonale
232 c=======================================================================
233 c
234         elseif ( etan.ge.41 .and. etan.le.47 ) then
235 c
236 #ifdef _DEBUG_HOMARD_
237           write (ulsort,texte(langue,3)) 'PCSPT4', nompro
238 #endif
239 c
240           call pcspt4 ( etan, etanp1, tehn, tehnp1,
241      >                  prfcan, prfcap,
242      >                  hettet, filtet, nbante, anfite,
243      >                  nteeca, ntesca,
244      >                  nbfonc, ngauss, vafoen, vafott,
245      >                  ulsort, langue, codret )
246 c
247 c=======================================================================
248 c doc.85-87.p. ==> etan = 85, 86, 87 : le tetraedre etait coupe en 8
249 c                  selon une diagonale
250 c=======================================================================
251 c
252         elseif ( etan.ge.85 .and. etan.le.87 ) then
253 c
254 #ifdef _DEBUG_HOMARD_
255           write (ulsort,texte(langue,3)) 'PCSPT8', nompro
256 #endif
257 c
258           call pcspt8 ( etanp1, tehn, tehnp1,
259      >                  prfcan, prfcap,
260      >                  filtet, nbante, anfite,
261      >                  nteeca, ntesca,
262      >                  nbfonc, ngauss, vafoen, vafott,
263      >                  ulsort, langue, codret )
264 c
265         endif
266 c
267    20 continue
268 c
269       endif
270 c
271 c====
272 c 3. la fin
273 c====
274 c
275       if ( codret.ne.0 ) then
276 c
277 #include "envex2.h"
278 c
279       write (ulsort,texte(langue,1)) 'Sortie', nompro
280       write (ulsort,texte(langue,2)) codret
281 c
282       endif
283 c
284 #ifdef _DEBUG_HOMARD_
285       write (ulsort,texte(langue,1)) 'Sortie', nompro
286       call dmflsh (iaux)
287 #endif
288 c
289       end