detrui
C DETRUI SOURCE PASCAL 22/06/10 21:15:02 11377 SUBROUTINE DETRUI C C **** OPERATEUR DETR : DETRUIT UN OBJET DE TYPE SUIVANT: C **** CHPOINT,RIGIDITE,MCHAML,LISTREEL,LISTENTI,LISTMOTS,SOLUTION, C **** EVOLUTIO,ELEMENT,ATTACHE C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) character*(8) icara,typob1,charre integer i,ico, icoo, id1, id2, idet, ii, iins, im integer ind, iob, ipile, irat, iret, ireti, iretou integer ith, ithh, ival, ivalre, ktrace, ml integer nbelem,nbnn, nbref, nbsou, nbsous real*8 xvalre logical logr1 character*4 motout(2) character*6 msorse save ktrace -INC PPARAM -INC CCOPTIO -INC CCNOYAU -INC COCOLL -INC CCASSIS -INC SMCOORD -INC SMELEME -INC SMLREEL -INC SMLENTI -INC SMLMOTS -INC TMCOLAC -INC SMTABLE -INC SMLOBJE character*(LONOM) icarb pointeur piles.LISPIL pointeur jcolac.ICOLAC pointeur jlisse.ILISSE pointeur jtlacc.ITLACC data KTRACE /-1/ DATA MOTOUT/'TOUT','TRAC'/ iun=1 icara=' ' IF(IRETOU.EQ.0) THEN RETURN ENDIF call refus ith=0 ith=oothrd if(ith.ne.0) then return endif * verif que l'objet n'est pas dans les queues d'execution if (NBESC.NE.0) then do ithh=1,nbesc idet=0 mesins= mescl(ithh) segact mesins*(mod,ecr=1) do iins=1,nbins mescla=lismes(iins) if (mescla.ne.0) then segact mescla do im=1,100 if (.not.esoplu(im)) then if (esopva(im).eq.iob.and.esopty(im).eq.icara) > idet=nbins-iins+1 endif enddo segdes mescla else write(6,*) ' mescla nul iins nbins ithh',iins,nbins,ithh endif enddo if (idet.ne.0) then * objet en queue d'execution. On attend 20 if(nbins.ge.idet) then ** write(6,*)'on attend la fin de l''assistant nbins',ithh,nbins segdes mesins*record segact mesins*(mod,ecr=1) go to 20 endif endif segdes mesins*record enddo * blocage des assistants en fin d'instruction mestra=imestr segact mestra*mod segdes mestra endif * plus rien en attente d'execution. on peut detruire call ooohor(0) icarb=' ' ICOO=0 IF(IPSAUV.NE.0) THEN ICOLAC=IPSAUV SEGACT ICOLAC ILISSE=ILISSG SEGACT ILISSE*MOD ENDIF C Activation des piles de communication si elles existent if(piComm.gt.0) then piles=piComm segact piles do ipile=1,piles.proc(/1) jcolac= piles.proc(ipile) if(jcolac.ne.0) then segact jcolac jlisse=jcolac.ilissg segact jlisse*mod endif enddo endif if( iretou.ne.0) then * tc on prefere ne rien faire! if(iretou.gt.0) goto 10000 typob1=' ' segact mtable ml=mlotab ind=mtabii(2) > ivalre,xvalre,charre,logr1,id1) if (ierr.ne.0) goto 10000 * if (typob1.eq.'CHPOINT'.or.typob1.eq.'MCHAML')then if (typob1.eq.'MCHAML')then do i=2,ml segact mtable ind=mtabii(i) > typob1,ivalre,xvalre,charre,logr1,id2) if (ierr.ne.0) goto 10000 * if (typob1.eq.'CHPOINT') call fuchpo(id1,id2,iretou) enddo endif GOTO 5000 endif if(ival.eq.1) then if( ierr.ne.0) goto 10000 ktrace=ival goto 10000 endif IF (IRETOU.EQ.1) THEN IRETI=IRET GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET MLREEL=IRET msorse='MLREEL' IF(ktrace.eq.mlreel) ktrace=-ktrace SEGSUP MLREEL GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET MLENTI=IRET msorse='MLENTI' if(ktrace.eq.mlenti) ktrace=-ktrace SEGSUP MLENTI GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET MLMOTS=IRET msorse='MLMOTS' if(ktrace.eq.mlmots) ktrace=-ktrace SEGSUP MLMOTS GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET MELEME=IRET SEGACT MELEME*MOD IF(IRAT.EQ.1) THEN NBSOU=LISOUS(/1) IF(NBSOU.GT.0) THEN IF(IPSAUV.NE.0) THEN ICOLAC = IPSAUV ITLACC = KCOLA(ICO) SEGACT ITLACC*MOD ENDIF if(piComm.gt.0) then do ipile=1,piles.proc(/1) jcolac= piles.proc(ipile) if(jcolac.ne.0) then jlisse=jcolac.ilissg jtlacc=jcolac.kcola(ico) segact jtlacc*mod endif enddo endif DO 1080 I=1,LISOUS(/1) IPT1=LISOUS(I) msorse='MELEME' if( ktrace.eq.ipt1) ktrace=-ktrace SEGSUP IPT1 IF(IPSAUV.NE.0) then segdes ITLACC endif C Suppression du maillage des piles d'objets communiques if(piComm.gt.0) then do ipile=1,piles.proc(/1) jcolac= piles.proc(ipile) if(jcolac.ne.0) then jlisse=jcolac.ilissg jtlacc=jcolac.kcola(ico) segdes jtlacc endif enddo endif 1080 CONTINUE IF(IPSAUV.NE.0) THEN SEGDES ITLACC ENDIF if(piComm.gt.0) then do ipile=1,piles.proc(/1) jcolac= piles.proc(ipile) if(jcolac.ne.0) then jlisse=jcolac.ilissg jtlacc=jcolac.kcola(ico) segdes jtlacc endif enddo endif ENDIF ENDIF NBNN=0 NBELEM=0 NBREF=0 NBSOUS=0 ITYPEL=0 SEGADJ MELEME GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET II=MCOORD MCOORD=IRET IF(IRET.EQ.II) goto 10000 * SEGSUP MCOORD segdes mcoord MCOORD=II GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET GO TO 5000 ENDIF IF (IRETOU.EQ.1) THEN IRETI=IRET MLOBJE=IRET msorse='MLOBJE' if (ktrace.eq.mlobje) ktrace=-ktrace SEGSUP, MLOBJE GO TO 5000 ENDIF C L OPERATEUR DETRUIRE IGNORE LES AUTRE TYPES LUS (ENTIER, etc.) GOTO 10000 5000 CONTINUE IF(ith.eq.0.and.ICARB.NE.' ') IF( IPSAUV.NE.0) THEN IF(ICOO.NE.0) THEN ITLACC = KCOLA(ICOO) SEGACT ITLACC*MOD SEGDES ITLACC ENDIF ENDIF C Desactivation des piles de communication si elles existent if(piComm.gt.0) then if(icoo.ne.0) then do ipile=1,piles.proc(/1) jcolac= piles.proc(ipile) if(jcolac.ne.0) then jlisse=jcolac.ilissg jtlacc=jcolac.kcola(icoo) segact jtlacc*mod segdes jtlacc endif enddo endif endif if(ktrace.le.-2) then ktrace = abs(ktrace) interr(1)=ktrace moterr(1:8)=icara moterr(9:14)=msorse CALL ANABAC endif * liberer les assistants 10000 continue IF( IPSAUV.NE.0) THEN SEGDES ILISSE,ICOLAC ENDIF C Desactivation des piles de communication si elles existent if(piComm.gt.0) then do ipile=1,piles.proc(/1) jcolac= piles.proc(ipile) if(jcolac.ne.0) then jlisse=jcolac.ilissg segdes jlisse,jcolac endif enddo segdes piles endif END
© Cast3M 2003 - Tous droits réservés.
Mentions légales