copba3
C COPBA3 SOURCE CB215821 20/11/25 13:22:14 10792 & KTRCHA,KTRAV,ICONT) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *--------------------------------------------------------------------* * * * Effectue une op{ration g{om{trique de translation (MOTCLE = * * 'PLUS') ou de rotation (MOTCLE = 'ROTA') sur ITBAS contenant * * les modes, les pseudo-modes de la structure. * * * * Param}tres: * * * * e ITBAS table contenant les modes, ou les pseudo-modes * * e MOTCLE mot : PLUS ou ROTA * * * * Auteur, date de cr{ation: * * * * Lionel VIVAN, le 31 mai 1990. * * * *--------------------------------------------------------------------* * * -INC PPARAM -INC CCOPTIO -INC SMCHPOI -INC SMCHAML -INC SMELEME -INC SMTABLE * SEGMENT ITRCHP INTEGER ICHCA(NSOU),ICHCN(NSOU) ENDSEGMENT SEGMENT ITRCHA INTEGER ICHAM(NSOUS) ENDSEGMENT SEGMENT MTRAV REAL*8 XPT(IDIMB),XPTP(IDIMB),XP1PT(IDIMB),XMPT(IDIMB,IDIMB) ENDSEGMENT SEGMENT MTRA2 INTEGER IDEP(3),IROT(3) REAL*8 XDEP(3),XROT(3) ENDSEGMENT SEGMENT MTRA3 REAL*8 XDGEN(3),XDGE2(3) ENDSEGMENT SEGMENT MTRA4 INTEGER IFOR(3),IMOM(3) REAL*8 XFOR(3),XMOM(3) ENDSEGMENT * INTEGER LCHAIN(*) CHARACTER*(*) MOTCLE * ITRCHP = KTRCHP NSOU = ICHCA(/1) IF (ICONT.EQ.1) THEN ITRCHA = KTRCHA NSOUS = ICHAM(/1) ENDIF IF (MOTCLE.EQ.'ROTA') MTRAV = KTRAV * MTABLE = ITBAS SEGACT MTABLE*MOD LONG = MLOTAB IM = IMODE IF (MTABTI(I).EQ.'ENTIER ' .AND. MTABII(I).EQ.IM .AND. & MTABTV(I).EQ.'TABLE ') THEN ITMOD = MTABIV(I) IM = IM + 1 MTAB1 = ITMOD SEGACT MTAB1*MOD LON1 = MTAB1.MLOTAB DO 20 I1 = 1,LON1 IF (MTAB1.MTABTI(I1).EQ.'MOT ') THEN IF (MTAB1.MTABII(I1).EQ.LCHAIN(3) .OR. & MTAB1.MTABII(I1).EQ.LCHAIN(6)) THEN IF (MTAB1.MTABTV(I1).EQ.'CHPOINT ') THEN ICHDEP = MTAB1.MTABIV(I1) MCHPOI = ICHDEP SEGACT MCHPOI DO 22 INS = 1,NSOU MSOUPO = IPCHP(INS) SEGACT MSOUPO*MOD IF (MOTCLE.EQ.'ROTA') THEN NCOM = NOCOMP(/2) SEGINI MTRA2 MPOVAL = IPOVAL SEGACT MPOVAL NPOIN = VPOCHA(/1) DO 24 IP = 1,NPOIN ICD = 0 ICR = 0 DO 26 IC = 1,NCOM ICD = ICD + 1 IDEP(ICD) = IC XDEP(ICD) = VPOCHA(IP,IC) ICR = ICR + 1 IROT(ICR) = IC XROT(ICR) = VPOCHA(IP,IC) ENDIF 26 CONTINUE * end do DO 28 IDE = 1,ICD XVAL = 0.D0 DO 30 ID2 = 1,ICD XVAL = XVAL + XMPT(IDE,ID2) * XDEP(ID2) 30 CONTINUE * end do IC = IDEP(IDE) VPOCHA(IP,IC) = XVAL 28 CONTINUE * end do IF (IDIM.EQ.3) THEN DO 32 IRO = 1,ICR XVAL = 0.D0 DO 34 IR2 = 1,ICR XVAL = XVAL + XMPT(IRO,IR2) * XROT(IR2) 34 CONTINUE * end do IC = IROT(IRO) VPOCHA(IP,IC) = XVAL 32 CONTINUE * end do ENDIF 24 CONTINUE * end do SEGDES MPOVAL SEGSUP MTRA2 ENDIF IGEOC = ICHCN(INS) SEGDES MSOUPO 22 CONTINUE * end do SEGDES MCHPOI MTAB1.MTABIV(I1) = ICHDEP ENDIF ELSE IF (MTAB1.MTABII(I1).EQ.LCHAIN(5) .OR. & MTAB1.MTABII(I1).EQ.LCHAIN(8)) THEN IF (MTAB1.MTABTV(I1).EQ.'CHPOINT ') THEN ICHDEP = MTAB1.MTABIV(I1) MCHPOI = ICHDEP SEGACT MCHPOI NSOU2 = IPCHP(/1) DO 40 INS = 1,NSOU2 MSOUPO = IPCHP(INS) SEGACT MSOUPO*MOD IF (MOTCLE.EQ.'ROTA') THEN NCOM2 = NOCOMP(/2) SEGINI MTRA4 MPOVAL = IPOVAL SEGACT MPOVAL NPOI2 = VPOCHA(/1) NCOM2 = VPOCHA(/2) DO 42 IP = 1,NPOI2 ICF = 0 ICM = 0 DO 44 IC = 1,NCOM2 ICF = ICF + 1 IFOR(ICF) = IC XFOR(ICF) = VPOCHA(IP,IC) ICM = ICM + 1 IMOM(ICM) = IC XMOM(ICM) = VPOCHA(IP,IC) ENDIF 44 CONTINUE * end do DO 46 IDE = 1,ICF XVAL = 0.D0 DO 48 ID2 = 1,ICF XVAL = XVAL + XMPT(IDE,ID2) * XFOR(ID2) 48 CONTINUE * end do IC = IFOR(IDE) VPOCHA(IP,IC) = XVAL 46 CONTINUE * end do IF (IDIM.EQ.3) THEN DO 50 IRO = 1,ICM XVAL = 0.D0 DO 52 IR2 = 1,ICM XVAL = XVAL + XMPT(IRO,IR2) * XMOM(IR2) 52 CONTINUE * end do IC = IMOM(IRO) VPOCHA(IP,IC) = XVAL 50 CONTINUE * end do ENDIF 42 CONTINUE * end do SEGDES MPOVAL SEGSUP MTRA4 ENDIF IPT1 = IGEOC SEGINI,MELEME=IPT1 NBE = NUM(/2) NBP = NUM(/1) DO 54 IE = 1,NBE DO 56 IP = 1,NBP IPTS = NUM(IP,IE) IF (IERR.NE.0) RETURN NUM(IP,IE) = INOPT 56 CONTINUE * end do 54 CONTINUE * end do SEGDES MELEME IGEOC = MELEME SEGDES MSOUPO 40 CONTINUE * end do SEGDES MCHPOI MTAB1.MTABIV(I1) = ICHDEP ENDIF ELSE IF (MTAB1.MTABII(I1).EQ.LCHAIN(4) .OR. & MTAB1.MTABII(I1).EQ.LCHAIN(7)) THEN IF (MTAB1.MTABTV(I1).EQ.'MCHAML ') THEN ICHCON = MTAB1.MTABIV(I1) MCHELM = ICHCON SEGACT MCHELM*MOD DO 60 INS = 1,NSOUS IMACHE(INS) = ICHAM(INS) 60 CONTINUE * end do SEGDES MCHELM MTAB1.MTABIV(I1) = ICHCON ENDIF ELSE IF (MTAB1.MTABII(I1).EQ.LCHAIN(9) .AND. & MTAB1.MTABTV(I1).EQ.'CHPOINT ') THEN ICHDEP = MTAB1.MTABIV(I1) MCHPOI = ICHDEP SEGACT MCHPOI NSOU3 = IPCHP(/1) DO 80 INS = 1,NSOU3 MSOUPO = IPCHP(INS) SEGACT MSOUPO IPT1 = IGEOC SEGINI,MELEME=IPT1 NBE = NUM(/2) NBP = NUM(/1) DO 82 IE = 1,NBE DO 84 IP = 1,NBP IPTS = NUM(IP,IE) IF (IERR.NE.0) RETURN NUM(IP,IE) = INOPT 84 CONTINUE * end do 82 CONTINUE * end do SEGDES MELEME IGEOC = MELEME SEGDES MSOUPO 80 CONTINUE * end do SEGDES MCHPOI MTAB1.MTABIV(I1) = ICHDEP ELSE IF (MTAB1.MTABII(I1).EQ.LCHAIN(10) .AND. & MTAB1.MTABTV(I1).EQ.'POINT ') THEN IPTS = MTAB1.MTABIV(I1) IF (IERR.NE.0) RETURN MTAB1.MTABIV(I1) = INOPT ELSE IF (MTAB1.MTABII(I1).EQ.LCHAIN(2) .AND. & MTAB1.MTABTV(I1).EQ.'TABLE ') THEN IF (MOTCLE.EQ.'ROTA') THEN ITDEPG = MTAB1.MTABIV(I1) SEGINI MTRA3 MTAB2 = ITDEPG SEGACT MTAB2 LON2 = MTAB2.MLOTAB IDG = 1 IDG = IDG + 1 ENDIF 70 CONTINUE * end do DO 72 ID1 = 1,IDIM XVAL = 0.D0 DO 74 ID2 = 1,IDIM XVAL = XVAL + (XMPT(ID1,ID2) * XDGEN(ID2)) 74 CONTINUE * end do XDGE2(ID1) = XVAL 72 CONTINUE * end do IDG = 1 IDG = IDG + 1 ENDIF 76 CONTINUE * end do SEGDES MTAB2 MTAB1.MTABIV(I1) = ITDEPG SEGSUP MTRA3 ENDIF ENDIF ENDIF 20 CONTINUE * end do SEGDES MTAB1 MTABIV(I) = ITMOD ENDIF 10 CONTINUE * end do SEGDES MTABLE * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales