1 subroutine vcmafa ( modhom, pilraf, tyconf, suifro,
3 > ncafdg, ncafan, ncfgnf, ncfgng,
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 aVant adaptation - Conversion de MAillage - FAmilles
27 c ______________________________________________________________________
29 c . nom . e/s . taille . description .
30 c .____________________________________________________________________.
31 c . modhom . e . 1 . mode de fonctionnement de homard .
32 c . . . . 1 : homard pur .
33 c . . . . 2 : information .
34 c . . . . 3 : modification de maillage sans adaptati.
35 c . . . . 4 : interpolation de la solution .
36 c . pilraf . e . 1 . pilotage du raffinement .
37 c . . . . -1 : raffinement uniforme .
38 c . . . . 0 : pas de raffinement .
39 c . . . . 1 : raffinement libre .
40 c . . . . 2 : raff. libre homogene en type d'element.
41 c . tyconf . e . 1 . 0 : conforme (defaut) .
42 c . . . . 1 : non-conforme avec au minimum 2 aretes .
43 c . . . . non decoupees en 2 .
44 c . . . . 2 : non-conforme avec 1 seul noeud .
45 c . . . . pendant par arete .
46 c . . . . 3 : non-conforme fidele a l'indicateur .
47 c . . . . -1 : conforme, avec des boites pour les .
48 c . . . . quadrangles, hexaedres et pentaedres .
49 c . . . . -2 : non-conforme avec au maximum 1 arete .
50 c . . . . decoupee en 2 (boite pour les .
51 c . . . . quadrangles, hexaedres et pentaedres) .
52 c . suifro . e . 1 . 1 : pas de suivi de frontiere .
53 c . . . . 2x : frontiere discrete .
54 c . . . . 3x : frontiere analytique .
55 c . . . . 5x : frontiere cao .
56 c . nocman . s . char*8 . nom de l'objet maillage calcul iteration n .
57 c . nohman . e . char8 . nom de l'objet maillage homard iteration n .
58 c . ncafdg . e . char*8 . nom de l'objet des frontieres discretes/CAO.
59 c . . . . nom des groupes frontiere .
60 c . ncafan . e . char*8 . nom de l'objet des frontieres analytiques :.
61 c . . . . description des frontieres .
62 c . ncfgnf . es . char*8 . lien frontiere/groupe : nom des frontieres .
63 c . ncfgng . e . char*8 . lien frontiere/groupe : nom des groupes .
64 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
65 c . langue . e . 1 . langue des messages .
66 c . . . . 1 : francais, 2 : anglais .
67 c . codret . es . 1 . code de retour des modules .
68 c . . . . 0 : pas de probleme .
69 c . . . . 1 : probleme .
70 c ______________________________________________________________________
73 c 0. declarations et dimensionnement
76 c 0.1. ==> generalites
82 parameter ( nompro = 'VCMAFA' )
118 integer modhom, pilraf, tyconf, suifro
120 character*8 nocman, nohman
121 character*8 ncafdg, ncafan, ncfgnf, ncfgng
123 integer ulsort, langue, codret
125 c 0.4. ==> variables locales
127 integer pfamno, pcfano, pcexno
128 integer pfammp, pcfamp, pcexmp
129 integer pfamar, pcfaar, pcexar
130 integer pfamtr, pcfatr, pcextr
131 integer pfamqu, pcfaqu, pcexqu
132 integer pfamte, pcfate, pcexte
133 integer pfamhe, pcfahe, pcexhe
134 integer pfampy, pcfapy, pcexpy
135 integer pfampe, pcfape, pcexpe
136 integer pnunoe, pnuele
138 integer psomar, pposif, pfacar, pnp2ar
139 integer paretr, parequ, pareno
140 integer pfamee, ptypel
141 integer pgrpo, pgrtai, pgrtab
142 integer nbfme0, ngrou0
144 integer adhono, admpho, adhoar, adhotr, adhoqu
145 integer ppovos, pvoiso, adfrfa, pnumfa, pnomfa
147 integer adeqno, adeqar, adeqtr, adeqqu
150 integer typenh, pfamen, pcfaen
151 integer nbento, nctfen, nbfenm, nbfaen
153 integer rvnoac, adnohn
154 integer rvmpac, admphn
155 integer rvarac, adarhn
156 integer rvtrac, adtrhn
157 integer rvquac, adquhn
158 integer rvteac, adtehn
159 integer rvheac, adhehn
160 integer rvpyac, adpyhn
161 integer rvpeac, adpehn
164 integer iaux, jaux, kaux, paux
165 integer iaux1, iaux2, iaux3, iaux4, iaux5, iaux6, iaux7, iaux8
166 integer codre1, codre2, codre3, codre4, codre5
167 integer codre6, codre0
168 integer pttgrd, ptngrd, pointd
169 integer adcpoi, adctai, adctab
170 integer adfpoi, adftai, adftab
171 integer adgpoi, adgtai, adgtab
173 integer nbgrof, nbfrgr, nbfran
175 integer adfrgr, adnogr
177 integer nbfmem, nbtype, nborie, nbrequ
180 character*8 nhnoeu, nhmapo, nharet, nhtria, nhquad
181 character*8 nhtetr, nhhexa, nhpyra, nhpent
183 character*8 nhvois, nhsupe, nhsups
184 character*8 nhnofa, nhmpfa, nharfa
185 character*8 nhtrfa, nhqufa
186 character*8 nhtefa, nhhefa, nhpyfa, nhpefa
187 character*8 ncinfo, ncnoeu, nccono, nccode
188 character*8 nccoex, ncfami
189 character*8 ncequi, ncfron, ncnomb
191 character*8 nhenti, nhenfa
194 parameter ( nbmess = 10 )
195 character*80 texte(nblang,nbmess)
197 c 0.5. ==> initialisations
198 c ______________________________________________________________________
206 #ifdef _DEBUG_HOMARD_
207 write (ulsort,texte(langue,1)) 'Entree', nompro
211 texte(1,4) = '(''Erreur dans le decodage de l''''objet '',a)'
212 texte(1,5) = '(''. Nombre de '',a,'' :'',i10)'
213 texte(1,7) = '(5x,''Conversion '',a18,'' ---> HOMARD'',/)'
215 > '(''Aucune frontiere analytique n''''a ete definie.'')'
217 texte(2,4) = '(''Error while uncoding object '',a)'
218 texte(2,5) = '(''. Number of '',a,'' :'',i10)'
219 texte(2,7) = '(5x,''Conversion '',a18,'' ---> HOMARD'',/)'
220 texte(2,8) = '(''No analytical boundary was defined.'')'
225 c 2. recuperation des donnees du maillage d'entree
228 #ifdef _DEBUG_HOMARD_
229 write (ulsort,texte(langue,5)) mess14(langue,3,-1), nbnoto
230 write (ulsort,texte(langue,5)) mess14(langue,3,0), nbmpto
231 write (ulsort,texte(langue,5)) mess14(langue,3,1), nbarto
232 write (ulsort,texte(langue,5)) mess14(langue,3,2), nbtrto
233 write (ulsort,texte(langue,5)) mess14(langue,3,3), nbteto
234 write (ulsort,texte(langue,5)) mess14(langue,3,4), nbquto
235 write (ulsort,texte(langue,5)) mess14(langue,3,6), nbheto
238 c 2.1. ==> structure generale
240 if ( codret.eq.0 ) then
242 #ifdef _DEBUG_HOMARD_
243 write (ulsort,texte(langue,3)) 'UTNOMC', nompro
245 call utnomc ( nocman,
247 > iaux3, iaux4, iaux5, iaux6, iaux7,
249 > ncinfo, ncnoeu, nccono, nccode,
251 > ncequi, ncfron, ncnomb,
252 > ulsort, langue, codret )
256 if ( codret.eq.0 ) then
258 #ifdef _DEBUG_HOMARD_
259 write (ulsort,texte(langue,3)) 'UTNOMH', nompro
261 call utnomh ( nohman,
263 > degre, maconf, homolo, hierar,
264 > rafdef, nbmane, typcca, typsfr, maextr,
267 > nhnoeu, nhmapo, nharet,
269 > nhtetr, nhhexa, nhpyra, nhpent,
271 > nhvois, nhsupe, nhsups,
272 > ulsort, langue, codret )
276 #ifdef _DEBUG_HOMARD_
282 #ifdef _DEBUG_HOMARD_
283 write (ulsort,90002) '2.2.==> tableaux ; codret', codret
286 c 2.2.1. ==> Numerotations externes du code de calcul
288 if ( codret.eq.0 ) then
290 if ( ( homolo.ge.1 ) .or.
291 > ( mod(suifro,2).eq.0 ) .or.
292 > ( mod(suifro,3).eq.0 ) .or.
293 > ( mod(suifro,5).eq.0 ) ) then
295 #ifdef _DEBUG_HOMARD_
296 write (ulsort,texte(langue,3)) 'UTAD11', nompro
298 if ( suifro.eq.1 ) then
303 call utad11 ( iaux, ncnoeu, nccono,
304 > jaux, jaux, pnunoe, jaux,
305 > ptypel, pfamee, jaux, pnuele,
306 > ulsort, langue, codret )
312 c 2.2.2. ==> Groupes et codes externes
314 if ( codret.eq.0 ) then
316 #ifdef _DEBUG_HOMARD_
317 write (ulsort,texte(langue,3)) 'UTAD12_no', nompro
321 call utad12 ( iaux, jaux,
323 > ulsort, langue, codret )
325 if ( nbmpto.ne.0 ) then
327 #ifdef _DEBUG_HOMARD_
328 write (ulsort,texte(langue,3)) 'UTAD12_mp', nompro
332 call utad12 ( iaux, jaux,
334 > ulsort, langue, codret )
338 #ifdef _DEBUG_HOMARD_
339 write (ulsort,texte(langue,3)) 'UTAD12_ar', nompro
343 call utad12 ( iaux, jaux,
345 > ulsort, langue, codret )
347 if ( nbtrto.ne.0 ) then
349 #ifdef _DEBUG_HOMARD_
350 write (ulsort,texte(langue,3)) 'UTAD12_tr', nompro
354 call utad12 ( iaux, jaux,
356 > ulsort, langue, codret )
360 if ( nbquto.ne.0 ) then
362 #ifdef _DEBUG_HOMARD_
363 write (ulsort,texte(langue,3)) 'UTAD12_qu', nompro
367 call utad12 ( iaux, jaux,
369 > ulsort, langue, codret )
373 if ( nbteto.ne.0 ) then
375 #ifdef _DEBUG_HOMARD_
376 write (ulsort,texte(langue,3)) 'UTAD12_te', nompro
380 call utad12 ( iaux, jaux,
382 > ulsort, langue, codret )
386 if ( nbheto.ne.0 ) then
388 #ifdef _DEBUG_HOMARD_
389 write (ulsort,texte(langue,3)) 'UTAD12_he', nompro
393 call utad12 ( iaux, jaux,
395 > ulsort, langue, codret )
399 if ( nbpyto.ne.0 ) then
401 #ifdef _DEBUG_HOMARD_
402 write (ulsort,texte(langue,3)) 'UTAD12_py', nompro
406 call utad12 ( iaux, jaux,
408 > ulsort, langue, codret )
412 if ( nbpeto.ne.0 ) then
414 #ifdef _DEBUG_HOMARD_
415 write (ulsort,texte(langue,3)) 'UTAD12_pe', nompro
419 call utad12 ( iaux, jaux,
421 > ulsort, langue, codret )
425 c 2.2.3. ==> Connectivites des entites HOMARD
427 call gmadoj ( nhnoeu//'.AretSupp', pareno, iaux, codre1 )
428 call gmadoj ( nhmapo//'.ConnDesc', pnoemp, iaux, codre2 )
429 call gmadoj ( nharet//'.ConnDesc', psomar, iaux, codre3 )
430 if ( degre.eq.2 ) then
431 call gmadoj ( nharet//'.InfoSupp', pnp2ar, iaux, codre4 )
435 if ( nbtrto.ne.0 ) then
436 call gmadoj ( nhtria//'.ConnDesc', paretr, iaux, codre5 )
440 if ( nbquto.ne.0 ) then
441 call gmadoj ( nhquad//'.ConnDesc', parequ, iaux, codre6 )
446 codre0 = min ( codre1, codre2, codre3, codre4, codre5,
448 codret = max ( abs(codre0), codret,
449 > codre1, codre2, codre3, codre4, codre5,
452 c 2.2.4. ==> Homologues
454 if ( homolo.ne.0 ) then
456 call gmadoj ( ncequi//'.Pointeur', adeqpo, iaux, codre1 )
457 call gmadoj ( ncequi//'.Noeud' , adeqno, iaux, codre2 )
458 call gmadoj ( ncequi//'.Arete' , adeqar, iaux, codre3 )
459 call gmadoj ( ncequi//'.Trian' , adeqtr, iaux, codre4 )
460 call gmadoj ( ncequi//'.Quadr' , adeqqu, iaux, codre5 )
462 codre0 = min ( codre1, codre2, codre3, codre4, codre5 )
463 codret = max ( abs(codre0), codret,
464 > codre1, codre2, codre3, codre4, codre5 )
468 c 2.2.5. ==> Voisinages
470 #ifdef _DEBUG_HOMARD_
471 write (ulsort,texte(langue,3)) 'UTAD04', nompro
474 if ( homolo.ne.0 ) then
477 call utad04 ( iaux, nhvois,
478 > ppovos, pvoiso, pposif, pfacar,
480 > jaux, jaux, jaux, jaux,
485 > ulsort, langue, codret )
489 if ( codret.ne.0 ) then
490 write (ulsort,texte(langue,4)) nocman
493 c 2.3. ==> modification de la taille du tableau des codes par la prise
494 c en compte des groupes et des homologues
496 #ifdef _DEBUG_HOMARD_
497 write (ulsort,90002) '2.3. ==> modif taille ; codret', codret
498 write (ulsort,90002) 'homolo', homolo
501 if ( codret.eq.0 ) then
509 c 2.3.1. ==> homologues
511 if ( homolo.ne.0 ) then
513 c pour chaque type d'entite, on repere si au moins une equivalence
516 do 23 , iaux = 1 , nbequi
517 jaux = adeqpo + 5*iaux - 5
518 if ( imem(jaux).ne.0 ) then
521 jaux = adeqpo + 5*iaux - 4
522 if ( imem(jaux).ne.0 ) then
525 jaux = adeqpo + 5*iaux - 3
526 if ( imem(jaux).ne.0 ) then
529 jaux = adeqpo + 5*iaux - 2
530 if ( imem(jaux).ne.0 ) then
533 jaux = adeqpo + 5*iaux - 1
534 if ( imem(jaux).ne.0 ) then
540 c pour chaque type d'entite, si au moins une equivalence est concernee,
541 c on dit que toutes les equivalences sont concernees.
542 c verrue car on n'a pas separe les equivalences par type comme cela
543 c est fait pour les groupes.
544 c on gaspille un peu de memoire, mais ce n'est pas tres grave.
546 if ( ncefno.ne.0 ) then
549 if ( ncefmp.ne.0 ) then
552 if ( ncefar.ne.0 ) then
555 if ( nceftr.ne.0 ) then
558 if ( ncefqu.ne.0 ) then
564 c 2.3.2. ==> Changement de tailles
566 #ifdef _DEBUG_HOMARD_
567 write (ulsort,90002) '2.3.2. ==> modif taille ; codret', codret
571 nctfno = nctfno + ncefno
572 call gmmod ( nccoex//'.Noeud', pcexno,
573 > nbnoto, nbnoto, iaux1, nctfno, codre1 )
575 if ( nbmpto.ne.0 ) then
577 nctfmp = nctfmp + ncefmp
578 call gmmod ( nccoex//'.Point', pcexmp,
579 > nbmpto, nbmpto, iaux1, nctfmp, codre2 )
583 nctfar = nctfar + ncefar
584 call gmmod ( nccoex//'.Arete', pcexar,
585 > nbarto, nbarto, iaux1, nctfar, codre3 )
587 codre0 = min ( codre1, codre2, codre3 )
588 codret = max ( abs(codre0), codret,
589 > codre1, codre2, codre3 )
591 if ( nbtria.ne.0 .or. nbquad.ne.0 ) then
593 if ( nbtria.ne.0 ) then
594 nctftr = nctftr + nceftr
596 if ( nbquad.ne.0 .and. modhom.eq.1 .and. pilraf.eq.1 ) then
599 call gmmod ( nccoex//'.Trian', pcextr,
600 > nbtrto, nbtrto, iaux1, nctftr, codre0 )
601 codret = max ( abs(codre0), codret )
604 if ( nbquto.ne.0 ) then
606 nctfqu = nctfqu + ncefqu
607 call gmmod ( nccoex//'.Quadr', pcexqu,
608 > nbquto, nbquto, iaux1, nctfqu, codre0 )
609 codret = max ( abs(codre0), codret )
612 if ( nbteto.ne.0 ) then
615 call gmmod ( nccoex//'.Tetra', pcexte,
616 > nbteto, nbteto, iaux1, nctfte, codre0 )
617 codret = max ( abs(codre0), codret )
620 if ( nbheto.ne.0 ) then
623 call gmmod ( nccoex//'.Hexae', pcexhe,
624 > nbheto, nbheto, iaux1, nctfhe, codre0 )
625 codret = max ( abs(codre0), codret )
628 if ( nbpyto.ne.0 ) then
631 call gmmod ( nccoex//'.Pyram', pcexpy,
632 > nbpyto, nbpyto, iaux1, nctfpy, codre0 )
633 codret = max ( abs(codre0), codret )
636 if ( nbpeto.ne.0 ) then
639 call gmmod ( nccoex//'.Penta', pcexpe,
640 > nbpeto, nbpeto, iaux1, nctfpe, codre0 )
641 codret = max ( abs(codre0), codret )
646 c 2.4. ==> tableaux de renumerotation
647 #ifdef _DEBUG_HOMARD_
648 write (ulsort,90002) '2.4. ==> renumerotation ; codret', codret
649 call gmprsx (nompro,norenu)
652 if ( codret.eq.0 ) then
654 #ifdef _DEBUG_HOMARD_
655 write (ulsort,texte(langue,3)) 'UTRE03_no', nompro
659 call utre03 ( iaux, jaux, norenu,
660 > rvnoac, kaux, adnohn, kaux,
661 > ulsort, langue, codret )
665 if ( codret.eq.0 ) then
667 #ifdef _DEBUG_HOMARD_
668 write (ulsort,texte(langue,3)) 'UTRE03_mp', nompro
672 call utre03 ( iaux, jaux, norenu,
673 > rvmpac, kaux, admphn, kaux,
674 > ulsort, langue, codret )
678 if ( codret.eq.0 ) then
680 #ifdef _DEBUG_HOMARD_
681 write (ulsort,texte(langue,3)) 'UTRE03_ar', nompro
685 call utre03 ( iaux, jaux, norenu,
686 > rvarac, kaux, adarhn, kaux,
687 > ulsort, langue, codret )
691 if ( codret.eq.0 ) then
693 #ifdef _DEBUG_HOMARD_
694 write (ulsort,texte(langue,3)) 'UTRE03_tr', nompro
698 call utre03 ( iaux, jaux, norenu,
699 > rvtrac, kaux, adtrhn, kaux,
700 > ulsort, langue, codret )
704 if ( codret.eq.0 ) then
706 #ifdef _DEBUG_HOMARD_
707 write (ulsort,texte(langue,3)) 'UTRE03_te', nompro
711 call utre03 ( iaux, jaux, norenu,
712 > rvteac, kaux, adtehn, kaux,
713 > ulsort, langue, codret )
717 if ( codret.eq.0 ) then
719 #ifdef _DEBUG_HOMARD_
720 write (ulsort,texte(langue,3)) 'UTRE03_qu', nompro
724 call utre03 ( iaux, jaux, norenu,
725 > rvquac, kaux, adquhn, kaux,
726 > ulsort, langue, codret )
730 if ( codret.eq.0 ) then
732 #ifdef _DEBUG_HOMARD_
733 write (ulsort,texte(langue,3)) 'UTRE03_py', nompro
737 call utre03 ( iaux, jaux, norenu,
738 > rvpyac, kaux, adpyhn, kaux,
739 > ulsort, langue, codret )
743 if ( codret.eq.0 ) then
745 #ifdef _DEBUG_HOMARD_
746 write (ulsort,texte(langue,3)) 'UTRE03_he', nompro
750 call utre03 ( iaux, jaux, norenu,
751 > rvheac, kaux, adhehn, kaux,
752 > ulsort, langue, codret )
756 if ( codret.eq.0 ) then
758 #ifdef _DEBUG_HOMARD_
759 write (ulsort,texte(langue,3)) 'UTRE03_pe', nompro
763 call utre03 ( iaux, jaux, norenu,
764 > rvpeac, kaux, adpehn, kaux,
765 > ulsort, langue, codret )
769 c 2.5. ==> borne maximale des dimensionnements en fonction
770 c de la configuration
772 c noeuds 1 : famille MED
773 c + l : appartenance a l'equivalence l
775 c mailles-points 1 : famille MED
776 c 2 : type de maille-point
777 c 3 : famille du sommet support
778 c + l : appartenance a l'equivalence l
780 c aretes 1 : famille MED
781 c 2 : type de segment
783 c 4 : famille d'orientation inverse
784 c 5 : numero de ligne de frontiere
785 c > 0 si arete concernee par le suivi de frontiere
786 c <= 0 si non concernee
787 c 6 : famille de suivi de frontiere active/inactive
788 c 7 : numero de surface de frontiere
789 c + l : appartenance a l'equivalence l
791 c triangles 1 : famille MED
792 c 2 : type de triangle
793 c 3 : numero de surface de frontiere
794 c 4 : famille des aretes internes apres raf
795 c + l : appartenance a l'equivalence l
797 c quadrangles 1 : famille MED
798 c 2 : type de quadrangle
799 c 3 : numero de surface de frontiere
800 c 4 : famille des aretes internes apres raf
801 c 5 : famille des triangles de conformite
802 c 6 : famille de suivi de frontiere active/inactive
803 c + l : appartenance a l'equivalence l
805 c tetraedres 1 : famille MED
806 c 2 : type de tetraedres
808 c hexaedres 1 : famille MED
809 c 2 : type de hexaedres
810 c 3 : famille des tetraedres de conformite
811 c 4 : famille des pyramides de conformite
813 c pyramides 1 : famille MED
814 c 2 : type de pyramides
816 c pentaedres 1 : famille MED
817 c 2 : type de pentaedres
818 c 3 : famille des tetraedres de conformite
819 c 4 : famille des pyramides de conformite
821 #ifdef _DEBUG_HOMARD_
822 write (ulsort,90002) '2.5. ==> borne maximale ; codret', codret
824 #ifdef _DEBUG_HOMARD_
826 > 'nbequi, nbeqno, nbeqmp, nbeqar, nbeqtr, nbeqqu',
827 > nbequi, nbeqno, nbeqmp, nbeqar, nbeqtr, nbeqqu
828 write (ulsort,90002) 'nbfmen', nbfmen
831 if ( codret.eq.0 ) then
833 c 2.5.1. ==> Les noeuds
836 c prise en compte des equivalences possibles
837 if ( ncefno.ne.0 ) then
840 #ifdef _DEBUG_HOMARD_
841 write (ulsort,90002) 'nbfnom', nbfnom
844 c 2.5.2. ==> Les mailles
846 c nombre de familles med
847 nbfmem = nbfmed - nbfmen
849 do 252 , typenh = 0 , 7
851 #ifdef _DEBUG_HOMARD_
853 write (ulsort,*) mess14(langue,4,typenh)
856 c 2.5.2.1. ==> nombre de types possibles
858 if ( typenh.eq.0 ) then
864 c 2.5.2.2. ==> nombre d'orientations possibles
866 if ( typenh.eq.1 ) then
872 c 2.5.2.3. ==> equivalences possibles
874 if ( typenh.eq.0 ) then
876 elseif ( typenh.eq.1 ) then
878 elseif ( typenh.eq.2 ) then
880 elseif ( typenh.eq.4 ) then
887 c 2.5.2.4. ==> evaluation du nombre maximum de familles
889 #ifdef _DEBUG_HOMARD_
890 write (ulsort,90002) 'nbfmem', nbfmem
891 write (ulsort,90002) 'nbtype', nbtype
892 write (ulsort,90002) 'nborie', nborie
893 write (ulsort,90002) 'nbrequ', nbrequ
895 iaux = nbfmem*nbtype*nborie*nbrequ
896 #ifdef _DEBUG_HOMARD_
897 write (ulsort,90002) '==> iaux', iaux
900 if ( typenh.eq.0 ) then
902 elseif ( typenh.eq.3 ) then
904 elseif ( typenh.eq.5 ) then
906 elseif ( typenh.eq.6 ) then
908 elseif ( typenh.eq.7 ) then
914 #ifdef _DEBUG_HOMARD_
915 write (ulsort,90002) 'nbfmpm', nbfmpm
916 write (ulsort,90002) 'nbfarm', nbfarm
917 write (ulsort,90002) 'nbftrm', nbftrm
918 write (ulsort,90002) 'nbfqum', nbfqum
919 write (ulsort,90002) 'nbftem', nbftem
920 write (ulsort,90002) 'nbfhem', nbfhem
921 write (ulsort,90002) 'nbfpym', nbfpym
922 write (ulsort,90002) 'nbfpem', nbfpem
928 c 3. allocation des nouveaux tableaux
929 c remarque : on alloue pour toutes les entites, meme s'il se
930 c peut qu'il n'y en ait pas.
933 #ifdef _DEBUG_HOMARD_
934 write (ulsort,90002) '3. allocation nou tab ; codret', codret
938 do 30 , typenh = -1 , 7
940 c 3.1. ==> Caracteristiques des entites concernees
942 if ( codret.eq.0 ) then
944 if ( typenh.eq.-1 ) then
949 elseif ( typenh.eq.0 ) then
954 elseif ( typenh.eq.1 ) then
959 elseif ( typenh.eq.2 ) then
964 elseif ( typenh.eq.3 ) then
969 elseif ( typenh.eq.4 ) then
974 elseif ( typenh.eq.5 ) then
979 elseif ( typenh.eq.6 ) then
984 elseif ( typenh.eq.7 ) then
993 c 3.2. ==> appel du programme generique
995 if ( codret.eq.0 ) then
997 #ifdef _DEBUG_HOMARD_
999 write (ulsort,*) mess14(langue,4,typenh)
1000 write (ulsort,90002) 'nbento', nbento
1001 write (ulsort,90002) 'nctfen', nctfen
1002 write (ulsort,90002) 'nbfenm', nbfenm
1005 #ifdef _DEBUG_HOMARD_
1006 write (ulsort,texte(langue,3)) 'UTALFE', nompro
1009 call utalfe ( iaux, nhenti,
1010 > nbento, nctfen, nbfenm,
1011 > nhenfa, pfamen, pcfaen,
1012 > ulsort, langue, codret )
1016 c 3.3. ==> Recuperation de l'adresse des codes
1018 if ( codret.eq.0 ) then
1020 if ( typenh.eq.-1 ) then
1024 elseif ( typenh.eq.0 ) then
1028 elseif ( typenh.eq.1 ) then
1032 elseif ( typenh.eq.2 ) then
1036 elseif ( typenh.eq.3 ) then
1040 elseif ( typenh.eq.4 ) then
1044 elseif ( typenh.eq.5 ) then
1048 elseif ( typenh.eq.6 ) then
1052 elseif ( typenh.eq.7 ) then
1063 c 4. initialisations
1066 #ifdef _DEBUG_HOMARD_
1067 write (ulsort,90002) '4. initialisations ; codret', codret
1071 c 4.1. ==> prise en compte de l'eventuel suivi de frontiere
1073 #ifdef _DEBUG_HOMARD_
1074 write (ulsort,90002) 'suifro', suifro
1077 if ( ( mod(suifro,2).eq.0 ) .or.
1078 > ( mod(suifro,3).eq.0 ) .or.
1079 > ( mod(suifro,5).eq.0 ) ) then
1084 if ( codret.eq.0 ) then
1086 if ( ( mod(suifro,2).eq.0 ) .or.
1087 > ( mod(suifro,3).eq.0 ) ) then
1088 call gmmod ( nocman//'.Frontier',
1089 > adfrfa, 0, nbfmed, 1, 1, codre1 )
1094 call gmaloj ( nhsupe//'.Tab10', ' ', nbfmed, adfrgr, codre2 )
1095 call gmecat ( nhsupe, 10, nbfmed, codre3 )
1097 call gmaloj ( nhsups//'.Tab10', ' ', iaux, adnogr, codre4 )
1098 call gmecat ( nhsups, 10, iaux, codre5 )
1100 codre0 = min ( codre1, codre2, codre3, codre4, codre5 )
1101 codret = max ( abs(codre0), codret,
1102 > codre1, codre2, codre3, codre4, codre5 )
1106 cgn call gmprsx (nompro,ncfami//'.Groupe.Table' )
1107 cgn call gmprsx (nompro,ncfami//'.Groupe.Pointeur' )
1109 c 4.1.1. ==> Groupes pour les frontieres discretes ou CAO
1111 if ( ( mod(suifro,2).eq.0 ) .or. ( mod(suifro,5).eq.0 ) ) then
1113 #ifdef _DEBUG_HOMARD_
1114 write (ulsort,90002) '4.1.1. F. discretes/CAO ; codret', codret
1117 cgn call gmprsx (nompro,ncafdg )
1118 cgn call gmprsx (nompro,ncafdg//'.Pointeur' )
1119 cgn call gmprsx (nompro,ncafdg//'.Table' )
1120 cgn call gmprsx (nompro,ncafdg//'.Taille' )
1122 if ( codret.eq.0 ) then
1124 call gmliat ( ncafdg, 1, nbgrof, codret )
1128 if ( codret.eq.0 ) then
1129 #ifdef _DEBUG_HOMARD_
1130 write (ulsort,90002) 'nbgrof', nbgrof
1133 if ( nbgrof.gt.0 ) then
1136 #ifdef _DEBUG_HOMARD_
1137 write (ulsort,texte(langue,3)) 'UTADPT', nompro
1139 call utadpt ( ncafdg, iaux,
1141 > pointd, pttgrd, ptngrd,
1142 > ulsort, langue, codret )
1150 c 4.1.2. ==> Frontieres analytiques
1152 if ( mod(suifro,3).eq.0 ) then
1154 #ifdef _DEBUG_HOMARD_
1155 write (ulsort,90002) '4.1.2 Front analytiques ; codret', codret
1158 c 4.1.2.1 ==> Combien de frontieres analytiques ?
1160 if ( codret.eq.0 ) then
1162 cgn call gmprsx (nompro,ncafan )
1163 call gmliat ( ncafan, 1, nbfran ,codret )
1167 if ( codret.eq.0 ) then
1169 if ( nbfran.eq.0 ) then
1170 write (ulsort,texte(langue,8))
1176 c 4.1.2.2 ==> Description des noms des frontieres dans les liens
1178 if ( nbfran.gt.0 ) then
1180 if ( codret.eq.0 ) then
1182 cgn call gmprsx (nompro,ncfgnf//'.Pointeur' )
1183 cgn call gmprsx (nompro,ncfgnf//'.Table' )
1184 cgn call gmprsx (nompro,ncfgnf//'.Taille' )
1186 #ifdef _DEBUG_HOMARD_
1187 write (ulsort,texte(langue,3)) 'UTADPT', nompro
1189 call utadpt ( ncfgnf, iaux,
1191 > adfpoi, adftai, adftab,
1192 > ulsort, langue, codret )
1198 c 4.1.2.3 ==> Description des noms des groupes dans les liens
1200 if ( nbfran.gt.0 ) then
1202 if ( codret.eq.0 ) then
1203 cgn call gmprsx (nompro//' - ncfgng',ncfgng )
1204 cgn call gmprsx (nompro//' - ncfgng',ncfgng//'.Pointeur' )
1205 cgn call gmprsx (nompro//' - ncfgng',ncfgng//'.Table' )
1206 cgn call gmprsx (nompro//' - ncfgng',ncfgng//'.Taille' )
1208 #ifdef _DEBUG_HOMARD_
1209 write (ulsort,texte(langue,3)) 'UTADPT', nompro
1211 call utadpt ( ncfgng, iaux,
1213 > adgpoi, adgtai, adgtab,
1214 > ulsort, langue, codret )
1220 c 4.1.2.3 ==> Description des frontieres
1222 if ( nbfran.gt.0 ) then
1224 if ( codret.eq.0 ) then
1225 cgn call gmprsx (nompro,ncafan//'.Pointeur' )
1226 cgn call gmprsx (nompro,ncafan//'.Table' )
1227 cgn call gmprsx (nompro,ncafan//'.Taille' )
1230 #ifdef _DEBUG_HOMARD_
1231 write (ulsort,texte(langue,3)) 'UTADPT', nompro
1233 call utadpt ( ncafan, iaux,
1235 > adcpoi, adctai, adctab,
1236 > ulsort, langue, codret )
1244 c 4.1.3. ==> Caracteristiques des familles
1245 #ifdef _DEBUG_HOMARD_
1246 write (ulsort,90002) '4.1.3. Carac familles ; codret', codret
1249 if ( codret.eq.0 ) then
1253 #ifdef _DEBUG_HOMARD_
1254 write (ulsort,texte(langue,3)) 'UTAD13', nompro
1256 call utad13 ( iaux, ncfami,
1258 > pointe, jaux, ptngrf,
1259 > ulsort, langue, codret )
1263 c 4.1.4. ==> Initialisations ad-hoc
1264 #ifdef _DEBUG_HOMARD_
1265 write (ulsort,90002) '4.1.4. Init ad hoc ; codret', codret
1268 if ( codret.eq.0 ) then
1270 #ifdef _DEBUG_HOMARD_
1271 write (ulsort,texte(langue,3)) 'VCSFIN', nompro
1273 call vcsfin ( suifro,
1274 > imem(pcexar), imem(pcextr), imem(pcexqu),
1275 > nbgrof, nbfrgr, nbfran, nbfmed, nbelem,
1276 > imem(pointd), imem(pttgrd), smem(ptngrd),
1277 > imem(adcpoi), imem(adctai), smem(adctab),
1278 > imem(adfpoi), imem(adftai), smem(adftab),
1279 > imem(adgpoi), imem(adgtai), smem(adgtab),
1280 > imem(pointe), smem(ptngrf),
1281 > imem(adfrfa), imem(adfrgr), smem(adnogr),
1282 > imem(pnuele), imem(adarhn),
1283 > imem(pfamee), imem(ptypel),
1284 > imem(pnumfa), smem(pnomfa),
1285 > imem(paretr), imem(adtrhn),
1286 > imem(parequ), imem(adquhn),
1287 > ulsort, langue, codret )
1297 #ifdef _DEBUG_HOMARD_
1298 write (ulsort,90002) '5. homologues ; codret', codret
1306 c 5.1. ==> allocation des tableaux etendus de description des
1309 if ( codret.eq.0 ) then
1311 if ( homolo.ge.1 ) then
1312 call gmaloj ( nhnoeu//'.Homologu', ' ', nbnoto, adhono, codret )
1315 if ( homolo.ge.1 .and. nbmpto.gt.0 ) then
1319 #ifdef _DEBUG_HOMARD_
1320 write (ulsort,texte(langue,3)) 'UTAL02_mp', nompro
1322 call utal02 ( typenh, iaux,
1323 > nhmapo, nbmpto, kaux,
1324 > paux, paux, paux, paux,
1327 > paux, admpho, paux,
1328 > ulsort, langue, codret )
1331 if ( homolo.ge.2 ) then
1335 #ifdef _DEBUG_HOMARD_
1336 write (ulsort,texte(langue,3)) 'UTAL02_ar', nompro
1338 call utal02 ( typenh, iaux,
1339 > nharet, nbarto, kaux,
1340 > paux, paux, paux, paux,
1343 > paux, adhoar, paux,
1344 > ulsort, langue, codret )
1347 if ( homolo.ge.3 .and. nbtrto.gt.0 ) then
1351 #ifdef _DEBUG_HOMARD_
1352 write (ulsort,texte(langue,3)) 'UTAL02_tr', nompro
1354 call utal02 ( typenh, iaux,
1355 > nhtria, nbtrto, kaux,
1356 > paux, paux, paux, paux,
1359 > paux, adhotr, paux,
1360 > ulsort, langue, codret )
1363 if ( homolo.ge.3 .and. nbquto.gt.0 ) then
1367 #ifdef _DEBUG_HOMARD_
1368 write (ulsort,texte(langue,3)) 'UTAL02_qu', nompro
1370 call utal02 ( typenh, iaux,
1371 > nhquad, nbquto, kaux,
1372 > paux, paux, paux, paux,
1375 > paux, adhoqu, paux,
1376 > ulsort, langue, codret )
1381 c 5.2. ==> construction des tableaux etendus d'equivalence - phase 1
1382 c on ne fait ici que la traduction directe des donnees dans le
1383 c but de pouvoir etablir les familles
1385 if ( codret.eq.0 ) then
1387 if ( homolo.ge.1 ) then
1389 #ifdef _DEBUG_HOMARD_
1390 write (ulsort,texte(langue,3)) 'VCEQU1', nompro
1392 call vcequ1 ( imem(pnunoe), imem(pnuele),
1393 > imem(adhono), imem(adnohn), imem(adeqno),
1394 > imem(adhoar), imem(adarhn), imem(adeqar),
1395 > imem(adhotr), imem(adtrhn), imem(adeqtr),
1396 > imem(adhoqu), imem(adquhn), imem(adeqqu),
1397 > ulsort, langue, codret )
1403 c 5.3. ==> prise en compte des equivalences dans les caracteristiques
1406 if ( codret.eq.0 ) then
1408 if ( homolo.ge.1 ) then
1410 #ifdef _DEBUG_HOMARD_
1411 write (ulsort,texte(langue,3)) 'VCEQUI', nompro
1413 call vcequi ( imem(pnunoe), imem(pnuele),
1414 > imem(pcexno), imem(adnohn), imem(adeqno),
1415 > imem(pcexar), imem(adarhn), imem(adeqar),
1416 > imem(pcextr), imem(adtrhn), imem(adeqtr),
1417 > imem(pcexqu), imem(adquhn), imem(adeqqu),
1419 > ulsort, langue, codret )
1426 c 6. construction des familles de noeuds
1429 #ifdef _DEBUG_HOMARD_
1430 write (ulsort,90002) '6. familles de noeuds ; codret', codret
1433 if ( codret.eq.0 ) then
1435 #ifdef _DEBUG_HOMARD_
1436 write (ulsort,90002) 'nbnoto, nctfno, nbfnom',
1437 > nbnoto, nctfno, nbfnom
1438 write (ulsort,texte(langue,3)) 'VCCFAM_no', nompro
1444 > nbnoto, nctfno, nbfnom,
1445 > imem(pcexno), imem(pcfano), imem(iaux), imem(iaux),
1446 > imem(pfamno), nbfnoe,
1447 > jaux, jaux, imem(jaux),
1448 > ulsort, langue, codret )
1453 c 7. construction des familles de mailles-points
1456 #ifdef _DEBUG_HOMARD_
1457 write (ulsort,90002) '7. familles de m-pt ; codret', codret
1460 if ( codret.eq.0 ) then
1462 if ( nbmpto.ne.0 ) then
1464 #ifdef _DEBUG_HOMARD_
1465 write (ulsort,90002) 'nbmpto, nctfmp, nbfmpm',
1466 > nbmpto, nctfmp, nbfmpm
1467 write (ulsort,texte(langue,3)) 'VCCFAM_mp', nompro
1473 > nbmpto, nctfmp, nbfmpm,
1474 > imem(pcexmp), imem(pcfamp), imem(pnoemp), imem(pfamno),
1475 > imem(pfammp), nbfmpo,
1476 > jaux, jaux, imem(jaux),
1477 > ulsort, langue, codret )
1484 c 8. construction des familles d'aretes
1487 #ifdef _DEBUG_HOMARD_
1488 write (ulsort,90002) '8. familles d aretes ; codret', codret
1491 if ( codret.eq.0 ) then
1493 #ifdef _DEBUG_HOMARD_
1494 write (ulsort,90002) 'nbarto, nctfar, nbfarm',
1495 > nbarto, nctfar, nbfarm
1496 write (ulsort,texte(langue,3)) 'VCCFAM_ar', nompro
1502 > nbarto, nctfar, nbfarm,
1503 > imem(pcexar), imem(pcfaar), imem(iaux), imem(iaux),
1504 > imem(pfamar), nbfare,
1505 > jaux, jaux, imem(jaux),
1506 > ulsort, langue, codret )
1511 c 9. construction des familles de triangles
1514 #ifdef _DEBUG_HOMARD_
1515 write (ulsort,90002) '9. familles de triangles ; codret', codret
1518 if ( codret.eq.0 ) then
1520 if ( nbtrto.ne.0 .or.
1521 > ( nbquto.ne.0 .and. ( tyconf.eq.-1 .or. tyconf.eq.0 ) ) ) then
1523 #ifdef _DEBUG_HOMARD_
1524 write (ulsort,90002) 'nbtrto, nctftr, nbftrm',
1525 > nbtrto, nctftr, nbftrm
1526 write (ulsort,texte(langue,3)) 'VCCFAM_tr', nompro
1532 > nbtrto, nctftr, nbftrm,
1533 > imem(pcextr), imem(pcfatr), imem(iaux), imem(iaux),
1534 > imem(pfamtr), nbftri,
1535 > nctfar, nbfarm, imem(pcfaar),
1536 > ulsort, langue, codret )
1543 c 10. construction des familles de quadrangles
1546 #ifdef _DEBUG_HOMARD_
1547 write (ulsort,90002) '10. familles de quad. ; codret', codret
1550 if ( codret.eq.0 ) then
1552 if ( nbquto.ne.0 ) then
1554 #ifdef _DEBUG_HOMARD_
1555 write (ulsort,90002) 'nbquto, nctfqu, nbfqum',
1556 > nbquto, nctfqu, nbfqum
1557 write (ulsort,texte(langue,3)) 'VCCFAM_qu', nompro
1563 > nbquto, nctfqu, nbfqum,
1564 > imem(pcexqu), imem(pcfaqu), imem(iaux), imem(iaux),
1565 > imem(pfamqu), nbfqua,
1566 > nctfar, nbfarm, imem(pcfaar),
1567 > ulsort, langue, codret )
1574 c 11. construction des familles de triangles pour la mise en conformite
1576 c Remarque : seulement s'il y a du raffinement conforme
1579 #ifdef _DEBUG_HOMARD_
1580 write (ulsort,90002) '11. triangles conformite ; codret', codret
1581 write (ulsort,90002) 'nbquto, modhom, pilraf',
1582 > nbquto, modhom, pilraf
1585 if ( codret.eq.0 ) then
1587 if ( nbquto.ne.0 .and. ( tyconf.eq.-1 .or. tyconf.eq.0 ) ) then
1589 #ifdef _DEBUG_HOMARD_
1590 write (ulsort,90002) 'nbfqua, nbftri', nbfqua, nbftri
1593 if ( codret.eq.0 ) then
1594 call gmalot ( ntrav1, 'entier ', nctftr, ptrav1, codret )
1597 if ( codret.eq.0 ) then
1601 #ifdef _DEBUG_HOMARD_
1602 write (ulsort,texte(langue,3)) 'VCCFCF_qu_tr', nompro
1604 call vccfcf ( iaux, nctfqu, nbfqum, nbfqua,
1605 > jaux, nctftr, nbftrm, nbftri, ncfftr,
1607 > imem(pcfaqu), imem(pcfatr),
1612 > ulsort, langue, codret )
1614 #ifdef _DEBUG_HOMARD_
1615 write (ulsort,90002) 'nbfqua, nbftri', nbfqua, nbftri
1620 if ( codret.eq.0 ) then
1621 call gmlboj ( ntrav1, codret )
1629 c 12. construction des familles de tetraedres
1632 #ifdef _DEBUG_HOMARD_
1633 write (ulsort,90002) '12. familles de tetraedres ; codret', codret
1636 if ( codret.eq.0 ) then
1638 if ( nbteto.ne.0 .or.
1639 > ( nbheto.ne.0 .and. ( tyconf.eq.-1 .or. tyconf.eq.0 ) ) ) then
1641 #ifdef _DEBUG_HOMARD_
1642 write (ulsort,texte(langue,3)) 'VCCFAM_te', nompro
1647 > nbteto, nctfte, nbftem,
1648 > imem(pcexte), imem(pcfate), imem(iaux), imem(iaux),
1649 > imem(pfamte), nbftet,
1650 > jaux, jaux, imem(jaux),
1651 > ulsort, langue, codret )
1658 c 13. construction des familles d'hexaedres
1661 #ifdef _DEBUG_HOMARD_
1662 write (ulsort,90002) '13. familles d''hexaedres ; codret', codret
1665 if ( codret.eq.0 ) then
1667 if ( nbheto.ne.0 ) then
1669 #ifdef _DEBUG_HOMARD_
1670 write (ulsort,texte(langue,3)) 'VCCFAM_he', nompro
1675 > nbheto, nctfhe, nbfhem,
1676 > imem(pcexhe), imem(pcfahe), imem(iaux), imem(iaux),
1677 > imem(pfamhe), nbfhex,
1678 > jaux, jaux, imem(jaux),
1679 > ulsort, langue, codret )
1686 c 14. construction des familles de pyramides
1689 #ifdef _DEBUG_HOMARD_
1690 write (ulsort,90002) '14. familles de pyramidess ; codret', codret
1693 if ( codret.eq.0 ) then
1695 if ( nbpyto.ne.0 .or.
1696 > ( nbheto.ne.0 .and. ( tyconf.eq.-1 .or. tyconf.eq.0 ) ) ) then
1698 #ifdef _DEBUG_HOMARD_
1699 write (ulsort,texte(langue,3)) 'VCCFAM_py', nompro
1704 > nbpyto, nctfpy, nbfpym,
1705 > imem(pcexpy), imem(pcfapy), imem(iaux), imem(iaux),
1706 > imem(pfampy), nbfpyr,
1707 > jaux, jaux, imem(jaux),
1708 > ulsort, langue, codret )
1715 c 15. construction des familles de tetraedres et pyramides pour la mise
1716 c en conformite des hexaedres
1717 c Remarque : seulement s'il y a du raffinement conforme
1720 #ifdef _DEBUG_HOMARD_
1721 write (ulsort,90002) '15. tetr/pyra conformite ; codret', codret
1722 write (ulsort,90002) 'nbheto, modhom, pilraf',
1723 > nbheto, modhom, pilraf
1726 if ( codret.eq.0 ) then
1728 if ( nbheto.ne.0 .and. ( tyconf.eq.-1 .or. tyconf.eq.0 ) ) then
1730 #ifdef _DEBUG_HOMARD_
1731 write (ulsort,90002) 'nbfhex, nbftet, nbfpyr',
1732 > nbfhex, nbftet, nbfpyr
1735 if ( codret.eq.0 ) then
1736 call gmalot ( ntrav1, 'entier ', nctftr, ptrav1, codret )
1739 if ( codret.eq.0 ) then
1744 #ifdef _DEBUG_HOMARD_
1745 write (ulsort,texte(langue,3)) 'VCCFCF_he_te', nompro
1747 call vccfcf ( iaux, nctfhe, nbfhem, nbfhex,
1748 > jaux, nctfte, nbftem, nbftet, ncffte,
1750 > imem(pcfahe), imem(pcfate),
1755 > ulsort, langue, codret )
1757 #ifdef _DEBUG_HOMARD_
1758 write (ulsort,90002) 'nbfhex, nbftet', nbfhex, nbftet
1763 if ( codret.eq.0 ) then
1768 #ifdef _DEBUG_HOMARD_
1769 write (ulsort,texte(langue,3)) 'VCCFCF_he_py', nompro
1771 call vccfcf ( iaux, nctfhe, nbfhem, nbfhex,
1772 > jaux, nctfpy, nbfpym, nbfpyr, ncffpy,
1774 > imem(pcfahe), imem(pcfapy),
1779 > ulsort, langue, codret )
1781 #ifdef _DEBUG_HOMARD_
1782 write (ulsort,90002) 'nbfhex, nbfpyr', nbfhex, nbfpyr
1787 if ( codret.eq.0 ) then
1788 call gmlboj ( ntrav1, codret )
1796 c 16. construction des familles de pentaedres
1799 #ifdef _DEBUG_HOMARD_
1800 write (ulsort,90002) '16. familles de pentaedres ; codret', codret
1803 if ( codret.eq.0 ) then
1805 if ( nbpeto.ne.0 ) then
1807 #ifdef _DEBUG_HOMARD_
1808 write (ulsort,texte(langue,3)) 'VCCFAM_pe', nompro
1813 > nbpeto, nctfpe, nbfpem,
1814 > imem(pcexpe), imem(pcfape), imem(iaux), imem(iaux),
1815 > imem(pfampe), nbfpen,
1816 > jaux, jaux, imem(jaux),
1817 > ulsort, langue, codret )
1824 c 17. construction des familles de tetraedres et pyramides pour la mise
1825 c en conformite des pentaedres
1826 c Remarque : seulement s'il y a du raffinement conforme
1829 #ifdef _DEBUG_HOMARD_
1830 write (ulsort,90002) '17. tetr/pyra conformite ; codret', codret
1831 write (ulsort,90002) 'nbpeto, modhom, pilraf',
1832 > nbpeto, modhom, pilraf
1835 if ( codret.eq.0 ) then
1837 if ( nbpeto.ne.0 .and. ( tyconf.eq.-1 .or. tyconf.eq.0 ) ) then
1839 #ifdef _DEBUG_HOMARD_
1840 write (ulsort,90002) 'nbfpen, nbftet, nbfpyr',
1841 > nbfpen, nbftet, nbfpyr
1844 if ( codret.eq.0 ) then
1845 call gmalot ( ntrav1, 'entier ', nctftr, ptrav1, codret )
1848 if ( codret.eq.0 ) then
1853 #ifdef _DEBUG_HOMARD_
1854 write (ulsort,texte(langue,3)) 'VCCFCF_pe_te', nompro
1856 call vccfcf ( iaux, nctfpe, nbfpem, nbfpen,
1857 > jaux, nctfte, nbftem, nbftet, ncffte,
1859 > imem(pcfape), imem(pcfate),
1864 > ulsort, langue, codret )
1866 #ifdef _DEBUG_HOMARD_
1867 write (ulsort,90002) 'nbfpen, nbftet', nbfpen, nbftet
1872 if ( codret.eq.0 ) then
1877 #ifdef _DEBUG_HOMARD_
1878 write (ulsort,texte(langue,3)) 'VCCFCF_pe_py', nompro
1880 call vccfcf ( iaux, nctfpe, nbfpem, nbfpen,
1881 > jaux, nctfpy, nbfpym, nbfpyr, ncffpy,
1883 > imem(pcfape), imem(pcfapy),
1888 > ulsort, langue, codret )
1890 #ifdef _DEBUG_HOMARD_
1891 write (ulsort,90002) 'nbfpen, nbfpyr', nbfpen, nbfpyr
1896 if ( codret.eq.0 ) then
1897 call gmlboj ( ntrav1, codret )
1905 c 18. complement des familles pour non conforme ou Carmel
1907 #ifdef _DEBUG_HOMARD_
1908 write (ulsort,90002) '18. complement familles ; codret', codret
1911 c 18.1. ==> Adaptation non conforme
1913 if ( tyconf.eq.-2 .or.
1916 > tyconf.eq.3 ) then
1918 #ifdef _DEBUG_HOMARD_
1919 write (ulsort,90002) '18.1. non-conforme ; codret', codret
1920 cgn call gmprsx (nompro,ncfami)
1921 cgn call gmprsx (nompro,ncfami//'.Numero')
1922 cgn call gmprsx (nompro,ncfami//'.Nom')
1925 c 18.1.1. ==> modifications des structures
1927 if ( codret.eq.0 ) then
1935 call gmecat ( ncfami, 1, nbfmed, codre1 )
1936 call gmecat ( ncfami, 2, ngrouc, codre2 )
1937 call gmecat ( ncfami//'.Groupe', 1, nbfmed, codre3 )
1939 call gmecat ( ncfami//'.Groupe', 2, iaux, codre4 )
1941 codre0 = min ( codre1, codre2, codre3, codre4 )
1942 codret = max ( abs(codre0), codret,
1943 > codre1, codre2, codre3, codre4 )
1945 call gmmod ( ncfami//'.Numero',
1946 > pnumfa, nbfme0, nbfmed, un, un, codre1 )
1949 call gmmod ( ncfami//'.Nom',
1950 > pnomfa, iaux1, iaux2, un, un, codre2 )
1951 call gmmod ( ncfami//'.Groupe.Pointeur',
1952 > pgrpo, nbfme0+1, nbfmed+1, un, un, codre3 )
1955 call gmmod ( ncfami//'.Groupe.Taille',
1956 > pgrtai, iaux1, iaux2, un, un, codre4 )
1957 call gmmod ( ncfami//'.Groupe.Table',
1958 > pgrtab, iaux1, iaux2, un, un, codre5 )
1960 codre0 = min ( codre1, codre2, codre3, codre4, codre5 )
1961 codret = max ( abs(codre0), codret,
1962 > codre1, codre2, codre3, codre4, codre5 )
1966 if ( codret.eq.0 ) then
1968 call gmadoj ( ncnomb, adnomb, iaux, codret )
1972 c 18.1.2. ==> Modifications
1974 if ( codret.eq.0 ) then
1976 #ifdef _DEBUG_HOMARD_
1977 write (ulsort,texte(langue,3)) 'VCCFNC', nompro
1979 call vccfnc ( nbfare, imem(pcfaar),
1980 > nbfqua, imem(pcfaqu),
1981 > nbftri, imem(pcfatr),
1982 > imem(adnomb+47), imem(adnomb+48),
1983 > nbfme0, imem(pnumfa), smem(pnomfa),
1985 > imem(pgrtai), smem(pgrtab),
1986 > ulsort, langue, codret )
1994 if ( typcca.eq.66 .or. typcca.eq.76 ) then
1996 #ifdef _DEBUG_HOMARD_
1997 write (ulsort,90002) '18.2. Carmel ; codret', codret
1998 cgn call gmprsx (nompro,ncfami)
1999 cgn call gmprsx (nompro,ncfami//'.Numero')
2000 cgn call gmprsx (nompro,ncfami//'.Nom')
2003 if ( codret.eq.0 ) then
2005 #ifdef _DEBUG_HOMARD_
2006 write (ulsort,texte(langue,3)) 'VCCFCA', nompro
2008 call vccfca ( nbfare, imem(pcfaar),
2009 > nbfqua, imem(pcfaqu),
2010 > nbftri, imem(pcfatr),
2011 > imem(adnomb+47), imem(adnomb+48),
2012 > nbfme0, imem(pnumfa), smem(pnomfa),
2014 > imem(pgrtai), smem(pgrtab),
2015 > ulsort, langue, codret )
2022 c 19. construction des tableaux etendus d'equivalence - phase 2
2023 c les familles etant construites, on enrichit les structures pour
2024 c pouvoir passer l'algorithme de maillage
2027 #ifdef _DEBUG_HOMARD_
2028 write (ulsort,90002) '19. equivalence ; codret', codret
2031 if ( codret.eq.0 ) then
2033 if ( homolo.ge.1 ) then
2035 #ifdef _DEBUG_HOMARD_
2036 write (ulsort,texte(langue,3)) 'VCEQU2', nompro
2038 call vcequ2 ( imem(adhono), imem(adhoar),
2039 > imem(adhotr), imem(adhoqu),
2040 > imem(psomar), imem(pnp2ar),
2041 > imem(paretr), imem(parequ),
2042 > imem(pposif), imem(pfacar),
2043 > imem(ppovos), imem(pvoiso),
2044 > ulsort, langue, codret )
2046 #ifdef _DEBUG_HOMARD_
2047 call gmprsx (nompro, nhnoeu//'.Homologu' )
2048 call gmprsx (nompro, nharet//'.Homologu' )
2049 cgn call gmprsx (nompro, nhtria//'.Homologu' )
2060 #ifdef _DEBUG_HOMARD_
2061 write (ulsort,90002) '20. menage ; codret', codret
2064 c 20.1. ==> mise a la bonne taille des tableaux lies aux familles HOMARD
2065 c Attention : meme dans le cas ou un type d'entite est absent,
2066 c (maille-point, tetraedre, etc.), il faut passer
2067 c par chacune des mises a jour. En effet par la
2068 c suite, certains traitements font des appels
2069 c systematiques aux attributs et aux adresses des
2070 c tableaux. Il est est donc indispensable d'avoir
2071 c correctement rempli les structures.
2073 do 201 , typenh = -1 , 7
2075 c 20.1.1. ==> Caracteristiques des entites concernees
2077 if ( codret.eq.0 ) then
2079 if ( typenh.eq.-1 ) then
2084 elseif ( typenh.eq.0 ) then
2089 elseif ( typenh.eq.1 ) then
2094 elseif ( typenh.eq.2 ) then
2099 elseif ( typenh.eq.3 ) then
2104 elseif ( typenh.eq.4 ) then
2109 elseif ( typenh.eq.5 ) then
2114 elseif ( typenh.eq.6 ) then
2119 elseif ( typenh.eq.7 ) then
2128 c 20.1.2. ==> appel du programme generique
2130 if ( codret.eq.0 ) then
2132 #ifdef _DEBUG_HOMARD_
2133 write (ulsort,*) ' '
2134 write (ulsort,*) mess14(langue,4,typenh)
2135 write (ulsort,90002) 'nctfen', nctfen
2136 write (ulsort,90002) 'nbfenm', nbfenm
2137 write (ulsort,90002) 'nbfaen', nbfaen
2140 #ifdef _DEBUG_HOMARD_
2141 write (ulsort,texte(langue,3))
2142 > 'UTFAM1 - '//mess14(langue,3,typenh), nompro
2145 call utfam1 ( iaux, nhenfa, pcfaen,
2146 > nctfen, nbfenm, nbfaen,
2147 > ulsort, langue, codret )
2151 c 20.1.3. ==> Recuperation de l'adresse des codes
2153 if ( codret.eq.0 ) then
2155 if ( typenh.eq.-1 ) then
2157 elseif ( typenh.eq.0 ) then
2159 elseif ( typenh.eq.1 ) then
2161 elseif ( typenh.eq.2 ) then
2163 elseif ( typenh.eq.3 ) then
2165 elseif ( typenh.eq.4 ) then
2167 elseif ( typenh.eq.5 ) then
2169 elseif ( typenh.eq.6 ) then
2171 elseif ( typenh.eq.7 ) then
2179 c 20.2. ==> Liberation de structures inutiles
2181 if ( codret.eq.0 ) then
2183 call gmsgoj ( nhvois//'.0D/1D' , codret )
2188 c 21. sauvegarde des informations sur les familles, au sens
2189 c du module de calcul associe
2190 c attention : il faut faire des copies et non pas des attachements
2191 c car la structure generale de l'objet "maillage de
2192 c calcul" est detruite apres la phase de conversion.
2194 #ifdef _DEBUG_HOMARD_
2195 write (ulsort,*) '21. sauvegarde ; codret', codret
2198 cgn print *,nompro,' : nbfmed,ngrouc',nbfmed,ngrouc
2200 if ( codret.eq.0 ) then
2202 if ( codret.eq.0 ) then
2204 if ( ngrouc.gt.0 ) then
2206 call gmecat ( nhsupe, 5, nbfmed, codre1 )
2208 call gmecat ( nhsupe, 6, iaux, codre2 )
2210 call gmecat ( nhsups, 2, iaux, codre3 )
2212 codre0 = min ( codre1, codre2, codre3 )
2213 codret = max ( abs(codre0), codret,
2214 > codre1, codre2, codre3 )
2218 call gmecat ( nhsupe, 9, nbfmed, codre1 )
2219 call gmecat ( nhsups, 4, 10*nbfmed, codre2 )
2220 codre0 = min ( codre1, codre2 )
2221 codret = max ( abs(codre0), codret,
2226 if ( codret.eq.0 ) then
2228 if ( nbfmed.ne.0 ) then
2230 if ( ngrouc.gt.0 ) then
2232 call gmcpoj ( ncfami//'.Groupe.Pointeur',
2233 > nhsupe//'.Tab5', codre1 )
2234 call gmcpoj ( ncfami//'.Groupe.Taille',
2235 > nhsupe//'.Tab6', codre2 )
2236 call gmcpoj ( ncfami//'.Groupe.Table',
2237 > nhsups//'.Tab2', codre3 )
2239 codre0 = min ( codre1, codre2, codre3 )
2240 codret = max ( abs(codre0), codret,
2241 > codre1, codre2, codre3 )
2245 call gmcpoj ( ncfami//'.Numero',
2246 > nhsupe//'.Tab9', codre1 )
2247 call gmcpoj ( ncfami//'.Nom',
2248 > nhsups//'.Tab4', codre2 )
2250 codre0 = min ( codre1, codre2 )
2251 codret = max ( abs(codre0), codret,
2258 #ifdef _DEBUG_HOMARD_
2259 call gmprsx (nompro, nhsupe )
2260 call gmprsx (nompro, nhsupe//'.Tab3' )
2261 call gmprsx (nompro, nhsupe//'.Tab4' )
2262 call gmprsx (nompro, nhsupe//'.Tab5' )
2263 call gmprsx (nompro, nhsupe//'.Tab6' )
2264 call gmprsx (nompro, nhsupe//'.Tab9' )
2265 call gmprsx (nompro, nhsups )
2266 call gmprsx (nompro, nhsups//'.Tab2' )
2267 call gmprsx (nompro, nhsups//'.Tab3' )
2268 call gmprsx (nompro, nhsups//'.Tab4' )
2269 call gmprsx (nompro, nhsups//'.Tab9' )
2275 c 22. sauvegarde des informations sur les equivalences, au sens
2276 c du module de calcul associe
2277 c attention : il faut faire des copies et non pas des attachements
2278 c car la structure generale de l'objet "maillage de
2279 c calcul" est detruite apres la phase de conversion.
2282 #ifdef _DEBUG_HOMARD_
2283 write (ulsort,*) '22. sauvegarde equivalences ; codret', codret
2286 if ( codret.eq.0 ) then
2288 if ( homolo.ne.0 ) then
2290 call gmecat ( nhsups, 5, 33*nbequi, codre1 )
2291 call gmcpoj ( ncequi//'.InfoGene',
2292 > nhsups//'.Tab5', codre2 )
2294 codre0 = min ( codre1, codre2 )
2295 codret = max ( abs(codre0), codret,
2298 #ifdef _DEBUG_HOMARD_
2299 call gmprsx (nompro, nhsups )
2300 call gmprsx (nompro, nhsups//'.Tab5' )
2307 #ifdef _DEBUG_HOMARD_
2312 cgn call gmprsx (nompro, nhnofa//'.EntiFamm')
2313 cgn call gmprsx (nompro, nhmpfa//'.EntiFamm')
2314 cgn call gmprsx (nompro, nharfa//'.EntiFamm')
2315 cgn call gmprsx (nompro, nhtrfa//'.EntiFamm')
2316 cgn call gmprsx (nompro, nhqufa//'.EntiFamm')
2317 cgn call gmprsx (nompro, nhtefa//'.EntiFamm')
2318 cgn call gmprsx (nompro, nhtrfa//'.Codes')
2319 cgn call gmprsx (nompro, nhqufa//'.Codes')
2320 cgn call gmprsx (nompro, nhtetr/1/'.Famille')
2321 cgn call gmprsx (nompro, nhtetr//'.Famille.Codes')
2323 if ( codret.eq.0 ) then
2326 #ifdef _DEBUG_HOMARD_
2327 write (ulsort,texte(langue,3)) 'UTECFE', nompro
2330 > imem(pfamno), imem(pcfano),
2331 > imem(pfammp), imem(pcfamp),
2332 > imem(pfamar), imem(pcfaar),
2333 > imem(pfamtr), imem(pcfatr),
2334 > imem(pfamqu), imem(pcfaqu),
2335 > imem(pfamte), imem(pcfate),
2336 > imem(pfamhe), imem(pcfahe),
2337 > imem(pfampy), imem(pcfapy),
2338 > imem(pfampe), imem(pcfape),
2339 > ulsort, langue, codret )
2349 if ( codret.ne.0 ) then
2353 write (ulsort,texte(langue,1)) 'Sortie', nompro
2354 write (ulsort,texte(langue,2)) codret
2358 #ifdef _DEBUG_HOMARD_
2359 write (ulsort,texte(langue,1)) 'Sortie', nompro