rglimo
C RGLIMO SOURCE FANDEUR 22/01/03 21:15:43 11237 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C C======================================================================= C CE SUBROUTINE CALCULE LOBJET RIGIDITE QUI COUPLE LES LIAISONS ET C LES MODES . (FORMALISME GIBERT). C CETTE RIGIDITE EST DE TYPE MASSE. C ELLE EST ASSOCIEE A L ELEMENT QUI CONTIENT : C . LE POINT QUI EST L INDICE DU MODE C . LE POINT QUI EST ASSOCIE A LA LIAISON. C ELEMENT DE TYPE 27. LE RESULTAT EST MIS DANS IRET . C C APPELE PAR RIGI, RGBASE C APPELLE ETALPR,ETALCH,ECCHPO,ERREUR(234,235) C ECRIT PAR FARVACQUE C======================================================================= C -INC PPARAM -INC CCOPTIO -INC SMRIGID -INC CCREEL *- -INC SMSOLUT -INC SMATTAC -INC SMELEME SEGMENT ICPR(nbpts) SEGMENT IINC CHARACTER*(LOCOMP) CIINC(0) ENDSEGMENT INTEGER IMATBL SEGMENT/ICONTR/(MCONTR(NNI1,IPR1)) SEGMENT/MVA/(VA(NNI1,IPR1)*D),MVA1.MVA SEGMENT IPB(IPR1) SEGMENT ITRAV(6) IMATBL=0 NBSOUS=0 NBREF=0 NBNN=2 * LVAL=3 NLIGRP=2 NLIGRD=2 IRET=0 C IF(ISOLS.EQ.0.OR.IMODE.EQ.0) GO TO 5000 IF(IRIG.NE.1) GO TO 5000 MSOLUT=ISOLS SEGACT MSOLUT KJONC=MSOLIS(10) MELSOL=MSOLIS(3) MELEME=MELSOL MSOLE2=KJONC SEGDES MSOLUT C MSOLUT=IMODE SEGACT MSOLUT KVALM=MSOLIS(4) KDEPL=MSOLIS(5) MELMOD=MSOLIS(3) MELEME=MELMOD SEGDES MSOLUT MSOLEN=KVALM MSOLE1=KDEPL IF(MSOLE1.NE.0) GO TO 9 MOTERR(1:8)='SOLUTION' MOTERR(9:26)=ITYSOL MOTERR(30:38)='DEPL' C ON NE TROUVE PAS LA TABLE QUI CONTIENT LES DEPLACEMENTS GO TO 5000 9 CONTINUE SEGACT MSOLE2 C C **** ON COMPTE LES LIAISONS LIBRES(NZRILI) ET BLOQUEES(NZRIBL) C **** ON INITIALISE UN MELEME POUR CHAQUE CAS : IPT1(LIBRE),IPT2(BLOQU C NZRILI=0 NZRIBL=0 NRIGEL=0 NJONC=MSOLE2.ISOLEN(/1) IF(NJONC.NE.0) THEN DO 20 I=1,NJONC MJONCT=MSOLE2.ISOLEN(I) SEGACT MJONCT IF(MJOTYP.EQ.'MECA'.OR.MJOTYP.EQ.'FLUI') THEN IF(MJODDL.EQ.'LX ') NZRILI=NZRILI+1 IF(MJODDL.EQ.'FLX ') NZRIBL=NZRIBL+1 ENDIF SEGDES MJONCT 20 CONTINUE ENDIF SEGDES MSOLE2 IF(NZRILI.EQ.0.AND.NZRIBL.EQ.0) GO TO 5000 C SEGINI ITRAV SEGACT MSOLEN,MSOLE1,MSOLE2 NMOD=ISOLEN(/1) C IF(NZRILI.EQ.0) GO TO 29 NBELEM=NMOD*NZRILI SEGINI IPT1 IPT1.ITYPEL=27 NLIGRP=2 NLIGRD=2 SEGINI DESCR NOELEP(1)=1 NOELEP(2)=2 NOELED(1)=1 NOELED(2)=2 NELRIG=NBELEM SEGINI xMATRI IMATLI=xMATRI * SEGDES IMATRI LISINC(1)='ALFA' LISINC(2)='BETA' LISDUA(1)='FALF' LISDUA(2)='FBET' SEGDES DESCR NRIGEL=NRIGEL+1 ITRAV(NRIGEL)=IPT1 NRIGEL=NRIGEL+1 ITRAV(NRIGEL)=DESCR NRIGEL=NRIGEL+1 ITRAV(NRIGEL)=IMATLI C 29 IF(NZRIBL.EQ.0) GO TO 290 NBELEM=NMOD*NZRIBL SEGINI IPT2 IPT2.ITYPEL=27 NLIGRP=2 NLIGRD=2 SEGINI DESCR NELRIG=NBELEM SEGINI xMATRI IMATBL=xMATRI * SEGDES IMATRI NOELEP(1)=1 NOELEP(2)=2 NOELED(1)=1 NOELED(2)=2 LISINC(1)='ALFA' LISINC(2)='FBET' LISDUA(1)='FALF' LISDUA(2)='BETA' SEGDES DESCR NRIGEL=NRIGEL+1 ITRAV(NRIGEL)=IPT2 NRIGEL=NRIGEL+1 ITRAV(NRIGEL)=DESCR NRIGEL=NRIGEL+1 ITRAV(NRIGEL)=IMATBL 290 CONTINUE C C **** PREPARATION DE KMVA,KMVB,IPB POUR ETALER LES CHPOINTS C IPM=MSOLE1.ISOLEN(1) ICONTR=KCONTR SEGACT ICONTR IPR1=MCONTR(/2) NNI1=MCONTR(/1) SEGINI MVA KMVA=MVA SEGINI MVA KMVB=MVA SEGINI IPB KIPB=IPB C C **** BOUCLE SUR LES MODES .IPO1 EST LE POINT QUI CORRESPOND AU MODE C **** IP2 LE CHPOINT QU ON ETALE DANS KMVA C NZRILI=0 NZRIBL=0 MELEME=MELMOD SEGACT MELEME MELEME=MELSOL SEGACT MELEME DO 2 IM=1,ISOLEN(/1) MELEME=MELMOD IPO1=NUM(1,IM) MMODE=ISOLEN(IM) SEGACT MMODE OMEG=2.*XPI*FMMODD(1) OMEG=OMEG*OMEG SEGDES MMODE IP2=MSOLE1.ISOLEN(IM) IF(IP2.NE.0) GO TO 8 MSOLUT=IMODE SEGACT MSOLUT MOTERR(1:8)=ITYSOL SEGDES MSOLUT MOTERR(9:12)='DEPL' INTERR(1)=IM GO TO 5000 8 CONTINUE KZERO=0 C C **** BOUCLE SUR LES MJONCT . IPO2 EST LE POINT QUI CORRESPOND C DO 30 IJ=1,NJONC MJONCT=MSOLE2.ISOLEN(IJ) SEGACT MJONCT RLIBRE=-1. IF(MJODDL.EQ.'FLX ') RLIBRE=1. MELEME=MELSOL IPO2=NUM(1,IJ) C C **** FABRICATION DE L ELEMENT. INITIALISATION DE XMATRI C * SEGINI XMATRI IF(RLIBRE.EQ.1.) GO TO 16 NZRILI=NZRILI+1 IPT1.NUM(1,NZRILI)=IPO1 IPT1.NUM(2,NZRILI)=IPO2 xMATRI=IMATLI segact xmatri*mod izpos=nzrili * SEGACT IMATRI*MOD * IMATTT(NZRILI)=XMATRI * SEGDES IMATRI GO TO 17 16 CONTINUE NZRIBL=NZRIBL+1 IPT2.NUM(1,NZRIBL)=IPO1 IPT2.NUM(2,NZRIBL)=IPO2 xMATRI=IMATBL segact xmatri*mod izpos=NZRIBL * SEGACT IMATRI*MOD * IMATTT(NZRIBL)=XMATRI * SEGDES IMATRI 17 CONTINUE C C **** DANS MJONCT ON CHERCHE LA STRUCTURE MSOSTU C **** IPP2 EST LE CHPOINT DE P QU ON ETALE DANS KMVB.ON REMPLIT IPB. C NST=ISTRJO(/1) DO 31 IS=1,NST IF(ISTRJO(IS).NE. ISTRU) GO TO 31 IPP2=IPCHJO(IS) C C **** OPERATION KMVA*KMVB C MVA=KMVA MVA1=KMVB IPB=KIPB C SEGACT MVA,MVA1,IPB XRET=0. DO 80 J1=1,NPR2 JJ1=IPB(J1) DO 80 I1=1,NNI1 XRET=XRET+VA(I1,JJ1)*MVA1.VA(I1,JJ1) 80 CONTINUE RE(1,2,izpos)=RE(1,2,izpos)+RLIBRE*XRET/OMEG RE(2,1,izpos)=RE(1,2,izpos) C 31 CONTINUE SEGDES MJONCT,xmatri 30 CONTINUE C 2 CONTINUE MELEME=MELSOL MELEME=MELMOD SEGDES MSOLE1,MSOLE2,MSOLEN xMATRI=IMATLI IF(NZRILI.NE.0)SEGDES xMATRI,IPT1 xMATRI=IMATBL IF(NZRIBL.NE.0)SEGDES xMATRI,IPT2 IINC=KIINC SEGSUP IINC ICPR=KICPR SEGSUP ICPR SEGSUP MVA,MVA1,IPB,ICONTR C C C **** FABRICATION DU SEGMENT MRIGID C NRIGEL=NRIGEL/3 IF(NRIGEL.EQ.0) GO TO 5000 NRIGE=6 SEGINI MRIGID DO 40 I=1,NRIGEL IRIGEL(1,I)=ITRAV(3*I-2) IRIGEL(2,I)=0 IRIGEL(3,I)=ITRAV(3*I-1) IRIGEL(4,I)=ITRAV(3*I) IRIGEL(5,I)=NIFOUR IRIGEL(6,I)=0 COERIG(I)=1.D0 40 CONTINUE SEGSUP ITRAV MTYMAT='MASSE' ICHOLE=0 IMGEO1=0 IMGEO2=0 IFORIG=IFOUR SEGDES MRIGID IRET=MRIGID 5000 CONTINUE END
© Cast3M 2003 - Tous droits réservés.
Mentions légales