C CHKESC SOURCE PV 12/07/09 21:15:00 7430 SUBROUTINE CHKESC(irt,imena) * chkesc regarde si il y a dans l'instruction un objet de type // * si c'est le cas, il rajoute assi tous dans l'instruction IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) character*8 typobj,charre logical logr1,logr2,ltelq character*4 lesmot(6),lesmo2(8) * lesmot = liste des opérateurs gérant les objest esclaves data lesmot/'ASSI','LIST','DETR','ETG ','DIME','TYPE'/ * lesmo2 = liste des opérateurs demandant une fusion des objets * avant de les appeler data lesmo2/'MASQ','MAXI','MINI','TYPE','EXIS' > ,'FORM','NLOC','TRAC'/ * * pour tout autre opérateur en présence de table esclave * (sauf de type chpoint ou rigidite) * on insere "assis tous" au début de la phrase gibiane * sans faire de fusion. (les tables esclave de chpoint, de rigidite * et de logique sont toujours assemblée) * en sortie : irt=1 veut dire allez dans assistant * : imena=0 veut dire ne pas faire de menage tout de suite * car fusion sans remplacement dans table des objets -INC CCNOYAU -INC SMTABLE -INC CCOPTIO dimension iaz(100) * write(6,*) ' entree dans chkes' ltelq=.true. iredu=0 irt=0 iluob=0 imena=1 * write(6,*) ' entrée dans chkesc' call lirmot(lesmot,6,iv,0) if (iv.ne.0) then call refus * write (6,*) ' chkesc ',lesmot(iv) return endif call lirmot(lesmo2,8,iv,0) if (iv.ne.0) then call refus iredu=1 * write (6,*) ' chkesc reduction ',lesmo2(iv) endif * * ibloqm =0 permet à gibiane de lire au delà des mots ibloqm=0 * call lirobj('MCHAML',iret,0,iretou) * if (iretou.ne.0) then * call refus * iredu=1 * endif call lirobj('PROCEDUR',iret,0,iretou) if (iretou.ne.0) then call refus return endif ibloqm=1 iasss=0 do 10 iccc=1,100 iblqm=0 call lirtab('ESCLAVE',mtable,0,iretou) * write(6,*) ' mtable iretou', mtable,iretou iluob=iluob+1 iaz(iluob)=imotlu iblqm=1 * write (6,*) ' chkesc lectab iret iretou ',lectab,iret,iretou if (iretou.eq.0) then if(iasss.eq.1)then go to 100 else return endif endif typobj=' ' segact mtable ml=mlotab ind=mtabii(2) * write (6,*) ' ml ind ',ml,ind call acctab(mtable,'ENTIER',ind,0.d0,' ',.true.,0,typobj,ivalre, > xvalre,charre,logr1,id1) if (ierr.ne.0) return * write (6,*) ' type de la table ',typobj if ((typobj.eq.'MCHAML'.or.typobj.eq.'MMODEL'.or. > typobj.eq.'MAILLAGE'.or.typobj.eq.'ENTIER') > .and.iredu.eq.0) then iasss=1 go to 10 endif if (typobj.eq.'CHPOINT'.or.typobj.eq.'RIGIDITE'.or. > typobj.eq.'LOGIQUE'.or.typobj.eq.'MCHAML'.or. > typobj.eq.'MMODEL'.OR.typobj.eq.'MAILLAGE'.OR. > typobj.eq.'MATRIK' > ) then do i=3,ml segact mtable ind=mtabii(i) * write (6,*) ' i ind ',i,ind call acctab(mtable,'ENTIER',ind,0.d0,' ',.true.,0,typobj,ivalre, > xvalre,charre,logr2,id2) if (ierr.ne.0) return if (typobj.eq.'CHPOINT') call fuchpo(id1,id2,iretou) if (typobj.eq.'RIGIDITE') call fusrig(id1,id2,iretou) if (typobj.eq.'MATRIK' ) call fusmtk(id1,id2,iretou) if (typobj.eq.'LOGIQUE') logr1=logr1.or.logr2 if (typobj.eq.'MCHAML') call fuschl(id1,id2,iretou) if (typobj.eq.'MMODEL') call fusmod(id1,id2,iretou) if (typobj.eq.'MAILLAGE') call fuse(id1,id2,iretou,ltelq) id1=iretou enddo if (typobj.eq.'LOGIQUE') call poslog(logr1,id1) if(typobj.eq.'MATRIK'.or.typobj.eq.'MCHAML'.or.typobj.eq.'MMODEL' $ .or.typobj.eq.'MAILLAGE')then imena=0 endif call rmpgbn(mtable,id1,typobj) * write (6,*) ' reduction de l objet ',typobj else * write (6,*) ' type ',typobj,' inconnu dans chkesc ' call trbac call erreur(5) endif 10 continue * 100 continue * call refus do iazi=1,iluob imotlu=iaz(iazi) jpoob1(imotlu)=.TRUE. IF(IBPILE.GT.IMOTLU) IBPILE=IMOTLU IF(IHPILE.LT.IMOTLU) IHPILE=IMOTLU enddo charre=' ' call lircha(charre,0,iretou) if (iretou.ne.0) call refus if (iretou.eq.0) return * write (6,*) ' parallelisation de l instruction ',charre ** call trbac irt=1 * call ecrcha('TOUS') * call ecrcha('ASSI') end