1 subroutine mmagre ( lgopti, taopti, lgetco, taetco,
3 > ulsort, langue, codret )
4 c ______________________________________________________________________
8 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
10 c Version originale enregistree le 18 juin 1996 sous le numero 96036
11 c aupres des huissiers de justice Simart et Lavoir a Clamart
12 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
13 c aupres des huissiers de justice
14 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
16 c HOMARD est une marque deposee d'Electricite de France
22 c ______________________________________________________________________
24 c Modification de Maillage - AGREgat
26 c ______________________________________________________________________
28 c . nom . e/s . taille . description .
29 c .____________________________________________________________________.
30 c . lgopti . e . 1 . longueur du tableau des options entieres .
31 c . taopti . e . lgopti . tableau des options entieres .
32 c . lgetco . e . 1 . longueur du tableau de l'etat courant .
33 c . taetco . e . lgetco . tableau de l'etat courant .
34 c . nomail . e . char8 . nom de l'objet maillage homard iter. n .
35 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
36 c . langue . e . 1 . langue des messages .
37 c . . . . 1 : francais, 2 : anglais .
38 c . codret . es . 1 . code de retour des modules .
39 c . . . . 0 : pas de probleme .
40 c . . . . 1 : probleme .
41 c ______________________________________________________________________
44 c 0. declarations et dimensionnement
47 c 0.1. ==> generalites
53 parameter ( nompro = 'MMAGRE' )
82 integer taopti(lgopti)
84 integer ulsort, langue, codret
86 integer taetco(lgetco)
90 c 0.4. ==> variables locales
94 integer nretap, nrsset
95 integer codre1, codre2, codre3, codre4, codre5
99 integer nuroul, lnomfl
101 integer nbnotn, nbartn, nbtrtn, nbqutn, nbtetn, nbpetn, nbhetn
102 integer pcoono, phetno, pareno, pderno
103 integer ppovos, pvoiso
104 integer pposif, pfacar
105 integer phetar, pfilar, pmerar, psomar
106 integer phettr, pfiltr, ppertr, pnivtr, paretr
107 integer phetqu, pfilqu, pperqu, pnivqu, parequ
108 integer phette, ptrite, pcotrt, pfilte, pperte
109 integer pquahe, pcoquh, phethe, pfilhe, pperhe
110 integer pfacpe, pcofap, phetpe, pfilpe, pperpe
115 integer pfamte, pcfate
116 integer pfampe, pcfape
117 integer pfamhe, pcfahe
118 integer advotr, advoqu
119 integer lgpptr, lgppqu, adpptr, adppqu
120 integer ptrav1, ptrav2, ptrav3, ptrav4
121 integer ptra30, ptra40, ptra31, ptra41
122 integer ptra51, ptra52, ptra53
123 integer ptraat, ptrant
124 integer ptraaa, ptrana
125 integer ptraan, ptrann
126 integer nbduno, nbduar, nbdutr
127 integer nbjois, nbpejs
128 integer nbjoit, nbpejt, nbtrjt
129 integer nbjoiq, nbhejq, nbqujq
130 integer nbjp06, nbte06
131 integer nbjp09, nbpe09
132 integer nbjp12, nbhe12
133 integer nbvojm, nbjoto
134 integer voarno, vofaar, vovoar, vovofa
135 integer ptra17, ptra18
136 integer ptraw1, ptraw2, ptraw6
137 integer nbgrfm, nbfmed, ngrouc
139 integer adpoin, adtail, adtabl
144 character*8 nhnoeu, nhmapo, nharet, nhtria, nhquad
145 character*8 nhtetr, nhhexa, nhpyra, nhpent
147 character*8 nhvois, nhsupe, nhsups
148 character*8 ntrav1, ntrav2, ntrav3, ntrav4
149 character*8 ntra30, ntra40, ntra31, ntra41
150 character*8 ntra51, ntra52, ntra53
151 character*8 ntraat, ntrant
152 character*8 ntraaa, ntrana
153 character*8 ntraan, ntrann
154 character*8 ntra17, ntra18
155 character*8 ntraw1, ntraw2, ntraw6
158 double precision shrink
161 parameter ( nbmess = 10 )
162 character*80 texte(nblang,nbmess)
164 c 0.5. ==> initialisations
165 c ______________________________________________________________________
171 c 1.1. ==> le debut des mesures de temps
176 c 1.3. ==> les messages
180 #ifdef _DEBUG_HOMARD_
181 write (ulsort,texte(langue,1)) 'Entree', nompro
185 texte(1,4) = '(/,a6,'' MAILLES DE JOINTS'')'
186 texte(1,5) = '(24(''=''),/)'
187 texte(1,7) = '(5x,''Nombre de '',a,'' a creer :'',i8)'
188 texte(1,8) = '(5x,''Nombre de '',a,'' a dupliquer :'',i8)'
190 texte(2,4) = '(/,a6,'' MESHES FOR THE JUNCTIONS'')'
191 texte(2,5) = '(31(''=''),/)'
192 texte(2,7) = '(5x,''Number of '',a,'' to create :'',i8)'
193 texte(2,8) = '(5x,''Number of '',a,'' to duplicate :'',i8)'
197 c 1.4. ==> le numero de sous-etape
200 nrsset = taetco(2) + 1
203 call utcvne ( nretap, nrsset, saux, iaux, codret )
207 write (ulsort,texte(langue,4)) saux
208 write (ulsort,texte(langue,5))
211 c 1.bis. fichier de sortie du bilan
213 #ifdef _DEBUG_HOMARD_
214 write (ulsort,*) '1.bis. fichier bilan codret = ', codret
217 if ( codret.eq.0 ) then
219 #ifdef _DEBUG_HOMARD_
220 write (ulsort,texte(langue,3)) 'UTULBI', nompro
225 call utulbi ( nuroul, nomflo, lnomfl,
226 > iaux, action, nbiter, jaux,
227 > ulsort, langue, codret )
232 c 2. conversion eventuelle en degre 1
234 #ifdef _DEBUG_HOMARD_
235 write (ulsort,*) '2. conversion en degre 1 ; codret = ', codret
238 if ( codret.eq.0 ) then
240 call gmliat ( nomail, 3, degre0 , codret )
244 if ( degre0.eq.2 ) then
247 if ( codret.eq.0 ) then
249 #ifdef _DEBUG_HOMARD_
250 write (ulsort,texte(langue,3)) 'mmdeg0', nompro
253 call mmdeg0 ( nomail,
254 > ulsort, langue, codret )
262 c 3. structure generale
264 #ifdef _DEBUG_HOMARD_
265 write (ulsort,*) '3. structure generale ; codret = ', codret
268 if ( codret.eq.0 ) then
270 #ifdef _DEBUG_HOMARD_
271 write (ulsort,texte(langue,3)) 'UTNOMH', nompro
274 call utnomh ( nomail,
276 > degre, maconf, homolo, hierar,
277 > rafdef, nbmane, typcca, typsfr, maextr,
280 > nhnoeu, nhmapo, nharet,
282 > nhtetr, nhhexa, nhpyra, nhpent,
284 > nhvois, nhsupe, nhsups,
285 > ulsort, langue, codret)
291 if ( codret.eq.0 ) then
294 #ifdef _DEBUG_HOMARD_
295 write (ulsort,texte(langue,3)) 'UTAD02_ar', nompro
297 call utad02 ( iaux, nharet,
298 > phetar, psomar, pfilar, pmerar,
299 > pfamar, jaux, jaux,
302 > ulsort, langue, codret )
305 #ifdef _DEBUG_HOMARD_
306 write (ulsort,texte(langue,3)) 'UTAD02_tr', nompro
308 call utad02 ( iaux, nhtria,
309 > phettr, paretr, pfiltr, ppertr,
310 > pfamtr, jaux, jaux,
311 > pnivtr, jaux, jaux,
313 > ulsort, langue, codret )
316 #ifdef _DEBUG_HOMARD_
317 write (ulsort,texte(langue,3)) 'UTAD02_te', nompro
319 call utad02 ( iaux, nhtetr,
320 > phette, ptrite, jaux, jaux,
321 > pfamte, pcfate, jaux,
322 > jaux, pcotrt, jaux,
324 > ulsort, langue, codret )
328 c 3.3. ==> les voisinages
330 if ( codret.eq.0 ) then
332 #ifdef _DEBUG_HOMARD_
333 write (ulsort,texte(langue,3)) 'UTAD04', nompro
336 call utad04 ( iaux, nhvois,
337 > jaux, jaux, pposif, pfacar,
339 > lgpptr, lgppqu, adpptr, adppqu,
344 > ulsort, langue, codret )
348 if ( codret.eq.0 ) then
351 #ifdef _DEBUG_HOMARD_
352 write (ulsort,texte(langue,3)) 'UTVGAN', nompro
354 call utvgan ( nhvois, nhnoeu, nharet,
357 > ulsort, langue, codret)
364 #ifdef _DEBUG_HOMARD_
365 write (ulsort,*) '4. Verification ; codret = ', codret
368 c 4.1. ==> Caracteristiques des groupes dans les familles MED
369 ccc call gmprsx (nompro,nhsupe//'.Tab5')
370 ccc call gmprsx (nompro,nhsupe//'.Tab6')
371 ccc call gmprsx (nompro,nhsupe//'.Tab9')
372 ccc call gmprsx (nompro,nhsups//'.Tab2')
374 if ( codret.eq.0 ) then
376 call gmliat ( nhsupe, 9, nbfmed, codre1 )
377 call gmadoj ( nhsupe//'.Tab9', adnumf, iaux, codre2 )
378 call gmadoj ( nhsupe//'.Tab5', adpoin, iaux, codre3 )
379 call gmadoj ( nhsupe//'.Tab6', adtail, iaux, codre4 )
380 call gmadoj ( nhsups//'.Tab2', adtabl, iaux, codre5 )
382 codre0 = min ( codre1, codre2, codre3, codre4, codre5 )
383 codret = max ( abs(codre0), codret,
384 > codre1, codre2, codre3, codre4, codre5 )
389 c 5. Verification du maillage
391 #ifdef _DEBUG_HOMARD_
392 write (ulsort,*) '5. Verification ; codret = ', codret
395 if ( codret.eq.0 ) then
397 #ifdef _DEBUG_HOMARD_
398 write (ulsort,texte(langue,3)) 'MMAGVE', nompro
400 call mmagve ( imem(pfamte), imem(pcfate),
401 > nbfmed, imem(adnumf),
402 > imem(adpoin), imem(adtail), smem(adtabl),
403 > ulsort, langue, codret )
408 c 6. Decompte des familles et des pentaedres a creer
410 #ifdef _DEBUG_HOMARD_
411 write (ulsort,*) '6. Decompte ; codret = ', codret
414 c 6.1. ==> allocation des tableaux
416 if ( codret.eq.0 ) then
419 call gmalot ( ntrav1, 'entier ', iaux, ptrav1, codre1 )
422 call gmalot ( ntrav2, 'entier ', iaux, ptrav2, codre2 )
424 codre0 = min ( codre1, codre2 )
425 codret = max ( abs(codre0), codret,
430 c 6.2. ==> Decompte associe aux joints simples
432 if ( codret.eq.0 ) then
435 #ifdef _DEBUG_HOMARD_
436 write (ulsort,texte(langue,3)) 'MMAGR0', nompro
438 call mmagr0 ( imem(advotr),
439 > imem(pfamte), imem(pcfate),
440 > imem(ptrav1), imem(ptrav2),
442 > ulsort, langue, codret )
447 if ( codret.eq.0 ) then
449 if ( nbjois.eq.0 ) then
457 if ( codret.eq.0 ) then
460 call gmmod ( ntrav1, ptrav1,
461 > iaux, iaux, nbtrto, nbpejs, codre0 )
463 codret = max ( abs(codre0), codret )
466 call gmalot ( ntra30, 'entier ', iaux, ptra30, codre1 )
468 call gmalot ( ntra40, 'entier ', iaux, ptra40, codre2 )
470 call gmalot ( ntra31, 'entier ', iaux, ptra31, codre3 )
472 call gmalot ( ntra41, 'entier ', iaux, ptra41, codre4 )
474 call gmalot ( ntrav3, 'entier ', iaux, ptrav3, codre5 )
476 codre0 = min ( codre1, codre2, codre3, codre4, codre5 )
477 codret = max ( abs(codre0), codret,
478 > codre1, codre2, codre3, codre4, codre5 )
479 cgn call gmprsx ( nompro//' apres MMAGR0, ntrav1 :', ntrav1 )
483 c 6.4. ==> Decompte des noeuds, aretes, quadrangles a creer/dupliquer
484 c et des familles deduites
486 if ( codret.eq.0 ) then
488 #ifdef _DEBUG_HOMARD_
489 write (ulsort,texte(langue,3)) 'MMAG10', nompro
491 call mmag10 ( imem(psomar),
493 > imem(ptrite), imem(pcotrt),
494 > nbjois, nbpejs, imem(ptrav1), imem(ptrav2),
495 > imem(ptra30), imem(ptra40),
496 > imem(ptra31), imem(ptra41),
497 > nbduno, nbduar, nbdutr,
498 > nbnotn, nbartn, nbtrtn, nbqutn,
499 > nbtetn, nbpetn, nbhetn,
500 > nbjoit, nbpejt, nbtrjt,
501 > nbjoiq, nbhejq, nbqujq,
507 > ntra51, ptra51, ntra52, ptra52,
509 > ulsort, langue, codret )
511 cgn call gmprsx(nompro//' apres MMAG10, ntra51 :',ntra51)
512 cgn call gmprsx(nompro//' apres MMAG10, ntra52 :',ntra52)
513 cgn call gmprsx(nompro//' apres MMAG10, ntra53 :',ntra53)
517 if ( codret.eq.0 ) then
519 nbjoto = nbjois + nbjoit + nbjoiq + nbjp06 + nbjp09 + nbjp12
521 #ifdef _DEBUG_HOMARD_
522 write (ulsort,texte(langue,8)) mess14(langue,3,-1), nbduno
523 write (ulsort,texte(langue,7)) mess14(langue,3,1), nbduno
524 write (ulsort,texte(langue,8)) mess14(langue,3,1), nbduar
525 write (ulsort,texte(langue,8)) mess14(langue,3,2), nbdutr
526 write (ulsort,texte(langue,7)) mess14(langue,3,2), nbtrjt
527 write (ulsort,texte(langue,7)) mess14(langue,3,4), nbqutn
528 write (ulsort,texte(langue,7)) mess14(langue,3,3), nbtetn
529 write (ulsort,texte(langue,7)) mess14(langue,3,7), nbpetn
530 write (ulsort,texte(langue,7)) mess14(langue,3,6), nbhetn
535 c 6.5. ==> On raccourcit en fonction de ce qui a ete compte
537 if ( codret.eq.0 ) then
541 call gmmod ( ntrav2, ptrav2,
542 > iaux, iaux, jaux, nbjoto, codre1 )
545 call gmmod ( ntra30, ptra30,
546 > iaux, iaux, jaux, nbduno, codre2 )
549 call gmmod ( ntra40, ptra40,
550 > iaux, iaux, jaux, nbduar, codre3 )
553 call gmmod ( ntra31, ptra31,
554 > iaux, iaux, jaux, nbtrjt, codre4 )
557 call gmmod ( ntra41, ptra41,
558 > iaux, iaux, jaux, nbvojm, codre5 )
560 codre0 = min ( codre1, codre2, codre3, codre4, codre5 )
561 codret = max ( abs(codre0), codret,
562 > codre1, codre2, codre3, codre4, codre5 )
563 cgn call gmprsx ( nompro, ntrav2 )
564 cgn call gmprsx ( nompro, ntrav2 )
565 cgn call gmprsx ( nompro, ntra31 )
566 cgn call gmprsx ( nompro, ntra41 )
570 if ( codret.eq.0 ) then
572 call gmlboj ( ntrav3 , codret )
577 c 7. Reallocation des tableaux du maillage
579 #ifdef _DEBUG_HOMARD_
580 write (ulsort,*) '7. Reallocation ; codret = ', codret
583 if ( codret.eq.0 ) then
587 #ifdef _DEBUG_HOMARD_
588 write (ulsort,texte(langue,3)) 'MMAGR2', nompro
590 call mmagr2 ( nbnotn, nbartn, nbtrtn, nbqutn,
591 > nbtetn, nbpetn, nbhetn,
592 > nhnoeu, nharet, nhtria, nhquad,
593 > nhtetr, nhpent, nhhexa,
594 > phetno, pcoono, pareno, pderno,
595 > phetar, psomar, pfilar, pmerar,
596 > phettr, paretr, pfiltr, ppertr, pnivtr,
597 > phetqu, parequ, pfilqu, pperqu, pnivqu,
598 > phette, ptrite, pfilte, pperte, pcotrt,
599 > phetpe, pfacpe, pfilpe, pperpe, pcofap,
600 > phethe, pquahe, pfilhe, pperhe, pcoquh,
601 > pfamno, pfamar, pfamtr, pfamqu,
602 > pfamte, pfampe, pfamhe,
603 > ulsort, langue, codret )
610 c 8. Creation des noeuds, aretes, triangles, quadrangles, pentaedres,
613 #ifdef _DEBUG_HOMARD_
614 write (ulsort,*) '8. Creation ; codret = ', codret
617 if ( codret.eq.0 ) then
619 #ifdef _DEBUG_HOMARD_
620 write (ulsort,texte(langue,3)) 'MMAG30', nompro
623 call mmag30 ( nbduno, nbduar, nbdutr,
625 > nbpejt, nbtrjt, nbhejq, nbqujq,
626 > nbte06, nbpe09, nbhe12,
628 > nbjoto, nbjois, nbjoit, nbjoiq,
629 > nbjp06, nbjp09, nbjp12,
630 > imem(ptrav1), imem(ptrav2),
631 > imem(ptra30), imem(ptra40),
633 > imem(ptra51), imem(ptra52), imem(ptra53),
634 > rmem(pcoono), imem(phetno), imem(pareno),
635 > imem(psomar), imem(phetar),
636 > imem(pfilar), imem(pmerar),
637 > imem(paretr), imem(phettr),
638 > imem(pfiltr), imem(ppertr), imem(pnivtr),
639 > imem(parequ), imem(phetqu),
640 > imem(pfilqu), imem(pperqu), imem(pnivqu),
641 > imem(ptrite), imem(pcotrt),
642 > imem(phette), imem(pfilte), imem(pperte),
643 > imem(pfacpe), imem(pcofap),
644 > imem(phetpe), imem(pfilpe), imem(pperpe),
645 > imem(pquahe), imem(pcoquh),
646 > imem(phethe), imem(pfilhe), imem(pperhe),
647 > imem(pfamno), imem(pfamar),
648 > imem(pfamtr), imem(pfamqu),
649 > imem(pfamte), imem(pfampe), imem(pfamhe),
650 > ulsort, langue, codret )
651 cgn call gmprsx(nompro//' apres MMAG30, ntra52 :',ntra52)
652 cgn write (ulsort,*) mess14(langue,2,-1)
653 cgn call gmprsx(nompro,nhnoeu)
654 cgn call gmprsx(nompro,nhnoeu//'.Coor')
655 cgn call gmprsx(nompro,nhnoeu//'.AretSupp')
656 cgn call gmprsx(nompro,nhnoeu//'.Famille.EntiFamm')
657 cgn write (ulsort,*) mess14(langue,2,1)
658 cgn call gmprsx(nompro,nharet)
659 cgn call gmprsx(nompro,nharet//'.ConnDesc')
660 cgn call gmprsx(nompro,nharet//'.Famille.EntiFamm')
661 cgn write (ulsort,*) mess14(langue,2,2)
662 cgn call gmprsx(nompro,nhtria)
663 cgn call gmprsx(nompro,nhtria//'.ConnDesc')
664 cgn call gmprsx(nompro,nhtria//'.HistEtat')
665 cgn call gmprsx(nompro,nhtria//'.Niveau')
666 cgn call gmprsx(nompro,nhtria//'.Fille')
667 cgn call gmprsx(nompro,nhtria//'.Mere')
668 cgn call gmprsx(nompro,nhtria//'.Famille.EntiFamm')
669 cgn write (ulsort,*) mess14(langue,2,4)
670 cgn call gmprsx(nompro,nhquad)
671 cgn call gmprsx(nompro,nhquad//'.ConnDesc')
672 cgn call gmprsx(nompro,nhquad//'.HistEtat')
673 cgn call gmprsx(nompro,nhquad//'.Niveau')
674 cgn call gmprsx(nompro,nhquad//'.Fille')
675 cgn call gmprsx(nompro,nhquad//'.Mere')
676 cgn call gmprsx(nompro,nhquad//'.Famille')
677 cgn call gmprsx(nompro,nhquad//'.Famille.EntiFamm')
678 cgn write (ulsort,*) mess14(langue,2,3)
679 cgn call gmprsx(nompro,nhtetr)
680 cgn call gmprsx(nompro,nhtetr//'.ConnDesc')
681 cgn call gmprsx(nompro,nhtetr//'.HistEtat')
682 cgn call gmprsx(nompro,nhtetr//'.InfoSupp')
683 cgn call gmprsx(nompro,nhtetr//'.Fille')
684 cgn call gmprsx(nompro,nhtetr//'.Mere')
685 cgn call gmprsx(nompro,nhtetr//'.Famille')
686 cgn call gmprsx(nompro,nhtetr//'.Famille.EntiFamm')
687 cgn write (ulsort,*) mess14(langue,2,6)
688 cgn call gmprsx(nompro,nhhexa)
689 cgn call gmprsx(nompro,nhhexa//'.ConnDesc')
690 cgn call gmprsx(nompro,nhhexa//'.HistEtat')
691 cgn call gmprsx(nompro,nhhexa//'.InfoSupp')
692 cgn call gmprsx(nompro,nhhexa//'.Fille')
693 cgn call gmprsx(nompro,nhhexa//'.Mere')
694 cgn call gmprsx(nompro,nhhexa//'.Famille')
695 cgn call gmprsx(nompro,nhhexa//'.Famille.EntiFamm')
696 cgn write (ulsort,*) mess14(langue,2,7)
697 cgn call gmprsx(nompro,nhpent)
698 cgn call gmprsx(nompro,nhpent//'.ConnDesc')
699 cgn call gmprsx(nompro,nhpent//'.HistEtat')
700 cgn call gmprsx(nompro,nhpent//'.InfoSupp')
701 cgn call gmprsx(nompro,nhpent//'.Fille')
702 cgn call gmprsx(nompro,nhpent//'.Mere')
703 cgn call gmprsx(nompro,nhpent//'.Famille')
704 cgn call gmprsx(nompro,nhpent//'.Famille.EntiFamm')
709 c 9. Modification eventuelle des coordonnees
711 c 1 : mod_joint_qt_d1
712 c 2 : mod_joint_qua2_d1
713 c 3 : mod_joint_qua_d1
714 c 4 : mod_joint_tri_d1
715 c 5 : mod_joint_tri_d2
718 #ifdef _DEBUG_HOMARD_
719 write (ulsort,*) '9. Modif coordonnees ; codret = ', codret
722 if ( codret.eq.0 ) then
727 #ifdef _DEBUG_HOMARD_
728 write (ulsort,texte(langue,3)) 'MMAGCO', nompro
730 call mmagco ( iaux, shrink,
733 > nbduno, imem(ptra30),
734 > ulsort, langue, codret )
739 c 10. Creation des familles
741 #ifdef _DEBUG_HOMARD_
742 write (ulsort,*) '10. Creation familles ; codret = ', codret
745 c 10.1. ==> Les utilitaires
747 if ( codret.eq.0 ) then
749 call gmalot ( ntraw1, 'entier ', nbjoto, ptraw1, codre1 )
750 call gmalot ( ntraw2, 'entier ', nbjoto, ptraw2, codre2 )
751 call gmalot ( ntraw6, 'reel ', nbjoto, ptraw6, codre3 )
753 codre0 = min ( codre1, codre2, codre3 )
754 codret = max ( abs(codre0), codret,
755 > codre1, codre2, codre3 )
759 c 10.2. ==> Creation effective
761 if ( codret.eq.0 ) then
763 #ifdef _DEBUG_HOMARD_
764 write (ulsort,texte(langue,3)) 'MMAGF0', nompro
766 call mmagf0 ( nbjoto, nbjois, nbjoit, nbjoiq,
767 > nbjp06, nbjp09, nbjp12,
768 > nhnoeu, nhmapo, nharet, nhtria, nhquad,
769 > nhtetr, nhhexa, nhpyra, nhpent,
771 > ulsort, langue, codret )
772 cgn write (ulsort,*) mess14(langue,2,2)
773 cgn call gmprsx(nompro,nhtria//'.Famille.Codes')
774 cgn write (ulsort,*) mess14(langue,2,4)
775 cgn call gmprsx(nompro,nhquad//'.Famille.Codes')
776 cgn write (ulsort,*) mess14(langue,2,3)
777 cgn call gmprsx(nompro,nhtetr//'.Famille.Codes')
778 cgn write (ulsort,*) mess14(langue,2,6)
779 cgn call gmprsx(nompro,nhhexa//'.Famille.Codes')
780 cgn write (ulsort,*) mess14(langue,2,7)
781 cgn call gmprsx(nompro,nhpent//'.Famille.Codes')
785 c 10.3. ==> Reactualisation
787 if ( codret.eq.0 ) then
790 #ifdef _DEBUG_HOMARD_
791 write (ulsort,texte(langue,3)) 'UTAD02_te', nompro
793 call utad02 ( iaux, nhtetr,
794 > jaux, jaux, jaux, jaux,
795 > pfamte, pcfate, jaux,
798 > ulsort, langue, codret )
803 c 11. Reperage des grains
805 #ifdef _DEBUG_HOMARD_
806 write (ulsort,*) '11. Reperage des grains ; codret = ', codret
808 c 11.1. ==> Les utilitaires
810 if ( codret.eq.0 ) then
812 call gmalot ( ntrav3, 'entier ', nbarto, ptrav3, codre1 )
813 call gmalot ( ntrav4, 'entier ', nbtrto, ptrav4, codre2 )
815 codre0 = min ( codre1, codre2 )
816 codret = max ( abs(codre0), codret,
821 c 11.2. ==> Reperage des grains
822 #ifdef _DEBUG_HOMARD_
823 write (ulsort,*) '11.2. Grains ; codret = ', codret
826 if ( codret.eq.0 ) then
830 #ifdef _DEBUG_HOMARD_
831 write (ulsort,texte(langue,3)) 'MMAGR4', nompro
834 call mmagr4 ( nbte06, imem(ptrav3), imem(ptrav4),
836 > imem(ptrite), imem(pcotrt),
837 > imem(pfamte), imem(pcfate),
838 > ulsort, langue, codret )
841 cgn call gmprsx ( nompro, ntrav3 )
842 cgn call gmprsx ( nompro, ntrav4 )
848 c 11.3. ==> Repercussion dans les connectivites
849 #ifdef _DEBUG_HOMARD_
850 write (ulsort,*) '11.3. Repercussion ; codret = ', codret
853 if ( codret.eq.0 ) then
857 #ifdef _DEBUG_HOMARD_
858 write (ulsort,texte(langue,3)) 'MMAGR5', nompro
860 call mmagr5 ( nbduno, nbduar, nbdutr, nbtrjt,
862 > imem(ptrav1), imem(ptrav2),
863 > imem(ptra30), imem(ptra40),
864 > imem(ptrav3), imem(ptrav4),
867 > imem(ptrite), imem(pfamte), imem(pcfate),
868 > imem(ppovos), imem(pvoiso),
869 > imem(pposif), imem(pfacar),
871 > ulsort, langue, codret )
875 cgn write (ulsort,*) mess14(langue,2,-1)
876 cgn call gmprsx(nompro,nhnoeu)
877 cgn call gmprsx(nompro,nhnoeu//'.Coor')
878 cgn call gmprsx(nompro,nhnoeu//'.HistEtat')
879 cgn call gmprsx(nompro,nhnoeu//'.AretSupp')
880 cgn call gmprsx(nompro,nhnoeu//'.Famille.EntiFamm')
881 cgn write (ulsort,*) mess14(langue,2,1)
882 cgn call gmprsx(nompro,nharet)
883 cgn call gmprsx(nompro,nharet//'.ConnDesc')
884 cgn call gmprsx(nompro,nharet//'.Fille')
885 cgn call gmprsx(nompro,nharet//'.Mere')
886 cgn call gmprsx(nompro,nharet//'.Famille.EntiFamm')
887 cgn write (ulsort,*) mess14(langue,2,2)
888 cgn call gmprsx(nompro,nhtria)
889 cgn call gmprsx(nompro,nhtria//'.ConnDesc')
890 cgn call gmprsx(nompro,nhtria//'.HistEtat')
891 cgn call gmprsx(nompro,nhtria//'.Niveau')
892 cgn call gmprsx(nompro,nhtria//'.Fille')
893 cgn call gmprsx(nompro,nhtria//'.Mere')
894 cgn call gmprsx(nompro,nhtria//'.Famille.EntiFamm')
895 cgn write (ulsort,*) mess14(langue,2,4)
896 cgn call gmprsx(nompro,nhquad)
897 cgn call gmprsx(nompro,nhquad//'.ConnDesc')
898 cgn call gmprsx(nompro,nhquad//'.HistEtat')
899 cgn call gmprsx(nompro,nhquad//'.Niveau')
900 cgn call gmprsx(nompro,nhquad//'.Fille')
901 cgn call gmprsx(nompro,nhquad//'.Mere')
902 cgn call gmprsx(nompro,nhquad//'.Famille')
903 cgn call gmprsx(nompro,nhquad//'.Famille.EntiFamm')
904 cgn write (ulsort,*) mess14(langue,2,3)
905 cgn call gmprsx(nompro,nhtetr)
906 cgn call gmprsx(nompro,nhtetr//'.ConnDesc')
907 cgn call gmprsx(nompro,nhtetr//'.HistEtat')
908 cgn call gmprsx(nompro,nhtetr//'.InfoSupp')
909 cgn call gmprsx(nompro,nhtetr//'.Fille')
910 cgn call gmprsx(nompro,nhtetr//'.Mere')
911 cgn call gmprsx(nompro,nhtetr//'.Famille')
912 cgn call gmprsx(nompro,nhtetr//'.Famille.EntiFamm')
913 cgn write (ulsort,*) mess14(langue,2,7)
914 cgn call gmprsx(nompro,nhpent)
915 cgn call gmprsx(nompro,nhpent//'.ConnDesc')
916 cgn call gmprsx(nompro,nhpent//'.HistEtat')
917 cgn call gmprsx(nompro,nhpent//'.InfoSupp')
918 cgn call gmprsx(nompro,nhpent//'.Fille')
919 cgn call gmprsx(nompro,nhpent//'.Mere')
920 cgn call gmprsx(nompro,nhpent//'.Famille')
921 cgn call gmprsx(nompro,nhpent//'.Famille.EntiFamm')
925 c 12. Taille des joints
927 #ifdef _DEBUG_HOMARD_
928 write (ulsort,*) '12. Taille des joints ; codret = ', codret
930 c 12.1. ==> Les donnees
932 if ( codret.eq.0 ) then
935 #ifdef _DEBUG_HOMARD_
936 write (ulsort,texte(langue,3)) 'UTAD02_te', nompro
938 call utad02 ( iaux, nhtetr,
939 > jaux, jaux, jaux, jaux,
940 > pfamte, pcfate, jaux,
943 > ulsort, langue, codret )
947 if ( codret.eq.0 ) then
950 #ifdef _DEBUG_HOMARD_
951 write (ulsort,texte(langue,3)) 'UTAD02_pe', nompro
953 call utad02 ( iaux, nhpent,
954 > jaux, jaux, jaux, jaux,
955 > pfampe, pcfape, jaux,
958 > ulsort, langue, codret )
962 if ( codret.eq.0 ) then
965 #ifdef _DEBUG_HOMARD_
966 write (ulsort,texte(langue,3)) 'UTAD02_he', nompro
968 call utad02 ( iaux, nhhexa,
969 > jaux, jaux, jaux, jaux,
970 > pfamhe, pcfahe, jaux,
973 > ulsort, langue, codret )
977 if ( codret.eq.0 ) then
979 call gmliat ( nhsupe, 6, iaux, codre1 )
980 call gmliat ( nhsupe, 9, nbfmed, codre2 )
981 call gmadoj ( nhsupe//'.Tab9', adnumf, iaux, codre3 )
982 call gmadoj ( nhsupe//'.Tab5', adpoin, iaux, codre4 )
983 call gmadoj ( nhsupe//'.Tab6', adtail, iaux, codre5 )
984 call gmadoj ( nhsups//'.Tab2', adtabl, iaux, codre6 )
986 codre0 = min ( codre1, codre2, codre3, codre4, codre5,
988 codret = max ( abs(codre0), codret,
989 > codre1, codre2, codre3, codre4, codre5,
996 if ( codret.eq.0 ) then
999 call gmalot ( ntra17, 'chaine ', iaux, ptra17, codre1 )
1000 iaux = ngrouc + nbfmed
1001 call gmalot ( ntra18, 'entier ', iaux, ptra18, codre2 )
1003 codre0 = min ( codre1, codre2 )
1004 codret = max ( abs(codre0), codret,
1009 c 12.2. ==> Liste des noms des groupes
1011 if ( codret.eq.0 ) then
1013 #ifdef _DEBUG_HOMARD_
1014 write (ulsort,texte(langue,3)) 'UTFMLG', nompro
1016 call utfmlg ( nbfmed, ngrouc,
1017 > imem(adpoin), imem(adtail), smem(adtabl),
1018 > nbgrfm, smem(ptra17), imem(ptra18),
1019 > ulsort, langue, codret )
1021 #ifdef _DEBUG_HOMARD_
1022 write(ulsort,90002) 'nbgrfm', nbgrfm
1023 call gmprsx ( nompro, ntra17 )
1024 call gmprsx ( nompro, ntra18 )
1029 c 12.3. ==> Affichage
1031 if ( codret.eq.0 ) then
1033 #ifdef _DEBUG_HOMARD_
1034 write (ulsort,texte(langue,3)) 'MMAG40', nompro
1037 call mmag40 ( nbpejs, nbpejt, nbhejq,
1039 > nbjois, nbjoit, nbjoiq,
1040 > imem(ptrav1), imem(ptra41),
1041 > rmem(pcoono), imem(psomar), imem(paretr),
1042 > imem(pfamhe), imem(pcfahe),
1043 > imem(pfampe), imem(pcfape),
1044 > nbfmed, imem(adnumf),
1045 > imem(adpoin), imem(adtail), smem(adtabl),
1046 > nbgrfm, smem(ptra17), imem(ptra18),
1047 > imem(ptraw1), rmem(ptraw6),
1050 > ulsort, langue, codret )
1055 c 13. Suppression des entites dupliquees
1057 c 13.1. ==> Tableaux de travail
1058 #ifdef _DEBUG_HOMARD_
1059 write (ulsort,*) '13.1. Tab de travail ; codret = ', codret
1063 if ( codret.eq.0 ) then
1064 call gmlboj ( ntrav2 , codret )
1067 if ( codret.eq.0 ) then
1068 call gmalot ( ntrav2, 'entier ', nbnoto, ptrav2, codret )
1071 if ( codret.eq.0 ) then
1073 call gmalot ( ntraat, 'entier ', nbtrto, ptraat, codre1 )
1075 call gmalot ( ntrant, 'entier ', iaux, ptrant, codre2 )
1076 call gmalot ( ntraaa, 'entier ', nbarto, ptraaa, codre3 )
1078 call gmalot ( ntrana, 'entier ', iaux, ptrana, codre4 )
1079 call gmalot ( ntraan, 'entier ', nbnoto, ptraan, codre5 )
1081 call gmalot ( ntrann, 'entier ', iaux, ptrann, codre6 )
1083 codre0 = min ( codre1, codre2, codre3, codre4, codre5,
1085 codret = max ( abs(codre0), codret,
1086 > codre1, codre2, codre3, codre4, codre5,
1091 c 13.2. ==> Nettoyage de la structure des voisins
1092 #ifdef _DEBUG_HOMARD_
1093 write (ulsort,*) '13.2. Voisins ; codret = ', codret
1096 if ( codret.eq.0 ) then
1097 call gmlboj ( nhvois, codret )
1099 if ( codret.eq.0 ) then
1100 call gmaloj ( nomail//'.Voisins' , ' ', 0, iaux, codret )
1102 if ( codret.eq.0 ) then
1103 call gmnomc ( nomail//'.Voisins' , nhvois, codret )
1106 c 13.3. ==> Suppression effective
1107 #ifdef _DEBUG_HOMARD_
1108 write (ulsort,*) '13.3. suppression ; codret = ', codret
1111 if ( codret.eq.0 ) then
1113 #ifdef _DEBUG_HOMARD_
1114 write (ulsort,texte(langue,3)) 'MMAGR6', nompro
1116 call mmagr6 ( nbduno, nbduar, nbdutr,
1117 > imem(ptrav1), imem(ptra30), imem(ptra40),
1118 > imem(ptrav2), imem(ptrav3), imem(ptrav4),
1119 > rmem(pcoono), imem(pfamno),
1120 > imem(psomar), imem(pfamar),
1121 > imem(paretr), imem(pfamtr),
1123 > imem(ptrite), imem(pfacpe),
1124 > imem(ptraat), imem(ptrant),
1125 > imem(ptraaa), imem(ptrana),
1126 > imem(ptraan), imem(ptrann),
1127 > nbtrtn, nbartn, nbnotn,
1128 > ulsort, langue, codret )
1134 c 14. Reallocation des tableaux du maillage
1136 #ifdef _DEBUG_HOMARD_
1137 write (ulsort,*) '14. Reallocation ; codret = ', codret
1141 c 14.1. ==> Reallocation
1142 #ifdef _DEBUG_HOMARD_
1143 write (ulsort,texte(langue,3)) 'MMAGR2', nompro
1146 if ( codret.eq.0 ) then
1150 call mmagr2 ( nbnotn, nbartn, nbtrtn, nbqutn,
1151 > nbtetn, nbpetn, nbhetn,
1152 > nhnoeu, nharet, nhtria, nhquad,
1153 > nhtetr, nhpent, nhhexa,
1154 > phetno, pcoono, pareno, pderno,
1155 > phetar, psomar, pfilar, pmerar,
1156 > phettr, paretr, pfiltr, ppertr, pnivtr,
1157 > phetqu, parequ, pfilqu, pperqu, pnivqu,
1158 > phette, ptrite, pfilte, pperte, pcotrt,
1159 > phetpe, pfacpe, pfilpe, pperpe, pcofap,
1160 > phethe, pquahe, pfilhe, pperhe, pcoquh,
1161 > pfamno, pfamar, pfamtr, pfamqu,
1162 > pfamte, pfampe, pfamhe,
1163 > ulsort, langue, codret )
1167 c 14.2. ==> Mise a jour
1168 #ifdef _DEBUG_HOMARD_
1169 write (ulsort,*) '14.2. Mise a jour ; codret = ', codret
1172 if ( codret.eq.0 ) then
1198 cgn write (ulsort,*) mess14(langue,2,-1)
1199 cgn call gmprsx(nompro,nhnoeu)
1200 cgn call gmprsx(nompro,nhnoeu//'.Coor')
1201 cgn call gmprsx(nompro,nhnoeu//'.HistEtat')
1202 cgn call gmprsx(nompro,nhnoeu//'.AretSupp')
1203 cgn call gmprsx(nompro,nhnoeu//'.Famille.EntiFamm')
1204 cgn write (ulsort,*) mess14(langue,2,1)
1205 cgn call gmprsx(nompro,nharet)
1206 cgn call gmprsx(nompro,nharet//'.ConnDesc')
1207 cgn call gmprsx(nompro,nharet//'.Fille')
1208 cgn call gmprsx(nompro,nharet//'.Mere')
1209 cgn call gmprsx(nompro,nharet//'.Famille.EntiFamm')
1210 cgn write (ulsort,*) mess14(langue,2,2)
1211 cgn call gmprsx(nompro,nhtria)
1212 cgn call gmprsx(nompro,nhtria//'.ConnDesc')
1213 cgn call gmprsx(nompro,nhtria//'.HistEtat')
1214 cgn call gmprsx(nompro,nhtria//'.Niveau')
1215 cgn call gmprsx(nompro,nhtria//'.Fille')
1216 cgn call gmprsx(nompro,nhtria//'.Mere')
1217 cgn call gmprsx(nompro,nhtria//'.Famille.EntiFamm')
1218 cgn write (ulsort,*) mess14(langue,2,4)
1219 cgn call gmprsx(nompro,nhquad)
1220 cgn call gmprsx(nompro,nhquad//'.ConnDesc')
1221 cgn call gmprsx(nompro,nhquad//'.HistEtat')
1222 cgn call gmprsx(nompro,nhquad//'.Niveau')
1223 cgn call gmprsx(nompro,nhquad//'.Fille')
1224 cgn call gmprsx(nompro,nhquad//'.Mere')
1225 cgn call gmprsx(nompro,nhquad//'.Famille')
1226 cgn call gmprsx(nompro,nhquad//'.Famille.EntiFamm')
1227 cgn write (ulsort,*) mess14(langue,2,3)
1228 cgn call gmprsx(nompro,nhtetr)
1229 cgn call gmprsx(nompro,nhtetr//'.ConnDesc')
1230 cgn call gmprsx(nompro,nhtetr//'.HistEtat')
1231 cgn call gmprsx(nompro,nhtetr//'.InfoSupp')
1232 cgn call gmprsx(nompro,nhtetr//'.Fille')
1233 cgn call gmprsx(nompro,nhtetr//'.Mere')
1234 cgn call gmprsx(nompro,nhtetr//'.Famille')
1235 cgn call gmprsx(nompro,nhtetr//'.Famille.EntiFamm')
1236 cgn write (ulsort,*) mess14(langue,2,7)
1237 cgn call gmprsx(nompro,nhpent)
1238 cgn call gmprsx(nompro,nhpent//'.ConnDesc')
1239 cgn call gmprsx(nompro,nhpent//'.HistEtat')
1240 cgn call gmprsx(nompro,nhpent//'.InfoSupp')
1241 cgn call gmprsx(nompro,nhpent//'.Fille')
1242 cgn call gmprsx(nompro,nhpent//'.Mere')
1243 cgn call gmprsx(nompro,nhpent//'.Famille')
1244 cgn call gmprsx(nompro,nhpent//'.Famille.EntiFamm')
1247 c 15. Conversion eventuelle en degre 2
1249 #ifdef _DEBUG_HOMARD_
1250 write (ulsort,*) '15. Conversion degre 2 ; codret = ', codret
1253 if ( degre0.eq.2 ) then
1257 if ( codret.eq.0 ) then
1259 #ifdef _DEBUG_HOMARD_
1260 write (ulsort,texte(langue,3)) 'MMDEG0', nompro
1263 call mmdeg0 ( nomail,
1264 > ulsort, langue, codret )
1268 if ( codret.eq.0 ) then
1270 #ifdef _DEBUG_HOMARD_
1271 write (ulsort,texte(langue,3)) 'UTNOMH', nompro
1274 call utnomh ( nomail,
1276 > degre, maconf, homolo, hierar,
1277 > rafdef, nbmane, typcca, typsfr, maextr,
1280 > nhnoeu, nhmapo, nharet,
1282 > nhtetr, nhhexa, nhpyra, nhpent,
1284 > nhvois, nhsupe, nhsups,
1285 > ulsort, langue, codret)
1294 c 16. mise a jour des grandeurs caracteristiques
1296 #ifdef _DEBUG_HOMARD_
1297 write (ulsort,*) '16. mise a jour ; codret = ', codret
1300 c 16.1. ==> nbmane : nombre maximal de noeuds par element
1302 if ( codret.eq.0 ) then
1304 if ( degre.eq.1 ) then
1305 if ( nbjoiq.eq.0 ) then
1311 if ( nbjoiq.eq.0 ) then
1319 call gmecat ( nomail, 8, nbmane , codret )
1323 c 16.2. ==> determination des voisinages
1324 #ifdef _DEBUG_HOMARD_
1325 write (ulsort,*) '15.2. ; codret = ', codret
1328 if ( codret.eq.0 ) then
1335 #ifdef _DEBUG_HOMARD_
1336 write (ulsort,texte(langue,3)) 'UTVOIS', nompro
1338 call utvois ( nomail, nhvois,
1339 > voarno, vofaar, vovoar, vovofa,
1341 > nbfaar, pposif, pfacar,
1342 > ulsort, langue, codret )
1345 cgn call gmprsx (nompro, nhvois )
1346 cgn call gmprsx (nompro, nhvois//'.0D/1D' )
1347 cgn call gmprsx (nompro, nhvois//'.0D/1D.Pointeur' )
1348 cgn call gmprsx (nompro, nhvois//'.0D/1D.Table' )
1349 cgn call gmprsx (nompro, nhvois//'.1D/2D' )
1350 cgn call gmprsx (nompro, nhvois//'.Vol/Tri' )
1351 cgn call gmprsx (nompro, nhvois//'.Vol/Qua' )
1352 cgn call gmprsx (nompro, nhvois//'.PyPe/Tri' )
1353 cgn call gmprsx (nompro, nhvois//'.PyPe/Qua' )
1358 #ifdef _DEBUG_HOMARD_
1359 write (ulsort,*) '17. Menage ; codret = ', codret
1362 if ( codret.eq.0 ) then
1364 call gmlboj ( ntrav1 , codre1 )
1365 call gmlboj ( ntrav2 , codre2 )
1366 call gmlboj ( ntrav3 , codre3 )
1367 call gmlboj ( ntrav4 , codre4 )
1369 codre0 = min ( codre1, codre2, codre3, codre4 )
1370 codret = max ( abs(codre0), codret,
1371 > codre1, codre2, codre3, codre4 )
1373 call gmlboj ( ntraw1 , codre1 )
1374 call gmlboj ( ntraw2 , codre2 )
1375 call gmlboj ( ntraw6 , codre3 )
1377 codre0 = min ( codre1, codre2, codre3 )
1378 codret = max ( abs(codre0), codret,
1379 > codre1, codre2, codre3 )
1380 cgn print *,codre1, codre2, codre3
1382 call gmlboj ( ntra30 , codre1 )
1383 call gmlboj ( ntra40 , codre2 )
1384 call gmlboj ( ntra31 , codre3 )
1385 call gmlboj ( ntra41 , codre4 )
1387 codre0 = min ( codre1, codre2, codre3, codre4 )
1388 codret = max ( abs(codre0), codret,
1389 > codre1, codre2, codre3, codre4 )
1390 cgn print *,codre1, codre2, codre3, codre4
1392 call gmlboj ( ntra51 , codre1 )
1393 call gmlboj ( ntra52 , codre2 )
1394 call gmlboj ( ntra53 , codre3 )
1396 codre0 = min ( codre1, codre2, codre3 )
1397 codret = max ( abs(codre0), codret,
1398 > codre1, codre2, codre3 )
1399 cgn print *,codre1, codre2
1401 call gmlboj ( ntraat , codre1 )
1402 call gmlboj ( ntrant , codre2 )
1403 call gmlboj ( ntraaa , codre3 )
1404 call gmlboj ( ntrana , codre4 )
1405 call gmlboj ( ntraan , codre5 )
1406 call gmlboj ( ntrann , codre6 )
1407 cgn print *,codre1, codre2, codre3, codre4, codre5,
1410 codre0 = min ( codre1, codre2, codre3, codre4, codre5,
1412 codret = max ( abs(codre0), codret,
1413 > codre1, codre2, codre3, codre4, codre5,
1416 call gmlboj ( ntra17, codre1 )
1417 call gmlboj ( ntra18, codre2 )
1419 codre0 = min ( codre1, codre2 )
1420 codret = max ( abs(codre0), codret,
1433 if ( codret.ne.0 ) then
1437 write (ulsort,texte(langue,1)) 'Sortie', nompro
1438 write (ulsort,texte(langue,2)) codret
1442 c 18.2. ==> fin des mesures de temps de la section
1444 call gtfims (nrosec)
1446 #ifdef _DEBUG_HOMARD_
1447 write (ulsort,texte(langue,1)) 'Sortie', nompro