Salome HOME
Homard executable
[modules/homard.git] / src / tool / AP_Conversion / pcseh0.F
1       subroutine pcseh0 ( etan, etanp1, hehn, hehnp1, typint,
2      >                    prfcan, prfcap,
3      >                    nfhexp, nfpyrp, nftetp, ficp, propor,
4      >                    nheeca, nhesca,
5      >                    nbfonc, vafoen, vafott,
6      >                    vatett, prftep,
7      >                    vapytt, prfpyp,
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 de Solution Elements de volume -
30 c     -                 -             -        -
31 c                       Hexaedres d'etat anterieur 0
32 c                       -                          -
33 c remarque : pcseh0 et pcsep0 sont des clones
34 c ______________________________________________________________________
35 c .        .     .        .                                            .
36 c .  nom   . e/s . taille .           description                      .
37 c .____________________________________________________________________.
38 c . etan   . e   .    1   . ETAt de l'hexaedre a l'iteration N         .
39 c . etanp1 . e   .    1   . ETAt de l'hexaedre a l'iteration N+1       .
40 c . hehn   . e   .    1   . Hexaedre courant en numerotation Homard    .
41 c .        .     .        . a l'iteration N                            .
42 c . hehnp1 . e   .    1   . Hexaedre courant en numerotation Homard    .
43 c .        .     .        . a l'iteration N+1                          .
44 c . typint . e   .   1    . type d'interpolation                       .
45 c .        .     .        .  0, si automatique                         .
46 c .        .     .        .  elements : 0 si intensif, sans orientation.
47 c .        .     .        .             1 si extensif, sans orientation.
48 c .        .     .        .             2 si intensif, avec orientation.
49 c .        .     .        .             3 si extensif, avec orientation.
50 c .        .     .        .  noeuds : 1 si degre 1                     .
51 c .        .     .        .           2 si degre 2                     .
52 c .        .     .        .           3 si iso-P2                      .
53 c . prfcan . e   .   *    . En numero du calcul a l'iteration n :      .
54 c .        .     .        . 0 : l'entite est absente du profil         .
55 c .        .     .        . i : l'entite est au rang i dans le profil  .
56 c . prfcap . es  .   *    . En numero du calcul a l'iteration n+1 :    .
57 c .        .     .        . 0 : l'entite est absente du profil         .
58 c .        .     .        . 1 : l'entite est presente dans le profil   .
59 c . nfhexp . e   .    1   . nombre de fils hexaedres                   .
60 c . nfpyrp . e   .    1   . nombre de fils pyramides                   .
61 c . nftetp . e   .    1   . nombre de fils tetraedres                  .
62 c . ficp   . e   .  3,18  . numeros des fils en numerotation du calcul .
63 c .        .     .        . 1 : hexaedres                              .
64 c .        .     .        . 2 : pyramides                              .
65 c .        .     .        . 3 : tetraedres                             .
66 c . propor . e   .   18   . proportion de volume entre fils et pere    .
67 c . nheeca . e   . reteto . numero des hexaedres dans le calcul entree .
68 c . nhesca . e   . rsheto . numero des hexaedres dans le calcul sortie .
69 c . nbfonc . e   .    1   . nombre de fonctions elements de volume     .
70 c . vafoen . e   . nbfonc*. variables en entree de l'adaptation        .
71 c .        .     . nbeven .                                            .
72 c . vafott . es  . nbfonc*. variables en sortie de l'adaptation        .
73 c .        .     . nbevso .                                            .
74 c . vatett .   a . nbfonc*. tableau temporaire de la solution pour     .
75 c .        .     .    *   . les tetraedres                             .
76 c . prftep . es  .   *    . En numero du calcul a l'iteration n+1 :    .
77 c .        .     .        . 0 : le tetraedre est absent du profil      .
78 c .        .     .        . 1 : le tetraedre est present dans le profil.
79 c . prfpyp . es  .   *    . En numero du calcul a l'iteration n+1 :    .
80 c .        .     .        . 0 : la pyramide est absente du profil      .
81 c .        .     .        . 1 : la pyramide est presente dans le profil.
82 c . vapytt .   a . nbfonc*. tableau temporaire de la solution pour     .
83 c .        .     .    *   . les pyramides                              .
84 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
85 c . langue . e   .    1   . langue des messages                        .
86 c .        .     .        . 1 : francais, 2 : anglais                  .
87 c . codret . es  .    1   . code de retour des modules                 .
88 c .        .     .        . 0 : pas de probleme                        .
89 c .        .     .        . 1 : probleme                               .
90 c ______________________________________________________________________
91 c
92 c====
93 c 0. declarations et dimensionnement
94 c====
95 c
96 c 0.1. ==> generalites
97 c
98       implicit none
99       save
100 c
101       character*6 nompro
102       parameter ( nompro = 'PCSEH0' )
103 c
104 #include "nblang.h"
105 c
106 c 0.2. ==> communs
107 c
108 #include "nombsr.h"
109 #include "nomber.h"
110 c
111 c 0.3. ==> arguments
112 c
113       integer etan, etanp1, hehn, hehnp1
114       integer typint
115       integer nbfonc
116       integer prfcan(*), prfcap(*)
117 c
118       integer nfhexp, nfpyrp, nftetp
119       integer ficp(3,18)
120 c
121       integer nheeca(reheto), nhesca(rsheto)
122       integer prftep(*)
123       integer prfpyp(*)
124 c
125       double precision propor(18)
126       double precision vafoen(nbfonc,*)
127       double precision vafott(nbfonc,*)
128       double precision vatett(nbfonc,*)
129       double precision vapytt(nbfonc,*)
130 c
131       integer ulsort, langue, codret
132 c
133 c 0.4. ==> variables locales
134 c
135       integer iaux
136 c
137 c     hecn   = Hexaedre courant en numerotation du Calcul a l'it. N
138 c     hecnp1 = Hexaedre courant en numerotation du Calcul a l'it. N+1
139 c
140       integer hecn, hecnp1
141 c
142       integer nrofon
143 c
144       double precision daux
145 c
146       integer nbmess
147       parameter ( nbmess = 10 )
148       character*80 texte(nblang,nbmess)
149 c
150 c 0.5. ==> initialisations
151 c ______________________________________________________________________
152 c
153 c====
154 c 1. initialisations
155 c====
156 c
157 #include "impr01.h"
158 #include "impr03.h"
159 c
160 #ifdef _DEBUG_HOMARD_
161       write (ulsort,texte(langue,1)) 'Entree', nompro
162       call dmflsh (iaux)
163 #endif
164 c
165       texte(1,4) =
166      >'(''Hexa. en cours : numero a l''''iteration '',a3,'' : '',i10)'
167       texte(1,5) =
168      >'(''                 etat a l''''iteration '',a3,''   : '',i4)'
169 c
170       texte(2,4) =
171      >'(''Current hexahedron : # at iteration '',a3,''     : '',i10)'
172       texte(2,5) =
173      > '(  ''                     status at iteration '',a3,'' : '',i4)'
174 c
175       codret = 0
176 c
177 c====
178 c 2. seulement si une valeur existe
179 c====
180 c
181       hecn = nheeca(hehn)
182 #ifdef _DEBUG_HOMARD_
183       write (ulsort,texte(langue,4)) 'n  ', hehn
184       write (ulsort,texte(langue,5)) 'n  ', etan
185       write (ulsort,texte(langue,4)) 'n+1', hehnp1
186       write (ulsort,texte(langue,5)) 'n+1', etanp1
187       write (ulsort,90002) 'prfcan(hecn)', prfcan(hecn)
188       call dmflsh (iaux)
189       write (ulsort,90002) 'nfhexp', nfhexp
190       write (ulsort,90002) 'nfpyrp', nfpyrp
191       write (ulsort,90002) 'nftetp', nftetp
192 #endif
193 c
194       if ( prfcan(hecn).gt.0 ) then
195 cgn      write(ulsort,90002) 'typint', typint
196 cgn      write(ulsort,90002) 'etanp1', etanp1
197 c
198 c====
199 c 3. parcours des types de decoupages
200 c====
201 c 3.1. ==> etanp1 = 0 : l'hexaedre etait actif et l'est encore ;
202 c                       il est inchange
203 c             c'est le cas le plus simple : on prend la valeur de la
204 c             fonction associee a l'ancien numero de l'hexaedre.
205 c
206       if ( etanp1.eq.0 ) then
207 c
208         hecnp1 = nhesca(hehnp1)
209         prfcap(hecnp1) = 1
210 c
211         do 31 , nrofon = 1, nbfonc
212           vafott(nrofon,hecnp1) = vafoen(nrofon,prfcan(hecn))
213    31   continue
214 c
215 c 3.2. ==> etanp1 > 11 : l'hexaedre etait actif et est en conformite
216 c
217       elseif ( etanp1.ge.11 ) then
218 c
219         if ( typint.eq.0 ) then
220 c
221           do 320 , nrofon = 1 , nbfonc
222             daux = vafoen(nrofon,prfcan(hecn))
223             do 3201 , iaux = 1 , nfpyrp
224               vapytt(nrofon,ficp(2,iaux)) = daux
225  3201       continue
226             do 3202 , iaux = 1 , nftetp
227               vatett(nrofon,ficp(3,iaux)) = daux
228  3202       continue
229   320     continue
230 c
231         else
232 c
233           do 321 , nrofon = 1 , nbfonc
234             daux = vafoen(nrofon,prfcan(hecn))
235             do 3211 , iaux = 1 , nfpyrp
236               vapytt(nrofon,ficp(2,iaux)) = daux * propor(iaux)
237  3211       continue
238             do 3212 , iaux = 1 , nftetp
239               vatett(nrofon,ficp(3,iaux)) = daux * propor(iaux+nfpyrp)
240  3212       continue
241   321     continue
242 c
243         endif
244 c
245 c 3.3. ==> etan p1 = 8 : l'hexaedre est decoupe en 8.
246 c
247       elseif ( etanp1.eq.8  ) then
248 c
249         if ( typint.eq.0 ) then
250 c
251           do 330 , nrofon = 1, nbfonc
252             daux = vafoen(nrofon,prfcan(hecn))
253             do 3301 , iaux = 1 , nfhexp
254               vafott(nrofon,ficp(1,iaux)) = daux
255  3301       continue
256   330     continue
257 c
258         else
259 c
260           do 331 , nrofon = 1, nbfonc
261             daux = vafoen(nrofon,prfcan(hecn))
262             do 3311 , iaux = 1 , nfhexp
263               vafott(nrofon,ficp(1,iaux)) = daux * propor(iaux)
264  3311       continue
265   331     continue
266 c
267         endif
268 c
269 c 3.4. ==> aucun autre etat sur l'hexaedre courant n'est possible
270 c
271       else
272 c
273         codret = 1
274         write (ulsort,texte(langue,4)) 'n  ', hehn
275         write (ulsort,texte(langue,5)) 'n  ', etan
276         write (ulsort,texte(langue,4)) 'n+1', hehnp1
277         write (ulsort,texte(langue,5)) 'n+1', etanp1
278 c
279       endif
280 c
281 c====
282 c 4. affectation des profils
283 c====
284 c
285 #ifdef _DEBUG_HOMARD_
286       write (ulsort,*) '4. affectation des profils ; codret', codret
287 #endif
288 c
289       if ( codret.eq.0 ) then
290 c
291       do 41 , iaux = 1 , nfhexp
292         prfcap(ficp(1,iaux)) = 1
293    41 continue
294 c
295       do 42 , iaux = 1 , nfpyrp
296         prfpyp(ficp(2,iaux)) = 1
297    42 continue
298 c
299       do 43 , iaux = 1 , nftetp
300         prftep(ficp(3,iaux)) = 1
301    43 continue
302 c
303       endif
304 c
305       endif
306 c
307 c====
308 c 5. la fin
309 c====
310 c
311       if ( codret.ne.0 ) then
312 c
313       write (ulsort,texte(langue,1)) 'Sortie', nompro
314       write (ulsort,texte(langue,2)) codret
315 c
316       endif
317 c
318 #ifdef _DEBUG_HOMARD_
319       write (ulsort,texte(langue,1)) 'Sortie', nompro
320       call dmflsh (iaux)
321 #endif
322 c
323       end