]> SALOME platform Git repositories - modules/homard.git/blob - src/tool/AP_Conversion/pcehe1.F
Salome HOME
Porting in SSL Bug12504 of non regression test
[modules/homard.git] / src / tool / AP_Conversion / pcehe1.F
1       subroutine pcehe1 ( nbfonc, ngauss, deraff,
2      >                    prfcan, prfcap,
3      >                    hethex, anchex, filhex, fhpyte,
4      >                    nbanhe, anfihe, anhehe, anpthe,
5      >                    nheeca, nhesca,
6      >                    nteeca, ntesca,
7      >                    npyeca, npysca,
8      >                    vafoen, vafott,
9      >                    ulsort, langue, codret )
10 c ______________________________________________________________________
11 c
12 c                             H O M A R D
13 c
14 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
15 c
16 c Version originale enregistree le 18 juin 1996 sous le numero 96036
17 c aupres des huissiers de justice Simart et Lavoir a Clamart
18 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
19 c aupres des huissiers de justice
20 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
21 c
22 c    HOMARD est une marque deposee d'Electricite de France
23 c
24 c Copyright EDF 1996
25 c Copyright EDF 1998
26 c Copyright EDF 2002
27 c Copyright EDF 2020
28 c ______________________________________________________________________
29 c    aPres adaptation - Conversion de solution - aux noeuds par Element
30 c     -                 -                                       -
31 c                       HExaedres - degre 1
32 c                       --                -
33 c ______________________________________________________________________
34 c .        .     .        .                                            .
35 c .  nom   . e/s . taille .           description                      .
36 c .____________________________________________________________________.
37 c . nbfonc . e   .    1   . nombre de fonctions aux points de Gauss    .
38 c . ngauss . e   .   1    . nbre de points de Gauss des fonctions pg   .
39 c . deraff . e   .    1   . vrai, s'il y a eu du deraffinement en      .
40 c .        .     .        . passant de l'iteration n a n+1 ; faux sinon.
41 c . prfcan . e   .   *    . En numero du calcul a l'iteration n :      .
42 c .        .     .        . 0 : l'entite est absente du profil         .
43 c .        .     .        . i : l'entite est au rang i dans le profil  .
44 c . prfcap . es  .   *    . En numero du calcul a l'iteration n+1 :    .
45 c .        .     .        . 0 : l'entite est absente du profil         .
46 c .        .     .        . 1 : l'entite est presente dans le profil   .
47 c . hethex . e   . nbheto . historique de l'etat des hexaedres         .
48 c . filhex . e   . nbheto . premier fils des hexaedres                 .
49 c . fhpyte . e   .2*nbheco. fhpyte(1,j) = numero de la 1ere pyramide   .
50 c .        .     .        . fille de l'hexaedre k tel que filhex(k) =-j.
51 c .        .     .        . fhpyte(2,j) = numero du 1er tetraedre      .
52 c .        .     .        . fils de l'hexaedre k tel que filhex(k) = -j.
53 c . nbanhe . e   .   1    . nombre de hexaedres decoupes par           .
54 c .        .     .        . conformite sur le maillage avant adaptation.
55 c . anfihe . e   . nbanhe . tableau filhex du maillage de l'iteration n.
56 c . anhehe . e   . nbanhe . tableau hethex du maillage de l'iteration n.
57 c . anpthe . e   .  2**   . tableau fhpyte du maillage de l'iteration n.
58 c . nheeca . e   .    *   . hexaedres en entree dans le calcul         .
59 c . nhesca . e   . rsheto . numero des hexaedres dans le calcul        .
60 c . nteeca . e   .    *   . tetraedres en entree dans le calcul        .
61 c . ntesca . e   . rsteto . tetraedres en sortie dans le calcul        .
62 c . npyeca . e   .    *   . pyramides en entree dans le calcul         .
63 c . npysca . e   . rspyto . numero des pyramides dans le calcul sortie .
64 c . vafoen .   e . nbfonc*. variables en entree de l'adaptation        .
65 c .        .     .    *   .                                            .
66 c . vafott .   a . nbfonc*. tableau temporaire de la solution          .
67 c .        .     .    *   .                                            .
68 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
69 c . langue . e   .    1   . langue des messages                        .
70 c .        .     .        . 1 : francais, 2 : anglais                  .
71 c . codret . es  .    1   . code de retour des modules                 .
72 c .        .     .        . 0 : pas de probleme                        .
73 c .        .     .        . 1 : probleme                               .
74 c ______________________________________________________________________
75 c
76 c====
77 c 0. declarations et dimensionnement
78 c====
79 c
80 c 0.1. ==> generalites
81 c
82       implicit none
83       save
84 c
85       character*6 nompro
86       parameter ( nompro = 'PCEHE1' )
87 c
88 #include "nblang.h"
89 #include "fracti.h"
90 c
91 c 0.2. ==> communs
92 c
93 #include "envex1.h"
94 c
95 #include "nombsr.h"
96 #include "nomber.h"
97 #include "nombhe.h"
98 c
99 c 0.3. ==> arguments
100 c
101       integer nbfonc
102       integer ngauss
103       integer prfcan(*), prfcap(*)
104       integer hethex(nbheto), anchex(*)
105       integer filhex(nbheto), fhpyte(2,nbheco)
106       integer nbanhe, anfihe(nbanhe), anhehe(nbanhe), anpthe(2,*)
107       integer nheeca(reheto), nhesca(rsheto)
108       integer nteeca(reteto), ntesca(rsteto)
109       integer npyeca(repyto), npysca(rspyto)
110 c
111       double precision vafoen(*)
112       double precision vafott(*)
113 c
114       logical deraff
115 c
116       integer ulsort, langue, codret
117 c
118 c 0.4. ==> variables locales
119 c
120       integer iaux
121 c
122 c     hehn   = Hexaedre courant en numerotation Homard a l'it. N
123 c     hehnp1 = Hexaedre courant en numerotation Homard a l'it. N+1
124 c
125       integer hehn, hehnp1
126 c
127 c     etan   = ETAt de l'hexaedre a l'iteration N
128 c     etanp1 = ETAt de l'hexaedre a l'iteration N+1
129 c
130       integer etan, etanp1
131 c
132       integer nbmess
133       parameter ( nbmess = 10 )
134       character*80 texte(nblang,nbmess)
135 c
136 c 0.5. ==> initialisations
137 c ______________________________________________________________________
138 c
139 c====
140 c 1. initialisations
141 c====
142 c
143 #include "pcimp0.h"
144 #include "impr01.h"
145 c
146 #ifdef _DEBUG_HOMARD_
147       write (ulsort,texte(langue,1)) 'Entree', nompro
148       call dmflsh (iaux)
149 #endif
150 c
151       codret = 0
152 c ______________________________________________________________________
153 c
154 c====
155 c 2. on boucle sur tous les hexaedres du maillage HOMARD n+1
156 c    on trie en fonction de l'etat de l'hexaedre dans le maillage n
157 c    remarque : on a scinde en plusieurs programmes pour pouvoir passer
158 c    les options de compilation optimisees.
159 c====
160 c
161       if ( nbfonc.ne.0 ) then
162 c
163       do 20 , hehnp1 = 1 , nbheto
164 c
165 c 2.1. ==> caracteristiques de l'hexaedre :
166 c 2.1.1. ==> son numero homard dans le maillage precedent
167 c
168         if ( deraff ) then
169           hehn = anchex(hehnp1)
170         else
171           hehn = hehnp1
172         endif
173 c
174 c 2.1.2. ==> l'historique de son etat
175 c          On rappelle que l'etat vaut :
176 c      etat = 0 : le hexaedre est actif.
177 c      etat = 5 : l'hexaedre n'existe pas.
178 c      etat = 8 : l'hexaedre est coupe en 8.
179 c      etat = 9 : l'hexaedre est coupe en 8 et un de ses fils est coupe.
180 c      etat >= 11 : l'hexaedre est coupe en conformite.
181 c
182         etanp1 = mod(hethex(hehnp1),1000)
183         etan   = (hethex(hehnp1)-etanp1) / 1000
184 c
185 cgn        write (ulsort,1792) 'Hexaedre', hehn, etan, hehnp1, etanp1
186 c
187 c=======================================================================
188 c 2.1. ==> etan = 0 : le hexaedre etait actif
189 c=======================================================================
190 c
191         codret = 20
192    20 continue
193 c
194       endif
195 c
196 c====
197 c 3. la fin
198 c====
199 c
200       if ( codret.ne.0 ) then
201 c
202 #include "envex2.h"
203 c
204       write (ulsort,texte(langue,1)) 'Sortie', nompro
205       write (ulsort,texte(langue,2)) codret
206 c
207       endif
208 c
209 #ifdef _DEBUG_HOMARD_
210       write (ulsort,texte(langue,1)) 'Sortie', nompro
211       call dmflsh (iaux)
212 #endif
213 c
214       end