1 subroutine pcmaco ( modhom,
2 > nocmap, nomail, nomamd, lnomam,
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 aPres adaptation - Conversion de MAillage - COnnectivite
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 . nocmap . s . char8 . nom de l'objet maillage de calcul iter. n+1.
37 c . nomail . e . char8 . nom de l'objet maillage homard iter. n+1 .
38 c . nomamd . e . char64 . nom med du maillage iteration n+1 .
39 c . lnomam . e . 1 . longueur de nomamd .
40 c . nospec . s . char8 . nom de l'objet memorisant les specificites .
41 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
42 c . langue . e . 1 . langue des messages .
43 c . . . . 1 : francais, 2 : anglais .
44 c . codret . es . 1 . code de retour des modules .
45 c . . . . 0 : pas de probleme .
46 c . . . . 1 : probleme .
47 c ______________________________________________________________________
50 c 0. declarations et dimensionnement
53 c 0.1. ==> generalites
59 parameter ( nompro = 'PCMACO' )
95 character*8 nocmap, nomail
99 integer ulsort, langue, codret
101 c 0.4. ==> variables locales
103 integer pcoono, adcocs, phetno, pancno
104 integer pnoemp, phetmp
105 integer psomar, phetar, pfilar, pmerar, pnp2ar
106 integer paretr, phettr, ppertr, pfiltr, pnivtr, adnmtr
107 integer parequ, phetqu, pperqu, pfilqu, pnivqu, adnmqu
108 integer ptrite, pcotrt, parete, phette
109 integer pquahe, pcoquh, parehe, phethe, adnmhe
110 integer advotr, adpptr
111 integer advoqu, adppqu
112 integer pfacpy, pcofay, parepy, phetpy
113 integer pfacpe, pcofap, parepe, phetpe
114 integer ppovos, pvoiso
115 integer pposif, pfacar
116 integer pfamno, pcfano
117 integer pfammp, pcfamp
118 integer pfamar, pcfaar
119 integer pfamtr, pcfatr
120 integer pfamqu, pcfaqu
121 integer pfamte, pcfate
122 integer pfamhe, pcfahe
123 integer pfampy, pcfapy
124 integer pfampe, pcfape
125 integer hfmdel, hnoeel
129 integer adnocp, adnohp
130 integer admpcp, admphp
131 integer adarcp, adarhp
132 integer adtrcp, adtrhp
133 integer adtecp, adtehp
134 integer adqucp, adquhp
135 integer adhecp, adhehp
136 integer adpycp, adpyhp
137 integer adpecp, adpehp
140 integer pfamen, pfamee, pnoeel, ptypel, pcoonc
141 integer pinfpt, pinftb
142 integer nparrc, nptrrc, npqurc
143 integer npterc, npherc, npperc, nppyrc
144 integer adarrc, adtrrc, adqurc
145 integer adterc, adherc, adperc, adpyrc
146 integer lgtrc1, lgtrc2, lgtrc3
147 integer lgtrc4, lgtrc5, lgtrc6, lgtrc7
149 integer nbanci, nbenrc, numead
150 integer adarra, adarrb
154 integer iaux, jaux, kaux, laux
155 integer codre1, codre2, codre3, codre4
162 character*8 nhnoeu, nhmapo, nharet, nhtria, nhquad
163 character*8 nhtetr, nhhexa, nhpyra, nhpent
165 character*8 nhvois, nhsupe, nhsups
167 character*8 ncinfo, ncnoeu, nccono, nccode
168 character*8 nccoex, ncfami
169 character*8 ncequi, ncfron, ncnomb
170 character*8 ntrav1, ntrav2, ntrav3, ntrav4
182 parameter ( nbmess = 30 )
183 character*80 texte(nblang,nbmess)
185 cmdc ---------------- MAILLES DOUBLES DEBUT --------------
186 cmd character*80 nomfic
187 cmd integer nbele1, nbtenw
189 cmd integer adpoin, adtail, adtabl
192 cmd character*8 ntrav5
193 cmdc ---------------- MAILLES DOUBLES FIN ----------------
195 c 0.5. ==> initialisations
196 c ______________________________________________________________________
204 #ifdef _DEBUG_HOMARD_
205 write (ulsort,texte(langue,1)) 'Entree', nompro
209 texte(1,7) = '(5x,''Conversion HOMARD ----> '',a18,/)'
211 > '(5x,''Caracteristiques du maillage apres conversion :'',/)'
213 texte(2,7) = '(5x,''Conversion HOMARD ----> '',a18,/)'
215 > '(5x,''Characteristics of the mesh after conversion :'',/)'
224 c 2. recuperation des pointeurs
227 #ifdef _DEBUG_HOMARD_
228 write (ulsort,90002) '2. recuperation donnees ; codret', codret
231 c 2.1. ==> on alloue la future renumerotation
232 c remarque : on la supprime si elle existait ; cela arrive
233 c dans les cas de modifications de maillage
235 if ( codret.eq.0 ) then
237 call gmobal ( nomail//'.RenuMail', codre0 )
239 if ( codre0.eq.1 ) then
240 call gmlboj ( nomail//'.RenuMail', codret )
241 elseif ( codre0.ne.0 ) then
247 if ( codret.eq.0 ) then
249 call gmaloj ( nomail//'.RenuMail', ' ', 0, iaux, codret )
253 c 2.2. ==> structure generale
255 #ifdef _DEBUG_HOMARD_
256 write (ulsort,90002) '2.2. ==> structure gale ; codret', codret
260 if ( codret.eq.0 ) then
262 #ifdef _DEBUG_HOMARD_
263 call gmprsx (nompro,nomail)
264 write (ulsort,texte(langue,3)) 'UTNOMH', nompro
266 call utnomh ( nomail,
268 > degre, maconf, homolo, hierar,
269 > rafdef, nbmane, typcca, typsfr, maextr,
272 > nhnoeu, nhmapo, nharet,
274 > nhtetr, nhhexa, nhpyra, nhpent,
276 > nhvois, nhsupe, nhsups,
277 > ulsort, langue, codret)
281 if ( codret.eq.0 ) then
285 if ( codret.eq.0 ) then
287 if ( ( rafdef.eq.3 .or. rafdef.eq.4 ) .and. nbiter .gt.1 ) then
293 if ( maconf.eq.-1 .or. maconf.eq.0 ) then
298 #ifdef _DEBUG_HOMARD_
299 write (ulsort,99001) 'cforme', cforme
303 if ( ( typcca.eq.36 ) .or. ( typcca.eq.56 ) ) then
306 #ifdef _DEBUG_HOMARD_
307 write (ulsort,90002) 'nonexm', nonexm
314 #ifdef _DEBUG_HOMARD_
315 write (ulsort,90002) '2.3. ==> tableaux ; codret', codret
319 if ( codret.eq.0 ) then
322 #ifdef _DEBUG_HOMARD_
323 write (ulsort,texte(langue,3)) 'UTAD01', nompro
325 call utad01 ( iaux, nhnoeu,
327 > pfamno, pcfano, jaux,
328 > pcoono, jaux, jaux, jaux,
329 > ulsort, langue, codret )
332 call gmadoj ( nhnoeu//'.Deraffin', pancno, iaux, codre1 )
333 call gmalot ( ntrav4, 'entier', nbnoto, ptrav4, codre2)
335 codre0 = min ( codre1, codre2 )
336 codret = max ( abs(codre0), codret,
340 call gmliat ( nhnoeu, 2, dimcst, codre0 )
341 codret = max ( abs(codre0), codret )
343 if ( nbmpto.ne.0 ) then
346 #ifdef _DEBUG_HOMARD_
347 write (ulsort,texte(langue,3)) 'UTAD02_mp', nompro
349 call utad02 ( iaux, nhmapo,
350 > phetmp, pnoemp, jaux, jaux,
351 > pfammp, pcfamp, jaux,
354 > ulsort, langue, codret )
359 if ( .not. cforme ) then
362 if ( degre.eq.2 ) then
365 #ifdef _DEBUG_HOMARD_
366 write (ulsort,texte(langue,3)) 'UTAD02_ar', nompro
368 call utad02 ( iaux, nharet,
369 > phetar, psomar, pfilar, pmerar,
370 > pfamar, pcfaar, jaux,
371 > jaux, pnp2ar, jaux,
373 > ulsort, langue, codret )
375 if ( nbftri.ne.0 ) then
378 if ( nbtrto.ne.0 ) then
380 if ( mod(mailet,2).eq.0 ) then
384 #ifdef _DEBUG_HOMARD_
385 write (ulsort,texte(langue,3)) 'UTAD02_tr', nompro
387 call utad02 ( iaux, nhtria,
388 > phettr, paretr, pfiltr, ppertr,
389 > pfamtr, pcfatr, jaux,
390 > pnivtr, jaux, jaux,
391 > adnmtr, jaux, jaux,
392 > ulsort, langue, codret )
396 if ( nbfqua.ne.0 ) then
399 if ( nbquto.ne.0 ) then
401 if ( mod(mailet,3).eq.0 ) then
405 #ifdef _DEBUG_HOMARD_
406 write (ulsort,texte(langue,3)) 'UTAD02_qu', nompro
408 call utad02 ( iaux, nhquad,
409 > phetqu, parequ, pfilqu, pperqu,
410 > pfamqu, pcfaqu, jaux,
411 > pnivqu, jaux, jaux,
412 > adnmqu, jaux, jaux,
413 > ulsort, langue, codret )
417 if ( nbftet.ne.0 ) then
419 cgn write(ulsort,90002) 'nbtecf, nbteca', nbtecf, nbteca
421 if ( nbteto.ne.0 ) then
423 if ( nbteca.gt.0 ) then
427 #ifdef _DEBUG_HOMARD_
428 write (ulsort,texte(langue,3)) 'UTAD02_te', nompro
430 call utad02 ( iaux, nhtetr,
431 > phette, ptrite, jaux, jaux,
432 > pfamte, pcfate, jaux,
433 > jaux, pcotrt, jaux,
434 > jaux, jaux, parete,
435 > ulsort, langue, codret )
439 if ( nbfhex.ne.0 ) then
442 if ( nbheto.ne.0 ) then
444 if ( mod(mailet,5).eq.0 ) then
447 if ( nbheca.gt.0 ) then
451 #ifdef _DEBUG_HOMARD_
452 write (ulsort,texte(langue,3)) 'UTAD02_he', nompro
454 call utad02 ( iaux, nhhexa,
455 > phethe, pquahe, jaux, jaux,
456 > pfamhe, pcfahe, jaux,
457 > jaux, pcoquh, jaux,
458 > adnmhe, jaux, parehe,
459 > ulsort, langue, codret )
463 if ( nbfpyr.ne.0 ) then
466 if ( nbpyto.ne.0 ) then
468 if ( nbpyca.gt.0 ) then
472 #ifdef _DEBUG_HOMARD_
473 write (ulsort,texte(langue,3)) 'UTAD02_py', nompro
475 call utad02 ( iaux, nhpyra,
476 > phetpy, pfacpy, jaux, jaux,
477 > pfampy, pcfapy, jaux,
478 > jaux, pcofay, jaux,
479 > jaux, jaux, parepy,
480 > ulsort, langue, codret )
484 if ( nbfpen.ne.0 ) then
487 if ( nbpeto.ne.0 ) then
489 if ( nbpeca.gt.0 ) then
493 #ifdef _DEBUG_HOMARD_
494 write (ulsort,texte(langue,3)) 'UTAD02_pe', nompro
496 call utad02 ( iaux, nhpent,
497 > phetpe, pfacpe, jaux, jaux,
498 > pfampe, pcfape, jaux,
499 > jaux, pcofap, jaux,
500 > jaux, jaux, parepe,
501 > ulsort, langue, codret )
505 call gmliat ( nhsups, 2, iaux, codre1 )
506 call gmliat ( nhsupe, 9, nbfmed, codre2 )
508 codre0 = min ( codre1, codre2 )
509 codret = max ( abs(codre0), codret,
513 cgn print *,nompro,'nbfmed, ngrouc ',nbfmed, ngrouc
517 c 2.4. ==> les voisinages des noeuds
519 if ( codret.eq.0 ) then
525 #ifdef _DEBUG_HOMARD_
526 write (ulsort,texte(langue,3)) 'UTVOIS', nompro
528 call utvois ( nomail, nhvois,
529 > iaux, jaux, kaux, laux,
531 > nbfaar, pposif, pfacar,
532 > ulsort, langue, codret )
536 if ( codret.eq.0 ) then
539 if ( nbteto.ne.0 ) then
541 if ( nbpyto.ne.0 .or. nbpeto.ne.0 ) then
545 if ( nbheto.ne.0 ) then
547 if ( nbpyto.ne.0 .or. nbpeto.ne.0 ) then
551 #ifdef _DEBUG_HOMARD_
552 write (ulsort,texte(langue,3)) 'UTAD04', nompro
554 call utad04 ( iaux, nhvois,
555 > jaux, jaux, pposif, pfacar,
557 > jaux, jaux, adpptr, adppqu,
562 > ulsort, langue, codret )
566 c 2.5. ==> nombre d'equivalences
567 #ifdef _DEBUG_HOMARD_
568 write (ulsort,90002) '2.5. equivalences ; codret', codret
571 if ( codret.eq.0 ) then
573 if ( homolo.eq.0 ) then
576 call gmliat ( nhsups, 5, iaux, codret )
577 if ( codret.eq.0 ) then
578 if ( mod(iaux,33).eq.0 ) then
589 c 3. Particularites des logiciels associes
590 c Il faut le faire maintenant, avant d'avoir converti le maillage
591 c du format HOMARD au format MED. En effet, ces programmes vont
592 c modifier/creer les familles med associes. Or cela est transfere au
593 c maillage de calcul par le programme pcmac1.
596 #ifdef _DEBUG_HOMARD_
597 write (ulsort,90002) '3. Particularites ; codret', codret
600 #ifdef _DEBUG_HOMARD_
601 write (ulsort,90002) 'typcca', typcca
604 c 3.1. ==> Creation des boites pour Athena
606 if ( typcca.eq.16 ) then
608 #ifdef _DEBUG_HOMARD_
609 write (ulsort,90002) '3. Boites pour Athena ; codret', codret
612 if ( codret.eq.0 ) then
614 call gmnomc ( nhquad//'.Famille', nhqufa, codret )
618 if ( codret.eq.0 ) then
620 #ifdef _DEBUG_HOMARD_
621 write (ulsort,texte(langue,3)) 'PCFAAT', nompro
623 call pcfaat ( typcca,
624 > nhsupe, nhsups, nhqufa,
625 > imem(phetar), imem(psomar),
626 > imem(phettr), imem(paretr),
627 > imem(phetqu), imem(parequ),
628 > imem(pperqu), imem(pnivqu),
629 > imem(ppovos), imem(pvoiso),
630 > imem(pposif), imem(pfacar),
631 > imem(pfamar), imem(pcfaar),
632 > imem(pfamtr), imem(pcfatr),
633 > imem(pfamqu), pcfaqu,
634 > ulsort, langue, codret )
635 c attention : il est normal que l'on passe pcfaqu et pas imem(pcfaqu)
641 c 3.2. ==> Elements a recoller pour le non conforme
643 if ( .not. cforme ) then
645 #ifdef _DEBUG_HOMARD_
646 write (ulsort,90002) '3. Recoller non conforme ; codret', codret
650 c 3.2.1. ==> Copie des tableaux des etats : les numeros vont etre
651 c modifies temporairement ; il faut pouvoir les restituer
652 c apres la conversion
654 if ( codret.eq.0 ) then
657 call gmcpal ( nharet//'.HistEtat', ntrav1, iaux, jaux, codret )
661 if ( codret.eq.0 ) then
663 if ( nbtrto.ne.0 ) then
665 call gmcpal ( nhtria//'.HistEtat', ntrav2, iaux, jaux, codret )
671 if ( codret.eq.0 ) then
673 if ( nbquto.ne.0 ) then
675 call gmcpal ( nhquad//'.HistEtat', ntrav3, iaux, jaux, codret )
681 c 3.2.2. ==> Recuperation du recollement initial
682 #ifdef _DEBUG_HOMARD_
683 write (ulsort,90002) '3.2.2. recollement initial ; codret', codret
686 if ( codret.eq.0 ) then
688 #ifdef _DEBUG_HOMARD_
689 write (ulsort,texte(langue,3)) 'UTAD03_ar', nompro
692 call utad03 ( iaux, nharet,
693 > nbanci, nbenrc, jaux,
695 > ulsort, langue, codret )
697 if ( nbtrto.gt.0 ) then
699 #ifdef _DEBUG_HOMARD_
700 write (ulsort,texte(langue,3)) 'UTAD03_tr', nompro
702 if ( nbtrri.eq.0 ) then
707 call utad03 ( iaux, nhtria,
708 > jaux, jaux, numead,
710 > ulsort, langue, codret )
714 if ( nbquto.gt.0 ) then
716 #ifdef _DEBUG_HOMARD_
717 write (ulsort,texte(langue,3)) 'UTAD03_qu', nompro
719 if ( nbquri.eq.0 ) then
724 call utad03 ( iaux, nhquad,
725 > jaux, jaux, numead,
727 > ulsort, langue, codret )
733 c 3.2.3. ==> Creation de la structure de memorisation des recollements
734 c Remarque : on dimensionne surement trop grand car tout ne
735 c donne pas lieu a recollement, mais tant pis
736 c Remarque : on initialise a 0 pour la suite
737 #ifdef _DEBUG_HOMARD_
738 write (ulsort,90002) '3.2.3. creation structure ; codret', codret
741 if ( codret.eq.0 ) then
743 #ifdef _DEBUG_HOMARD_
744 write (ulsort,texte(langue,3)) 'UTAL41', nompro
746 call utal41 ( typcca, nonexm, nbanci, nbenrc,
752 > adarrc, adtrrc, adqurc,
753 > adterc, adherc, adperc, adpyrc,
754 > lgtrc1, lgtrc2, lgtrc3,
755 > lgtrc4, lgtrc5, lgtrc6, lgtrc7,
756 > ulsort, langue, codret )
759 #ifdef _DEBUG_HOMARD_
760 write (ulsort,*) 'apres utal41'
761 write (ulsort,90002) 'lgtrc1', lgtrc1
762 write (ulsort,90002) 'lgtrc2', lgtrc2
763 write (ulsort,90002) 'lgtrc3', lgtrc3
764 write (ulsort,90002) 'lgtrc4', lgtrc4
765 write (ulsort,90002) 'lgtrc5', lgtrc5
766 write (ulsort,90002) 'lgtrc6', lgtrc6
767 write (ulsort,90002) 'lgtrc7', lgtrc7
770 if ( codret.eq.0 ) then
772 jaux = adarrc + 2*lgtrc1 - 1
773 do 3231 , iaux = adarrc, jaux
777 jaux = adtrrc + 2*lgtrc2 - 1
778 do 3232 , iaux = adtrrc, jaux
782 jaux = adqurc + 2*lgtrc3 - 1
783 do 3233 , iaux = adqurc, jaux
787 jaux = adterc + 3*lgtrc4 - 1
788 do 3234 , iaux = adterc, jaux
792 jaux = adherc + 3*lgtrc5 - 1
793 do 3235 , iaux = adherc, jaux
797 jaux = adperc + 3*lgtrc6 - 1
798 do 3236 , iaux = adperc, jaux
802 jaux = adpyrc + 3*lgtrc7 - 1
803 do 3237 , iaux = adpyrc, jaux
809 c 3.2.4. ==> Prise en compte du futur recollement
810 #ifdef _DEBUG_HOMARD_
811 write (ulsort,90002) '3.2.4. futur recollement ; codret', codret
814 if ( codret.eq.0 ) then
816 #ifdef _DEBUG_HOMARD_
817 write (ulsort,texte(langue,3)) 'PCMAR0', nompro
820 call pcmar0 ( nonexm,
821 > imem(phetar), imem(pfilar), imem(pmerar),
822 > imem(pfamar), imem(pposif), imem(pfacar),
823 > imem(paretr), imem(phettr), imem(pnivtr),
824 > imem(pfamtr), imem(ppertr), imem(pfiltr),
825 > imem(parequ), imem(phetqu), imem(pnivqu),
826 > imem(pfamqu), imem(pperqu), imem(pfilqu),
830 > imem(advotr), imem(adpptr),
831 > imem(advoqu), imem(adppqu),
832 > nbanci, nbenrc, numead,
833 > imem(adarra), imem(adtrra), imem(adqura),
834 > nparrc, nptrrc, npqurc,
835 > npterc, npherc, npperc, nppyrc,
836 > imem(adarrc), imem(adtrrc), imem(adqurc),
837 > imem(adterc), imem(adherc),
838 > imem(adperc), imem(adpyrc),
839 > ulsort, langue, codret )
843 c 3.2.5. ==> Redimensionnement
844 #ifdef _DEBUG_HOMARD_
845 write (ulsort,90002) '3.2.5. Redimensionnement ; codret', codret
848 if ( codret.eq.0 ) then
850 #ifdef _DEBUG_HOMARD_
851 write (ulsort,*) 'au debut de 3.2.5'
852 write (ulsort,90002) 'lgtrc1, nparrc', lgtrc1, nparrc
853 write (ulsort,90002) 'lgtrc2, nptrrc', lgtrc2, nptrrc
854 write (ulsort,90002) 'lgtrc3, npqurc', lgtrc3, npqurc
855 write (ulsort,90002) 'lgtrc4, npterc', lgtrc4, npterc
856 write (ulsort,90002) 'lgtrc5, npherc', lgtrc5, npherc
857 write (ulsort,90002) 'lgtrc6, nptrrc+npqurc', lgtrc6, nptrrc+npqurc
858 write (ulsort,90002) 'lgtrc7, nptrrc+npqurc', lgtrc7, nptrrc+npqurc
861 call gmecat ( nospec, 1, nparrc, codre1 )
862 call gmmod ( nospec//'.Tab1', adarrc,
863 > 2, 2, lgtrc1, nparrc, codre2 )
865 codre0 = min ( codre1, codre2 )
866 codret = max ( abs(codre0), codret,
869 call gmecat ( nospec, 2, nptrrc, codre1 )
870 call gmmod ( nospec//'.Tab2', adtrrc,
871 > 2, 2, lgtrc2, nptrrc, codre2 )
872 call gmecat ( nospec, 3, npqurc, codre3 )
873 call gmmod ( nospec//'.Tab3', adqurc,
874 > 2, 2, lgtrc3, npqurc, codre4 )
876 codre0 = min ( codre1, codre2, codre3, codre4 )
877 codret = max ( abs(codre0), codret,
878 > codre1, codre2, codre3, codre4 )
880 call gmecat ( nospec, 4, npterc, codre1 )
881 call gmmod ( nospec//'.Tab4', adterc,
882 > 3, 3, lgtrc4, npterc, codre2 )
883 call gmecat ( nospec, 5, npherc, codre3 )
884 call gmmod ( nospec//'.Tab5', adherc,
885 > 3, 3, lgtrc5, npherc, codre4 )
887 codre0 = min ( codre1, codre2, codre3, codre4 )
888 codret = max ( abs(codre0), codret,
889 > codre1, codre2, codre3, codre4 )
891 if ( nbpeac.gt.0 ) then
892 call gmecat ( nospec, 6, nptrrc+npqurc, codre1 )
893 call gmmod ( nospec//'.Tab6', adperc,
894 > 3, 3, lgtrc6, nptrrc+npqurc, codre2 )
899 if ( nbpyac.gt.0 ) then
900 call gmecat ( nospec, 7, nptrrc+npqurc, codre3 )
901 call gmmod ( nospec//'.Tab7', adpyrc,
902 > 3, 3, lgtrc7, nptrrc+npqurc, codre4 )
908 codre0 = min ( codre1, codre2, codre3, codre4 )
909 codret = max ( abs(codre0), codret,
910 > codre1, codre2, codre3, codre4 )
912 cgn call gmprsx (nompro,nospec)
913 cgn call gmprsx (nompro,nospec//'.Tab1')
914 cgn call gmprsx (nompro,nospec//'.Tab2')
915 cgn call gmprsx (nompro,nospec//'.Tab3')
916 cgn call gmprsx (nompro,nospec//'.Tab4')
917 cgn call gmprsx (nompro,nospec//'.Tab5')
918 cgn call gmprsx (nompro,nospec//'.Tab6')
919 cgn call gmprsx (nompro,nospec//'.Tab7')
929 #ifdef _DEBUG_HOMARD_
930 write (ulsort,90002) '4. preliminaires ; codret', codret
934 c 4.1. ==> nombres caracteristiques
936 if ( codret.eq.0 ) then
938 call gmliat ( nhelig, 1, nbelig, codret )
942 c 4.2. ==> on n'ordonne pas les noeuds
948 c 5. Calcul du nombre d'entites pour le calcul.
949 c . Pour les noeuds, il y en a tout le temps et leur nombre
950 c est egal au nombre de noeuds.
951 c . Pour les aretes, les triangles ou les quadrangles, il est
952 c impossible d'avoir une estimation correcte a cause de la
953 c conformite qui fait apparaitre ou disparaitre des mailles.
954 c On appelle donc un programme qui fait le decompte.
955 c . Pour les mailles 3D, c'ets simple : il y a equivalence
956 c entre maille active et maille qui sera du calcul ensuite.
957 c Une fois ces estimations faites, on peut deduire le nombre
958 c total de mailles de calcul.
960 #ifdef _DEBUG_HOMARD_
961 write (ulsort,90002) 'au debut de 5. ; codret', codret
964 c 5.1. ==> estimation du nombre d'elements du maillage de calcul
968 c 5.2. ==> les noeuds
979 c 5.3. ==> les mailles-points
981 if ( codret.eq.0 ) then
983 if ( nbmpto.eq.0 ) then
989 nbele0 = nbele0 + rsmpto
993 c 5.4. ==> les aretes
995 if ( codret.eq.0 ) then
997 if ( nbarac.eq.0 ) then
999 elseif ( mod(nonexm,2).eq.0 ) then
1002 #ifdef _DEBUG_HOMARD_
1003 write (ulsort,texte(langue,3)) 'PCMAA0', nompro
1005 call pcmaa0 ( rsarto,
1007 > imem(pfamar), imem(pcfaar),
1008 > ulsort, langue, codret )
1011 nbele0 = nbele0 + rsarto
1015 c 5.5. ==> les triangles
1017 if ( codret.eq.0 ) then
1019 if ( nbtrac.eq.0 ) then
1022 #ifdef _DEBUG_HOMARD_
1023 write (ulsort,texte(langue,3)) 'PCMAT0', nompro
1025 call pcmat0 ( rstrto,
1027 > imem(pfamtr), imem(pcfatr),
1028 > ulsort, langue, codret )
1031 nbele0 = nbele0 + rstrto
1035 c 5.6. ==> les quadrangles
1037 if ( codret.eq.0 ) then
1039 if ( nbquac.eq.0 ) then
1042 #ifdef _DEBUG_HOMARD_
1043 write (ulsort,texte(langue,3)) 'PCMAQ0', nompro
1045 call pcmaq0 ( rsquto,
1047 > imem(pfamqu), imem(pcfaqu),
1048 > ulsort, langue, codret )
1049 #ifdef _DEBUG_HOMARD_
1050 write (ulsort,90002) 'rsquto', rsquto
1054 nbele0 = nbele0 + rsquto
1058 c 5.8. ==> les tetraedres
1060 if ( codret.eq.0 ) then
1062 if ( nbteac.eq.0 ) then
1068 nbele0 = nbele0 + rsteto
1072 c 5.9. ==> les hexaedres
1074 if ( codret.eq.0 ) then
1076 if ( nbheac.eq.0 ) then
1082 nbele0 = nbele0 + rsheto
1086 c 5.10. ==> les pyramides
1088 if ( codret.eq.0 ) then
1090 if ( nbpyac.eq.0 ) then
1096 nbele0 = nbele0 + rspyto
1100 c 5.11. ==> les pentaedres
1102 if ( codret.eq.0 ) then
1104 if ( nbpeac.eq.0 ) then
1110 nbele0 = nbele0 + rspeto
1114 #ifdef _DEBUG_HOMARD_
1115 write (ulsort,texte(langue,18)) mess14(langue,3,13), nbele0
1118 #ifdef _DEBUG_HOMARD_
1119 write (ulsort,90002) 'apres les 5.3.x ; codret', codret
1124 c 6. allocation des tableaux pour le maillage de sortie
1127 #ifdef _DEBUG_HOMARD_
1128 write (ulsort,90002) '6. allocation des tableaux ; codret', codret
1131 c 6.1. ==> allocation de l'objet de tete
1132 c remarque : pour le moment, ncfron n'est pas alloue
1134 if ( codret.eq.0 ) then
1138 #ifdef _DEBUG_HOMARD_
1139 write (ulsort,90002) 'sdimca, mdimca', sdimca, mdimca
1140 write (ulsort,90002) 'nbnoto, nctfno, nbele0, nbmane',
1141 > nbnoto, nctfno, nbele0, nbmane
1142 write (ulsort,texte(langue,3)) 'UTACMA', nompro
1144 call utacma ( nocmap, iaux, typcca,
1146 > degre, mailet, maconf, homolo, hierar,
1147 > nbnoto, nctfno, nbele0, nbmane, jaux,
1148 > ncinfo, ncnoeu, nccono, nccode,
1150 > ncequi, ncfron, ncnomb,
1151 > ulsort, langue, codret )
1155 c 6.2. ==> tableaux de correspondance entre les numerotations
1156 #ifdef _DEBUG_HOMARD_
1157 write (ulsort,90002) 'au debut de 6.2 ; codret', codret
1160 c 6.2.1 ==> les noeuds
1162 if ( codret.eq.0 ) then
1166 #ifdef _DEBUG_HOMARD_
1167 write (ulsort,texte(langue,3)) 'UTRE01_no', nompro
1169 call utre01 ( iaux, kaux,
1170 > norenu, rsnoac, rsnoto,
1171 > adnohp, adnocp, laux,
1172 > ulsort, langue, codret)
1176 c 6.2.2. ==> les mailles-points
1178 if ( codret.eq.0 ) then
1181 if ( rsmpto.eq.0 ) then
1187 #ifdef _DEBUG_HOMARD_
1188 write (ulsort,texte(langue,3)) 'UTRE01_mp', nompro
1190 call utre01 ( iaux, kaux, norenu, jaux, rsmpto,
1191 > admphp, admpcp, laux,
1192 > ulsort, langue, codret)
1196 c 6.2.3. ==> les aretes
1198 if ( codret.eq.0 ) then
1200 #ifdef _DEBUG_HOMARD_
1201 write (ulsort,texte(langue,3)) 'UTRE01_ar', nompro
1204 if ( rsarto.eq.0 ) then
1210 call utre01 ( iaux, kaux, norenu, jaux, rsarto,
1211 > adarhp, adarcp, laux,
1212 > ulsort, langue, codret)
1216 c 6.2.4. ==> les triangles
1218 if ( codret.eq.0 ) then
1221 if ( rstrto.eq.0 ) then
1227 #ifdef _DEBUG_HOMARD_
1228 write (ulsort,texte(langue,3)) 'UTRE01_tr', nompro
1230 call utre01 ( iaux, kaux, norenu, jaux, rstrto,
1231 > adtrhp, adtrcp, laux,
1232 > ulsort, langue, codret)
1236 c 6.2.5. ==> les quadrangles
1238 if ( codret.eq.0 ) then
1241 if ( rsquto.eq.0 ) then
1247 #ifdef _DEBUG_HOMARD_
1248 write (ulsort,texte(langue,3)) 'UTRE01_qu', nompro
1250 call utre01 ( iaux, kaux, norenu, jaux, rsquto,
1251 > adquhp, adqucp, laux,
1252 > ulsort, langue, codret)
1256 c 6.2.6. ==> les tetraedres
1258 if ( codret.eq.0 ) then
1261 if ( rsteto.eq.0 ) then
1267 #ifdef _DEBUG_HOMARD_
1268 write (ulsort,texte(langue,3)) 'UTRE01_te', nompro
1270 call utre01 ( iaux, kaux, norenu, jaux, rsteto,
1271 > adtehp, adtecp, laux,
1272 > ulsort, langue, codret)
1276 c 6.2.7. ==> les hexaedres
1278 if ( codret.eq.0 ) then
1281 if ( rsheto.eq.0 ) then
1287 #ifdef _DEBUG_HOMARD_
1288 write (ulsort,texte(langue,3)) 'UTRE01_he', nompro
1290 call utre01 ( iaux, kaux, norenu, jaux, rsheto,
1291 > adhehp, adhecp, laux,
1292 > ulsort, langue, codret)
1296 c 6.2.8. ==> les pyramides
1298 if ( codret.eq.0 ) then
1301 if ( rspyto.eq.0 ) then
1307 #ifdef _DEBUG_HOMARD_
1308 write (ulsort,texte(langue,3)) 'UTRE01_py', nompro
1310 call utre01 ( iaux, kaux, norenu, jaux, rspyto,
1311 > adpyhp, adpycp, laux,
1312 > ulsort, langue, codret)
1316 c 6.2.9. ==> les pentaedres
1318 if ( codret.eq.0 ) then
1321 if ( rspeto.eq.0 ) then
1327 #ifdef _DEBUG_HOMARD_
1328 write (ulsort,texte(langue,3)) 'UTRE01_pe', nompro
1330 call utre01 ( iaux, kaux, norenu, jaux, rspeto,
1331 > adpehp, adpecp, laux,
1332 > ulsort, langue, codret)
1336 c 6.2.10. ==> les nombres
1338 if ( codret.eq.0 ) then
1341 call gmecat ( norenu, 19, iaux, codre1 )
1342 call gmaloj ( norenu//'.Nombres', ' ', iaux, adnbrp, codre2 )
1344 codre0 = min ( codre1, codre2 )
1345 codret = max ( abs(codre0), codret,
1349 #ifdef _DEBUG_HOMARD_
1350 write (ulsort,90002) 'apres les 6.2.x ; codret', codret
1354 c 6.3. ==> structure de donnees de type externe : on prend large pour
1355 c le nombre de mailles
1356 #ifdef _DEBUG_HOMARD_
1357 write (ulsort,90002) '6.3. structure externe ; codret', codret
1361 if ( codret.eq.0 ) then
1363 iaux = nbnoto * sdimca
1364 call gmaloj ( ncnoeu//'.Coor', ' ', iaux, pcoonc, codre1 )
1365 call gmaloj ( ncnoeu//'.FamilMED', ' ', nbnoto, pfamen, codre2 )
1367 codre0 = min ( codre1, codre2 )
1368 codret = max ( abs(codre0), codret,
1371 call gmecat ( ncnoeu, 3, dimcst, codre1 )
1372 call gmcpoj ( nhnoeu//'.CoorCons', ncnoeu//'.CoorCons', codre2 )
1373 call gmadoj ( nhnoeu//'.CoorCons', adcocs, iaux, codre3 )
1375 codre0 = min ( codre1, codre2, codre3 )
1376 codret = max ( abs(codre0), codret,
1377 > codre1, codre2, codre3 )
1379 call gmaloj ( nccono//'.FamilMED', ' ', nbele0, pfamee, codre1 )
1380 iaux = nbele0*nbmane
1381 call gmaloj ( nccono//'.Noeuds', ' ', iaux , pnoeel, codre2 )
1382 call gmaloj ( nccono//'.Type', ' ', nbele0, ptypel, codre3 )
1384 codre0 = min ( codre1, codre2, codre3 )
1385 codret = max ( abs(codre0), codret,
1386 > codre1, codre2, codre3 )
1390 c 6.4. ==> transfert des mailles ignorees
1391 #ifdef _DEBUG_HOMARD_
1392 write (ulsort,90002) '6.4. ==> transfert ignores ; codret', codret
1393 write (ulsort,90002) 'nbelig', nbelig
1397 if ( nbelig.ne.0 ) then
1399 if ( codret.eq.0 ) then
1401 cgn call gmprsx (nompro, nhelig )
1402 cgn call gmprsx (nompro, nhelig//'.ConnNoeu' )
1403 cgn call gmprsx (nompro, nhelig//'.FamilMED' )
1405 call gmadoj ( nhelig//'.ConnNoeu', hnoeel, iaux, codre1 )
1406 call gmadoj ( nhelig//'.FamilMED', hfmdel, iaux, codre2 )
1408 codre0 = min ( codre1, codre2 )
1409 codret = max ( abs(codre0), codret,
1414 if ( codret.eq.0 ) then
1416 #ifdef _DEBUG_HOMARD_
1417 write (ulsort,texte(langue,3)) 'UTINEI', nompro
1419 call utinei ( modhom,
1420 > ulsort, langue, codret )
1426 #ifdef _DEBUG_HOMARD_
1432 #ifdef _DEBUG_HOMARD_
1433 write (ulsort,90002) '7. impressions ; codret', codret
1436 cgn call gmprsx (nompro, nhnofa//'.EntiFamm')
1437 cgn call gmprsx (nompro, nhmpfa//'.EntiFamm')
1438 cgn call gmprsx (nompro, nharfa//'.EntiFamm')
1439 cgn call gmprsx (nompro, nhtrfa//'.EntiFamm')
1440 cgn call gmprsx (nompro, nhqufa//'.EntiFamm')
1441 cgn call gmprsx (nompro, nhtefa//'.EntiFamm')
1443 cgn call gmprsx (nompro, nhtrfa//'.Codes')
1444 cgn call gmprsx (nompro, nhqufa//'.Codes')
1447 if ( codret.eq.0 ) then
1450 #ifdef _DEBUG_HOMARD_
1451 write (ulsort,texte(langue,3)) 'UTECFE', nompro
1454 > imem(pfamno), imem(pcfano),
1455 > imem(pfammp), imem(pcfamp),
1456 > imem(pfamar), imem(pcfaar),
1457 > imem(pfamtr), imem(pcfatr),
1458 > imem(pfamqu), imem(pcfaqu),
1459 > imem(pfamte), imem(pcfate),
1460 > imem(pfamhe), imem(pcfahe),
1461 > imem(pfampy), imem(pcfapy),
1462 > imem(pfampe), imem(pcfape),
1463 > ulsort, langue, codret )
1470 c 8. conversion vraie
1473 #ifdef _DEBUG_HOMARD_
1474 write (ulsort,90002) '8. conversion vraie ; codret', codret
1478 if ( codret.eq.0 ) then
1480 #ifdef _DEBUG_HOMARD_
1481 write (ulsort,texte(langue,3)) 'PCMAC1', nompro
1483 call pcmac1 ( nbele0,
1484 > rmem(pcoono), imem(phetno), imem(pancno), imem(ptrav4),
1485 > imem(pnoemp), imem(phetmp),
1486 > imem(psomar), imem(pnp2ar), imem(phetar),
1487 > imem(paretr), imem(phettr), imem(adnmtr),
1488 > imem(parequ), imem(phetqu), imem(adnmqu),
1489 > imem(ptrite), imem(pcotrt), imem(parete), imem(phette),
1490 > imem(pquahe), imem(pcoquh), imem(parehe), imem(phethe),
1492 > imem(pfacpy), imem(pcofay), imem(parepy), imem(phetpy),
1493 > imem(pfacpe), imem(pcofap), imem(parepe), imem(phetpe),
1494 > imem(pfamno), imem(pcfano), imem(pfammp), imem(pcfamp),
1495 > imem(pfamar), imem(pcfaar),
1496 > imem(pfamtr), imem(pcfatr), imem(pfamqu), imem(pcfaqu),
1497 > imem(pfamte), imem(pcfate), imem(pfamhe), imem(pcfahe),
1498 > imem(pfampy), imem(pcfapy), imem(pfampe), imem(pcfape),
1499 > imem(adnocp), imem(adnohp), imem(admpcp), imem(admphp),
1500 > imem(adarcp), imem(adarhp),
1501 > imem(adtrcp), imem(adtrhp), imem(adqucp), imem(adquhp),
1502 > imem(adtecp), imem(adtehp), imem(adhecp), imem(adhehp),
1503 > imem(adpycp), imem(adpyhp), imem(adpecp), imem(adpehp),
1504 > dimcst, rmem(adcocs), rmem(pcoonc), imem(pfamen),
1505 > imem(pfamee), imem(pnoeel), imem(ptypel),
1506 > imem(hfmdel), imem(hnoeel),
1508 > ulsort, langue, codret )
1516 #ifdef _DEBUG_HOMARD_
1517 write (ulsort,90002) '9. finitions ; codret', codret
1521 c 9.1. ==> maintenant que l'on connait le vrai nombre de mailles au sens
1522 c du calcul, on raccourcit eventuellement les tableaux
1524 c 9.1.1. ==> les eventuelles mailles-points
1526 #ifdef _DEBUG_HOMARD_
1527 write (ulsort,90002) '9.1.1. mailles-points ; codret', codret
1528 write (ulsort,90002) 'nbmpto', nbmpto
1529 write (ulsort,90002) 'rsmpac', rsmpac
1533 if ( rsmpto.ne.0 ) then
1535 if ( codret.eq.0 ) then
1539 #ifdef _DEBUG_HOMARD_
1540 write (ulsort,texte(langue,3)) 'UTRE02_mp', nompro
1542 call utre02 ( iaux, jaux, norenu,
1543 > nbele0, rsmpto, rsmpac, rsmpto,
1545 > ulsort, langue, codret)
1551 c 9.1.2. ==> les aretes
1553 #ifdef _DEBUG_HOMARD_
1554 write (ulsort,90002) '9.1.2. aretes ; codret', codret
1555 write (ulsort,90002) 'nbarto', nbarto
1559 if ( rsarto.ne.0 ) then
1561 if ( codret.eq.0 ) then
1565 #ifdef _DEBUG_HOMARD_
1566 write (ulsort,texte(langue,3)) 'UTRE02_ar', nompro
1568 call utre02 ( iaux, jaux, norenu,
1569 > nbele0, rsarto, rsarac, rsarto,
1571 > ulsort, langue, codret)
1577 c 9.1.3. ==> les eventuels triangles
1579 #ifdef _DEBUG_HOMARD_
1580 write (ulsort,90002) '9.1.3. triangles ; codret', codret
1581 write (ulsort,90002) 'nbele0', nbele0
1582 write (ulsort,90002) 'nbtrto', nbtrto
1586 if ( rstrto.ne.0 ) then
1588 if ( codret.eq.0 ) then
1592 #ifdef _DEBUG_HOMARD_
1593 write (ulsort,texte(langue,3)) 'UTRE02_tr', nompro
1595 call utre02 ( iaux, jaux, norenu,
1596 > nbele0, rstrto, rstrac, rstrto,
1598 > ulsort, langue, codret)
1604 c 9.1.4. ==> les eventuels quadrangles
1606 #ifdef _DEBUG_HOMARD_
1607 write (ulsort,90002) '9.1.4. quadrangles ; codret', codret
1608 write (ulsort,90002) 'nbele0', nbele0
1609 write (ulsort,90002) 'rsquac', rsquac
1610 write (ulsort,90002) 'nbquto', nbquto
1611 write (ulsort,90002) 'rsquto', rsquto
1615 if ( rsquto.ne.0 ) then
1617 if ( codret.eq.0 ) then
1621 #ifdef _DEBUG_HOMARD_
1622 write (ulsort,texte(langue,3)) 'UTRE02_qu', nompro
1624 call utre02 ( iaux, jaux, norenu,
1625 > nbele0, rsquto, rsquac, rsquto,
1627 > ulsort, langue, codret)
1633 c 9.1.5. ==> les eventuels tetraedres
1635 #ifdef _DEBUG_HOMARD_
1636 write (ulsort,90002) '9.1.5. tetraedres ; codret', codret
1637 write (ulsort,90002) 'nbteto', nbteto
1641 if ( rsteto.ne.0 ) then
1643 if ( codret.eq.0 ) then
1647 #ifdef _DEBUG_HOMARD_
1648 write (ulsort,texte(langue,3)) 'UTRE02_te', nompro
1650 call utre02 ( iaux, jaux, norenu,
1651 > nbele0, rsteto, rsteac, rsteto,
1653 > ulsort, langue, codret)
1659 c 9.1.6. ==> les eventuelles pyramides
1661 #ifdef _DEBUG_HOMARD_
1662 write (ulsort,90002) '9.1.6. pyramides ; codret', codret
1663 write (ulsort,90002) 'nbpyto', nbpyto
1667 if ( rspyto.ne.0 ) then
1669 if ( codret.eq.0 ) then
1673 #ifdef _DEBUG_HOMARD_
1674 write (ulsort,texte(langue,3)) 'UTRE02_py', nompro
1676 call utre02 ( iaux, jaux, norenu,
1677 > nbele0, rspyto, rspyac, rspyto,
1679 > ulsort, langue, codret)
1685 c 9.1.7. ==> les eventuels hexaedres
1687 #ifdef _DEBUG_HOMARD_
1688 write (ulsort,90002) '9.1.7. hexaedres ; codret', codret
1689 write (ulsort,90002) 'nbheto', nbheto
1693 if ( rsheto.ne.0 ) then
1695 if ( codret.eq.0 ) then
1699 #ifdef _DEBUG_HOMARD_
1700 write (ulsort,texte(langue,3)) 'UTRE02_he', nompro
1702 call utre02 ( iaux, jaux, norenu,
1703 > nbele0, rsheto, rsheac, rsheto,
1705 > ulsort, langue, codret)
1711 c 9.1.8. ==> les eventuels pentaedres
1713 #ifdef _DEBUG_HOMARD_
1714 write (ulsort,90002) '9.1.8. pentaedres ; codret', codret
1715 write (ulsort,90002) 'nbpeto', nbpeto
1719 if ( rspeto.ne.0 ) then
1721 if ( codret.eq.0 ) then
1725 #ifdef _DEBUG_HOMARD_
1726 write (ulsort,texte(langue,3)) 'UTRE02_pe', nompro
1728 call utre02 ( iaux, jaux, norenu,
1729 > nbele0, rspeto, rspeac, rspeto,
1731 > ulsort, langue, codret)
1737 c 9.1.9. ==> les descriptions des mailles
1739 #ifdef _DEBUG_HOMARD_
1740 write (ulsort,90002) '9.1.9. mailles ; codret', codret
1741 write (ulsort,90002) 'nbele0, nbelem, nbmane',
1742 > nbele0,nbelem,nbmane
1746 if ( codret.eq.0 ) then
1748 call gmmod ( nccono//'.FamilMED',
1749 > pfamee, nbele0, nbelem, un, un, codre1 )
1750 call gmmod ( nccono//'.Type',
1751 > ptypel, nbele0, nbelem, un, un, codre2 )
1752 call gmmod ( nccono//'.Noeuds',
1753 > pnoeel, nbele0, nbelem, nbmane, nbmane, codre3 )
1754 call gmecat ( nccono, 1, nbelem, codre4 )
1756 codre0 = min ( codre1, codre2, codre3, codre4 )
1757 codret = max ( abs(codre0), codret,
1758 > codre1, codre2, codre3, codre4 )
1761 cgn call gmprsx (nompro//' - 8.1.9',nccono)
1762 cgn call gmprsx (nompro//' - 8.1.9',nccono//'.Type')
1763 cgn call gmprsx (nompro//' - 8.1.9',nccono//'.Noeuds')
1765 c 9.2. ==> les caracteristiques du maillage de calcul
1767 #ifdef _DEBUG_HOMARD_
1768 write (ulsort,90002) '9.2. carac. mail de calcul ; codret', codret
1771 if ( codret.eq.0 ) then
1773 imem(adnbrp) = rsnois
1774 imem(adnbrp+1) = rsnoei
1775 imem(adnbrp+2) = rsnomp
1776 imem(adnbrp+3) = rsnop1
1777 imem(adnbrp+4) = rsnop2
1778 imem(adnbrp+5) = rsnoim
1779 imem(adnbrp+6) = rseutc
1780 imem(adnbrp+7) = rsevca
1781 imem(adnbrp+8) = rsevto
1782 imem(adnbrp+9) = nbelem
1783 imem(adnbrp+10) = nbmaae
1784 imem(adnbrp+11) = nbmafe
1785 imem(adnbrp+12) = nbmane
1786 imem(adnbrp+13) = nbmapo
1787 imem(adnbrp+14) = nbsegm
1788 imem(adnbrp+15) = nbtetr
1789 imem(adnbrp+16) = nbtria
1790 imem(adnbrp+17) = nbquad
1791 imem(adnbrp+18) = numael
1792 imem(adnbrp+19) = numano
1793 imem(adnbrp+20) = nvoare
1794 imem(adnbrp+21) = nvosom
1795 imem(adnbrp+22) = nbhexa
1796 imem(adnbrp+23) = nbpyra
1797 imem(adnbrp+24) = nbpent
1801 c 9.3. ==> Les nombres
1803 if ( codret.eq.0 ) then
1805 call gmadoj ( ncnomb, adnomb, iaux, codret )
1808 cgn print *,nbmaae, nbmafe, nbmnei, numano, numael
1809 cgn print *,nbmapo,nbsegm,nbtria,nbtetr
1810 cgn print *,nbelig,nbquad,nbhexa,nbpent,nbpyra
1812 if ( codret.eq.0 ) then
1814 imem(adnomb) = nbmaae
1815 imem(adnomb+1) = nbmafe
1816 imem(adnomb+2) = nbmnei
1817 imem(adnomb+3) = numano
1818 imem(adnomb+4) = numael
1819 imem(adnomb+5) = nbtria + nbquad
1820 imem(adnomb+6) = nbtetr + nbhexa + nbpent + nbpyra
1821 imem(adnomb+11) = nbmapo
1822 imem(adnomb+12) = nbsegm
1823 imem(adnomb+13) = nbtria
1824 imem(adnomb+14) = nbtetr
1825 imem(adnomb+15) = nbelig
1826 imem(adnomb+16) = nbquad
1827 imem(adnomb+17) = nbhexa
1828 imem(adnomb+18) = nbpent
1829 imem(adnomb+19) = nbpyra
1831 #ifdef _DEBUG_HOMARD_
1832 call gmprsx (nompro, ncnomb )
1837 c 9.4. ==> date et heure
1839 if ( codret.eq.0 ) then
1841 call utdhus ( dateus, heurus )
1845 cmdc ---------------- MAILLES DOUBLES DEBUT --------------
1847 cmdc 3.4.1. ==> Lecture du numero de la couche en cours
1849 cmd if ( codret.eq.0 ) then
1851 cmd nomfic = 'nrc.dat'
1852 cmd inquire ( file = nomfic, exist = maildb )
1856 cmd if ( maildb ) then
1859 cmd nbele1 = nbele0 + nbtetr
1860 cmdcgn write(ulsort,90002) 'nbele0', nbele0
1861 cmdcgn write(ulsort,90002) 'nbele1', nbele1
1862 cmdcgn write(ulsort,90002) 'nbfmed', nbfmed
1864 cmd if ( codret.eq.0 ) then
1866 cmd call gmadoj ( nhsupe//'.Tab5', adpoin, iaux, codre1 )
1867 cmd call gmadoj ( nhsupe//'.Tab6', adtail, iaux, codre2 )
1868 cmd call gmadoj ( nhsups//'.Tab2', adtabl, iaux, codre3 )
1869 cmd call gmadoj ( nhsupe//'.Tab9', adnumf, iaux, codre4 )
1871 cmd codre0 = min ( codre1, codre2, codre3, codre4 )
1872 cmd codret = max ( abs(codre0), codret,
1873 cmd > codre1, codre2, codre3, codre4 )
1877 cmd if ( codret.eq.0 ) then
1880 cmd call gmalot ( ntrav5, 'entier ', iaux, ptrav5, codret )
1884 cmd if ( codret.eq.0 ) then
1886 cmd call gmmod ( nccono//'.FamilMED',
1887 cmd > pfamee, nbele0, nbele1, un, un, codre1 )
1888 cmd call gmmod ( nccono//'.Type',
1889 cmd > ptypel, nbele0, nbele1, un, un, codre2 )
1890 cmd call gmmod ( nccono//'.Noeuds',
1891 cmd > pnoeel, nbele0, nbele1, nbmane, nbmane, codre3 )
1892 cmd call gmecat ( nccono, 1, nbelem, codre4 )
1894 cmd codre0 = min ( codre1, codre2, codre3, codre4 )
1895 cmd codret = max ( abs(codre0), codret,
1896 cmd > codre1, codre2, codre3, codre4 )
1900 cmd if ( codret.eq.0 ) then
1902 cmd#ifdef _DEBUG_HOMARD_
1903 cmd write (ulsort,texte(langue,3)) 'PCMMEN', nompro
1905 cmd call pcmmen ( nbele0, nbele1, nbtenw,
1906 cmd > imem(pnoeel), imem(pfamee), imem(ptypel),
1908 cmd > imem(adpoin), imem(adtail), smem(adtabl),
1909 cmd > imem(ptrav5), imem(ptrav5+2*nbfmed),
1910 cmd > ulsort, langue, codret )
1914 cmd if ( codret.eq.0 ) then
1916 cmd nbtetr = nbtetr + nbtenw
1917 cmd nbelem = nbele0 + nbtenw
1919 cmd call gmmod ( nccono//'.FamilMED',
1920 cmd > pfamee, nbele1, nbelem, un, un, codre1 )
1921 cmd call gmmod ( nccono//'.Type',
1922 cmd > ptypel, nbele1, nbelem, un, un, codre2 )
1923 cmd call gmmod ( nccono//'.Noeuds',
1924 cmd > pnoeel, nbele1, nbelem, nbmane, nbmane, codre3 )
1925 cmd call gmecat ( nccono, 1, nbelem, codre4 )
1927 cmd codre0 = min ( codre1, codre2, codre3, codre4 )
1928 cmd codret = max ( abs(codre0), codret,
1929 cmd > codre1, codre2, codre3, codre4 )
1931 cmd imem(adnbrp+15) = nbtetr
1932 cmd imem(adnomb+6) = nbtetr + nbhexa + nbpent + nbpyra
1933 cmd imem(adnomb+14) = nbtetr
1937 cmd if ( codret.eq.0 ) then
1939 cmd call gmlboj ( ntrav5, codret )
1944 cmdc ---------------- MAILLES DOUBLES FIN ----------------
1947 c 10. impression des nombres d'entites du maillage de calcul
1950 #ifdef _DEBUG_HOMARD_
1951 write (ulsort,90002) '10. impression ; codret', codret
1954 if ( codret.eq.0 ) then
1957 if ( langue.eq.1 ) then
1958 c 12345678901234567890123456789012
1959 saux32 = 'apres conversion '
1961 saux32 = 'after the conversion '
1963 #ifdef _DEBUG_HOMARD_
1964 write (ulsort,texte(langue,3)) 'UTINMA', nompro
1966 call utinma ( iaux, saux32,
1967 > sdimca, mdimca, degre,
1968 > nbnoto, nbnop1, nbnop2, nbnoim,
1971 > nbmapo, nbsegm, nbtria, nbquad,
1972 > nbtetr, nbhexa, nbpyra, nbpent,
1974 > nbmane, nbmaae, nbmafe,
1975 > ulsort, langue, codret)
1980 c 11. sauvegarde des informations generales, au sens du module de
1982 c on peut faire des attachements car le maillage homard n'est
1986 #ifdef _DEBUG_HOMARD_
1987 write (ulsort,90002) '11. sauvegarde ; codret', codret
1991 c 11.1. ==> a-t-on defini des informations en externe ?
1993 if ( codret.eq.0 ) then
1995 call gmobal ( nhsupe//'.Tab7', codret )
1997 if ( codret.eq.0 ) then
1999 elseif ( codret.eq.2 ) then
2008 c 11.2. ==> copie des differents attributs
2010 #ifdef _DEBUG_HOMARD_
2011 write (ulsort,90002) '11.2. copie des attributs ; codret', codret
2014 if ( codret.eq.0 ) then
2018 if ( codret.eq.0 ) then
2020 call gmliat ( nhsupe, 7, iaux , codre1 )
2021 call gmliat ( nhsups, 3, jaux, codre2 )
2023 codre0 = min ( codre1, codre2 )
2024 codret = max ( abs(codre0), codret,
2029 if ( codret.eq.0 ) then
2031 call gmecat ( ncinfo, 1, iaux , codre1 )
2032 call gmecat ( ncinfo, 2, jaux, codre2 )
2034 codre0 = min ( codre1, codre2 )
2035 codret = max ( abs(codre0), codret,
2044 #ifdef _DEBUG_HOMARD_
2045 if ( codret.eq.0 ) then
2047 call gmprsx (nompro//' 11.2', ncinfo )
2048 call gmprsx (nompro//' 11.2', ncinfo//'.Pointeur' )
2049 call gmprsx (nompro//' 11.2', ncinfo//'.Taille' )
2050 call gmprsx (nompro//' 11.2', ncinfo//'.Table' )
2055 c 11.3. ==> copie des differentes branches
2056 c attention : il faut faire des copies et non pas des
2057 c attachements car le contenu est modifie ensuite dans
2059 #ifdef _DEBUG_HOMARD_
2060 write (ulsort,90002) '11.3. copie des branches ; codret', codret
2063 if ( codret.eq.0 ) then
2067 if ( codret.eq.0 ) then
2069 call gmcpoj ( nhsupe//'.Tab7',
2070 > ncinfo//'.Pointeur', codre1 )
2071 call gmcpoj ( nhsupe//'.Tab8',
2072 > ncinfo//'.Taille', codre2 )
2073 call gmcpoj ( nhsups//'.Tab3',
2074 > ncinfo//'.Table', codre3 )
2076 codre0 = min ( codre1, codre2, codre3 )
2077 codret = max ( abs(codre0), codret,
2078 > codre1, codre2, codre3 )
2082 if ( codret.eq.0 ) then
2084 if ( mod(typcca-6,10).eq.0 ) then
2086 call gmadoj ( ncinfo//'.Pointeur', pinfpt, iaux, codre1 )
2087 call gmadoj ( ncinfo//'.Table' , pinftb, iaux, codre2 )
2088 call gmliat ( ncinfo, 1, iaux, codre3 )
2091 codre0 = min ( codre1, codre2, codre3 )
2092 codret = max ( abs(codre0), codret,
2093 > codre1, codre2, codre3 )
2097 c 11.4. ==> changement du nom du maillage
2099 if ( codret.eq.0 ) then
2101 do 1114 , iaux = 1, nbpqt
2103 jaux = pinftb + 10*(iaux-1)
2104 cgn write (ulsort,90064) jaux, '%'//smem(jaux)//'%'
2106 c 2.1. Repere et noms des coordonnees
2108 if ( smem(jaux).eq.'NOMAMD ' ) then
2110 call utchs8 ( nomamd, lnomam, smem(jaux+1),
2111 > ulsort, langue, codret )
2121 #ifdef _DEBUG_HOMARD_
2122 if ( codret.eq.0 ) then
2124 call gmprsx (nompro, ncinfo )
2125 call gmprsx (nompro, ncinfo//'.Pointeur' )
2126 call gmprsx (nompro, ncinfo//'.Taille' )
2127 call gmprsx (nompro, ncinfo//'.Table' )
2139 #ifdef _DEBUG_HOMARD_
2140 write (ulsort,90002) '12. Menage ; codret', codret
2143 c 12.1. ==> Structure dediee au deraffinement
2145 if ( codret.eq.0 ) then
2149 call gmlboj ( ntrav4, codret )
2155 c 12.2. ==> Recuperation des sauvegardes dans le cas non conforme
2157 if ( .not. cforme ) then
2159 c 12.2.1. ==> Suppression des mailles temporaires dans les
2162 if ( codret.eq.0 ) then
2164 cgn call gmprsx (nompro,nospec//'.Tab1')
2165 cgn call gmprsx (nompro,nospec//'.Tab3')
2166 cgn call gmprsx (nompro,nospec//'.Tab5')
2168 #ifdef _DEBUG_HOMARD_
2169 write (ulsort,texte(langue,3)) 'PCMAR1', nompro
2171 call pcmar1 ( imem(adarcp),
2172 > imem(adtrcp), imem(adqucp),
2173 > imem(adtecp), imem(adhecp),
2174 > imem(adpecp), imem(adpycp),
2175 > nparrc, nptrrc, npqurc,
2176 > imem(adarrc), imem(adtrrc), imem(adqurc),
2177 > imem(adterc), imem(adherc),
2178 > imem(adperc), imem(adpyrc),
2179 > ulsort, langue, codret )
2183 cgn call gmprsx (nompro,nospec)
2184 cgn call gmprsx (nompro,nospec//'.Tab1')
2185 cgn call gmprsx (nompro,nospec//'.Tab2')
2186 cgn call gmprsx (nompro,nospec//'.Tab3')
2187 cgn call gmprsx (nompro,nospec//'.Tab4')
2188 cgn call gmprsx (nompro,nospec//'.Tab5')
2189 cgn call gmprsx (nompro,nospec//'.Tab6')
2190 cgn call gmprsx (nompro,nospec//'.Tab7')
2192 c 12.2.2. ==> Recopie des historiques et familles
2194 #ifdef _DEBUG_HOMARD_
2195 write (ulsort,90002) '12.2.2. Copie hist/fami - codret', codret
2198 if ( codret.eq.0 ) then
2200 call gmcpoj ( ntrav1, nharet//'.HistEtat', codre1 )
2201 call gmlboj ( ntrav1, codre2 )
2203 codre0 = min ( codre1, codre2 )
2204 codret = max ( abs(codre0), codret,
2207 if ( nbtrto.ne.0 ) then
2209 call gmcpoj ( ntrav2, nhtria//'.HistEtat', codre1 )
2210 call gmlboj ( ntrav2, codre2 )
2212 codre0 = min ( codre1, codre2 )
2213 codret = max ( abs(codre0), codret,
2218 if ( nbquto.ne.0 ) then
2220 call gmcpoj ( ntrav3, nhquad//'.HistEtat', codre1 )
2221 call gmlboj ( ntrav3, codre2 )
2223 codre0 = min ( codre1, codre2 )
2224 codret = max ( abs(codre0), codret,
2237 #ifdef _DEBUG_HOMARD_
2238 write (ulsort,90002) '13. la fin ; codret', codret
2242 if ( codret.ne.0 ) then
2246 write (ulsort,texte(langue,1)) 'Sortie', nompro
2247 write (ulsort,texte(langue,2)) codret
2248 call gmprsx ( nompro , nhnoeu )
2249 if ( nbmapo.gt.0 ) then
2250 call gmprsx ( nompro , nhmapo )
2252 call gmprsx ( nompro , nharet )
2253 if ( nbtrto.gt.0 ) then
2254 call gmprsx ( nompro , nhtria )
2256 if ( nbquto.gt.0 ) then
2257 call gmprsx ( nompro , nhquad )
2259 if ( nbteto.gt.0 ) then
2260 call gmprsx ( nompro , nhtetr )
2262 if ( nbheto.gt.0 ) then
2263 call gmprsx ( nompro , nhhexa )
2265 if ( nbpyto.gt.0 ) then
2266 call gmprsx ( nompro , nhpyra )
2268 if ( nbpeto.gt.0 ) then
2269 call gmprsx ( nompro , nhpent )
2274 #ifdef _DEBUG_HOMARD_
2275 write (ulsort,texte(langue,1)) 'Sortie', nompro