C ELLA23 SOURCE PV 22/04/19 16:18:03 11344 SUBROUTINE ELLA23(CARACT,COOR,GAMA,ZXX,XCOR,VALDE1,VALDE2, & VALDE3,VALDE4,ZS,NP,NBELEM,XXPI) C IMPLICIT INTEGER(I-N) COMPLEX*16 ZXX,ZD,ZE,ZI,ZIMOIN,ZS,ZU,ZU1,ZU2,ZCE,ZCP,ZCMU,ZCR, & ZALFA2,ZALFAX,ZALFAR,ZALFA4,ZALFAF,ZZ3,ZALFAA, & ZA56,ZB56,ZA89,ZB89,ZA1112,ZB1112, & ZUX1,ZUY1,ZUZ1,ZUP1,ZX1,ZY1,ZZ1,ZP1, & ZUX2,ZUY2,ZUZ2,ZUP2,ZX2,ZY2,ZZ2,ZP2, & Z1,Z2, & Z10X, Z11X, Z30X, Z31X, Z32X, Z33X, Z34X, Z40X, Z41X, & Z10XL,Z11XL,Z30XL,Z31XL,Z32XL,Z33XL,Z34XL,Z40XL,Z41XL C REAL*8 CARACT,COOR,GAMA,XCOR,VALDE1,VALDE2,VALDE3, & VALDE4,XXPI,R1,R2,XXA,XYA,XZA,XXB,XYB,XZB,XL, & XI1,XI2,XI3,GX,GY,GZ,GG,DELTA,DET,XJ1,XJ2,XJ3, & XK1,XK2,XK3,XX1,XY1,XZ1,XX2,XY2,XZ2, & XXD1,XXD2,XXL1,XXL2,EPSILO REAL*8 CE,CNU,CRO,CRIN,CREX,CKC,CAM,CETA,CROF,CSON, & CSE,CSEF,CC,CI,CIP,COEF, & PRZX1,PIZX1,PRZY1,PIZY1,PRZZ1,PIZZ1,PRZP1,PIZP1, & PRZX2,PIZX2,PRZY2,PIZY2,PRZZ2,PIZZ2,PRZP2,PIZP2, & PPX1,PPY1,PPZ1,PPX2,PPY2,PPZ2,PPP1,PPP2 C -INC CCREEL INTEGER NP,NBELEM,N1,N2,I,IN,IOUI,J,L C C OPERATEUR ELFE LAPLACE ACOU C C CALCUL POUR LA POUTRE Num INP LES VALEURS DE Ua ET DE Ub EN LOCAL C C PARAMETRES : C C CARACT : TABLEAU DES CARACTERISTIQUE DES POUTRES (10,NP) C COOR : TABLEAU DES COORDONNEES DES NOEUDS (3,2*NP) C GAMA : TABLEAU DES VECTEUR DEFINISSANT LE PLAN LOCALE OXY (3,2*NP) C ZXX : VECTEUR (28*NP) DONNANT LE VECTEUR SOLUTION DU TREILLIS C DANS LE REPERE GLOBAL C XCOR : TABLEAU DONNANT LES COORD. DES NOEUDS DE L'OBJET MAILLAGE C DANS LE REPERE GLOBAL C ZS : VALEUR DE S = S0 + I W C NP : NOMBRE DE POUTRES DU TREILLIS C NBELEM : NOMBRE D'ELEMENTS DU SOUS-MAILLAGE C XXPI : VALEUR PRECISE DE PI C C C SORTIES : C C VALDE1 : MODULE DE UX, UY, UZ POUR LES 2 POINTS DE CHAQUE ELEMENT C DU SOUS-MAILLAGE C VALDE2 : PHASE DE UX, UY, UZ POUR LES 2 POINTS DE CHAQUE ELEMENT C DU SOUS-MAILLAGE C VALDE3 : MODULE DE P POUR LES 2 POINTS DE CHAQUE ELEMENT C DU SOUS-MAILLAGE C VALDE4 : PHASE DE P POUR LES 2 POINTS DE CHAQUE ELEMENT C DU SOUS-MAILLAGE C C C AUTEURS : SAINT-DIZIER ET GORCY C DATE : 24 JANVIER 1991 C C DIMENSION CARACT(10,*),COOR(3,*),GAMA(3,*) DIMENSION ZXX(*),XCOR(2,3,NBELEM) DIMENSION VALDE1(2,NBELEM,3),VALDE2(2,NBELEM,3) DIMENSION VALDE3(2,NBELEM,1),VALDE4(2,NBELEM,1) C DIMENSION ZU(28),ZU1(28),ZU2(28) DIMENSION R1(3,3),R2(3,3),ZD(14),ZE(14,14) C ZIMOIN=CMPLX(0.D0,-1.D0,kind(1.D0)) * EPSILO=1.0D-38 EPSILO=xpetit C DO 100 INP = 1 , NP C DO 101 II = 1 , 28 ZU(II) = ZXX(28*(INP-1)+II) 101 CONTINUE C C -------------- ACQUISITION DES CARACTERISTIQUES DE LA POUTRE C --------------------------------------------- C CE = CARACT( 1,INP) CNU = CARACT( 2,INP) CRO = CARACT( 3,INP) CRIN = CARACT( 4,INP) CREX = CARACT( 5,INP) CKC = CARACT( 6,INP) CAM = CARACT( 7,INP) CETA = CARACT( 8,INP) CROF = CARACT( 9,INP) CSON = CARACT(10,INP) C ZI = CMPLX(0.D0 , 1.D0,kind(1.D0)) C CSE = XXPI * ((CREX*CREX)-(CRIN*CRIN)) CSEF = XXPI * (CRIN*CRIN) CC = XXPI * ((CREX*CREX*CREX*CREX)-(CRIN*CRIN*CRIN*CRIN)) / 2.D0 CI = XXPI * ((CREX*CREX*CREX*CREX)-(CRIN*CRIN*CRIN*CRIN)) / 4.D0 CIP = 2.D0 * CI C COEF = 1.D0 +((2.*CROF*CSON*CSON*CRIN) / (CE*(CREX-CRIN))) CSON = CSON / SQRT(COEF) C ZCE = CE*(CMPLX(1.D0,0.D0,KIND(1.D0))+CETA*ZI) ZCP = SQRT(ZCE/CRO) ZCMU = ZCE/(CMPLX(2.D0,0.D0,KIND(1.D0))* > (CMPLX(1.D0,0.D0,KIND(1.D0))+CNU)) ZCR = SQRT(ZCMU/CRO) C ZALFA2= ZS*ZS*CRO*CSE + CAM*ZS ZALFA2= ZALFA2 / (ZCE*CSE) ZALFAX= SQRT(ZALFA2) C ZALFA2= ZS*ZS*CRO*CIP + CAM*ZS ZALFA2= ZALFA2 / (ZCMU*CC) ZALFAR= SQRT(ZALFA2) C ZALFA4= CRO*CRO*CI*ZS*ZS*ZS*ZS/ZCMU/CKC * + CAM*CRO*CI*ZS*ZS*ZS/ZCMU/CKC/CSE * + ((CRO*CSE)+(CROF*CSEF))*ZS*ZS * + CAM*ZS ZALFA4= ZALFA4/(ZCE*CI) ZALFA2= SQRT(ZALFA4) ZALFAF= SQRT(ZALFA2) C ZZ3 = CRO*CI*(CMPLX(1.D0,0.D0,KIND(1.D0))+ZCE/(ZCMU*CKC))*ZS*ZS * + CAM*ZCE*CI*ZS/(ZCMU*CKC*CSE) ZZ3 = ZZ3 / (ZCE*CI*ZALFA2) C ZALFAA = ZS / CSON C N1 = 2*INP-1 N2 = 2*INP XXA = COOR (1,N1) XYA = COOR (2,N1) XZA = COOR (3,N1) XXB = COOR (1,N2) XYB = COOR (2,N2) XZB = COOR (3,N2) C XL = SQRT((XXB-XXA)**2 + (XYB-XYA)**2 + (XZB-XZA)**2) C C ------------------------------ VECTEUR UNITAIRE OX REPERE LOCALE C --------------------------------- XI1 = (XXB-XXA)/XL XI2 = (XYB-XYA)/XL XI3 = (XZB-XZA)/XL C C ------------------------- VECTEUR UNITAIRE OY REPERE LOCALE C --------------------------------- GX = GAMA(1,INP) GY = GAMA(2,INP) GZ = GAMA(3,INP) GG = SQRT(GX*GX + GY*GY + GZ*GZ) GX = GX/GG GY = GY/GG GZ = GZ/GG C DELTA = SQRT (1.D0 - (XI1*GX + XI2*GY + XI3*GZ)**2) C DET=-(GX*XI3-GZ*XI1)**2-(GY*XI1-GX*XI2)**2-(GY*XI3-GZ*XI2)**2 C IF (ABS(DET).LT.1D-12) THEN XJ1 = -XI2 XJ2 = 0.D0 XJ3 = 0.D0 ELSE XJ1 = (XI2*(GY*XI1-GX*XI2)-XI3*(GX*XI3-GZ*XI1))*DELTA/DET XJ2 = (XI3*(GZ*XI2-GY*XI3)-XI1*(GY*XI1-GX*XI2))*DELTA/DET XJ3 = (XI1*(GX*XI3-GZ*XI1)-XI2*(GZ*XI2-GY*XI3))*DELTA/DET END IF C C ---------------------------- VECTEUR UNITAIRE OZ REPERE LOCALE C --------------------------------- XK1 = XI2*XJ3 - XI3*XJ2 XK2 = XI3*XJ1 - XI1*XJ3 XK3 = XI1*XJ2 - XI2*XJ1 C R1(1,1) = XI1 R1(1,2) = XJ1 R1(1,3) = XK1 R1(2,1) = XI2 R1(2,2) = XJ2 R1(2,3) = XK2 R1(3,1) = XI3 R1(3,2) = XJ3 R1(3,3) = XK3 C R2(1,1) = XJ2*XK3 - XJ3*XK2 R2(1,2) = XJ3*XK1 - XJ1*XK3 R2(1,3) = XJ1*XK2 - XJ2*XK1 R2(2,1) = XI3*XK2 - XI2*XK3 R2(2,2) = XI1*XK3 - XI3*XK1 R2(2,3) = XI2*XK1 - XI1*XK2 R2(3,1) = XI2*XJ3 - XI3*XJ2 R2(3,2) = XI3*XJ1 - XI1*XJ3 R2(3,3) = XI1*XJ2 - XI2*XJ1 C C ----------------------------- MATRICE DIMENSIONNEMENT ZD C -------------------------- ZD( 1) = XL**2/ZCP ZD( 2) = XL**2/ZCP ZD( 3) = XL**2/ZCP ZD( 4) = XL/ZCR ZD( 5) = XL**2/ZCP*ZALFAF ZD( 6) = XL**2/ZCP*ZALFAF ZD( 7) = XL**2/ZCP*ZALFAX ZD( 8) = XL**2/ZCP*(ZALFAF**3) ZD( 9) = XL**2/ZCP*(ZALFAF**3) ZD(10) = XL/ZCR*ZALFAR ZD(11) = XL**2/ZCP*(ZALFAF**2) ZD(12) = XL**2/ZCP*(ZALFAF**2) ZD(13) = CMPLX(XL*CROF*CSON,0.D0,KIND(1.D0)) ZD(14) = XL*CROF*CSON*ZALFAA C C ------------------------------- MATRICE DES EFFORTS ZE C ---------------------- DO 20 I = 1 , 14 DO 21 J = 1 , 14 ZE(I,J) = (0.D0,0.D0) 21 CONTINUE 20 CONTINUE C ZA56 = (1.D0,0.D0) ZB56 = CMPLX(1.D0,0.D0,KIND(1.D0)) / (ZCMU*CKC*CSE) C ZA89 = (CRO*CSE*ZS*ZS+CAM*ZS)/(ZCMU*ZCMU*CKC*CKC*CSE*CSE) * - CMPLX(1.D0,0.D0,KIND(1.D0))/(ZCE*CI) ZB89 = CRO*ZS*ZS*(CMPLX(1.D0,0.D0,KIND(1.D0))/(ZCMU*CKC)+ > CMPLX(1.D0,0.D0,KIND(1.D0))/ZCE) * + CAM*ZS/(ZCMU*CKC*CSE) C ZA1112 = CMPLX(1.D0,0.D0,KIND(1.D0))/(ZCE*CI) ZB1112 = (CRO*CSE*ZS*ZS+CAM*ZS)/(ZCMU*CKC*CSE) C ZE( 1, 1) = CMPLX(1.D0,0.D0,KIND(1.D0)) ZE( 2, 2) = CMPLX(1.D0,0.D0,KIND(1.D0)) ZE( 3, 3) = CMPLX(1.D0,0.D0,KIND(1.D0)) ZE( 4, 4) = CMPLX(1.D0,0.D0,KIND(1.D0)) ZE( 5, 5) = -ZA56 ZE( 5, 9) = ZB56 ZE( 6, 6) = ZA56 ZE( 6, 8) = ZB56 ZE( 7, 7) = CMPLX(1.D0,0.D0,KIND(1.D0))/(ZCE*CSE) ZE( 8, 6) = ZB89 ZE( 8, 8) = ZA89 ZE( 9, 5) = -ZB89 ZE( 9, 9) = ZA89 ZE(10,10) = CMPLX(1.D0,0.D0,KIND(1.D0))/(ZCMU*CC) ZE(11, 3) = ZB1112 ZE(11,11) = -ZA1112 ZE(12, 2) = ZB1112 ZE(12,12) = ZA1112 ZE(13,13) = CMPLX(1.D0,0.D0,KIND(1.D0)) ZE(14,14) = -ZS/CSEF C C -- CALCUL DE ZU1 = ZR * ZU C DO 27 I = 1 , 28 ZU1(I) = (0.D0,0.D0) ZU2(I) = (0.D0,0.D0) 27 CONTINUE C DO 26 I = 1 , 4 DO 25 J = 1 , 3 DO 24 K = 1 , 3 L = (I-1)*3 ZU1(L+J)=ZU1(L+J)+R2(J,K)*ZU(L+K) ZU1(L+14+J)=ZU1(L+14+J)+R2(J,K)*ZU(L+14+K) 24 CONTINUE 25 CONTINUE 26 CONTINUE C ZU1(13) = ZU(13) ZU1(14) = ZU(14) ZU1(27) = ZU(27) ZU1(28) = ZU(28) C C -- CALCUL DE ZU2 = ZE * ZU1 C DO 30 I = 1,12 DO 31 J = 1,12 ZU2(I) = ZU2(I) + ZE(I,J)*ZU1(J) 31 CONTINUE 30 CONTINUE C ZU2(13) = ZE(13,13)*ZU1(13) ZU2(14) = -ZE(14,14)*ZU1(14) C DO 32 I = 1,12 DO 33 J = 1,6 ZU2(I+14) = ZU2(I+14) + ZE(I,J )*ZU1(J+14) ZU2(I+14) = ZU2(I+14) - ZE(I,J+6)*ZU1(J+20) 33 CONTINUE 32 CONTINUE C ZU2(27) = ZE(13,13)*ZU1(27) ZU2(28) = ZE(14,14)*ZU1(28) C C -- CALCUL DE ZU2 = ZD * ZU2 C DO 34 I = 1,14 ZU2(I ) = ZU2(I )/ZD(I) ZU2(I+14) = ZU2(I+14)/ZD(I) 34 CONTINUE C C --------------- NBELEM : NOMBRE D'ELEMENTS DANS LE SOUS MAILLAGE C DO 110 IN = 1 , NBELEM C XX1 = XCOR ( 1,1,IN) XY1 = XCOR ( 1,2,IN) XZ1 = XCOR ( 1,3,IN) C XX2 = XCOR ( 2,1,IN) XY2 = XCOR ( 2,2,IN) XZ2 = XCOR ( 2,3,IN) C CALL ELLA07(XXA,XYA,XZA,XXB,XYB,XZB,XX1,XY1,XZ1,XX2,XY2,XZ2, * IOUI) C IF (IOUI.EQ.1) THEN C XXD1 = SQRT((XXA-XX1)**2+(XYA-XY1)**2+(XZA-XZ1)**2) XXD2 = SQRT((XXA-XX2)**2+(XYA-XY2)**2+(XZA-XZ2)**2) XXL1= XL -XXD1 XXL2= XL -XXD2 C C XXDI : DISTANCE DE A AU PT M DE CALCUL DU DEPLACEMENT C CALL ELLA31(XXD1,ZALFAX,ZALFAR,ZALFAF,ZALFAA,Z10X, * Z11X,Z1,Z2,Z30X,Z31X,Z32X,Z33X,Z34X,ZZ3,Z40X,Z41X) C CALL ELLA31(XXL1,ZALFAX,ZALFAR,ZALFAF,ZALFAA,Z10XL, * Z11XL,Z1,Z2,Z30XL,Z31XL,Z32XL,Z33XL,Z34XL,ZZ3,Z40XL,Z41XL) C ZUX1 = ZU2(21)*Z10XL-ZU2(15)*Z11XL-ZU2(7)*Z10X-ZU2(1)*Z11X C ZUY1 =-(ZZ3*Z31X -Z33X )*ZU2(2) - (ZZ3*Z30X -Z32X )*ZU2(6) * + Z31X *ZU2(12) + Z30X *ZU2(8) * -(ZZ3*Z31XL-Z33XL)*ZU2(16)+(ZZ3*Z30XL-Z32XL)*ZU2(20) * + Z31XL*ZU2(26) - Z30XL*ZU2(22) C ZUZ1 =-(ZZ3*Z31X -Z33X )*ZU2(3) - (ZZ3*Z30X -Z32X )*ZU2(5) * + Z31X *ZU2(11) + Z30X *ZU2(9) * -(ZZ3*Z31XL-Z33XL)*ZU2(17)+(ZZ3*Z30XL-Z32XL)*ZU2(19) * + Z31XL*ZU2(25) - Z30XL*ZU2(23) C ZUP1 = ZU2(28)*Z40XL-ZU2(27)*Z41XL-ZU2(14)*Z40X-ZU2(13)*Z41X C ZUX1 = ZUX1 * ZD(1) ZUY1 = ZUY1 * ZD(2) ZUZ1 = ZUZ1 * ZD(3) ZUP1 = ZUP1 * ZD(13) C ZX1 = R1(1,1)*ZUX1 + R1(1,2)*ZUY1 + R1(1,3)*ZUZ1 ZY1 = R1(2,1)*ZUX1 + R1(2,2)*ZUY1 + R1(2,3)*ZUZ1 ZZ1 = R1(3,1)*ZUX1 + R1(3,2)*ZUY1 + R1(3,3)*ZUZ1 ZP1 = ZUP1 C CALL ELLA31(XXD2,ZALFAX,ZALFAR,ZALFAF,ZALFAA,Z10X, * Z11X,Z1,Z2,Z30X,Z31X,Z32X,Z33X,Z34X,ZZ3,Z40X,Z41X) C CALL ELLA31(XXL2,ZALFAX,ZALFAR,ZALFAF,ZALFAA,Z10XL, * Z11XL,Z1,Z2,Z30XL,Z31XL,Z32XL,Z33XL,Z34XL,ZZ3,Z40XL,Z41XL) C C ZUX2 = ZU2(21)*Z10XL-ZU2(15)*Z11XL-ZU2(7)*Z10X-ZU2(1)*Z11X C ZUY2 =-(ZZ3*Z31X -Z33X )*ZU2(2) - (ZZ3*Z30X -Z32X )*ZU2(6) * + Z31X *ZU2(12) + Z30X *ZU2(8) * -(ZZ3*Z31XL-Z33XL)*ZU2(16)+(ZZ3*Z30XL-Z32XL)*ZU2(20) * + Z31XL*ZU2(26) - Z30XL*ZU2(22) C ZUZ2 =-(ZZ3*Z31X -Z33X )*ZU2(3) - (ZZ3*Z30X -Z32X )*ZU2(5) * + Z31X *ZU2(11) + Z30X *ZU2(9) * -(ZZ3*Z31XL-Z33XL)*ZU2(17)+(ZZ3*Z30XL-Z32XL)*ZU2(19) * + Z31XL*ZU2(25) - Z30XL*ZU2(23) C ZUP2 = ZU2(28)*Z40XL-ZU2(27)*Z41XL-ZU2(14)*Z40X-ZU2(13)*Z41X C ZUX2 = ZUX2 * ZD(1) ZUY2 = ZUY2 * ZD(2) ZUZ2 = ZUZ2 * ZD(3) ZUP2 = ZUP2 * ZD(13) C ZX2 = R1(1,1)*ZUX2 + R1(1,2)*ZUY2 + R1(1,3)*ZUZ2 ZY2 = R1(2,1)*ZUX2 + R1(2,2)*ZUY2 + R1(2,3)*ZUZ2 ZZ2 = R1(3,1)*ZUX2 + R1(3,2)*ZUY2 + R1(3,3)*ZUZ2 ZP2 = ZUP2 C PRZX1 = ZX1 PIZX1 = ZX1*ZIMOIN PRZY1 = ZY1 PIZY1 = ZY1*ZIMOIN PRZZ1 = ZZ1 PIZZ1 = ZZ1*ZIMOIN PRZP1 = ZP1 PIZP1 = ZP1*ZIMOIN PRZX2 = ZX2 PIZX2 = ZX2*ZIMOIN PRZY2 = ZY2 PIZY2 = ZY2*ZIMOIN PRZZ2 = ZZ2 PIZZ2 = ZZ2*ZIMOIN PRZP2 = ZP2 PIZP2 = ZP2*ZIMOIN C IF (ABS(PRZX1).LT.EPSILO.AND.ABS(PIZX1).LT.EPSILO) THEN PPX1 = 0.D0 ELSE PPX1 = ATAN2(PIZX1,PRZX1)*180.D0/XXPI END IF C IF (ABS(PRZY1).LT.EPSILO.AND.ABS(PIZY1).LT.EPSILO) THEN PPY1 = 0.D0 ELSE PPY1 = ATAN2(PIZY1,PRZY1)*180.D0/XXPI END IF C IF (ABS(PRZZ1).LT.EPSILO.AND.ABS(PIZZ1).LT.EPSILO) THEN PPZ1 = 0.D0 ELSE PPZ1 = ATAN2(PIZZ1,PRZZ1)*180.D0/XXPI END IF C IF (ABS(PRZX2).LT.EPSILO.AND.ABS(PIZX2).LT.EPSILO) THEN PPX2 = 0.D0 ELSE PPX2 = ATAN2(PIZX2,PRZX2)*180.D0/XXPI END IF C IF (ABS(PRZY2).LT.EPSILO.AND.ABS(PIZY2).LT.EPSILO) THEN PPY2 = 0.D0 ELSE PPY2 = ATAN2(PIZY2,PRZY2)*180.D0/XXPI END IF C IF (ABS(PRZZ2).LT.EPSILO.AND.ABS(PIZZ2).LT.EPSILO) THEN PPZ2 = 0.D0 ELSE PPZ2 = ATAN2(PIZZ2,PRZZ2)*180.D0/XXPI END IF C IF (ABS(PRZP1).LT.EPSILO.AND.ABS(PIZP1).LT.EPSILO) THEN PPP1 = 0.D0 ELSE PPP1 = ATAN2(PIZP1,PRZP1)*180.D0/XXPI END IF C IF (ABS(PRZP2).LT.EPSILO.AND.ABS(PIZP2).LT.EPSILO) THEN PPP2 = 0.D0 ELSE PPP2 = ATAN2(PIZP2,PRZP2)*180.D0/XXPI END IF C VALDE1(1,IN,1) = ABS(ZX1) VALDE1(1,IN,2) = ABS(ZY1) VALDE1(1,IN,3) = ABS(ZZ1) VALDE1(2,IN,1) = ABS(ZX2) VALDE1(2,IN,2) = ABS(ZY2) VALDE1(2,IN,3) = ABS(ZZ2) C VALDE2(1,IN,1) = PPX1 VALDE2(1,IN,2) = PPY1 VALDE2(1,IN,3) = PPZ1 VALDE2(2,IN,1) = PPX2 VALDE2(2,IN,2) = PPY2 VALDE2(2,IN,3) = PPZ2 C VALDE3(1,IN,1) = ABS(ZP1) VALDE3(2,IN,1) = ABS(ZP2) C VALDE4(1,IN,1) = PPP1 VALDE4(2,IN,1) = PPP2 C END IF C 110 CONTINUE C 100 CONTINUE C END