1 subroutine infc36 ( numcas, nbcomp, nbentc,
2 > profil, vafoti, vafotr,
3 > quahex, coquhe, arehex,
8 > ulsort, langue, codret )
9 c ______________________________________________________________________
13 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
15 c Version originale enregistree le 18 juin 1996 sous le numero 96036
16 c aupres des huissiers de justice Simart et Lavoir a Clamart
17 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
18 c aupres des huissiers de justice
19 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
21 c HOMARD est une marque deposee d'Electricite de France
27 c ______________________________________________________________________
28 c INformation - inFormations Complementaires - phase 36
30 c Valeurs sur les hexaedres
31 c ______________________________________________________________________
33 c . nom . e/s . taille . description .
34 c .____________________________________________________________________.
35 c . numcas . e . 1 . numero du cas en cours de traitement .
36 c . . . . 1 : niveau .
37 c . . . . 2 : qualite .
38 c . . . . 3 : diametre .
39 c . . . . 4 : parente .
40 c . . . . 5 : voisins des recollements .
41 c . nbcomp . e . 1 . nombre de composantes .
42 c . nbentc . e . 1 . nombre total d'entites du calcul .
43 c . profil . s . nbentc . pour chaque entite du calcul : .
44 c . . . . 0 : l'entite est absente du profil .
45 c . . . . 1 : l'entite est presente dans le profil .
46 c . vafoti . s . nbentc . tableau temporaire de la fonction .
47 c . vafotr . s . nbentc . tableau temporaire de la fonction .
48 c . quahex . e .nbhecf*6. numeros des 6 quadrangles des hexaedres .
49 c . coquhe . e .nbhecf*6. codes des 6 quadrangles des hexaedres .
50 c . arehex . e .nbheca12. numeros des 12 aretes des hexaedres .
51 c . perhex . e . nbheto . pere des hexaedres .
52 c . nhexca . e . * . nro des hexaedres dans le calcul .
53 c . coonoe . e . nbnoto . coordonnees des noeuds .
55 c . somare . e .2*nbarto. numeros des extremites d'arete .
56 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
57 c . nivqua . e . nbquto . niveau dans le raffinement/deraffinement .
58 c . npherc . e . 1 . nombre de paires d'hexaedres recolles .
59 c . hexrec . e .3*npherc. paires des hexa. voisins faces a recoller .
60 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
61 c . langue . e . 1 . langue des messages .
62 c . . . . 1 : francais, 2 : anglais .
63 c . codret . es . 1 . code de retour des modules .
64 c . . . . 0 : pas de probleme .
65 c . . . . 5 : mauvais type de code de calcul associe .
66 c ______________________________________________________________________
69 c 0. declarations et dimensionnement
72 c 0.1. ==> generalites
78 parameter ( nompro = 'INFC36' )
95 integer nbcomp, nbentc
96 integer profil(nbentc)
97 integer vafoti(nbentc)
98 integer quahex(nbhecf,6), coquhe(nbhecf,6), arehex(nbheca,12)
99 integer perhex(nbheto), nhexca(*)
100 integer somare(2,nbarto)
101 integer arequa(nbquto,4), nivqua(nbquto)
102 integer npherc, hexrec(3,npherc)
104 double precision coonoe(nbnoto,sdim)
105 double precision vafotr(nbentc)
107 integer ulsort, langue, codret
109 c 0.4. ==> variables locales
111 integer iaux, jaux, kaux, laux
113 integer levolu, laface
115 double precision niveau, qualit, qualij, diamet
116 double precision volume
119 parameter ( nbmess = 10 )
120 character*80 texte(nblang,nbmess)
122 c 0.5. ==> initialisations
123 c ______________________________________________________________________
132 #ifdef _DEBUG_HOMARD_
133 write (ulsort,texte(langue,1)) 'Entree', nompro
136 texte(1,4) = '(''.. Valeurs sur les '',a)'
138 texte(2,4) = '(''.. Values over the '',a)'
140 #ifdef _DEBUG_HOMARD_
141 write (ulsort,texte(langue,4)) mess14(langue,3,6)
142 write (ulsort,90002) 'numcas', numcas
143 write (ulsort,90002) 'nbheto', nbheto
144 write (ulsort,90002) 'nbhepe', nbhepe
145 write (ulsort,90002) 'nbcomp', nbcomp
146 write (ulsort,90002) 'nbentc', nbentc
147 write (ulsort,90002) 'npherc', npherc
156 do 21 , iaux = 1 , nbentc
164 if ( numcas.eq.1 ) then
166 c 3.1. ==> Les hexaedres de depart ou issus d'un decoupage en 8
167 c Les faces sont toutes du meme niveau
168 c Remarque : ils sont toujours decrits par faces
170 do 31 , iaux = 1 , nbhepe
172 cgn write (ulsort,90015) 'nhexca(',iaux,') =', nhexca(iaux)
175 if ( jaux.ne.0 ) then
176 cgn write (ulsort,90015) 'nivqua(',iaux,') =', nivqua(quahex(iaux,1))
177 vafotr(jaux) = dble(nivqua(quahex(iaux,1)))
183 c 3.2. ==> Les hexaedres issus d'un decoupage de conformite
184 c Remarque : ils sont toujours actifs
186 do 32 , iaux = nbhepe+1 , nbheto
188 call utnhex ( iaux, niveau,
193 vafotr(jaux) = niveau
202 elseif ( numcas.eq.2 ) then
204 do 41 , iaux = 1 , nbheto
207 if ( jaux.ne.0 ) then
209 call utqhex ( kaux, qualit, qualij, volume,
210 > coonoe, somare, arequa,
211 > quahex, coquhe, arehex )
212 vafotr(jaux) = qualit
222 elseif ( numcas.eq.3 ) then
224 do 51 , iaux = 1 , nbheto
227 if ( jaux.ne.0 ) then
229 call utdhex ( kaux, diamet,
230 > coonoe, somare, arequa,
231 > quahex, coquhe, arehex )
232 vafotr(jaux) = diamet
243 elseif ( numcas.eq.4 ) then
245 do 61 , iaux = 1 , nbheto
248 if ( jaux.ne.0 ) then
249 vafoti(jaux) = perhex(iaux)
256 c 7. Voisins par recollement
259 elseif ( numcas.eq.5 ) then
261 c 7.1. ==> On met des valeurs nulles par defaut
263 do 71 , iaux = 1 , nbheto
266 if ( jaux.ne.0 ) then
267 indice = nbcomp*(jaux-1) + 1
268 do 711 , kaux = 1 , nbcomp
277 c 7.2. ==> Parcours des paires enregistrees
281 cgn write (ulsort,*) 'boucle 720'
282 cgn write (ulsort,90002) 'npherc', npherc
283 cgn do 720 , iaux = 1 , npherc
284 cgn if ( ( hexrec(3,iaux).eq.291 ) .or.
285 cgn > ( hexrec(3,iaux).eq.296 ) ) then
286 cgn write (ulsort,90022) 'iaux', iaux, hexrec(1,iaux),
287 cgn > hexrec(2,iaux), hexrec(3,iaux)
290 do 72 , iaux = 1 , npherc
292 jaux = hexrec(1,iaux)
293 kaux = hexrec(2,iaux)
294 cgn write (ulsort,90002) 'iaux, jaux, kaux, face',
295 cgn > iaux, jaux, kaux, hexrec(3,iaux)
297 if ( jaux.ne.0 ) then
299 cgn write (ulsort,*) 'boucle 721'
301 laface = hexrec(3,iaux)
302 indice = nbcomp*(jaux-1) + 1
303 do 721 , laux = 1, lmax
304 if ( vafoti(indice).eq.0 ) then
305 vafoti(indice) = levolu
306 vafoti(indice+1) = laface
307 cgn if ( ( hexrec(3,iaux).eq.291 ) .or.
308 cgn > ( hexrec(3,iaux).eq.296 ) ) then
309 cgn write (ulsort,90022) 'iaux', iaux, hexrec(1,iaux),
310 cgn > hexrec(2,iaux), hexrec(3,iaux)
311 cgn write (ulsort,90002) ' ==> indice A', indice, laux
312 cgn write (ulsort,90002) ' ==> ecriture de', kaux, hexrec(3,iaux)
315 elseif ( vafoti(indice+1).eq.laface ) then
316 cgn if ( ( hexrec(3,iaux).eq.291 ) .or.
317 cgn > ( hexrec(3,iaux).eq.296 ) ) then
318 cgn write (ulsort,90022) 'iaux', iaux, hexrec(1,iaux),
319 cgn > hexrec(2,iaux), hexrec(3,iaux)
320 cgn write (ulsort,90002) ' ==> indice A', indice
321 cgn write (ulsort,90002) ' ==> non ecriture de', kaux, hexrec(3,iaux)
324 #ifdef _DEBUG_HOMARD_
326 if ( ( hexrec(3,iaux).eq.-291 ) .or.
327 > ( hexrec(3,iaux).eq.-296 ) ) then
328 write (ulsort,90022) 'iaux', iaux, hexrec(1,iaux),
329 > hexrec(2,iaux), hexrec(3,iaux)
330 write (ulsort,*) ' indice A deja connu',indice,vafoti(indice)
331 write (ulsort,*) ' recherche d''un autre indice'
338 write (ulsort,*) 'Ecriture impossible'
339 write (ulsort,90002) 'iaux', iaux
340 write (ulsort,90002) '1', hexrec(1,iaux)
341 write (ulsort,90002) '2', hexrec(2,iaux)
342 write (ulsort,90002) '3', hexrec(3,iaux)
349 if ( kaux.ne.0 ) then
351 cgn write (ulsort,*) 'boucle 724'
353 laface = hexrec(3,iaux)
354 indice = nbcomp*(kaux-1) + 1
355 do 724 , laux = 1, lmax
356 if ( vafoti(indice).eq.0 ) then
357 vafoti(indice) = levolu
358 vafoti(indice+1) = laface
359 cgn write (ulsort,90002) ' ==> indice B', indice, laux
362 cgn write (ulsort,90112) ' vafoti',indice,vafoti(indice)
363 cgn write (ulsort,*) ' indice B deja connu'
368 write (ulsort,*) 'Ecriture impossible'
369 write (ulsort,90002) 'iaux', iaux
370 write (ulsort,90002) '1', hexrec(1,iaux)
371 write (ulsort,90002) '2', hexrec(2,iaux)
372 write (ulsort,90002) '3', hexrec(3,iaux)
380 cgn do 73 , iaux = 1,nbentc
381 cgn write(ulsort,90112)'profil',iaux,profil(iaux)
382 cgn write (ulsort,90002) 'indices', nbcomp*(iaux-1)+1,nbcomp*iaux
383 cgn write(ulsort,90112)'vafoti',iaux,
384 cgn >(vafoti(jaux),jaux=nbcomp*(iaux-1)+1,nbcomp*iaux)
395 if ( codret.ne.0 ) then
399 write (ulsort,texte(langue,1)) 'Sortie', nompro
400 write (ulsort,texte(langue,2)) codret
404 #ifdef _DEBUG_HOMARD_
405 write (ulsort,texte(langue,1)) 'Sortie', nompro