Salome HOME
Homard executable
[modules/homard.git] / src / tool / Utilitaire / utvgvq.F
1       subroutine utvgvq ( lequad,
2      >                    volqua, pypequ,
3      >                    nbhexa, nbpyra, nbpent,
4      >                    livoqu,
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
26 c     UTilitaire : VoisinaGes Volumes / Quadrangles
27 c     --           -      -   -         -
28 c ______________________________________________________________________
29 c .        .     .        .                                            .
30 c .  nom   . e/s . taille .           description                      .
31 c .____________________________________________________________________.
32 c . lequad . e   .   1    . quadrangle a traiter                       .
33 c . volqua . e   .2*nbquto. numeros des 2 volumes par quadrangle       .
34 c .        .     .        . volqua(i,k) definit le i-eme voisin de k   .
35 c .        .     .        .   0 : pas de voisin                        .
36 c .        .     .        . j>0 : hexaedre j                           .
37 c .        .     .        . j<0 : pyramide/pentaedre dans pypequ(1/2,j).
38 c . pypequ . e   .2*lgpype. pypequ(1,j) = numero de la pyramide voisine.
39 c .        .     .        . du quadrangle k tel que volqua(1/2,k) = -j .
40 c .        .     .        . pypequ(2,j) = numero du pentaedre voisin   .
41 c .        .     .        . du quadrangle k tel que volqua(1/2,k) = -j .
42 c . nbhexa .  s  .   1    . nombre d'hexaedres voisins                 .
43 c . nbpyra .  s  .   1    . nombre de pyramides voisines               .
44 c . nbpent .  s  .   1    . nombre de pentaedres voisins               .
45 c . livoqu .  s  .   *    . liste des voisins                          .
46 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
47 c . langue . e   .    1   . langue des messages                        .
48 c .        .     .        . 1 : francais, 2 : anglais                  .
49 c . codret . es  .    1   . code de retour des modules                 .
50 c .        .     .        . 0 : pas de probleme                        .
51 c .        .     .        . non nul : probleme                         .
52 c ______________________________________________________________________
53 c
54 c====
55 c 0. declarations et dimensionnement
56 c====
57 c
58 c 0.1. ==> generalites
59 c
60       implicit none
61       save
62 c
63       character*6 nompro
64       parameter ( nompro = 'UTVGVQ' )
65 c
66 #include "nblang.h"
67 c
68 c 0.2. ==> communs
69 c
70 #include "envex1.h"
71 #include "impr02.h"
72 c
73 #include "nombqu.h"
74 #include "nombhe.h"
75 #include "nombpy.h"
76 #include "nombpe.h"
77 c
78 c 0.3. ==> arguments
79 c
80       integer lequad
81       integer nbhexa, nbpyra, nbpent
82       integer volqua(2,nbquto), pypequ(2,*)
83 c
84       integer livoqu(*)
85 c
86       integer ulsort, langue, codret
87 c
88 c 0.4. ==> variables locales
89 c
90       integer iaux, jaux, kaux
91 c
92       integer nbmess
93       parameter ( nbmess = 10 )
94       character*80 texte(nblang,nbmess)
95 c ______________________________________________________________________
96 c
97 c====
98 c 1. initialisation
99 c====
100 c
101 c 1.1. ==> messages
102 c
103 #include "impr01.h"
104 c
105 #ifdef _DEBUG_HOMARD_
106       write (ulsort,texte(langue,1)) 'Entree', nompro
107       call dmflsh (iaux)
108 #endif
109 c
110 #ifdef _DEBUG_HOMARD_
111       texte(1,5) = '(''.. '',a,''numero'',i10)'
112       texte(1,6) = '(''.. Nombre de voisins de type '',a,'':'',i10)'
113 c
114       texte(2,5) = '(''.. '',a,''#'',i10)'
115       texte(2,6) = '(''.. Number of neighbours '',a,''type :'',i10)'
116 #endif
117 c
118 c 1.2. ==> prealables
119 c
120       codret = 0
121 c
122       nbhexa = 0
123       nbpyra = 0
124       nbpent = 0
125 c
126 c====
127 c 2. decompte des elements de volumes voisins
128 c====
129 c
130       if ( nbheto.gt.0 .or.
131      >     nbpyto.gt.0 .or. nbpeto.gt.0 ) then
132 c
133       do 2 , iaux = 1 , 8
134         livoqu(iaux) = 0
135     2 continue
136 c
137 #ifdef _DEBUG_HOMARD_
138       write (ulsort,texte(langue,5)) mess14(langue,1,4), lequad
139 #endif
140 c
141       do 20 , iaux = 1 , 2
142 c
143         jaux = volqua(iaux,lequad)
144 c
145 c 2.1. ==> voisinage par un hexaedre
146 c
147         if ( jaux.gt.0 ) then
148 c
149           do 21 , kaux = 1 , nbhexa
150             if ( livoqu(2+kaux).eq.jaux ) then
151               goto 20
152             endif
153    21     continue
154           nbhexa = nbhexa + 1
155           livoqu(2+nbhexa) = jaux
156 c
157         elseif ( jaux.lt.0 ) then
158 c
159 c 2.2. ==> voisinage par une pyramide
160 c
161           if ( pypequ(1,-jaux).gt.0 ) then
162             do 22 , kaux = 1 , nbpyra
163               if ( livoqu(4+kaux).eq.pypequ(1,-jaux) ) then
164                 goto 20
165               endif
166    22       continue
167             nbpyra = nbpyra + 1
168             livoqu(4+nbpyra) = pypequ(1,-jaux)
169           endif
170 c
171 c 2.3. ==> voisinage par un pentaedre
172 c
173           if ( pypequ(2,-jaux).gt.0 ) then
174             do 23 , kaux = 1 , nbpent
175               if ( livoqu(6+kaux).eq.pypequ(2,-jaux) ) then
176                 goto 20
177               endif
178    23       continue
179             nbpent = nbpent + 1
180             livoqu(6+nbpent) = pypequ(2,-jaux)
181           endif
182 c
183         endif
184 c
185    20 continue
186 c
187 #ifdef _DEBUG_HOMARD_
188       write (ulsort,texte(langue,6)) mess14(langue,1,6), nbhexa
189       write (ulsort,texte(langue,6)) mess14(langue,1,5), nbpyra
190       write (ulsort,texte(langue,6)) mess14(langue,1,7), nbpent
191       write (ulsort,2000) (livoqu(iaux),iaux=1,8)
192  2000 format(2i10)
193 #endif
194 c
195       endif
196 c
197 c====
198 c 3. La fin
199 c====
200 c
201       if ( codret.ne.0 ) then
202 c
203 #include "envex2.h"
204 c
205       write (ulsort,texte(langue,1)) 'Sortie', nompro
206       write (ulsort,texte(langue,2)) codret
207 c
208       endif
209 c
210 #ifdef _DEBUG_HOMARD_
211       write (ulsort,texte(langue,1)) 'Sortie', nompro
212       call dmflsh (iaux)
213 #endif
214 c
215       end