]> SALOME platform Git repositories - modules/homard.git/blob - src/tool/AP_Conversion/pcetr4.F
Salome HOME
Porting in SSL Bug12504 of non regression test
[modules/homard.git] / src / tool / AP_Conversion / pcetr4.F
1       subroutine pcetr4 ( nbfonc, nnmold, nnmnew,
2      >                    prfcan, prfcap,
3      >                    ntreca, ntrsca,
4      >                    vafoen, vafott,
5      >                    ulsort, langue, codret )
6 c ______________________________________________________________________
7 c
8 c                             H O M A R D
9 c
10 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
11 c
12 c Version originale enregistree le 18 juin 1996 sous le numero 96036
13 c aupres des huissiers de justice Simart et Lavoir a Clamart
14 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
15 c aupres des huissiers de justice
16 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
17 c
18 c    HOMARD est une marque deposee d'Electricite de France
19 c
20 c Copyright EDF 1996
21 c Copyright EDF 1998
22 c Copyright EDF 2002
23 c Copyright EDF 2020
24 c ______________________________________________________________________
25 c    aPres adaptation - Conversion de solution - aux noeuds par Element
26 c     -                 -                                       -
27 c                       TRiangles - cas 4 - degre 1 vers degre 2
28 c                       --              -
29 c ______________________________________________________________________
30 c
31 c remarque : cette interpolation suppose que l'on est en presence de
32 c            variables intensives. C'est-a-dire independantes de la
33 c            taille de la maille.
34 c            Une densite par exemple mais pas une masse.
35 c ______________________________________________________________________
36 c .        .     .        .                                            .
37 c .  nom   . e/s . taille .           description                      .
38 c .____________________________________________________________________.
39 c . nbfonc . e   .    1   . nombre de fonctions aux points de Gauss    .
40 c . nnmold . e   .   1    . ancien nombre de noeuds par maille         .
41 c . nnmnew . e   .   1    . nouveau nombre de noeuds par maille        .
42 c . prfcan . e   .   *    . En numero du calcul a l'iteration n :      .
43 c .        .     .        . 0 : l'entite est absente du profil         .
44 c .        .     .        . i : l'entite est au rang i dans le profil  .
45 c . prfcap . es  .   *    . En numero du calcul a l'iteration n+1 :    .
46 c .        .     .        . 0 : l'entite est absente du profil         .
47 c .        .     .        . 1 : l'entite est presente dans le profil   .
48 c . ntreca . e   .   *    . nro des triangles dans le calcul en entree .
49 c . ntrsca . e   . rstrto . numero des triangles du calcul             .
50 c . vafoen .   e . nbfonc*. variables en entree de l'adaptation        .
51 c .        .     .nnmold**.                                            .
52 c . vafott .   a . nbfonc*. tableau temporaire de la solution          .
53 c .        .     .nnmnew**.                                            .
54 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
55 c . langue . e   .    1   . langue des messages                        .
56 c .        .     .        . 1 : francais, 2 : anglais                  .
57 c . codret . es  .    1   . code de retour des modules                 .
58 c .        .     .        . 0 : pas de probleme                        .
59 c .        .     .        . 1 : probleme                               .
60 c ______________________________________________________________________
61 c
62 c====
63 c 0. declarations et dimensionnement
64 c====
65 c
66 c 0.1. ==> generalites
67 c
68       implicit none
69       save
70 c
71       character*6 nompro
72       parameter ( nompro = 'PCETR4' )
73 c
74 #include "nblang.h"
75 #include "fracta.h"
76 c
77 c 0.2. ==> communs
78 c
79 #include "envex1.h"
80 #include "nombtr.h"
81 #include "nombsr.h"
82 #include "nomber.h"
83 #include "ope1a3.h"
84 c
85 c 0.3. ==> arguments
86 c
87       integer nbfonc
88       integer nnmold, nnmnew
89       integer prfcan(*), prfcap(*)
90       integer ntreca(retrto), ntrsca(rstrto)
91 c
92       double precision vafoen(nbfonc,nnmold,*)
93       double precision vafott(nbfonc,nnmnew,*)
94 c
95       integer ulsort, langue, codret
96 c
97 c 0.4. ==> variables locales
98 c
99       integer iaux
100 c
101 c     trcn   = triangle courant en numerotation Calcul a l'it. N
102 c     trcnp1 = triangle courant en numerotation Calcul a l'it. N+1
103 c     trhn   = triangle courant en numerotation Homard a l'it. N
104 c
105       integer trcn, trcnp1, trhn
106 c
107       integer nrofon, nunoel
108 c
109       integer nbmess
110       parameter ( nbmess = 10 )
111       character*80 texte(nblang,nbmess)
112 c
113 c 0.5. ==> initialisations
114 c ______________________________________________________________________
115 c
116 c====
117 c 1. initialisations
118 c====
119 c
120 #include "pcimp0.h"
121 #include "impr01.h"
122 #include "impr03.h"
123 c
124 #ifdef _DEBUG_HOMARD_
125       write (ulsort,texte(langue,1)) 'Entree', nompro
126       call dmflsh (iaux)
127 #endif
128 #ifdef _DEBUG_HOMARD_
129       write(ulsort,90002) 'nbfonc, nbtrto', nbfonc, nbtrto
130       write(ulsort,90002) 'nnmold, nnmnew', nnmold, nnmnew
131 #endif
132 c
133 c====
134 c 2. on boucle sur tous les triangles du maillage HOMARD n+1
135 c====
136 c
137       if ( nbfonc.ne.0 ) then
138 c
139       do 20 , trhn = 1 , nbtrto
140 c
141 c 2.1. ==> ancien numero du triangle dans le calcul
142 c
143         trcn = ntreca(trhn)
144 c
145 cgn        write (ulsort,90002) 'triangle', trhn, prfcan(trcn)
146 c
147         if ( prfcan(trcn).gt.0 ) then
148 c
149           trcnp1 = ntrsca(trhn)
150           prfcap(trcnp1) = 1
151 c
152           do 21 , nrofon = 1 , nbfonc
153 c
154 cgn        write (ulsort,90002) 'fonction numero', nrofon
155 cgn        write (ulsort,90004) ' ',
156 cgn     > (vafoen(nrofon,nunoel,prfcan(trcn)),nunoel=1,nnmold)
157 c
158 c           recopie des valeurs sur les sommets
159 c
160             do 211 , nunoel = 1 , nnmold
161               vafott(nrofon,nunoel,trcnp1) =
162      >                                vafoen(nrofon,nunoel,prfcan(trcn))
163   211       continue
164 c
165 c           calcul des valeurs sur les noeuds milieux
166 c
167             do 212 , iaux = 1 , 3
168               nunoel = 3 + iaux
169               vafott(nrofon,nunoel,trcnp1) = unsde
170      >        * ( vafoen(nrofon,          iaux,prfcan(trcn)) +
171      >            vafoen(nrofon,per1a3(1,iaux),prfcan(trcn)) )
172   212       continue
173 c
174    21     continue
175 c
176         endif
177 c
178    20 continue
179 c
180       endif
181 c
182 c====
183 c 3. la fin
184 c====
185 c
186 #ifdef _DEBUG_HOMARD_
187       do 922 , iaux = 1 , nbtrto, -1
188         write (ulsort,90002) 'triangle', iaux
189         do 9222 , nrofon = 1 , nbfonc
190           write (ulsort,90002) 'fonction numero', nrofon
191           write(ulsort,90004) ' ',
192      >     (vafott(nrofon,nunoel,iaux), nunoel = 1 , nnmnew)
193  9222   continue
194   922 continue
195 #endif
196 c
197       if ( codret.ne.0 ) then
198 c
199 #include "envex2.h"
200 c
201       write (ulsort,texte(langue,1)) 'Sortie', nompro
202       write (ulsort,texte(langue,2)) codret
203 c
204       endif
205 c
206 #ifdef _DEBUG_HOMARD_
207       write (ulsort,texte(langue,1)) 'Sortie', nompro
208       call dmflsh (iaux)
209 #endif
210 c
211       end