actobj
C ACTOBJ SOURCE OF166741 24/11/14 21:15:02 12078 C____________________________________________________________________ C C OBJET : Cette SUBROUTINE permet d''activer/desactiver un OBJET C de Cast3M contenu dans le DATA DTAOBJ C C ENTREES : C °°°°°°°°° C C CTYPE Type d'objet a activer C IPOIN Pointeur sur l'objet a activer C IKOD ENTIER valant 0 pour SEGDES C 1 pour SEGACT de l'objet C C SORTIE : C °°°°°°°° C R.A.S l'objet et son contenu sont actives C_____________________________________________________________________ C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCPRECO C-INC CCASSIS -INC SMCHAML -INC SMINTE -INC SMCHPOI -INC SMLCHPO -INC SMMODEL -INC SMEVOLL -INC SMELEME -INC SMNUAGE -INC SMCHARG -INC SMRIGID -INC SMANNOT SEGMENT JPOINT(0) SEGMENT IPOINT(0) SEGMENT ISEG(0) SEGMENT ITAB(NNN) PARAMETER(NBTYP=14) CHARACTER*(*)CTYPE CHARACTER*8 CTYP1,DTAOBJ(NBTYP),MOT8a CHARACTER*16 MOT16 LOGICAL BCODE,BSEG DATA DTAOBJ/'MCHAML ','CHPOINT ','MMODEL ','MAILLAGE', & 'EVOLUTIO','LISTMOTS','LISTREEL','LISTENTI', & 'NUAGE ','LISTCHPO','CHARGEME','ANNULE ', & 'RIGIDITE','ANNOTATI' / MMODE2 = 0 CTYP1 = CTYPE IF(IERR .NE. 0) RETURN IF(IPLAC.EQ.0 .OR. IPLAC.EQ.12)RETURN C Les arguments optionnels dans les PROCEDURES sont de type ANNULE(12) s'ils sont absents IF(IPOIN .LE. 0) THEN PRINT *,'ACTOBJ POINTEUR INVALIDE - TYPE ''',CTYP1, & ''' - POINTEUR ',IPOIN C J'essaye de declencher un GEMAT_ERROR pour la capturer avec gdb CALL TRBAC ISEG=IPOIN SEGACT,ISEG ENDIF IPOI1 = IPOIN BCODE = IKOD .EQ. 0 C Portion a activer pour des recherches de SEGDES inutiles ! IF(.FALSE.)THEN C Verification rapide de l'etat du SEGMENT IPOI1 CALL OOOETA(IPOI1,IETA,IMOD) IF(BCODE)THEN C Il est inactif et on veut SEGDES ==> RETURN IF(IETA.EQ.2) RETURN ELSE C Recherche de SEGMENT qui n'ont pas de raison d'etre desactives C -Empecher le MENAGE dans PILOT pour ce test d'optimisation C -Remettre l'include CCASSIS.INC C IF(IETA.EQ.2 .AND. IMOD.NE.1) THEN C CALL oooho1(IPOI1,IHO1) C IF(MOD(IHO1,NBTHRS+1) .EQ. oothrd)THEN C CALL OOOMES(IPOI1,' ZARBI:'//CTYP1) C STOP 16 C ENDIF C ENDIF C Il est actif *NOMOD et on veut SEGACT ==> RETURN IF(IETA.EQ.1 .AND. IMOD.EQ.0) RETURN ENDIF ENDIF IOBJ = 0 IPOINT= 0 JPOINT= 0 BSEG =.FALSE. C Initialisation des SEGMENTS de preconditionnement nth=oothrd+1 ITAB=PACTOB(nth) IF(ITAB .EQ. 0)THEN NNN=50 SEGINI,ITAB PACTOB(nth)=ITAB ELSE SEGACT,ITAB*MOD ENDIF ICOUNT =1 C En premiere case on met la taille utile du tableau ITAB(1)=1 1 CONTINUE IF(IPLAC.EQ.0) THEN C PRINT *,'ACTOBJ.ESO :',CTYP1,' NON TRAITE ENCORE' GOTO 9999 ENDIF GOTO (100,200,300,400,500,600,600,600,700,600,800,9999,900 & ,1000),IPLAC PRINT *,'ACTOBJ ERROR:',IPLAC GOTO 9999 100 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C OBJET DE TYPE MCHAML CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MCHEL1=IPOI1 MELSAV=0 CALL oooprl(1) SEGACT,MCHEL1 if (mchel1.infche(/2) .ne. 6) then write(ioimp,*) 'ACTOBJ : MCHELM =',MCHEL1,' INFCHE(/2) != 6' endif do ii = 1, mchel1.ichaml(/1) jj = mchel1.infche(ii,6) if (jj.LT.1 .OR. jj.GT.9) then write(ioimp,*)'ACTOBJ : MCHELM =',MCHEL1,' support INFCHE(', & jj,'6) incorrect' endif enddo DO 111 II=1,MCHEL1.ICHAML(/1) MCHAM1=MCHEL1.ICHAML(II) SEGACT,MCHAM1 111 CONTINUE CALL oooprl(0) DO 110 II=1,MCHEL1.ICHAML(/1) MCHAM1=MCHEL1.ICHAML(II) IPT1=MCHEL1.IMACHE(II) MINTE = MCHEL1.INFCHE(II,4) DO 120 JJ=1,MCHAM1.IELVAL(/1) MOT16 =MCHAM1.TYPCHE(JJ) MELVA1=MCHAM1.IELVAL(JJ) IF(MELVA1 .EQ. MELSAV) GOTO 120 MELSAV=MELVA1 IF (MOT16(1:6) .EQ. 'REAL*8' .OR. & MOT16(1:13) .EQ. 'POINTEURPOINT' )THEN ELSEIF(MOT16(1:12) .EQ. 'POINTEURLIST')THEN SEGACT,MELVA1 IPOI2 = 0 DO 130 KK=1,MELVA1.IELCHE(/2) DO 140 LL=1,MELVA1.IELCHE(/1) ISEG=MELVA1.IELCHE(LL,KK) IF(ISEG .NE. IPOI2 .AND. ISEG.NE.0)THEN IPOI2 = ISEG ENDIF 140 CONTINUE 130 CONTINUE ELSEIF(MOT16(1:16) .EQ. 'POINTEUREVOLUTIO')THEN SEGACT,MELVA1 IPOI2 = 0 DO 150 KK=1,MELVA1.IELCHE(/2) DO 160 LL=1,MELVA1.IELCHE(/1) MEVOL1=MELVA1.IELCHE(LL,KK) IF(MEVOL1 .NE. IPOI2 .AND. MEVOL1.NE.0)THEN IPOI2 = MEVOL1 SEGACT,MEVOL1 DO 170 MM=1,MEVOL1.IEVOLL(/1) KEVOL1=MEVOL1.IEVOLL(MM) SEGACT,KEVOL1 ISEG=KEVOL1.IPROGX ISEG=KEVOL1.IPROGY 170 CONTINUE ENDIF 160 CONTINUE 150 CONTINUE ELSEIF(MOT16(1:8) .EQ. 'POINTEUR')THEN C Cas des MCHAML de POINTEURS necessitant du travail SEGACT,MELVA1 IPOI2 = 0 CTYP1 = MOT16(9:16) IF(IPLAC .NE. 0)THEN DO 180 KK=1,MELVA1.IELCHE(/2) DO 190 LL=1,MELVA1.IELCHE(/1) ISEG =MELVA1.IELCHE(LL,KK) IF(ISEG.NE.IPOI2 .AND. ISEG.NE.0)THEN IPOI2 = ISEG IF(.NOT. BSEG)THEN SEGINI,JPOINT,IPOINT BSEG=.TRUE. ENDIF JPOINT(**)=MELVA1.IELCHE(LL,KK) IPOINT(**)=IPLAC ENDIF 190 CONTINUE 180 CONTINUE C ELSE C PRINT*,'ACTOBJ:MCHAML de TYPE',MOT16,' non traite' ENDIF ELSE ENDIF 120 CONTINUE 110 CONTINUE GOTO 9999 200 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C OBJET DE TYPE CHPOINT CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MCHPO1=IPOI1 CALL oooprl(1) SEGACT,MCHPO1 NSOUPO=MCHPO1.IPCHP(/1) DO 211 II=1,NSOUPO MSOUP1=MCHPO1.IPCHP(II) SEGACT,MSOUP1 211 CONTINUE CALL oooprl(0) DO 210 II=1,NSOUPO MSOUP1=MCHPO1.IPCHP(II) IPT1=MSOUP1.IGEOC MPOVA1=MSOUP1.IPOVAL 210 CONTINUE GOTO 9999 300 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C OBJET DE TYPE MMODEL CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MMODE1=IPOI1 SEGACT,MMODE1 * jk148537 N1 = MMODE1.KMODEL(/1) SEGINI,MMODE2 NN1 = 0 DO 305 II=1,MMODE1.KMODEL(/1) IMODE1=MMODE1.KMODEL(II) NN1 = NN1 + 1 MMODE2.KMODEL(NN1) = IMODE1 SEGACT,IMODE1 NIVM = IMODE1.IVAMOD(/1) N1 = N1 + NIVM SEGADJ,MMODE2 DO 307 JJ=1,NIVM CTYP1=IMODE1.TYMODE(JJ) IF(CTYP1 .EQ. 'IMODEL ')THEN C Construction d'un MODELE AVEC les IMODEL (Cas des MODELES de melange) if (imode1.ivamod(JJ).gt.0) then NN1 = NN1 + 1 MMODE2.KMODEL(NN1) = imode1.ivamod(JJ) endif ENDIF 307 CONTINUE 305 CONTINUE N1 = NN1 SEGADJ,MMODE2 NN1 = 0 DO 310 II=1,MMODE2.KMODEL(/1) IMODE1=MMODE2.KMODEL(II) SEGACT,IMODE1 IPT1=IMODE1.IMAMOD SEGACT IPT1 DO 350 III=1,IPT1.LISOUS(/1) IPT2 =IPT1.LISOUS(III) 350 CONTINUE IPT3 = IMODE1.IPDPGE NIVM = IMODE1.IVAMOD(/1) DO 320 JJ=1,NIVM CTYP1=IMODE1.TYMODE(JJ) IF(IPLAC .NE. 0)THEN IF(.NOT. BSEG)THEN SEGINI,JPOINT,IPOINT BSEG=.TRUE. ENDIF JPOINT(**)=IMODE1.IVAMOD(JJ) IPOINT(**)=IPLAC ENDIF 320 CONTINUE NBNOMI =IMODE1.LNOMID(/1) DO 330 INOM=1,NBNOMI IPT1=IMODE1.LNOMID(INOM) 330 CONTINUE if (imode1.INFMOD(/1).lt.1) then write(ioimp,*) 'ACTOBJ : IMODEL =',imode1,' INFMOD(/1) < 1' endif DO 340 IINFMO=3,IMODE1.INFMOD(/1) IPT1=IMODE1.INFMOD(IINFMO) 340 CONTINUE 310 CONTINUE GOTO 9999 400 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C OBJET DE TYPE MAILLAGE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IPT1=IPOI1 SEGACT,IPT1 DO 410 II=1,IPT1.LISOUS(/1) IPT2 =IPT1.LISOUS(II) 410 CONTINUE GOTO 9999 500 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C OBJET DE TYPE EVOLUTIO CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MEVOL1=IPOI1 SEGACT,MEVOL1 DO 510 II=1,MEVOL1.IEVOLL(/1) KEVOL1=MEVOL1.IEVOLL(II) SEGACT,KEVOL1 ISEG=KEVOL1.IPROGX ISEG=KEVOL1.IPROGY 510 CONTINUE GOTO 9999 600 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C OBJET DE TYPE LISTXXXX CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IF(IPLAC .EQ. 10)THEN C Cas des LISTCHPO MLCHPO=IPOI1 SEGACT,MLCHPO CTYP1='CHPOINT ' IF(.NOT. BSEG)THEN SEGINI,JPOINT,IPOINT BSEG=.TRUE. ENDIF DO 610 II=1,MLCHPO.ICHPOI(/1) JPOINT(**)=MLCHPO.ICHPOI(II) IPOINT(**)=IPLAC 610 CONTINUE ELSE C Cas des LISTENTI,LISTREEL,LISTMOTS ENDIF GOTO 9999 700 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C OBJET DE TYPE NUAGE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MNUAG1=IPOI1 SEGACT,MNUAG1 DO 710 II=1,MNUAG1.NUAPOI(/1) CTYP1=MNUAG1.NUATYP(II) IF(IPLAC .NE. 0)THEN IF(.NOT. BSEG)THEN SEGINI,JPOINT,IPOINT BSEG=.TRUE. ENDIF NUAVIN=MNUAG1.NUAPOI(II) SEGACT,NUAVIN DO 720 JJ=1,NUAVIN.NUAINT(/1) JPOINT(**)=NUAVIN.NUAINT(JJ) IPOINT(**)=IPLAC 720 CONTINUE ELSE ISEG=MNUAG1.NUAPOI(II) ENDIF 710 CONTINUE GOTO 9999 800 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C OBJET DE TYPE CHARGEMENT CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MCHAR1=IPOI1 SEGACT,MCHAR1 DO 810 II=1,MCHAR1.KCHARG(/1) ICHAR1=MCHAR1.KCHARG(II) SEGACT,ICHAR1 CTYP1=ICHAR1.CHATYP IF(IPLAC .NE. 0)THEN IF(.NOT. BSEG)THEN SEGINI,JPOINT,IPOINT BSEG=.TRUE. ENDIF JPOINT(**)=ICHAR1.ICHPO1 IPOINT(**)=IPLAC ENDIF 810 CONTINUE GOTO 9999 900 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C OBJET DE TYPE RIGIDITE C Ne traite que la partie non assemblee des objets RIGIDITE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MRIGID=IPOI1 SEGACT,MRIGID IMGEOD=MRIGID.IMGEO1 C PRINT *,' -- IMGEOD:',IMGEOD MVECRI=MRIGID.IVECRI C PRINT *,' -- MVECRI:',MVECRI DO 910 II=1,MRIGID.COERIG(/1) IPT1 = MRIGID.IRIGEL(1,II) C PRINT *,' -- IPT1 :',IPT1 IPT2 = MRIGID.IRIGEL(2,II) C PRINT *,' -- IPT2 :',IPT2 DESCR = MRIGID.IRIGEL(3,II) C PRINT *,' -- DESCR :',DESCR XMATRI = MRIGID.IRIGEL(4,II) C PRINT *,' -- XMATRI:',XMATRI 910 CONTINUE GOTO 9999 1000 CONTINUE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C OBJET DE TYPE ANNOTATI CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MANNOT=IPOI1 SEGACT,MANNOT DO 1010 II=1,MANNOT.ICLAS(/1) IF(MANNOT.ICLAS(II) .EQ. 2)THEN METIQU = MANNOT.ISEGT(II) SEGACT,METIQU MELEME = METIQU.INUPT IF(IPLAC .NE. 0)THEN IF(.NOT. BSEG)THEN SEGINI,JPOINT,IPOINT BSEG=.TRUE. ENDIF JPOINT(**)=MELEME IPOINT(**)=IPLAC ENDIF ENDIF 1010 CONTINUE GOTO 9999 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 9999 CONTINUE IF(BCODE)THEN C Boucle a la main en attendant SEGDES par paquets ! DO II=2,ICOUNT ISEG=ITAB(II) SEGDES,ISEG ENDDO ELSE C Appel a SEGACT par paquet ! CALL FINACT(ITAB) ENDIF IF(.NOT. BSEG) GOTO 9990 IF(IOBJ .NE. JPOINT(/1))THEN IOBJ = IOBJ + 1 IPLAC = IPOINT(IOBJ) IPOI1 = JPOINT(IOBJ) GOTO 1 ENDIF 9990 CONTINUE IF (BSEG) SEGSUP,JPOINT,IPOINT IF (MMODE2 .NE. 0) SEGSUP,MMODE2 c return END
© Cast3M 2003 - Tous droits réservés.
Mentions légales