Salome HOME
Homard executable
[modules/homard.git] / src / tool / AP_Conversion / pcsep9.F
1       subroutine pcsep9 ( etan, etanp1, pehn, pehnp1, typint,
2      >                    f1hp, nrofon, valeur, coef, prfcap,
3      >                    ficp, propor,
4      >                    coonoe, somare, aretri, arequa,
5      >                    tritet, cotrte, aretet,
6      >                    facpen, cofape, arepen,
7      >                    facpyr, cofapy, arepyr,
8      >                    hetpen, filpen, fppyte,
9      >                    npesca,
10      >                    ntesca,
11      >                    npysca,
12      >                    nbfonc, vafott,
13      >                    prftep, vatett,
14      >                    prfpyp, vapytt,
15      >                    ulsort, langue, codret )
16 c ______________________________________________________________________
17 c
18 c                             H O M A R D
19 c
20 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
21 c
22 c Version originale enregistree le 18 juin 1996 sous le numero 96036
23 c aupres des huissiers de justice Simart et Lavoir a Clamart
24 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
25 c aupres des huissiers de justice
26 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
27 c
28 c    HOMARD est une marque deposee d'Electricite de France
29 c
30 c Copyright EDF 1996
31 c Copyright EDF 1998
32 c Copyright EDF 2002
33 c Copyright EDF 2020
34 c ______________________________________________________________________
35 c
36 c    aPres adaptation - Conversion de Solution Elements de volume -
37 c     -                 -             -        -
38 c                       Pentaedres d'etat 80
39 c                       -
40 c ______________________________________________________________________
41 c .        .     .        .                                            .
42 c .  nom   . e/s . taille .           description                      .
43 c .____________________________________________________________________.
44 c . etan   . e   .    1   . ETAt du pentaedre a l'iteration N          .
45 c . etanp1 . e   .    1   . ETAt du pentaedre a l'iteration N+1        .
46 c . pehn   . e   .    1   . PEntaedre courant en numerotation Homard   .
47 c .        .     .        . a l'iteration N                            .
48 c . pehnp1 . e   .    1   . PEntaedre courant en numerotation Homard   .
49 c .        .     .        . a l'iteration N+1                          .
50 c . typint . e   .   1    . type d'interpolation                       .
51 c .        .     .        .  0, si automatique                         .
52 c .        .     .        .  elements : 0 si intensif, sans orientation.
53 c .        .     .        .             1 si extensif, sans orientation.
54 c .        .     .        .             2 si intensif, avec orientation.
55 c .        .     .        .             3 si extensif, avec orientation.
56 c .        .     .        .  noeuds : 1 si degre 1                     .
57 c .        .     .        .           2 si degre 2                     .
58 c .        .     .        .           3 si iso-P2                      .
59 c . f1hp   . e   .    1   . Fils 1er du pentaedre en numerotation      .
60 c .        .     .        . Homard a l'iteration N+1                   .
61 c . nrofon . e   .    1   . numero de la fonction en cours d'examen    .
62 c . valeur . e   .    1   . valeur de la fonction en cours d'examen    .
63 c . coef   . e   .    1   . coefficient pour la moyenne                .
64 c . prfcap . es  .   *    . En numero du calcul a l'iteration n+1 :    .
65 c .        .     .        . 0 : l'entite est absente du profil         .
66 c .        .     .        . 1 : l'entite est presente dans le profil   .
67 c . ficp   . e   .  3,11  . fils en numerotation du calcul n+1         .
68 c .        .     .        . 1 : pentaedres                             .
69 c .        .     .        . 2 : pyramides                              .
70 c .        .     .        . 3 : tetraedres                             .
71 c . propor . e   .   11   . proportion de volume entre fils et pere    .
72 c . coonoe . e   . nbnoto . coordonnees des noeuds                     .
73 c .        .     . * sdim .                                            .
74 c . somare . e   .2*nbarto. numeros des extremites d'arete             .
75 c . aretri . e   .nbtrto*3. numeros des 3 aretes des triangles         .
76 c . arequa . e   .nbquto*4. numeros des 4 aretes des quadrangles       .
77 c . tritet . e   .nbtecf*4. numeros des 4 triangles des tetraedres     .
78 c . cotrte . e   .nbtecf*4. code des 4 triangles des tetraedres        .
79 c . aretet . e   .nbteca*6. numeros des 6 aretes des tetraedres        .
80 c . facpen . e   .nbpecf*5. numeros des 5 faces des pentaedres         .
81 c . cofape . e   .nbpecf*5. code des 5 faces des pentaedres            .
82 c . arepen . e   .nbpeca*9. numeros des 9 aretes des pentaedres        .
83 c . facpyr . e   .nbpycf*5. numeros des 5 faces des pyramides          .
84 c . cofapy . e   .nbpycf*5. codes des faces des pyramides              .
85 c . arepyr . e   .nbpyca*8. numeros des 8 aretes des pyramides         .
86 c . hetpen . e   . nbpeto . historique de l'etat des pentaedres        .
87 c . filpen . e   . nbpeto . premier fils des pentaedres                .
88 c . fppyte . e   .2*nbpeco. fppyte(1,j) = numero de la 1ere pyramide   .
89 c .        .     .        . fille du pentaedre k tel que filpen(k) =-j .
90 c .        .     .        . fppyte(2,j) = numero du 1er tetraedre      .
91 c .        .     .        . fils du pentaedre k tel que filpen(k) = -j .
92 c . npesca . e   . rspeto . numero des pentaedres dans le calcul sortie.
93 c . ntesca . e   . rsteto . numero des tetraedres dans le calcul sortie.
94 c . npysca . e   . rspyto . numero des pyramides dans le calcul sortie .
95 c . nbfonc . e   .    1   . nombre de fonctions elements de volume     .
96 c . vafott . es  . nbfonc*. variables en sortie de l'adaptation        .
97 c .        .     . nbevso .                                            .
98 c . prftep . es  .   *    . En numero du calcul a l'iteration n+1 :    .
99 c .        .     .        . 0 : le tetraedre est absent du profil      .
100 c .        .     .        . 1 : le tetraedre est present dans le profil.
101 c . vatett .   a . nbfonc*. tableau temporaire de la solution pour     .
102 c .        .     .    *   . les tetraedres                             .
103 c . prfpyp . es  .   *    . En numero du calcul a l'iteration n+1 :    .
104 c .        .     .        . 0 : la pyramide est absente du profil      .
105 c .        .     .        . 1 : la pyramide est presente dans le profil
106 c . vapytt .   a . nbfonc*. tableau temporaire de la solution pour     .
107 c .        .     .    *   . les pyramides                              .
108 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
109 c . langue . e   .    1   . langue des messages                        .
110 c .        .     .        . 1 : francais, 2 : anglais                  .
111 c . codret . es  .    1   . code de retour des modules                 .
112 c .        .     .        . 0 : pas de probleme                        .
113 c .        .     .        . 1 : probleme                               .
114 c ______________________________________________________________________
115 c
116 c====
117 c 0. declarations et dimensionnement
118 c====
119 c
120 c 0.1. ==> generalites
121 c
122       implicit none
123       save
124 c
125       character*6 nompro
126       parameter ( nompro = 'PCSEP9' )
127 c
128 #include "nblang.h"
129 c
130 c 0.2. ==> communs
131 c
132 #include "envca1.h"
133 #include "nombno.h"
134 #include "nombar.h"
135 #include "nombtr.h"
136 #include "nombqu.h"
137 #include "nombte.h"
138 #include "nombpe.h"
139 #include "nombpy.h"
140 #include "nombsr.h"
141 c
142 c 0.3. ==> arguments
143 c
144       integer etan, etanp1, pehn, pehnp1
145       integer typint
146       integer f1hp, nrofon
147       integer nbfonc
148       integer prfcap(*)
149       integer ficp(3,11)
150 c
151       integer somare(2,nbarto)
152       integer aretri(nbtrto,3)
153       integer arequa(nbquto,4)
154       integer tritet(nbtecf,4), cotrte(nbtecf,4), aretet(nbteca,6)
155       integer facpen(nbpecf,5), cofape(nbpecf,5), arepen(nbpeca,9)
156       integer facpyr(nbpycf,5), cofapy(nbpycf,5), arepyr(nbpyca,8)
157 c
158       integer hetpen(nbpeto)
159       integer filpen(nbpeto), fppyte(2,nbpeco)
160       integer npesca(rsheto)
161       integer ntesca(rsteto)
162       integer npysca(rspyto)
163       integer prftep(*)
164       integer prfpyp(*)
165 c
166       double precision valeur, coef
167 c
168       double precision propor(11)
169       double precision coonoe(nbnoto,sdim)
170       double precision vafott(nbfonc,*)
171       double precision vatett(nbfonc,*)
172       double precision vapytt(nbfonc,*)
173 c
174       integer ulsort, langue, codret
175 c
176 c 0.4. ==> variables locales
177 c
178       integer iaux, jaux
179 c
180       integer fihp
181       integer etatfi
182 c
183       integer nfpenf, nfpyrf, nftetf
184       integer ficf(3,11)
185 c
186       double precision daux
187       double precision propof(11)
188 c
189       integer nbmess
190       parameter ( nbmess = 10 )
191       character*80 texte(nblang,nbmess)
192 c
193 c 0.5. ==> initialisations
194 c ______________________________________________________________________
195 c
196 c====
197 c 1. initialisations
198 c====
199 c
200 #include "impr01.h"
201 c
202 #ifdef _DEBUG_HOMARD_
203       write (ulsort,texte(langue,1)) 'Entree', nompro
204       call dmflsh (iaux)
205 #endif
206 c
207       texte(1,4) =
208      >'(/,''Pent. en cours : numero a l''''iteration '',a3,'' : '',i10)'
209       texte(1,5) =
210      >'(  ''                 etat a l''''iteration '',a3,''   : '',i4)'
211 c
212       texte(2,4) =
213      >'(/,''Current prism : # at iteration '',a3,''      : '',i10)'
214       texte(2,5) =
215      > '(  ''                     status at iteration '',a3,'' : '',i4)'
216 c
217 #include "impr03.h"
218 c
219 c====
220 c 2. Exploration des 8 fils
221 c====
222 c
223       do 20 , iaux = 0 , 7
224 c
225         if ( codret.eq.0 ) then
226 c
227         fihp = f1hp + iaux
228         etatfi = mod(hetpen(fihp),100)
229 cgn        write (ulsort,90015) 'fihp', fihp,', etat', hetpen(fihp)
230 c
231 c 2.1. ==> Le fils est actif
232 c
233         if ( etatfi.eq.0 ) then
234 c
235           if ( typint.eq.0 ) then
236             daux = valeur*coef
237           else
238             daux = valeur*propor(iaux+1)
239           endif
240 cgn              write (ulsort,*) '. ficp', ficp(1,iaux+1)
241           vafott(nrofon,ficp(1,iaux+1)) = daux
242           prfcap(ficp(1,iaux+1)) = 1
243 c
244 c 2.2. ==> Le fils est coupe en conformite
245 c
246       elseif ( ( etatfi.ge. 1 .and. etatfi.le. 6 ) .or.
247      >         ( etatfi.ge.17 .and. etatfi.le.19 ) .or.
248      >         ( etatfi.ge.21 .and. etatfi.le.26 ) .or.
249      >         ( etatfi.ge.31 .and. etatfi.le.36 ) .or.
250      >         ( etatfi.ge.43 .and. etatfi.le.45 ) .or.
251      >         ( etatfi.ge.51 .and. etatfi.le.52 ) ) then
252 c
253 #ifdef _DEBUG_HOMARD_
254           write (ulsort,texte(langue,3)) 'PCSEPY', nompro
255 #endif
256           call pcsepy ( nfpenf, nfpyrf, nftetf, ficf,
257      >                  fihp, etatfi,
258      >                  filpen, fppyte,
259      >                  npesca, ntesca, npysca,
260      >                  ulsort, langue, codret )
261 c
262           if ( typint.eq.0 ) then
263 c
264             daux = valeur*coef
265             do 2203 , jaux = 1 , nfpyrf
266               vapytt(nrofon,ficf(2,jaux)) = daux
267  2203       continue
268             do 2204 , jaux = 1 , nftetf
269               vatett(nrofon,ficf(3,jaux)) = daux
270  2204       continue
271 c
272           else
273 c
274 #ifdef _DEBUG_HOMARD_
275           write (ulsort,texte(langue,3)) 'PCSEPZ', nompro
276 #endif
277             call pcsepz ( propof,
278      >                    fihp, etatfi,
279      >                    coonoe, somare, aretri, arequa,
280      >                    tritet, cotrte, aretet,
281      >                    facpen, cofape, arepen,
282      >                    facpyr, cofapy, arepyr,
283      >                    filpen, fppyte,
284      >                    ulsort, langue, codret )
285 c
286             daux = valeur*propor(iaux+1)
287             do 2213 , jaux = 1 , nfpyrf
288               vapytt(nrofon,ficf(2,jaux)) = daux * propof(jaux)
289  2213       continue
290             do 2214 , jaux = 1 , nftetf
291               vatett(nrofon,ficf(3,jaux)) = daux * propof(jaux+nfpyrf)
292  2214       continue
293 c
294           endif
295 c
296           if ( codret.eq.0 ) then
297 c
298           do 222 , jaux = 1 , nfpyrf
299             prfpyp(ficf(2,jaux)) = 1
300   222     continue
301 c
302           do 223 , jaux = 1 , nftetf
303             prftep(ficf(3,jaux)) = 1
304   223     continue
305 c
306           endif
307 c
308         else
309 c
310           codret = 1
311           write (ulsort,texte(langue,4)) 'n  ', pehn
312           write (ulsort,texte(langue,5)) 'n  ', etan
313           write (ulsort,texte(langue,4)) 'n+1', pehnp1
314           write (ulsort,texte(langue,5)) 'n+1', etanp1
315 c
316         endif
317 c
318         endif
319 c
320    20 continue
321 c
322 c====
323 c 3. 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