]> SALOME platform Git repositories - modules/homard.git/blob - src/tool/AP_Conversion/pcmano.F
Salome HOME
[tuleap28930] Issue in result when input mesh is 1D + minor corrections for debug
[modules/homard.git] / src / tool / AP_Conversion / pcmano.F
1       subroutine pcmano ( coonoe, hetnoe,
2      >                    famnoe, cfanoe,
3      >                    nnosca, nnosho,
4      >                    dimcst, coocst, sdimca, coonca,
5      >                    noeord,
6      >                    fameno,
7      >                    ulsort, langue, codret )
8 c ______________________________________________________________________
9 c
10 c                             H O M A R D
11 c
12 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
13 c
14 c Version originale enregistree le 18 juin 1996 sous le numero 96036
15 c aupres des huissiers de justice Simart et Lavoir a Clamart
16 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
17 c aupres des huissiers de justice
18 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
19 c
20 c    HOMARD est une marque deposee d'Electricite de France
21 c
22 c Copyright EDF 1996
23 c Copyright EDF 1998
24 c Copyright EDF 2002
25 c Copyright EDF 2020
26 c ______________________________________________________________________
27 c
28 c    aPres adaptation - Conversion - MAillage connectivite - NOeud
29 c     -                 -            --                      --
30 c ______________________________________________________________________
31 c .        .     .        .                                            .
32 c .  nom   . e/s . taille .           description                      .
33 c .____________________________________________________________________.
34 c . coonoe . e   . nbnoto . coordonnees des noeuds                     .
35 c .        .     . * sdim .                                            .
36 c . hetnoe . e   . nbnoto . historique de l'etat des noeuds            .
37 c . famnoe . e   . nbnoto . famille des noeuds                         .
38 c . cfanoe . e   . nctfno*. codes des familles des noeuds              .
39 c .        .     . nbnoto .   1 : famille MED                          .
40 c .        .     .        . + l : appartenance a l'equivalence l       .
41 c . nnosca .  s  . rsnoto . numero des noeuds du code de calcul        .
42 c . nnosho .  s  . rsnoac . numero des noeuds dans HOMARD              .
43 c . dimcst . e   .    1   . dimension de la coordonnee constante       .
44 c .        .     .        . eventuelle, 0 si toutes varient            .
45 c . coocst . e   .   11   . 1 : coordonnee constante eventuelle        .
46 c .        .     .        . 2, 3, 4 : xmin, ymin, zmin                 .
47 c .        .     .        . 5, 6, 7 : xmax, ymax, zmax                 .
48 c .        .     .        . 8, 9, 10 : -1 si constant, max-min sinon   .
49 c .        .     .        . 11 : max des (max-min)                     .
50 c . sdimca . e   .   1    . dimension de l'espace de calcul            .
51 c . coonca .   s . nbnoto . coordonnees des noeuds dans le calcul      .
52 c .        .     . *sdimca.                                            .
53 c . noeord . e   .   1    . vrai si les noeuds sont ordonnes           .
54 c .        .     .        . faux si sans importance                    .
55 c . fameno .   s . nbnoto . famille med des noeuds                     .
56 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
57 c . langue . e   .    1   . langue des messages                        .
58 c .        .     .        . 1 : francais, 2 : anglais                  .
59 c . codret . es  .    1   . code de retour des modules                 .
60 c .        .     .        . 0 : pas de probleme                        .
61 c .        .     .        . 1 : probleme                               .
62 c ______________________________________________________________________
63 c
64 c====
65 c 0. declarations et dimensionnement
66 c====
67 c
68 c 0.1. ==> generalites
69 c
70       implicit none
71       save
72 c
73       character*6 nompro
74       parameter ( nompro = 'PCMANO' )
75 c
76 #include "nblang.h"
77 #include "coftex.h"
78 c
79 c 0.2. ==> communs
80 c
81 #include "envex1.h"
82 #include "envca1.h"
83 #include "nbfami.h"
84 #include "nombno.h"
85 #include "nombsr.h"
86 #include "impr02.h"
87 c
88 #include "dicfen.h"
89 c
90 c 0.3. ==> arguments
91 c
92       integer dimcst, sdimca
93 c
94       double precision coocst(11)
95       double precision coonoe(nbnoto,sdim), coonca(nbnoto,sdimca)
96 c
97       integer hetnoe(nbnoto)
98       integer cfanoe(nctfno,nbfnoe), famnoe(nbnoto)
99       integer nnosca(rsnoto), nnosho(rsnoac)
100       integer fameno(nbnoto)
101 c
102       logical noeord
103 c
104       integer ulsort, langue, codret
105 c
106 c 0.4. ==> variables locales
107 c
108       integer lenoeu, lenolo
109       integer etat
110       integer iaux, jaux, kaux, laux, maux
111 #ifdef _DEBUG_HOMARD_
112       integer glop
113 #endif
114 c
115       integer nbmess
116       parameter ( nbmess = 20 )
117       character*80 texte(nblang,nbmess)
118 c
119 c 0.5. ==> initialisations
120 c ______________________________________________________________________
121 c
122 c====
123 c 1. initialisations
124 c====
125 c
126 c 1.1. ==> messages
127 c
128 #include "impr01.h"
129 c
130 #ifdef _DEBUG_HOMARD_
131       write (ulsort,texte(langue,1)) 'Entree', nompro
132       call dmflsh (iaux)
133 #endif
134 c
135       texte(1,4) = '(''Nombre de noeuds '',a2,'' calcule :'',i10)'
136       texte(1,5) = '(''Nombre de noeuds '',a2,'' estime  :'',i10)'
137       texte(1,6) = '(''Coordonnee constante incorrecte :'',i7)'
138       texte(1,10) = '(''Les deux doivent etre egaux ...'')'
139 c
140       texte(2,4) = '(''Computed number of '',a2,'' nodes  :'',i10)'
141       texte(2,5) = '(''Estimated number of '',a2,'' nodes :'',i10)'
142       texte(2,6) = '(''Constant coordinate is wrong :'',i7)'
143       texte(2,10) = '(''Both numbers oUGht to be equal ...'')'
144 c
145 #include "impr06.h"
146 c
147       codret = 0
148 c
149 c====
150 c 2. noeuds
151 c====
152 c
153 c 2.1. ==> renumerotation eventuelle des noeuds pour placer les
154 c          noeuds dans l'ordre suivant :
155 c            . noeuds isoles
156 c            . noeuds d'elements ignores
157 c            . noeuds uniquement support de maille-point
158 c            . noeuds p1
159 c            . noeuds p2
160 c          sinon, pas de changement de renumerotation
161 cgn          write(6,*) 'noeord = ',noeord
162 cgn          write(6,*) 'nbnois, nbnoei, nbnomp, nbnop1, nbnoto = ',
163 cgn     >nbnois, nbnoei, nbnomp, nbnop1, nbnoto
164 c
165       if ( noeord ) then
166 c
167         iaux = 0
168         jaux = nbnois
169         kaux = jaux + nbnoei
170         laux = kaux + nbnomp
171         maux = laux + nbnop1
172 c
173         do 211 , lenoeu = 1 , nbnoto
174 c
175 #ifdef _DEBUG_HOMARD_
176         if ( lenoeu.eq.-12 ) then
177           glop = 1
178         else
179           glop = 0
180         endif
181 #endif
182 #ifdef _DEBUG_HOMARD_
183         if ( glop.ne.0 ) then
184       write (ulsort,texte(langue,11)) mess14(langue,2,-1), lenoeu
185         endif
186 #endif
187           if ( hetnoe(lenoeu).eq.0) then
188             iaux = iaux + 1
189             nnosho(iaux) = lenoeu
190             nnosca(lenoeu) = iaux
191           else
192             etat = mod ( hetnoe(lenoeu), 10 )
193             if ( etat.eq.7 ) then
194               jaux = jaux + 1
195               nnosho(jaux) = lenoeu
196               nnosca(lenoeu) = jaux
197             elseif ( etat.eq.3 ) then
198               kaux = kaux + 1
199               nnosho(kaux) = lenoeu
200               nnosca(lenoeu) = kaux
201             elseif ( etat.eq.1 ) then
202               laux = laux + 1
203               nnosho(laux) = lenoeu
204               nnosca(lenoeu) = laux
205             elseif ( etat.eq.2 ) then
206               maux = maux + 1
207               nnosho(maux) = lenoeu
208               nnosca(lenoeu) = maux
209             else
210               codret = codret + 1
211             endif
212           endif
213   211   continue
214 c
215         if ( iaux.ne.nbnois ) then
216           write(ulsort,texte(langue,4)) 'is', iaux
217           write(ulsort,texte(langue,5)) 'is', nbnois
218           write(ulsort,texte(langue,10))
219           codret = 1
220         endif
221 c
222         if ( kaux-nbnois.ne.nbnoei ) then
223           write(ulsort,texte(langue,4)) 'IG', jaux-nbnois
224           write(ulsort,texte(langue,5)) 'IG', nbnoei
225           write(ulsort,texte(langue,10))
226           codret = 1
227         endif
228 c
229         if ( kaux-nbnois-nbnoei.ne.nbnomp ) then
230           write(ulsort,texte(langue,4)) 'MP', jaux-nbnois-nbnoei
231           write(ulsort,texte(langue,5)) 'MP', nbnomp
232           write(ulsort,texte(langue,10))
233           codret = 1
234         endif
235 c
236         if ( laux-nbnois-nbnoei-nbnomp.ne.nbnop1 ) then
237           write(ulsort,texte(langue,4)) 'P1', kaux-nbnois-nbnoei-nbnomp
238           write(ulsort,texte(langue,5)) 'P1', nbnop1
239           write(ulsort,texte(langue,10))
240           codret = 1
241         endif
242 c
243         if ( maux-nbnois-nbnoei-nbnomp-nbnop1.ne.nbnop2 ) then
244           write(ulsort,texte(langue,4)) 'P2',
245      >                                  laux-nbnois-nbnoei-nbnomp-nbnop1
246           write(ulsort,texte(langue,5)) 'P2', nbnop2
247           write(ulsort,texte(langue,10))
248           codret = 1
249         endif
250 c
251       else
252 c
253         do 212 , lenoeu = 1 , nbnoto
254 #ifdef _DEBUG_HOMARD_
255         if ( lenoeu.eq.-12 ) then
256           glop = 1
257         else
258           glop = 0
259         endif
260 #endif
261 #ifdef _DEBUG_HOMARD_
262         if ( glop.ne.0 ) then
263       write (ulsort,texte(langue,11)) mess14(langue,2,-1), lenoeu
264         endif
265 #endif
266           nnosho(lenoeu) = lenoeu
267           nnosca(lenoeu) = lenoeu
268   212   continue
269 CGN          nnosho(28) = 30
270 CGN          nnosca(28) = 30
271 CGN          nnosho(30) = 28
272 CGN          nnosca(30) = 28
273 CGN          nnosho(29) = 31
274 CGN          nnosca(29) = 31
275 CGN          nnosho(31) = 29
276 CGN          nnosca(31) = 29
277 CGN          nnosho(40) = 46
278 CGN          nnosca(40) = 46
279 CGN          nnosho(46) = 40
280 CGN          nnosca(46) = 40
281 CGN          nnosho(41) = 47
282 CGN          nnosca(41) = 47
283 CGN          nnosho(47) = 41
284 CGN          nnosca(47) = 41
285 CGN          nnosho(42) = 48
286 CGN          nnosca(42) = 48
287 CGN          nnosho(48) = 42
288 CGN          nnosca(48) = 42
289 c
290       endif
291 c
292 CGN        do 219 , lenoeu = 1 , nbnoto
293 CGN          write(6,5555) lenoeu, nnosho(lenoeu), nnosca(lenoeu)
294 CGN  219   continue
295 CGN 5555 format(3i4)
296 c
297 c 2.2. ==> les coordonnees
298 c
299       if ( sdim.eq.1 ) then
300 c
301         do 221 , lenoeu = 1 , nbnoto
302           lenolo = nnosho(lenoeu)
303           coonca(lenoeu,1) = coonoe(lenolo,1)
304   221   continue
305         if(dimcst.eq.2) then
306           do 2223 , lenoeu = 1 , nbnoto
307             coonca(lenoeu,2) = 0.d0
308  2223     continue
309         endif
310 c
311       elseif ( sdim.eq.2 ) then
312 c
313         if ( dimcst.eq.0 .or. dimcst.eq.3 ) then
314           iaux = 1
315           jaux = 2
316         elseif ( dimcst.eq.1 ) then
317           iaux = 2
318           jaux = 3
319         elseif ( dimcst.eq.2 ) then
320           iaux = 1
321           jaux = 3
322         else
323           write (ulsort,texte(langue,6)) dimcst
324           codret = 1
325         endif
326 c
327         if ( codret.eq.0 ) then
328 c
329         do 222 , lenoeu = 1 , nbnoto
330           lenolo = nnosho(lenoeu)
331           coonca(lenoeu,iaux) = coonoe(lenolo,1)
332           coonca(lenoeu,jaux) = coonoe(lenolo,2)
333   222   continue
334 c
335         if ( dimcst.ne.0 ) then
336           do 2221 , lenoeu = 1 , nbnoto
337             coonca(lenoeu,dimcst) = coocst(1)
338  2221     continue
339         endif
340 c
341         endif
342 c
343       else
344 c
345         do 223 , lenoeu = 1 , nbnoto
346 #ifdef _DEBUG_HOMARD_
347         if ( lenoeu.eq.-12 ) then
348           glop = 1
349         else
350           glop = 0
351         endif
352 #endif
353 #ifdef _DEBUG_HOMARD_
354         if ( glop.ne.0 ) then
355       write (ulsort,texte(langue,11)) mess14(langue,2,-1), lenoeu
356         endif
357 #endif
358           lenolo = nnosho(lenoeu)
359           coonca(lenoeu,1) = coonoe(lenolo,1)
360           coonca(lenoeu,2) = coonoe(lenolo,2)
361           coonca(lenoeu,3) = coonoe(lenolo,3)
362   223   continue
363 c
364       endif
365 c
366 c====
367 c 3. la famille des noeuds
368 c====
369 #ifdef _DEBUG_HOMARD_
370       write (ulsort,*) '3. la famille des noeuds ; codret = ', codret
371 #endif
372 c
373       do 31, lenoeu = 1, rsnoto
374 #ifdef _DEBUG_HOMARD_
375         if ( lenoeu.eq.-12 ) then
376           glop = 1
377         else
378           glop = 0
379         endif
380 #endif
381 #ifdef _DEBUG_HOMARD_
382         if ( glop.ne.0 ) then
383       write (ulsort,texte(langue,11)) mess14(langue,2,-1), lenoeu
384       write (ulsort,*) 'nnosho(lenoeu) =', nnosho(lenoeu)
385       write (ulsort,*) 'famnoe =', famnoe(nnosho(lenoeu))
386 c      write (ulsort,texte(langue,16)) cofamd
387         endif
388 #endif
389         fameno(lenoeu) = cfanoe(cofamd,famnoe(nnosho(lenoeu)))
390    31 continue
391 c
392 c====
393 c 4. la fin
394 c====
395 c
396       if ( codret.ne.0 ) then
397 c
398 #include "envex2.h"
399 c
400       write (ulsort,texte(langue,1)) 'Sortie', nompro
401       write (ulsort,texte(langue,2)) codret
402 c
403       endif
404 c
405 #ifdef _DEBUG_HOMARD_
406       write (ulsort,texte(langue,1)) 'Sortie', nompro
407       call dmflsh (iaux)
408 #endif
409 c
410       end