menag6
C MENAG6 SOURCE PV090527 24/07/18 21:15:02 11964 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C======================================================================= C TABLEAU KCOLA: VOIR SIGNIFICATION DANS SOUS-PROGRAMME TYPFIL C======================================================================= CHARACTER*8 MODYN SEGMENT ISLIS(NP) SEGMENT IBLIS(ISLIS(/1)) * SEGMENT BIDON POUR REMPLACER LES TROP NOMBREUSES * DECLARATION SEGMENT ISEG(0) * POINTEUR PTR.MATRAK -INC TMCOLAC -INC PPARAM -INC CCOPTIO -INC CCNOYAU -INC SMTEXTE -INC SMMODEL *-INC SMLREEL *-INC SMLENTI -INC SMCHARG -INC SMEVOLL *-INC SMLMOTS * -INC SMVECTE TROP DE DECLARATION INTEGER AVEC ESOPE * -INC SMVECTD DECLARATION CONFLICTUELLE AVEC SMVECTE *-INC SMLCHPO -INC SMBASEM -INC SMBLOC -INC SMNUAGE -INC SMSUPER -INC SMANNOT C-INC SMMATRAK -INC CCASSIS -INC SMLOBJE C************************************************************************* C C REPERAGE ET STOKAGE DES MATRICES ELEMENTAIRES puis assemblees C * LGEOC SPG de la pression et/ou des multiplicateurs de Lagrange * (points CENTRE ) pour chaque operateur de contrainte * KGEOC SPG pour la totalite des points CENTRE. * KGEOS SPG pour la totalite des points SOMMET (Diagonale vitesse) * KLEMC Connectivites de l'ensemble des contraintes * LIZAFM(NBSOUS) contient les pointeurs IZAFM des sous-zones SEGMENT MATRAK INTEGER LGEOC(NBOP),IDEBS(NBOP),IFINS(NBOP) INTEGER LIZAFM(NBSOUS) INTEGER IKAM0 (NBSOUS) INTEGER IMEM (NBELC) INTEGER KLEMC,KGEOS,KGEOC,KDIAG,KCAC,KIZCL,KIZGC ENDSEGMENT SEGMENT IZAFM REAL*8 AM(NNELP,NP,IESP),RPGI(NELAX) ENDSEGMENT POINTEUR IPMJ.IZAFM,IPMK.IZAFM C******************************************************************* -INC SMMATRK1 MODYN='DYNAMIQU' ISLIS = IPLIS * ICOLAC = IPOLAC * * CAS DES MLREEL * ITLACC=KCOLA(18) IF (ITLAC(/1).EQ.0) GOTO 190 DO 181 I=1,ITLAC(/1) * MLREEL=ITLAC(I) * ISLIS((MLREEL-1)/npgcd)=1 * SEGDES MLREEL ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 181 CONTINUE 190 CONTINUE * * CAS DES MLENTI * ITLACC=KCOLA(19) IF (ITLAC(/1).EQ.0) GOTO 200 DO 191 I=1,ITLAC(/1) * MLENTI=ITLAC(I) * ISLIS((**-1)/npgcd)=MLENTI * SEGDES MLENTI ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 191 CONTINUE 200 CONTINUE * * CAS DES MCHARG * ITLACC=KCOLA(20) IF (ITLAC(/1).EQ.0) GOTO 210 DO 201 I=1,ITLAC(/1) MCHARG=ITLAC(I) SEGACT MCHARG ISLIS((MCHARG-1)/npgcd)=1 DO 202 J=1,KCHARG(/1) ICHARG=KCHARG(J) ISLIS((ICHARG-1)/npgcd)=1 SEGACT ICHARG ISEG=ICHPO1 ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG ISEG=ICHPO2 IF (ISEG.NE.0) THEN ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG IF(CHATYP.NE.'TABLE '.AND.CHATYP.NE.'LISTOBJE') THEN ISEG=ICHPO3 ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG ENDIF ENDIF IF(CHAMOB(J).EQ.'TRAN') THEN ISEG=ICHPO6 ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG ISEG=ICHPO7 ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG ELSEIF(CHAMOB(J).EQ.'ROTA') THEN ISEG=ICHPO6 ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG ISEG=ICHPO7 ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG ELSEIF(CHAMOB(J).EQ.'TRAJ') THEN ISEG=ICHPO4 ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG ISEG=ICHPO6 ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG ENDIF SEGDES ICHARG 202 CONTINUE SEGDES MCHARG 201 CONTINUE 210 CONTINUE * * CAS DES MEVOLL * ITLACC=KCOLA(22) IF (ITLAC(/1).EQ.0) GOTO 230 DO 221 I=1,ITLAC(/1) MEVOLL=ITLAC(I) SEGACT MEVOLL ISLIS((MEVOLL-1)/npgcd)=1 DO 222 J=1,IEVOLL(/1) KEVOLL=IEVOLL(J) ISLIS((KEVOLL-1)/npgcd)=1 SEGACT KEVOLL ISEG=IPROGX ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG ISEG=IPROGY ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG SEGDES KEVOLL 222 CONTINUE SEGDES MEVOLL 221 CONTINUE 230 CONTINUE * * CAS DES SUPERELEMENTS * ITLACC=KCOLA(23) IF (ITLAC(/1).EQ.0) GOTO 240 DO 231 I=1,ITLAC(/1) MSUPER=ITLAC(I) segact msuper iseg=mdnorr if( iseg. ne. 0) then ISLIS((iseg-1)/npgcd)=1 segdes iseg endif ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 231 CONTINUE 240 CONTINUE * * CAS DES LOGIQUES FLOTTANT ENTIER MOT RIEN A FAIRE * * * CAS DES TEXTES * ITLACC=KCOLA(28) IF (ITLAC(/1).EQ.0) GOTO 290 DO 281 I=1,ITLAC(/1) MTEXTE=ITLAC(I) ISLIS((MTEXTE-1)/npgcd)=1 SEGACT MTEXTE MTRADU=MTRADC IF (MTRADU.NE.0) THEN ISLIS((MTRADU-1)/npgcd)=1 SEGDES MTRADU ENDIF SEGDES MTEXTE 281 CONTINUE 290 CONTINUE * * CAS DES LISTMOTS * ITLACC=KCOLA(29) IF (ITLAC(/1).EQ.0) GOTO 300 DO 291 I=1,ITLAC(/1) * MLMOTS=ITLAC(I) * ISLIS((MLMOTS-1)/npgcd)=1 * SEGDES MLMOTS ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 291 CONTINUE 300 CONTINUE * * CAS DES VECTEURS * ITLACC=KCOLA(30) IF (ITLAC(/1).EQ.0) GOTO 310 DO 301 I=1,ITLAC(/1) * MVECTE=ITLAC(I) * ISLIS((MVECTE-1)/npgcd)=1 * SEGDES MVECTE ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 301 CONTINUE 310 CONTINUE * * CAS DES VECTD ON ECRIT ISEG CAR ON NE PEUT PAS FAIRE -INC MVECTD * ITLACC=KCOLA(31) IF (ITLAC(/1).EQ.0) GOTO 320 DO 311 I=1,ITLAC(/1) * MVECTD=ITLAC(I) * ISLIS((MVECTD-1)/npgcd)=1 * SEGDES MVECTD ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 311 CONTINUE 320 CONTINUE * * CAS DES POINTS RIEN A FAIRE * * * CAS DES CONFIG NE SURTOUT PAS UTILISER MCOORD (DANS CCOPTIO) * ITLACC=KCOLA(33) IF (ITLAC(/1).EQ.0) GOTO 340 DO 331 I=1,ITLAC(/1) ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 331 CONTINUE 340 CONTINUE * * CAS DES MLCHPO * ITLACC=KCOLA(34) IF (ITLAC(/1).EQ.0) GOTO 350 DO 341 I=1,ITLAC(/1) * MLCHPO=ITLAC(I) * ISLIS((MLCHPO-1)/npgcd)=1 * SEGDES MLCHPO ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 341 CONTINUE 350 CONTINUE * * CAS DES MBASEM * ITLACC=KCOLA(35) IF (ITLAC(/1).EQ.0) GOTO 360 DO 351 I=1,ITLAC(/1) MBASEM=ITLAC(I) ISLIS((MBASEM-1)/npgcd)=1 SEGACT MBASEM DO 352 J=1,LISBAS(/1) MSOBAS=LISBAS(J) ISLIS((MSOBAS-1)/npgcd)=1 SEGDES MSOBAS 352 CONTINUE SEGDES MBASEM 351 CONTINUE 360 CONTINUE * * CAS DES PROCEDUR * MTTRY=MTXBL ITLACC=KCOLA(36) ITLAC1=KCOLA(37) IF (ITLAC(/1).EQ.0) GOTO 370 DO 361 I=1,ITLAC(/1) MBLA1=ITLAC(I) MBLO1=IPIPR1(MBLA1) * LES PROCEDURES EN NEGATIFS NE SONT PAS ENCORE MISES EN SEGMENT IF (MBLO1.LE.0) GOTO 361 ISLIS((MBLO1-1)/npgcd)=1 SEGACT MBLO1 ISLIS((MBLO1.ISPOTE-1)/npgcd)=1 IARGUM=MBLO1.MARGUM ISLIS((IARGUM-1)/npgcd)=1 SEGACT IARGUM MTXBI3=MTXBB ISLIS((MTXBI3-1)/npgcd)=1 SEGDES MTXBI3 MTXFL3=MTXFLO IF( MTXFL3.NE.0) THEN SEGDES MTXFL3 ISLIS((MTXFL3-1)/npgcd)=1 ENDIF SEGDES IARGUM MTXBLC=MBLO1.MTXBL IF (MTXBLC.NE.0) THEN ISLIS((MTXBLC-1)/npgcd)=1 C SEGACT MTXBLC C DO 362 J=1,MTXBLC(/1) C MTXBLL=MTXBLC(J) C ISLIS((MTXBLL-1)/npgcd)=1 C SEGDES MTXBLL C 362 CONTINUE SEGDES MTXBLC ENDIF * MSAPI3=MBLO1.MSAPII * IF (MSAPI3.NE.0) THEN * ISLIS((MSAPI3-1)/npgcd)=1 * SEGDES MSAPI3 * ENDIF MPROCE=MBLO1.MPROCD IF (MPROCE.NE.0) THEN ISLIS((MPROCE-1)/npgcd)=1 SEGDES MPROCE ENDIF * ON MET DANS LA PILE DES BLOCS LES BLOCS CONTENUS DANS LA PROCEDURE DO 363 J=MBLO1.MDEOBJ,MBLO1.MFIOBJ IF (INOOB2(J).EQ.'BLOC ') THEN ITLAC1.ITLAC(**)=IOUEP2(J) ENDIF 363 CONTINUE IF (MBLO1.NE.MBLOC) SEGDES MBLO1 361 CONTINUE * reactiver la precompilation du bloc courant MTXBLC=MBLOC.MTXBL IF(MTXBLC.NE.0) SEGACT MTXBLC 370 CONTINUE * * CAS DES BLOC * ITLACC=KCOLA(37) DO 375 J=1,LMNNOM IF (INOOB2(J).EQ.'BLOC ') THEN ITLAC(**)=IOUEP2(J) ENDIF 375 CONTINUE IF (ITLAC(/1).EQ.0) GOTO 378 DO 371 I=1,ITLAC(/1) MBLO1=ITLAC(I) ISLIS((MBLO1-1)/npgcd)=1 SEGACT MBLO1 ISLIS(( MBLO1.ISPOTE-1)/npgcd)=1 MTXBLC=MBLO1.MTXBL IF (MTXBLC.NE.0) THEN ISLIS((MTXBLC-1)/npgcd)=1 C SEGACT MTXBLC C DO 372 J=1,MTXBLC(/1) C MTXBLL=MTXBLC(J) C ISLIS((MTXBLL-1)/npgcd)=1 C SEGDES MTXBLL C 372 CONTINUE IF (MBLO1.NE.MBLOC) SEGDES MTXBLC ENDIF mtresu=mblo1.itresu IF( MTRESU.NE.0) THEN SEGDES MTRESU ISLIS((MTRESU-1)/npgcd)=1 ENDIF IF (MBLO1.NE.MBLOC) SEGDES MBLO1 371 CONTINUE 378 CONTINUE * * ON MET EGALEMENT LA CHAINE DES BLOCS MONTANTES CAR CEUX OU ON * SE TROUVE PEUVENT AVOIR ETE CREE DANS PROCED (DUPLICATION) * MBLO1=MBLOC 373 CONTINUE SEGACT MBLO1 ISLIS((MBLO1-1)/npgcd)=1 ISLIS((MBLO1.ISPOTE-1)/npgcd)=1 MTXBLC=MBLO1.MTXBL IF (MTXBLC.NE.0) THEN ISLIS((MTXBLC-1)/npgcd)=1 C SEGACT MTXBLC C DO 374 J=1,MTXBLC(/1) C MTXBLL=MTXBLC(J) C ISLIS((MTXBLL-1)/npgcd)=1 C SEGDES MTXBLL C 374 CONTINUE IF (MBLO1.NE.MBLOC) SEGDES MTXBLC ENDIF IARGUM=MBLO1.MARGUM IF (IARGUM.NE.0) THEN ISLIS((IARGUM-1)/npgcd)=1 SEGACT IARGUM MTXBI3=MTXBB ISLIS((MTXBI3-1)/npgcd)=1 SEGDES MTXBI3 MTXFL3=MTXFLO IF( MTXFL3.NE.0) THEN SEGDES MTXFL3 ISLIS((MTXFL3-1)/npgcd)=1 ENDIF SEGDES IARGUM ENDIF * MSAPI3=MBLO1.MSAPII * IF (MSAPI3.NE.0) THEN * ISLIS((MSAPI3-1)/npgcd)=1 * SEGDES MSAPI3 * ENDIF MPROCE=MBLO1.MPROCD IF (MPROCE.NE.0) THEN SEGACT MPROCE ISLIS((MPROCE-1)/npgcd)=1 ISLIS((LTTINT-1)/npgcd)=1 ISLIS((KTABNO-1)/npgcd)=1 ISLIS((MPOOB-1)/npgcd)=1 SEGDES MPROCE ENDIF * WRITE (6,*) ' BLOC DANS LA CHAINE MONTANTE ',MBLO1 MBLSU=MBLO1.MBLSUP IF (MBLSU.NE.0) THEN SEGDES MBLO1 MBLO1=MBLSU GOTO 373 ENDIF SEGDES MBLO1 SEGACT MBLOC*MOD ISLIS((ISPOTE-1)/npgcd)=1 ISLIS((ITTINT-1)/npgcd)=1 ISLIS((JPOOB-1)/npgcd)=1 ISLIS((ITABNO-1)/npgcd)=1 380 CONTINUE MTXBLC = MTTRY IF(MTXBLC.NE.0) SEGACT MTXBLC * * Cas du MMODEL * ITLACC = KCOLA(38) IF (ITLAC(/1).EQ.0) GOTO 390 DO 381 I=1,ITLAC(/1) MMODEL = ITLAC(I) ISLIS((MMODEL-1)/npgcd)=1 SEGACT,MMODEL DO 382 J=1,KMODEL(/1) IMODEL = KMODEL(J) ISLIS((IMODEL-1)/npgcd)=1 SEGACT IMODEL NFOR=FORMOD(/1) * IF(NFOR.EQ.2.OR.FORMOD(1).EQ.'MECANIQUE'.OR. * $ FORMOD(1).EQ.'POREUX')THEN do IO=3,INFMOD(/1) if(infmod(io).gt.0)then iseg= infmod(io) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG endif enddo * ENDIF do io=1,lnomid(/1) if(lnomid(io).ne.0) then iseg=lnomid(io) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG endif enddo do il = 1,ivamod(/1) MODYN=tymode(il) Jtc=0 if( jtc.ne.0) go to 3819 c... kich si pas un vrai objet par defaut ce sont des imodel imode1=ivamod(il) islis((imode1-1)/npgcd)=1 segact imode1 c... kich espere qu un niveau de recursivite suffit ... segdes imode1 3819 continue enddo SEGDES,IMODEL 382 CONTINUE segdes MMODEL * END DO 381 CONTINUE * END DO 390 CONTINUE * * Cas du MCHAML * ITLACC = KCOLA(39) IF (ITLAC(/1).EQ.0) GOTO 400 400 CONTINUE * * CAS DES MINTE * ITLACC=KCOLA(40) IF (ITLAC(/1).EQ.0) GOTO 410 DO 401 I=1,ITLAC(/1) ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 401 CONTINUE 410 CONTINUE * * CAS DES NUAGEs * ITLACC=KCOLA(41) IF (ITLAC(/1).EQ.0) GOTO 420 DO 411 I=1,ITLAC(/1) MNUAGE=ITLAC(I) ISLIS((MNUAGE-1)/npgcd)=1 SEGACT MNUAGE IF(NUAPOI(/1).EQ.0) GO TO 411 DO 412 K=1,NUAPOI(/1) ISEG=NUAPOI(K) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 412 CONTINUE SEGDES MNUAGE 411 CONTINUE 420 CONTINUE * * CAS DES MATRAK * ITLACC=KCOLA(42) IF (ITLAC(/1).EQ.0) GOTO 430 DO 421 I=1,ITLAC(/1) MATRAK=ITLAC(I) ISLIS((MATRAK-1)/npgcd)=1 SEGACT MATRAK DO 422 I1=1,LIZAFM(/1) PTR=LIZAFM(I1) ISLIS((PTR-1)/npgcd)=1 SEGDES PTR 422 CONTINUE IF(KIZCL.NE.0)THEN IZL=KIZCL SEGACT IZL ISLIS((IZL-1)/npgcd)=1 IF(KZA1.NE.0)THEN IDMAT=KZA1 ISLIS((IDMAT-1)/npgcd)=1 SEGACT IDMAT PTR=IDIAG SEGDES PTR ISLIS((PTR-1)/npgcd)=1 NBLK=IDESCR(/1) DO 423 I1=1,NBLK PTR=IDESCR(I1) IDBLK=PTR SEGDES PTR ISLIS((IDBLK-1)/npgcd)=1 SEGACT IDBLK PTR=IMAT ISLIS((PTR-1)/npgcd)=1 SEGDES PTR SEGDES IDBLK 423 CONTINUE SEGDES IDMAT ENDIF SEGDES IZL ENDIF SEGDES MATRAK 421 CONTINUE 430 CONTINUE * * CAS DES MATRIK * ITLACC=KCOLA(43) IF (ITLAC(/1).EQ.0) GOTO 440 440 CONTINUE * * Cas des OBJET * ITLACC=KCOLA(44) IF (ITLAC(/1).EQ.0) GOTO 450 DO 441 I=1,ITLAC(/1) ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 441 CONTINUE 450 CONTINUE * * Cas des ESCLAVE * ITLACC=KCOLA(46) * print*, ' Cas des ESCLAVE ITLACC', ITLACC,'NB', ITLAC(/1) IF (ITLAC(/1).EQ.0) GOTO 460 DO 451 I=1,ITLAC(/1) ISEG=ITLAC(I) * write (6,*) ' menag6 esclave ajout de mesres ',iseg ISLIS((ISEG-1)/npgcd)=1 mesres = ISEG SEGDES mesres 451 CONTINUE * ajouter les segments des piles d'instructions des assistants do ith=1,nbesc mesins=mescl(ith) segact mesins do ins=1,nbins mescla=lismes(ins) ISLIS((mescla-1)/npgcd)=1 enddo if (inscou.ne.0) ISLIS((inscou-1)/npgcd)=1 segdes mesins enddo 460 CONTINUE * * cas des ielval * ITLACC=KCOLA(48) IF (ITLAC(/1).EQ.0) GOTO 470 DO 461 I=1,ITLAC(/1) ISEG=ITLAC(I) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG 461 CONTINUE 470 CONTINUE * * cas des annotations * ITLACC=KCOLA(49) IF (ITLAC(/1).EQ.0) GOTO 480 DO 471 I=1,ITLAC(/1) mannot=ITLAC(I) segact mannot do ianno=1,isegt(/1) iseg=isegt(ianno) ISLIS((ISEG-1)/npgcd)=1 SEGDES ISEG enddo iseg=mannot ISLIS((ISEG-1)/npgcd)=1 SEGDES mannot 471 continue 480 CONTINUE * * cas des LISTOBJE * ITLACC=KCOLA(50) IF (ITLAC(/1).EQ.0) GOTO 490 DO 481 I=1,ITLAC(/1) MLOBJE=ITLAC(I) SEGACT,MLOBJE ** write(6,*) ' menag6 mlobje ',mlobje ISLIS((MLOBJE-1)/npgcd)=1 IF (TYPOBJ.EQ.'POINT ') GOTO 483 IF (TYPOBJ.EQ.'ENTIER ') GOTO 483 IF (TYPOBJ.EQ.'MOT ') GOTO 483 C IF (LISOBJ(/1).LE.0) GOTO 481 DO 482 J=1,LISOBJ(/1) ISEG=LISOBJ(J) C IF (ISEG.LE.0) GOTO 482 ISLIS((ISEG-1)/npgcd)=1 SEGDES,ISEG 482 CONTINUE 483 CONTINUE SEGDES,MLOBJE 481 CONTINUE 490 CONTINUE * RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales