ricabl
C RICABL SOURCE FANDEUR 22/01/03 21:15:43 11237 SUBROUTINE RICABL IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMELEME -INC SMRIGID -INC SMCOORD SEGMENT ITRA REAL*8 COR(6),XK(6,6),C(3),D(3),E(3) ENDSEGMENT CHARACTER*4 MOTU(3),MOTF(3) DATA MOTU/'UX ','UY ','UZ '/,MOTF/'FX ','FY ','FZ '/ IF(IERR.NE.0) RETURN IF(IERR.NE.0) RETURN FE=XVAL IF(IERR.NE.0) RETURN EPS=XVAL IF(IERR.NE.0) RETURN SEGACT MELEME IF(IERR.NE.0) RETURN IF(IERR.NE.0) RETURN NRIGE=8 NRIGEL=idim +1 SEGINI MRIGID C C *** CREATION D'UN NOUVEAU MELEME A 2 POINTS POUR Y APPUYER LA C *** RIGIDITE PROPRE AU CABLE.ON CALCULE LA RIGIDITE AU FUR ET A C *** MESURE .ON CREE UN NOUVEAU NOEUD A LA MEME C *** PLACE QUE LE DEUXIEME ET ON METTRA EN RELATION UNILATERALES C *** CES DEUX NOEUDS CONFONDUS C IFORIG=IFOUR IRIGEL(5,1)=NIFOUR IRIGEL(5,2)=NIFOUR MTYMAT='RIGIDITE' COERIG(1)=1.D0 COERIG(2)=1.D0 COERIG(3)=1.D0 if(idim.eq.3)COERIG(4)=1.D0 NBNN=2 NBELEM=NUM(/2) NLIGRP = IDIM*2 NLIGRD = IDIM*2 SEGINI DESCR NELRIG=NBELEM SEGINI xMATRI NBSOUS=0 NBREF=0 SEGINI IPT1 IRIGEL(1,1)=IPT1 IRIGEL(4,1)=xMATRI LVAL=10+ ( IDIM-2)* 11 IRIGEL(3,1)=DESCR LISINC(1)=MOTU(1) NOELEP(1)=1 NOELED(1)=1 LISDUA(1)=MOTF(1) LISINC(2)=MOTU(2) NOELEP(2)=1 NOELED(2)=1 LISDUA(2)=MOTF(2) IA=2 IF( IDIM.EQ.3) THEN IA=3 LISINC(3)=MOTU(3) LISDUA(3)=MOTF(3) NOELEP(3)=1 NOELED(3)=1 ENDIF LISINC(IA+1)=MOTU(1) NOELEP(IA+1)=2 NOELED(IA+1)=2 LISDUA(IA+1)=MOTF(1) LISINC(IA+2)=MOTU(2) NOELEP(IA+2)=2 NOELED(IA+2)=2 LISDUA(IA+2)=MOTF(2) IF( IDIM.EQ.3) THEN LISINC(6)=MOTU(3) LISDUA(6)=MOTF(3) NOELEP(6)=2 NOELED(6)=2 ENDIF SEGDES DESCR IPT1.ITYPEL=2 SEGINI ITRA segact mcoord*mod C C *** BOUCLE 1 SUR LES ELEMENTS ON CREE LE MELEME ET ON FAIT LA C *** RIGIDITE DU CABLE EN TRACTION COMPRESSION C *** LES CONDITIONS UNILATERALES SERONT FAITES PLUS TARD DO 1 I=1,NBELEM IP=NUM(1,I) IPT1.NUM(1,I)=IP IPDE=(IP-1)*( IDIM+1) COR(1)=XCOOR(IPDE+1) COR(2)=XCOOR(IPDE+2) COR(3)=0 IF( IDIM.EQ.3)COR(3)=XCOOR(IPDE+3) NP=(NUM(2,I)-1)*(IDIM+1) IPT1.NUM(2,I)=nbpts +1 XCOOR(**)= XCOOR(NP+1) XCOOR(**)=XCOOR(NP+2) IF(IDIM.EQ.3) XCOOR(**)=XCOOR(NP+3) COR(4)= XCOOR(NP+1) COR(5)=XCOOR(NP+2) COR(6)=0 IF(IDIM.EQ.3)COR(6)=XCOOR(NP+3) XCOOR(**)=XCOOR(NP+1+IDIM) nbpts=nbpts+1 X21=COR(4)-COR(1) Y21=COR(5)-COR(2) Z21=COR(6)-COR(3) XL=SQRT(X21*X21+Y21*Y21+Z21*Z21) C(1)=X21/XL C(2)=Y21/XL C(3)=Z21/XL R=FE/(EPS*XL) DO 2 K=1,idim K1=K+idim DO 2 J=1,idim J1=J+idim XK(K,J)=C(K)*R*C(J) XK(K1,J1)=XK(K,J) XK(K ,J1)=-XK(K,J) XK(K1,J )=-XK(K,J) 2 CONTINUE KJ=1 * SEGINI XMATRI * DO 3 K=1,2*IDIM * KJ=KJ+K-1 * K1=K * IF(IDIM.EQ.2.AND.K.GT.IDIM) K1=K1+1 * DO 3 J=1,K * IK=J-1 * J1=J * IF(IDIM.EQ.2.AND.J.GT.IDIM) J1=J1+1 * RE(KJ+IK)=XK(K1,J1) * 3 CONTINUE DO 3 K=1,IDIM*2 DO 3 J=1,IDIM*2 RE(J,K,i)=XK(J,K) 3 CONTINUE * SEGDES XMATRI * IMATTT(I)=XMATRI 1 CONTINUE SEGDES xMATRI C C **** ON REPREND TOUS LES ELEMENTS POUR CREER LES CONDITIONS C **** UNILATERALES C NLIGRP=IDIM*2 + 2 NLIGRD=IDIM*2 + 2 NBNN=4 SEGINI DESCR LISINC(1)='LX ' LISDUA(1)='FLX' NOELEP(1)=1 NOELED(1)=1 LISINC(2)='LX ' LISDUA(2)='FLX' NOELEP(2)=2 NOELED(2)=2 LISINC(3)=MOTU(1) LISDUA(3)=MOTF(1) NOELEP(3)=3 NOELED(3)=3 LISINC(4)=MOTU(2) LISDUA(4)=MOTF(2) NOELEP(4)=3 NOELED(4)=3 IA=2 IF(IDIM.EQ.3) THEN LISINC(5)=MOTU(3) LISDUA(5)=MOTF(3) NOELEP(5)=3 NOELED(5)=3 IA=3 ENDIF LISINC(IA+3)=MOTU(1) LISDUA(IA+3)=MOTF(1) NOELEP(IA+3)=4 NOELED(IA+3)=4 LISINC(IA+4)=MOTU(2) LISDUA(IA+4)=MOTF(2) NOELEP(IA+4)=4 NOELED(IA+4)=4 IF(IDIM.EQ.3) THEN LISINC(8)=MOTU(3) LISDUA(8)=MOTF(3) NOELEP(8)=4 NOELED(8)=4 ENDIF SEGDES DESCR IRIGEL(3,2)=DESCR IRIGEL(3,3)=DESCR if(idim.eq.3)IRIGEL(3,4)=DESCR SEGINI xMATRI IRIGEL(4,2)=xMATRI SEGINI IPT2 IPT2.ITYPEL=22 IRIGEL(1,2)=IPT2 IRIGEL(5,2)=NIFOUR IRIGEL(5,3)=NIFOUR if (idim.eq.3)IRIGEL(5,4)=NIFOUR IRIGEL(6,2)=1 IRIGEL(6,3)=0 if( idim.eq.3) IRIGEL(6,4)=0 * LVAL=(NLIGRE*NLIGRE+NLIGRE)/2 C C **** BOUCLE SUR LES ELEMENTS ON CREES IPT2 ET LES RIGIDITES C DO 500 JOP=1,idim IF(JOP.GE.2) THEN SEGDES xMATRI,IPT2 SEGINI xMATRI,IPT2 IPT2.ITYPEL=22 IRIGEL(1,JOP+1)=IPT2 IRIGEL(4,JOP+1)=xMATRI ENDIF DO 50 I=1,NBELEM I1=NUM(2,I) IL1=nbpts+1 IL2=IL1+1 IN1=(I1-1)*(IDIM+1) XCOOR(**)=XCOOR(IN1+1) XCOOR(**)=XCOOR(IN1+2) IF(IDIM.EQ.3)XCOOR(**)=XCOOR(IN1+3) XCOOR(**)=XCOOR(IN1+IDIM+1) XCOOR(**)=XCOOR(IN1+IDIM+1) nbpts=nbpts+2 IPT2.NUM(1,I)=IL1 IPT2.NUM(2,I)=IL2 IPT2.NUM(3,I)=I1 * SEGINI XMATRI RE(1,1,i)=-1.D0 RE(2,1,i)=1.D0 RE(1,2,i)=1.D0 RE(2,2,i)=-1.D0 IP1=NUM(1,I) INP1=(IP1-1)*(IDIM+1) C(1)=XCOOR(IN1+1)-XCOOR(INP1+1) C(2)=XCOOR(IN1+2)-XCOOR(INP1+2) C(3)=0.D0 IF(IDIM.EQ.3) C(3)=XCOOR(IN1+3)-XCOOR(INP1+3) XL= SQRT( C(1)*C(1)+C(2)*C(2)+C(3)*C(3)) C(1)=C(1)/XL C(2)=C(2)/XL C(3)=C(3)/XL IF(JOP.EQ.2) THEN D(1)=-C(2) D(2)=C(1) D(3)=0.D0 XL=SQRT(D(1)*D(1)+D(2)*D(2)+D(3)*D(3)) IF(XL.LT.1.D-3) THEN D(1)=-C(3) D(2)=0D0 D(3)=C(1) XL=SQRT(D(1)*D(1)+D(2)*D(2)+D(3)*D(3)) ENDIF C(1)=D(1)/XL C(2)=D(2)/XL C(3)=D(3)/XL ENDIF IF(JOP.EQ.3) THEN D(1)=-C(2) D(2)=C(1) D(3)=0. XL=SQRT(D(1)*D(1)+D(2)*D(2)+D(3)*D(3)) IF(XL.LT.1.D-3) THEN D(1)=-C(3) D(2)=0. D(3)=C(1) XL=SQRT(D(1)*D(1)+D(2)*D(2)+D(3)*D(3)) ENDIF D(1)=D(1)/XL D(2)=D(2)/XL D(3)=D(3)/XL E(1)=C(2)*D(3)-C(3)*D(2) E(2)=C(3)*D(1)-C(1)*D(3) E(3)=C(1)*D(2)-C(2)*D(1) C(1)=E(1) C(2)=E(2) C(3)=E(3) ENDIF RE(3,1,i)=C(1) RE(3,2,i)=C(1) RE(1,3,i)=C(1) RE(2,3,i)=C(1) RE(4,1,i)=C(2) RE(4,2,i)=C(2) RE(1,4,i)=C(2) RE(2,4,i)=C(2) IA=4 * IB=15 IF(IDIM.EQ.3) THEN RE(5,1,i)=C(3) RE(5,2,i)=C(3) RE(1,5,i)=C(3) RE(2,5,i)=C(3) IA=5 * IB=21 ENDIF RE(IA+1,1,i)=-C(1) RE(IA+1,2,i)=-C(1) RE(1,IA+1,i)=-C(1) RE(2,IA+1,i)=-C(1) RE(IA+2,1,i)=-C(2) RE(IA+2,2,i)=-C(2) RE(1,IA+2,i)=-C(2) RE(2,IA+2,i)=-C(2) IF(IDIM.EQ.3) THEN RE(IA+3,1,i)=-C(3) RE(IA+3,2,i)=-C(3) RE(1,IA+3,i)=-C(3) RE(2,IA+3,i)=-C(3) ENDIF * SEGDES XMATRI * IMATTT(I)=XMATRI 50 CONTINUE 500 CONTINUE SEGDES MELEME,IPT1,IPT2,xMATRI SEGDES MRIGID SEGSUP ITRA RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales