rigtab
C RIGTAB SOURCE FANDEUR 22/01/03 21:15:46 11237 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) *--------------------------------------------------------------------* * * * calcule pour les modes les petites matrices RIGIDITE contenant * * la masse (IRIG = 1), la raideur (IRIG = 2), ou amortissement * * (IRIG = 3). Ces matrices sont associ{es @ l'{l{ment qui con- * * tient le point qui est l'indice de chaque mode. * * * * Param}tres: * * * * e ITBAS table de mode, de sous-type BASE_DE_MODES * * e IRIG 1, 2, ou 3 * * s IRET matrice de masse, de rigidit{, ou d'amortissement * * * * Auteur, date de cr{ation: * * * * Lionel VIVAN, le 7 juin 1990. * * * *--------------------------------------------------------------------* * * -INC PPARAM -INC CCOPTIO -INC CCREEL *- -INC SMELEME -INC SMRIGID -INC SMTABLE -INC SMLMOTS * LOGICAL L0,L1,ltelq CHARACTER*8 TYPRET,CHARRE * CHARACTER*4 lesinc(6),lesdua(6) PARAMETER (jgm=12) CHARACTER*4 lesinc(jgm),lesdua(jgm) DATA lesinc/'UX','UY','UZ','RX','RY','RZ', >'IUX','IUY','IUZ','IRX','IRY','IRZ'/ DATA lesdua/'FX','FY','FZ','MX','MY','MZ', >'IFX','IFY','IFZ','IMX','IMY','IMZ'/ * IRET = 0 IF (IRIG.NE.1 .AND. IRIG.NE.2 .AND. IRIG.NE.3) RETURN * NRIGE = 8 NRIGEL = 1 SEGINI MRIGID IF (IRIG.EQ.1) THEN MTYMAT = 'MASSE ' ELSE IF (IRIG.EQ.2) THEN MTYMAT = 'RIGIDITE' ELSE MTYMAT = 'AMORMODA' ENDIF IFORIG = IFOUR COERIG(1) = 1.D0 IMGEO1 = 0 IMGEO2 = 0 ICHOLE = 0 ISUPEQ = 0 * IRIGEL(2,1) = 0 IRIGEL(5,1) = NIFOUR IRIGEL(6,1) = 0 mrimod = 0 if (itbas.eq.0) goto 30 NLIGRP = 1 NLIGRD = 1 SEGINI DESCR IRIGEL(3,1) = DESCR NOELEP(1) = 1 NOELED(1) = 1 LISINC(1) = 'ALFA' LISDUA(1) = 'FALF' SEGDES DESCR * mtable = itbas segact mtable mlo = mlotab IM = 0 10 CONTINUE IM = IM + 1 TYPRET = ' ' & TYPRET,I1,X1,CHARRE,L1,ITMOD) IF (ITMOD.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN & 'POINT',I1,X1,' ',L1,IPTS) IF (IM.EQ.1) THEN IPT1 = IPTS ELSE IPT2 = IPTS ltelq=.false. IF (IERR.NE.0) RETURN IPT1 = IMAIL ENDIF GOTO 10 ENDIF if (im.lt.mlo) goto 10 if (ipt1.eq.0) then interr(1) = 1 if (mrigid.gt.0) segsup mrigid return endif IRIGEL(1,1) = IPT1 * segact ipt1 NBMODE = ipt1.num(/2) segdes ipt1 NELRIG = NBMODE SEGINI xMATRI IRIGEL(4,1) = xMATRI NLIGRP=1 NLIGRD=1 DO 20 IM = 1,NBMODE * SEGINI XMATRI * IMATTT(IM) = XMATRI & 'TABLE',I1,X1,' ',L1,ITMOD) & 'FLOTTANT',I1,XMGEN,' ',L1,IP1) IF (IRIG.EQ.1) THEN RE(1,1,im) = XMGEN ELSE IF (IRIG.EQ.2) THEN & 'FLOTTANT',I1,XFREQ,' ',L1,IP1) OMEG = 2. * XPI * XFREQ OMEG = OMEG * OMEG RE(1,1,im) = XMGEN * OMEG cbp-2017-10-02 : ajout IF(XFREQ.LT.0.D0) RE(1,1,im) = 0.D0 ELSE & 'FLOTTANT',I1,XFREQ,' ',L1,IP1) OMEG = 2. * XPI * XFREQ RE(1,1,im) = XMGEN * OMEG * 2. cbp-2017-10-02 : ajout IF(XFREQ.LT.0.D0) RE(1,1,im) = 0.D0 ENDIF * SEGDES XMATRI 20 CONTINUE SEGDES xMATRI * mrimod = mrigid SEGDES MRIGID if (itbst.eq.0) goto 80 30 continue jgn = 4 c jgm = 6 segini mlmots iinc = mlmots do igm = 1,jgm enddo segini mlmots idua = mlmots do igm= 1,jgm enddo if (itbas.ne.0) then segini,ri1=mrigid mrigid = ri1 endif mrista = mrigid NLIGRP = 1 NLIGRD = 1 SEGINI DESCR IRIGEL(3,1) = DESCR NOELEP(1) = 1 NOELED(1) = 1 LISINC(1) = 'BETA' LISDUA(1) = 'FBET' SEGDES DESCR * mtable = itbst segact mtable IM = 0 IPT1 = 0 40 CONTINUE IM = IM + 1 itmod = mtabiv(im) typret = mtabtv(im) IF (ITMOD.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN & 'POINT',I1,X1,' ',L1,IPTS) IF (IPT1.EQ.0) THEN IPT1 = IPTS ELSE IPT2 = IPTS ltelq=.false. IF (IERR.NE.0) RETURN IPT1 = IMAIL ENDIF GOTO 40 ENDIF if (im.lt.mlotab) goto 40 IRIGEL(1,1) = IPT1 if (ipt1.le.0) then interr(1) = 2 if (mrigid.gt.0) segsup mrigid return endif segact ipt1 NBMODE = ipt1.num(/2) segdes ipt1 NELRIG = NBMODE SEGINI xMATRI IRIGEL(4,1) = xMATRI NLIGRP=1 NLIGRD=1 IM = 0 IMA = 0 50 CONTINUE IM = IM + 1 itmod = mtabiv(im) typret = mtabtv(im) IF (ITMOD.NE.0 .AND. TYPRET.EQ.'TABLE ') THEN * SEGINI XMATRI IMA = IMA + 1 * IMATTT(IMA) = XMATRI ITAB2=itmod IF (IRIG.EQ.1) THEN & 'CHPOINT ',I1,X1,' ',L1,ITREAC) & 'CHPOINT ',I1,X1,' ',L1,ITDEPL) if (ierr.ne.0) return re(1,1,ima) = x1 ELSE IF (IRIG.EQ.2) THEN & 'CHPOINT ',I1,X1,' ',L1,ITDEPL) & 'CHPOINT ',I1,X1,' ',L1,ITREAC) if (ierr.ne.0) return RE(1,1,ima) = x1 ELSE MTYMAT = 'AMORMODA' ENDIF * segdes xmatri ENDIF if (im.lt.mlotab) goto 50 segdes xmatri * if (mrimod.gt.0) then else goto 79 endif if (irig.gt.2) goto 79 mridec = mrigid mrigid = mrimod ri1 = mrimod ri2 = mrista segact ri1,ri2 ipt1 = ri1.irigel(1,1) ipt2 = ri2.irigel(1,1) segdes ri1,ri2 segact ipt1,ipt2 NRIGE = 8 NRIGEL = 2 * hypothèse modes vib bloqués - pour la rigidite inutile de les coupler if (irig.eq.2) nrigel = 1 * il faut suffisamment de modes statiques if (ipt2.num(/2).eq.1) nrigel = 1 SEGINI MRIGID * write (6,*) ' ini mrigid ',mrigid,nrigel mricou = mrigid IF (IRIG.EQ.1) THEN MTYMAT = 'MASSE ' ELSE IF (IRIG.EQ.2) THEN MTYMAT = 'RIGIDITE' ELSE MTYMAT = 'AMORMODA' ENDIF IFORIG = IFOUR COERIG(1) = 1.D0 if (nrigel.gt.1) COERIG(2) = 1.D0 IMGEO1 = 0 IMGEO2 = 0 ICHOLE = 0 ISUPEQ = 0 * IRIGEL(2,1) = 0 IRIGEL(5,1) = NIFOUR IRIGEL(6,1) = 0 if (nrigel.gt.1) IRIGEL(2,2) = 0 if (nrigel.gt.1) IRIGEL(5,2) = NIFOUR if (nrigel.gt.1) IRIGEL(6,2) = 0 * hypothèse mod vib bloques if (irig.eq.2) goto 64 NBELEM = ipt1.num(/2) * ipt2.num(/2) NBNN = 2 NBSOUS = 0 NBREF = 0 SEGINI MELEME ITYPEL=27 NELRIG=NBELEM NLIGRP=2 NLIGRD=2 SEGINI xMATRI SEGINI DESCR NOELEP(1)=1 NOELEP(2)=2 NOELED(1)=1 NOELED(2)=2 LISINC(1)='ALFA' LISINC(2)='BETA' LISDUA(1)='FALF' LISDUA(2)='FBET' SEGDES DESCR irigel(1,1) = meleme irigel(3,1) = descr IRIGEL(4,1) = xMATRI 64 if (ipt2.num(/2).le.1) goto 61 nbelem = ipt2.num(/2)*(ipt2.num(/2) - 1) / 2 NBNN = 2 NBSOUS = 0 NBREF = 0 SEGINI MELEME ITYPEL=27 NELRIG=NBELEM NLIGRP=2 NLIGRD=2 SEGINI xMATRI SEGINI DESCR NOELEP(1)=1 NOELEP(2)=2 NOELED(1)=1 NOELED(2)=2 LISINC(1)='BETA' LISINC(2)='BETA' LISDUA(1)='FBET' LISDUA(2)='FBET' SEGDES DESCR irigel(1,nrigel) = meleme irigel(3,nrigel) = descr IRIGEL(4,nrigel) = xMATRI 61 continue * distingue les kas couplage mode_vib/mod_stat et couplage mode_stat/mode_stat kas = 1 iima = ipt1.num(/2) * hypothese mod vib bloques if (irig.eq.2) then kas = kas + 1 iima = ipt2.num(/2) - 1 endif meleme = irigel(1,1) xmatri = irigel(4,1) segact meleme*mod,xmatri*mod 62 continue kelem = 0 do ii = 1, iima IF (IRIG.EQ.1) THEN IF (kas.EQ.1) THEN & TYPRET,I1,X1,CHARRE,L1,ITMOD) & 'CHPOINT ',I1,X1,' ',L1,ITDEPL) ELSE IF (kas.EQ.2) THEN & TYPRET,I1,X1,CHARRE,L1,ITMOD) & 'CHPOINT ',I1,X1,' ',L1,ITDEPL) ENDIF ELSE IF (IRIG.EQ.2) THEN IF (kas.EQ.1) THEN & TYPRET,I1,X1,CHARRE,L1,ITMOD) & 'CHPOINT ',I1,X1,' ',L1,ITDEPL) ELSE IF (kas.EQ.2) THEN & TYPRET,I1,X1,CHARRE,L1,ITMOD) & 'CHPOINT ',I1,X1,' ',L1,ITDEPL) ENDIF ELSE IF (IRIG.EQ.3) THEN * ENDIF * write(6,*) 'gk' , num(/1),num(/2), ii,kelem,kas if (kas.eq.1) then jjin = 1 elseif (kas.eq.2) then jjin = ii + 1 endif do jj = jjin,ipt2.num(/2) kelem = kelem +1 * write(6,*) 'jh' , kelem ,num(/2),ipt2.num(/2),jj if (kas.eq.1) then num(1,kelem) = ipt1.num(1,ii) elseif (kas.eq.2) then num(1,kelem) = ipt2.num(1,ii) endif num(2,kelem) = ipt2.num(1,jj) mtable = itbst segact mtable ima = 0 im = 0 65 im = im + 1 itab2 = mtabiv(im) typret = mtabtv(im) if (ITAB2.NE.0 .AND. TYPRET.EQ.'TABLE ') ima = ima + 1 if (ima.ne.jj) goto 65 * SEGINI XMATRI * IMATTT(kelem) = XMATRI IF (IRIG.EQ.1) THEN & 'CHPOINT ',I1,X1,' ',L1,ITREAC) c t(mode ou sol_stat)*Masse*Sol_stat ELSE IF (IRIG.EQ.2) THEN & 'CHPOINT ',I1,X1,' ',L1,ITREAC) c t(mode ou sol_stat)* Reac(Sol_stat) ELSE c MTYMAT = 'AMORMODA' ENDIF re(2,1,kelem) = x1 re(1,2,kelem) = re(2,1,kelem) * segdes xmatri enddo enddo segdes meleme,xmatri if (kas.eq.1.and.ipt2.num(/2).gt.1) then kas = kas + 1 iima = ipt2.num(/2) - 1 meleme = irigel(1,kas) xmatri = irigel(4,kas) goto 62 endif continue segdes ipt1,ipt2 mrigid=mridec * write (6,*) 'avant segact mridec ',mridec segact mrigid mrigid=mricou * write (6,*) 'avant segact mricou ',mricou segact mrigid 79 mlmots = idua mlmot1 = iinc segsup mlmots, mlmot1 80 continue IRET = MRIGID * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales