1 subroutine utvgfa ( nhvois, nharet, nhtria, nhquad,
3 > nbfaar, pposif, pfacar,
4 > ulsort, langue, codret)
5 c ______________________________________________________________________
9 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
11 c Version originale enregistree le 18 juin 1996 sous le numero 96036
12 c aupres des huissiers de justice Simart et Lavoir a Clamart
13 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
14 c aupres des huissiers de justice
15 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
17 c HOMARD est une marque deposee d'Electricite de France
23 c ______________________________________________________________________
25 c UTilitaire : VoisinaGes FAces / Aretes
27 c ______________________________________________________________________
29 c . nom . e/s . taille . description .
30 c .____________________________________________________________________.
31 c . nhvois . e . char8 . nom de l'objet voisinage .
32 c . nharet . e . char8 . nom de l'objet decrivant les aretes .
33 c . nhtria . e . char8 . nom de l'objet decrivant les triangles .
34 c . nhquad . e . char8 . nom de l'objet decrivant les quadrangles .
35 c . option . e . 1 . pilotage des voisins des aretes : .
36 c . . . . -1 : on detruit la table. .
37 c . . . . 0 : on ne fait rien. .
38 c . . . . 1 : on construit la table. .
39 c . . . . 2 : on construit la table et on controle .
40 c . nbfaar . s . 1 . nombre cumule de faces par arete .
41 c . pposif . s . 1 . adresse du pointeur des vois. des aretes .
42 c . pfacar . s . 1 . adresse des voisins des aretes .
43 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
44 c . langue . e . 1 . langue des messages .
45 c . . . . 1 : francais, 2 : anglais .
46 c . codret . es . 1 . code de retour des modules .
47 c . . . . 0 : pas de probleme .
48 c . . . . 1 : probleme .
49 c ______________________________________________________________________
52 c 0. declarations et dimensionnement
55 c 0.1. ==> generalites
61 parameter ( nompro = 'UTVGFA' )
73 character*8 nhvois, nharet, nhtria, nhquad
76 integer nbfaar, pposif, pfacar
78 integer ulsort, langue, codret
80 c 0.4. ==> variables locales
83 integer codre1, codre2, codre3, codre4, codre5
86 integer nbarto, nbtrto, nbquto
87 integer paretr, parequ
90 parameter ( nbmess = 10 )
91 character*80 texte(nblang,nbmess)
93 c 0.5. ==> initialisations
94 c ______________________________________________________________________
102 #ifdef _DEBUG_HOMARD_
103 write (ulsort,texte(langue,1)) 'Entree', nompro
107 texte(1,4) = '(5x,''Voisinage faces-aretes.'')'
108 texte(1,5) = '(''Demande : '',i6)'
109 texte(1,6) = '(''Mauvaise demande.'')'
111 texte(2,4) = '(5x,''Neighbourhood faces-edges.'')'
112 texte(2,5) = '(''Request : '',i6)'
113 texte(2,6) = '(''Bad request.'')'
115 #ifdef _DEBUG_HOMARD_
116 write (ulsort,texte(langue,4))
117 write (ulsort,texte(langue,5)) option
123 c 2. Controle de l'option
126 #ifdef _DEBUG_HOMARD_
127 write (ulsort,*) '2. Controle option ; codret =',codret
129 if ( codret.eq.0 ) then
131 if ( option.lt.-1 .or. option.gt.2 ) then
133 write (ulsort,texte(langue,5)) option
134 write (ulsort,texte(langue,6))
142 c 3. recuperation des donnees du maillage d'entree
143 c remarque : on relit les nombres d'entites car les communs ne
144 c sont pas forcement remplis
147 if ( option.eq.1 .or. option.eq.2 ) then
149 if ( codret.eq.0 ) then
151 call gmliat ( nharet, 1, nbarto, codre1 )
152 call gmliat ( nhtria, 1, nbtrto, codre2 )
153 if ( nbtrto.ne.0 ) then
154 call gmadoj ( nhtria//'.ConnDesc', paretr, iaux, codre3 )
158 call gmliat ( nhquad, 1, nbquto, codre4 )
159 if ( nbquto.ne.0 ) then
160 call gmadoj ( nhquad//'.ConnDesc', parequ, iaux, codre5 )
165 codre0 = min ( codre1, codre2, codre3, codre4, codre5 )
166 codret = max ( abs(codre0), codret,
167 > codre1, codre2, codre3, codre4, codre5 )
174 c 4. Si on cree ou si on detruit, on commence par supprimer le graphe
177 #ifdef _DEBUG_HOMARD_
178 write (ulsort,*) '4. suppression ; codret =',codret
181 if ( option.eq.-1 .or. option.eq.1 .or. option.eq.2 ) then
183 if ( codret.eq.0 ) then
185 call gmobal ( nhvois//'.1D/2D', codre1 )
187 if ( codre1.eq.0 ) then
190 elseif ( codre1.eq.1 ) then
191 #ifdef _DEBUG_HOMARD_
192 write (ulsort,*) '.... Suppression de nhvois.1D/2D'
194 call gmsgoj ( nhvois//'.1D/2D', codret )
209 #ifdef _DEBUG_HOMARD_
210 write (ulsort,*) '5. Creation ; codret =',codret
213 if ( option.eq.1 .or. option.eq.2 ) then
215 c 5.1. ==> Allocation de la tete
217 if ( codret.eq.0 ) then
219 #ifdef _DEBUG_HOMARD_
220 write (ulsort,*) '.... Allocation de nhvois.1D/2D'
222 call gmaloj ( nhvois//'.1D/2D' , ' ', 0, iaux, codret )
226 c 5.2. ==> determination des faces voisines des aretes
228 #ifdef _DEBUG_HOMARD_
229 write (ulsort,*) '5.2. ==> determination ... ; codret =',codret
232 c 5.2.1. ==> comptage du nombre de faces pour chaque arete
234 if ( codret.eq.0 ) then
237 call gmecat ( nhvois//'.1D/2D', 1, iaux, codre1 )
238 call gmaloj ( nhvois//'.1D/2D.Pointeur',
239 > ' ', iaux, pposif, codre2 )
240 codre0 = min ( codre1, codre2 )
241 codret = max ( abs(codre0), codret,
246 if ( codret.eq.0 ) then
248 #ifdef _DEBUG_HOMARD_
249 write (ulsort,texte(langue,3)) 'UTFAA1', nompro
251 call utfaa1 ( nbarto, nbtrto, nbquto,
252 > nbarto, nbtrto, nbquto,
253 > imem(paretr), imem(parequ),
254 > nbfaar, imem(pposif) )
258 c 5.2.2. ==> allocation du tableau des voisines a une taille
259 c egale au nombre cumule de voisines des aretes,
260 c puis reperage des faces voisines
262 if ( codret.eq.0 ) then
264 call gmecat ( nhvois//'.1D/2D', 2, nbfaar, codre1 )
265 call gmaloj ( nhvois//'.1D/2D.Table',
266 > ' ', nbfaar, pfacar, codre2 )
267 codre0 = min ( codre1, codre2 )
268 codret = max ( abs(codre0), codret,
273 if ( codret.eq.0 ) then
275 #ifdef _DEBUG_HOMARD_
276 write (ulsort,texte(langue,3)) 'UTFAA2', nompro
278 call utfaa2 ( nbtrto, nbquto,
280 > imem(paretr), imem(parequ),
281 > nbfaar, imem(pposif), imem(pfacar) )
283 #ifdef _DEBUG_HOMARD_
284 call gmprsx (nompro, nhvois//'.1D/2D' )
285 call gmprot (nompro, nhvois//'.1D/2D.Pointeur', 1, 50 )
286 call gmprot (nompro, nhvois//'.1D/2D.Table', 1, 50 )
297 if ( codret.ne.0 ) then
301 write (ulsort,texte(langue,1)) 'Sortie', nompro
302 write (ulsort,texte(langue,2)) codret
306 #ifdef _DEBUG_HOMARD_
307 write (ulsort,texte(langue,1)) 'Sortie', nompro