1 subroutine infve0 ( action, numblo, numniv, numfic,
2 > infsup, typcof, typcop, typbor, optnoe,
3 > porpay, zoom, triedr,
5 > nomcha, nomcmp, nrocha, nrocmp, nrotab,
7 > somare, np2are, hetare, merare,
9 > aretri, hettri, nivtri, nintri,
12 > arequa, hetqua, nivqua, ninqua,
15 > nnoeca, nareca, ntreca, nqueca,
16 > nnoeho, ntreho, nqueho,
17 > lgnoin, lgtrin, lgquin,
18 > nnoein, ntrein, nquein,
20 > anglex, angley, anglez,
21 > xyzmiz, xyzmaz, vafomi, vafoma,
25 > ulsort, langue, codret )
26 c ______________________________________________________________________
30 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
32 c Version originale enregistree le 18 juin 1996 sous le numero 96036
33 c aupres des huissiers de justice Simart et Lavoir a Clamart
34 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
35 c aupres des huissiers de justice
36 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
38 c HOMARD est une marque deposee d'Electricite de France
44 c ______________________________________________________________________
46 c INformation : Fichier VEctoriel - Trace
48 c ______________________________________________________________________
50 c . nom . e/s . taille . description .
51 c .____________________________________________________________________.
52 c . action . e . char8 . action en cours .
53 c . numblo . e . 1 . numero du bloc a tracer .
54 c . . . . 0 : trace du domaine global .
55 c . numniv . e . 1 . numero du niveau a tracer .
56 c . . . . -1 : tous les niveaux .
57 c . numfic . es . 1 . numero du fichier a ecrire .
58 c . infsup . e . 1 . information supplementaire a afficher .
59 c . . . . 0 : aucune .
60 c . . . . 1 : numero homard des noeuds .
61 c . . . . 2 : numero du calcul des noeuds .
62 c . . . . 3 : numero homard des faces .
63 c . . . . 4 : numero du calcul des faces .
64 c . . . . 5 : numero homard des aretes .
65 c . . . . 6 : numero du calcul des aretes .
66 c . . . . np : choix n et choix p simultanement .
67 c . typcof . e . 1 . type de coloriage des faces .
68 c . . . . 0 : incolore transparent .
69 c . . . . 1 : incolore opaque .
70 c . . . . 2 : famille HOMARD .
71 c . . . . 4 : idem 2, en niveau de gris .
72 c . . . . +-6 : couleur selon un champ, echelle auto..
73 c . . . . +-7 : idem avec echelle fixe .
74 c . . . . +-8/+-9 : idem +-6/+-7, en niveau de gris .
75 c . . . . 10 : niveau .
76 c . typcop . e . 1 . type de coloriage du perimetre des faces .
77 c . . . . 0 : pas de trace .
79 c . . . . 4 : niveau de la face .
80 c . typbor . e . 1 . type d'affichage du bord .
81 c . . . . 0 : pas de trace .
82 c . . . . 1 : trace en rouge .
83 c . . . . 2 : trace en noir .
84 c . optnoe . e . 1 . 0 : rien de special .
85 c . . . . 1 : trace d'un rond vide sur chaque noeud .
86 c . . . . 2 : trace d'un rond plein sur chaque noeud .
87 c . porpay . e . 1 . 0 : portrait/paysage selon la taille .
88 c . . . . 1 : portrait .
89 c . . . . 2 : paysage .
90 c . zoom . e . 1 . vrai ou faux selon zoom ou non .
91 c . triedr . e . 1 . 0 : pas de trace du triedre .
92 c . . . . 1 : trace du triedre .
93 c . nbcham . e . 1 . nombre de champs definis .
94 c . nocham . e . nbcham . nom des objets qui contiennent la .
95 c . . . . description de chaque champ .
96 c . nomcha . e . char64 . nom du champ retenu pour le coloriage .
97 c . nomcmp . e . 1 . nom de la composante retenue .
98 c . nrocha . e . 1 . nunero du champ retenu pour le coloriage .
99 c . . . . -1 si coloriage selon la qualite .
100 c . nrocmp . e . 1 . numero de la composante retenue .
101 c . nrotab . e . 1 . numero du tableau associe au pas de temps .
102 c . coonoe . e . nbnoto . coordonnees des noeuds .
104 c . somare . e .2*nbarto. numeros des extremites d'arete .
105 c . merare . e . nbarto . mere de chaque arete .
106 c . np2are . e . nbarto . numero du noeud p2 milieu de l'arete .
107 c . posifa . e . nbarto . pointeur sur tableau facare .
108 c . facare . e . nbfaar . liste des faces contenant une arete .
109 c . hetare . e . nbarto . historique de l'etat des aretes .
110 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
111 c . hettri . e . nbtrto . historique de l'etat des triangles .
112 c . nivtri . e . nbtrto . niveau des triangles .
113 c . nintri . e . nbtrto . noeud interne au triangle .
114 c . voltri . e .2*nbtrto. numeros des 2 volumes par triangle .
115 c . . . . voltri(i,k) definit le i-eme voisin de k .
116 c . . . . 0 : pas de voisin .
117 c . . . . j>0 : tetraedre j .
118 c . . . . j<0 : pyramide/pentaedre dans pypetr(1/2,j).
119 c . pypetr . s .2*lgpype. pypetr(1,j) = numero de la pyramide voisine.
120 c . . . . du triangle k tel que voltri(1/2,k) = -j .
121 c . . . . pypetr(2,j) = numero du pentaedre voisin .
122 c . . . . du triangle k tel que voltri(1/2,k) = -j .
123 c . famtri . e . nbtrto . famille des triangles .
124 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
125 c . hetqua . e . nbquto . historique de l'etat des quadrangles .
126 c . nivqua . e . nbquto . niveau des quadrangles .
127 c . ninqua . e . nbquto . noeud interne au quadrangle .
128 c . volqua . e .2*nbquto. numeros des 2 volumes par quadrangle .
129 c . . . . volqua(i,k) definit le i-eme voisin de k .
130 c . . . . 0 : pas de voisin .
131 c . . . . j>0 : hexaedre j .
132 c . . . . j<0 : pyramide/pentaedre dans pypequ(1/2,j).
133 c . pypequ . s .2*lgpype. pypequ(1,j) = numero de la pyramide voisine.
134 c . . . . du quadrangle k tel que volqua(1/2,k) = -j .
135 c . . . . pypequ(2,j) = numero du pentaedre voisin .
136 c . . . . du quadrangle k tel que volqua(1/2,k) = -j .
137 c . famqua . e . nbquto . famille des quadrangles .
138 c . nnoeca . e . renoto . noeuds en entree dans le calcul .
139 c . nareca . e . rearto . nro des aretes dans le calcul en entree .
140 c . ntreca . e . retrto . nro des triangles dans le calcul en entree .
141 c . nqueca . e . requto . nro des quads dans le calcul en entree .
142 c . nnoeho . e . renoto . nro des noeuds dans HOMARD en entree .
143 c . ntreho . e . retrto . nro des triangles dans HOMARD en entree .
144 c . nqueho . e . requto . nro des quads dans HOMARD en entree .
145 c . decanu . e . -1:7 . decalage des numerotations selon le type .
146 c . anglex . e . 1 . angle de rotation autour de x .
147 c . angley . e . 1 . angle de rotation autour de y .
148 c . anglez . e . 1 . angle de rotation autour de z .
149 c . xyzmiz . e . 1 . abscisse (i=1), ordonnee (i=2) et .
150 c . . . . cote (i=3) minimales de la fenetre de zoom .
151 c . xyzmaz . e . 1 . abscisse (i=1), ordonnee (i=2) et .
152 c . . . . cote (i=3) maximales de la fenetre de zoom .
153 c . vafomi . e . 1 . minimum de l'echelle de la fonction .
154 c . vafoma . e . 1 . maximum de l'echelle de la fonction .
155 c . tbaux1 . e . nbftri/. donne un numero equivalent a une famille .
156 c . . . nbfqua . selon que l'orientation est gardee ou non .
157 c . nublfa . e .-nbquto:. numero de blocs des faces .
159 c . nubnvo . e . * . . si numblo>0 : numero de blocs des volumes.
160 c . . . . . si numniv >=0 : niveau des volumes .
161 c . . . . Rangement : .
162 c . . . . les tetraedres .
163 c . . . . les hexaedres .
164 c . . . . les pyramides .
165 c . . . . les pentaedres .
166 c . ulsost . e . 1 . unite logique de la sortie standard .
167 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
168 c . langue . e . 1 . langue des messages .
169 c . . . . 1 : francais, 2 : anglais .
170 c . codret . es . 1 . code de retour des modules .
171 c . . . . 0 : pas de probleme .
172 c . . . . 2 : probleme dans les memoires .
173 c . . . . 3 : probleme dans les fichiers .
174 c . . . . 5 : probleme autre .
175 c ______________________________________________________________________
178 c 0. declarations et dimensionnement
181 c 0.1. ==> generalites
187 parameter ( nompro = 'INFVE0' )
209 double precision coonoe(nbnoto,sdim)
212 integer numblo, numniv,numfic
213 integer infsup, typcof, typcop, typbor, optnoe, porpay, triedr
215 integer nrocha, nrocmp, nrotab
216 integer somare(2,nbarto)
217 integer np2are(nbarto), merare(nbarto), hetare(nbarto)
218 integer posifa(0:nbarto), facare(nbfaar)
219 integer aretri(nbtrto,3), hettri(nbtrto), nivtri(nbtrto)
220 integer nintri(nbtrto)
221 integer voltri(2,nbtrto), pypetr(2,*)
222 integer famtri(nbtrto)
223 integer arequa(nbquto,4), hetqua(nbquto), nivqua(nbquto)
224 integer ninqua(nbquto)
225 integer volqua(2,nbquto), pypequ(2,*)
226 integer famqua(nbquto)
227 integer nnoeca(renoto)
228 integer nareca(rearto), ntreca(retrto), nqueca(requto)
229 integer nnoeho(*), ntreho(*), nqueho(*)
230 integer lgnoin, lgtrin, lgquin
231 integer nnoein(*), ntrein(*), nquein(*)
233 integer tbaux1(*), tbaux2(-nbquto:*)
234 integer nublfa(-nbquto:nbtrto), nubnvo(*)
236 double precision anglex, angley, anglez
237 double precision xyzmiz(sdim), xyzmaz(sdim)
238 double precision vafomi, vafoma
243 character*8 nocham(nbcham)
247 integer ulsort, langue, codret
249 c 0.4. ==> variables locales
253 integer nuroul, lnomfl
254 integer ptrav1, ptrav2
255 integer nbquvi, nbtrvi, nbarvi
256 integer adquvi, adtrvi, adarvi
257 integer adquva, adtrva
258 integer lgtit1, lgtit2
260 integer codre1, codre2, codre3
264 character*8 noquvi, notrvi, noarvi
265 character*8 noquva, notrva
266 character*8 ntrav1, ntrav2
268 character*100 titre1, titre2
272 parameter ( nbmess = 20 )
273 character*80 texte(nblang,nbmess)
275 c 0.5. ==> initialisations
276 c ______________________________________________________________________
284 #ifdef _DEBUG_HOMARD_
285 write (ulsort,texte(langue,1)) 'Entree', nompro
289 texte(1,4) = '(/,''Trace du domaine global'')'
290 texte(1,5) = '(/,''Trace du bloc numero'',i6)'
291 texte(1,6) = '(''Trace de tous les niveaux'')'
292 texte(1,7) = '(''Trace du niveau numero'',i6)'
293 texte(1,9) = '(''Nombre de '',a,'' a visualiser :'',i10)'
294 texte(1,10) = '(''titre'',i1,'' : '',a)'
295 texte(1,11) = '(''Projection'')'
296 texte(1,12) = '(''Caracterisation de la fonction'')'
297 texte(1,18) = '(''Action en cours : '',a)'
298 texte(1,20) = '(/,''Creation du fichier Xfig numero'',i4)'
300 texte(2,4) = '(/,''Writings of the whole domain)'
301 texte(2,5) = '(/,''Writings for the block #'',i6)'
302 texte(2,6) = '(''Writings of all the levels'')'
303 texte(2,7) = '(''Writings for the level #'',i6)'
304 texte(2,9) = '(''Number of '',a,'' to be drawn :'',i10)'
305 texte(2,10) = '(''titre'',i1,'' : '',a)'
306 texte(2,11) = '(''Projection'')'
307 texte(2,12) = '(''Characteristics of function'')'
308 texte(2,18) = '(''Current action : '',a)'
309 texte(2,20) = '(/,''Creation of Xfig file #'',i4)'
313 #ifdef _DEBUG_HOMARD_
314 if ( numblo.eq.0 ) then
315 write (ulsort,texte(langue,4))
317 write (ulsort,texte(langue,5)) numblo
319 if ( numniv.eq.-1 ) then
320 write (ulsort,texte(langue,6))
322 write (ulsort,texte(langue,7)) numniv
324 write (ulsort,texte(langue,18)) action
328 c 2. recherche des elements et transformations des coordonnees
329 c ce travail est a faire pour tous les types de sorties
332 c 2.1. ==> tableaux de travail
334 if ( codret.eq.0 ) then
338 call gmalot ( noarvi, 'entier ', iaux, adarvi, codre1 )
342 call gmalot ( notrvi, 'entier ', iaux, adtrvi, codre2 )
346 call gmalot ( noquvi, 'entier ', iaux, adquvi, codre3 )
348 codre0 = min ( codre1, codre2, codre3 )
349 codret = max ( abs(codre0), codret,
350 > codre1, codre2, codre3 )
354 c 2.2. ==> creation de la liste des elements visualisables
356 if ( codret.eq.0 ) then
358 #ifdef _DEBUG_HOMARD_
359 write (ulsort,texte(langue,3)) 'INFVE2', nompro
361 call infve2 ( coonoe,
365 > aretri, hettri, nivtri, nintri,
368 > arequa, hetqua, nivqua, ninqua,
371 > infsup, typbor, tbaux1,
372 > zoom, xyzmiz, xyzmaz,
374 > numniv, numblo, nublfa, nubnvo,
375 > imem(adquvi), nbquvi,
376 > imem(adtrvi), nbtrvi,
377 > imem(adarvi), nbarvi,
378 > ulsort, langue, codret )
380 #ifdef _DEBUG_HOMARD_
381 write (ulsort,texte(langue,9)) mess14(langue,3,1), nbarvi
382 write (ulsort,texte(langue,9)) mess14(langue,3,2), nbtrvi
383 write (ulsort,texte(langue,9)) mess14(langue,3,4), nbquvi
388 if ( codret.eq.0 ) then
390 call gmmod ( noarvi, adarvi, 6, 6, nbarto, nbarvi, codre1 )
391 call gmmod ( notrvi, adtrvi, 10, 10, nbtrac, nbtrvi, codre2 )
392 call gmmod ( noquvi, adquvi, 12, 12, nbquac, nbquvi, codre3 )
394 codre0 = min ( codre1, codre2, codre3 )
395 codret = max ( abs(codre0), codret,
396 > codre1, codre2, codre3 )
400 c 2.3. ==> projection selon l'angle de vue desire
401 c ("trav1" contient la liste "coopro" des coordonnees
402 c projetees des noeuds)
404 if ( codret.eq.0 ) then
406 #ifdef _DEBUG_HOMARD_
407 write (ulsort,texte(langue,11))
412 call gmalot ( ntrav1, 'reel ', iaux, ptrav1, codret)
416 if ( codret.eq.0 ) then
418 #ifdef _DEBUG_HOMARD_
419 write (ulsort,texte(langue,3)) 'INFVE3', nompro
421 call infve3 ( coonoe,
422 > anglex, angley, anglez,
423 > zoom, triedr, xyzmiz, xyzmaz,
425 > ulsort, langue, codret )
429 c 2.3. ==> determination de la fonction
431 if ( abs(typcof).ge.6 .and. abs(typcof).le.9 ) then
433 if ( codret.eq.0 ) then
435 #ifdef _DEBUG_HOMARD_
436 write (ulsort,texte(langue,12))
440 call gmalot ( notrva, 'reel ', nbtrvi, adtrva, codre1 )
443 call gmalot ( noquva, 'reel ', nbquvi, adquva, codre2 )
445 codre0 = min ( codre1, codre2 )
446 codret = max ( abs(codre0), codret,
451 c 2.3.1. ==> recherche des valeurs du champ
453 if ( nrotab.gt.0 ) then
455 if ( codret.eq.0 ) then
458 #ifdef _DEBUG_HOMARD_
459 write (ulsort,texte(langue,3)) 'INFFRE', nompro
461 call inffre ( iaux, rmem(adtrva), rmem(adquva), titre0,
462 > nocham(nrocha), nrocmp, nrotab,
464 > imem(adtrvi), imem(adquvi),
465 > nnoeca, ntreca, nqueca,
466 > nnoeho, ntreho, nqueho,
467 > lgnoin, lgtrin, lgquin,
468 > nnoein, ntrein, nquein,
470 > ulsort, langue, codret )
476 c 2.3.2. ==> recherche des qualites
478 if ( codret.eq.0 ) then
480 #ifdef _DEBUG_HOMARD_
481 write (ulsort,texte(langue,3)) 'INFVE4', nompro
483 call infve4 ( rmem(adtrva), rmem(adquva),
484 > coonoe, somare, aretri, arequa,
486 > imem(adtrvi), imem(adquvi),
487 > ulsort, langue, codret )
496 c 6. ecriture du maillage sous forme xfig
498 #ifdef _DEBUG_HOMARD_
499 write (ulsort,90002) '6. ecriture du maillage ; codret', codret
502 if ( codret.eq.0 ) then
506 write (ulsort,texte(langue,20)) numfic
507 if ( ulsost.ne.ulsort ) then
508 write (ulsost,texte(langue,20)) numfic
511 c 6.1 ==> ouverture du fichier
513 if ( codret.eq.0 ) then
517 if ( action(1:7).eq.'info_av' ) then
519 elseif ( action(1:7).eq.'info_ap' ) then
523 call utulbi ( nuroul, nomflo, lnomfl,
524 > iaux, saux08, nbiter, numfic,
525 > ulsort, langue, codret )
531 if ( codret.eq.0 ) then
533 #ifdef _DEBUG_HOMARD_
534 write (ulsort,texte(langue,3)) 'INFVE6', nompro
536 call infve6 ( action, numblo, numniv,
538 > nomcha, nomcmp, nrocha,
540 > titre1, lgtit1, titre2, lgtit2,
541 > ulsort, langue, codret )
545 #ifdef _DEBUG_HOMARD_
546 write (ulsort,texte(langue,10)) 1, titre1
547 write (ulsort,texte(langue,10)) 2, titre2
550 c 6.3. ==> tableaux de travail
552 if ( codret.eq.0 ) then
554 c tableau liste pour pppmai
555 iaux = nbtrvi + nbquvi
556 call gmalot ( ntrav2, 'entier ', iaux, ptrav2, codre0 )
558 codret = max ( abs(codre0), codret )
564 if ( codret.eq.0 ) then
568 #ifdef _DEBUG_HOMARD_
569 write (ulsort,texte(langue,3)) 'PPPXMA', nompro
573 > infsup, typcof, typcop, typbor, optnoe,
574 > jaux, zoom, triedr,
575 > degre, sdim, mailet, nivsup,
576 > titre1(1:lgtit1), titre2(1:lgtit2),
577 > nbarvi, nbtrvi, nbquvi,
578 > imem(adarvi), imem(adtrvi), imem(adquvi),
579 > rmem(ptrav1), imem(ptrav2),
580 > nnoeca, nareca, ntreca, nqueca,
581 > rmem(adtrva), rmem(adquva), vafomi, vafoma,
582 > nuroul, nomflo, lnomfl, ulsost,
583 > ulsort, langue, codret )
587 c 6.5. ==> fermeture du fichier
589 if ( codret.eq.0 ) then
591 call gufeul ( nuroul , codret)
600 #ifdef _DEBUG_HOMARD_
601 write (ulsort,90002) '7. menage ; codret', codret
604 if ( codret.eq.0 ) then
606 call gmlboj ( noarvi, codre1 )
607 call gmlboj ( notrvi, codre2 )
608 call gmlboj ( noquvi, codre3 )
610 codre0 = min ( codre1, codre2, codre3 )
611 codret = max ( abs(codre0), codret,
612 > codre1, codre2, codre3 )
614 call gmlboj ( ntrav1, codre1 )
615 call gmlboj ( ntrav2, codre2 )
617 codre0 = min ( codre1, codre2 )
618 codret = max ( abs(codre0), codret,
621 if ( abs(typcof).ge.6 .and. abs(typcof).le.9 ) then
623 call gmlboj ( notrva, codre1 )
624 call gmlboj ( noquva, codre2 )
626 codre0 = min ( codre1, codre2, codre3 )
627 codret = max ( abs(codre0), codret,
628 > codre1, codre2, codre3 )
638 if ( codret.ne.0 ) then
642 write (ulsort,texte(langue,1)) 'Sortie', nompro
643 write (ulsort,texte(langue,2)) codret
647 #ifdef _DEBUG_HOMARD_
648 write (ulsort,texte(langue,1)) 'Sortie', nompro