Salome HOME
Homard executable
[modules/homard.git] / src / tool / AP_Conversion / pcsep0.F
1       subroutine pcsep0 ( etan, etanp1, pehn, pehnp1, typint,
2      >                    prfcan, prfcap,
3      >                    nfpenp, nfpyrp, nftetp, ficp, propor,
4      >                    npeeca, npesca,
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                       Pentaedres 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 du pentaedre a l'iteration N          .
39 c . etanp1 . e   .    1   . ETAt du pentaedre a l'iteration N+1        .
40 c . pehn   . e   .    1   . PEntaedre courant en numerotation Homard   .
41 c .        .     .        . a l'iteration N                            .
42 c . pehnp1 . e   .    1   . PEntaedre 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 . nfpenp . e   .    1   . nombre de fils pentaedres                  .
60 c . nfpyrp . e   .    1   . nombre de fils pyramides                   .
61 c . nftetp . e   .    1   . nombre de fils tetraedres                  .
62 c . ficp   . e   .  3,11  . numeros des fils en numerotation du calcul .
63 c .        .     .        . 1 : pentaedres                             .
64 c .        .     .        . 2 : pyramides                              .
65 c .        .     .        . 3 : tetraedres                             .
66 c . propor . e   .   11   . proportion de volume entre fils et pere    .
67 c . npeeca . e   .    *   . numero des pentaedres dans le calcul entree.
68 c . npesca . e   . rspeto . numero des pentaedres 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 = 'PCSEP0' )
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, pehn, pehnp1
114       integer typint
115       integer nbfonc
116       integer prfcan(*), prfcap(*)
117 c
118       integer nfpenp, nfpyrp, nftetp
119       integer ficp(3,11)
120 c
121       integer npeeca(reheto), npesca(rsheto)
122       integer prftep(*)
123       integer prfpyp(*)
124 c
125       double precision propor(11)
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     pecn   = Pentaedre courant en numerotation du Calcul a l'it. N
138 c     pecnp1 = Pentaedre courant en numerotation du Calcul a l'it. N+1
139 c
140       integer pecn, pecnp1
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      >'(''Pent. 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 prism : # 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       pecn = npeeca(pehn)
182 #ifdef _DEBUG_HOMARD_
183       write (ulsort,texte(langue,4)) 'n  ', pehn
184       write (ulsort,texte(langue,5)) 'n  ', etan
185       write (ulsort,texte(langue,4)) 'n+1', pehnp1
186       write (ulsort,texte(langue,5)) 'n+1', etanp1
187       write (ulsort,90002) 'prfcan(pecn)', prfcan(pecn)
188       call dmflsh (iaux)
189       write (ulsort,90002) 'nfpenp', nfpenp
190       write (ulsort,90002) 'nfpyrp', nfpyrp
191       write (ulsort,90002) 'nftetp', nftetp
192 #endif
193 c
194       if ( prfcan(pecn).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 : le pentaedre est actif ; il est inchange
202 c             c'est le cas le plus simple : on prend la valeur de la
203 c             fonction associee a l'ancien numero du pentaedre.
204 c
205       if ( etanp1.eq.0 ) then
206 c
207         pecnp1 = npesca(pehnp1)
208         prfcap(pecnp1) = 1
209 c
210         do 31 , nrofon = 1, nbfonc
211           vafott(nrofon,pecnp1) = vafoen(nrofon,prfcan(pecn))
212    31  continue
213 c
214 c 3.2. ==> etanp1 = 1, ..., 6 : le pentaedre est coupe en
215 c                               1 tetraedre et 2 pyramides
216 c          etanp1 = 17, ..., 19 : le pentaedre est coupe en
217 c                                 2 tetraedres et 1 pyramide
218 c          etanp1 = 21, ..., 26 : le pentaedre est coupe en
219 c                                 6 tetraedres
220 c          etanp1 = 31, ..., 36 : le pentaedre est coupe en
221 c                                 10 tetraedres et 1 pyramide
222 c          etanp1 = 43, ..., 45 : le pentaedre est coupe en
223 c                                 2 tetraedres et 4 pyramides
224 c          etanp1 = 51, 52 : le pentaedre est coupe en
225 c                            11 tetraedres
226 c
227       elseif ( ( etanp1.ge.1 .and. etanp1.le.6 ) .or.
228      >         ( etanp1.ge.17 .and. etanp1.le.19 ) .or.
229      >         ( etanp1.ge.21 .and. etanp1.le.26 ) .or.
230      >         ( etanp1.ge.31 .and. etanp1.le.36 ) .or.
231      >         ( etanp1.ge.43 .and. etanp1.le.45 ) .or.
232      >         ( etanp1.ge.51 .and. etanp1.le.52 ) ) then
233 c
234         if ( typint.eq.0 ) then
235 c
236           do 320 , nrofon = 1 , nbfonc
237             daux = vafoen(nrofon,prfcan(pecn))
238             do 3201 , iaux = 1 , nfpyrp
239               vapytt(nrofon,ficp(2,iaux)) = daux
240  3201       continue
241             do 3202 , iaux = 1 , nftetp
242               vatett(nrofon,ficp(3,iaux)) = daux
243  3202       continue
244   320     continue
245 c
246         else
247 c
248           do 321 , nrofon = 1 , nbfonc
249             daux = vafoen(nrofon,prfcan(pecn))
250             do 3211 , iaux = 1 , nfpyrp
251               vapytt(nrofon,ficp(2,iaux)) = daux * propor(iaux)
252  3211       continue
253             do 3212 , iaux = 1 , nftetp
254               vatett(nrofon,ficp(3,iaux)) = daux * propor(iaux+nfpyrp)
255  3212       continue
256   321     continue
257 c
258         endif
259 c
260 c 3.3. ==> etanp1 = 80 : le pentaedre est decoupe en 8.
261 c
262       elseif ( etanp1.eq.80  ) then
263 c
264         if ( typint.eq.0 ) then
265 c
266           do 330 , nrofon = 1, nbfonc
267             daux = vafoen(nrofon,prfcan(pecn))
268             do 3301 , iaux = 1 , nfpenp
269               vafott(nrofon,ficp(1,iaux)) = daux
270  3301       continue
271   330     continue
272 c
273         else
274 c
275           do 331 , nrofon = 1, nbfonc
276             daux = vafoen(nrofon,prfcan(pecn))
277             do 3311 , iaux = 1 , nfpenp
278               vafott(nrofon,ficp(1,iaux)) = daux * propor(iaux)
279  3311       continue
280   331     continue
281 c
282         endif
283 c
284 c 3.4. ==> aucun autre etat sur le pentaedre courant n'est possible
285 c
286       else
287 c
288         codret = 1
289         write (ulsort,texte(langue,4)) 'n  ', pehn
290         write (ulsort,texte(langue,5)) 'n  ', etan
291         write (ulsort,texte(langue,4)) 'n+1', pehnp1
292         write (ulsort,texte(langue,5)) 'n+1', etanp1
293 c
294       endif
295 c
296 c====
297 c 4. affectation des profils
298 c====
299 c
300 #ifdef _DEBUG_HOMARD_
301       write (ulsort,90002) '4. affectation des profils ; codret', codret
302 #endif
303 c
304       if ( codret.eq.0 ) then
305 c
306       do 41 , iaux = 1 , nfpenp
307         prfcap(ficp(1,iaux)) = 1
308    41 continue
309 c
310       do 42 , iaux = 1 , nfpyrp
311         prfpyp(ficp(2,iaux)) = 1
312    42 continue
313 c
314       do 43 , iaux = 1 , nftetp
315         prftep(ficp(3,iaux)) = 1
316    43 continue
317 c
318       endif
319 c
320       endif
321 c
322 c====
323 c 5. la fin
324 c====
325 c
326       if ( codret.ne.0 ) then
327 c
328       write (ulsort,texte(langue,1)) 'Sortie', nompro
329       write (ulsort,texte(langue,2)) codret
330 c
331       endif
332 c
333 #ifdef _DEBUG_HOMARD_
334       write (ulsort,texte(langue,1)) 'Sortie', nompro
335       call dmflsh (iaux)
336 #endif
337 c
338       end