C GFLEX1 SOURCE CHAT 05/01/13 00:18:02 5004 SUBROUTINE GFLEX1(AB,DLL,RF,CTC,DELTAT,LANBN) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C C ===================================================================== C SOUS-PROGRAMME FORTRAN APPELE PAR GREEN1 POUR CALCULER LES FCTS DE C GREEN EN FLEXION C CREATION : 21/09/87 C PROGRAMMEUR : GUILBAUD C ===================================================================== -INC CCOPTIO -INC CCREEL DIMENSION AB(10,*) WRITE(IOIMP,*) ' DEBUT DE GFLEX1 ' PIS4=XPI*0.25D0 RPI=1.D0/SQRT(XPI) XP=1.D0 XG=20.D0 XTG=200.D0 C C--------BOUCLE SUR LES PAS DE TEMPS ------------------------- C GP4=0.D0 GP3=0.D0 GP2=0.D0 GP1=0.D0 GP0=0.D0 GPL0=0.D0 G4P=0.D0 G3P=0.D0 G2P=0.D0 G1P=0.D0 G0P=0.D0 DTM=DLL*DLL/(3.D0*CTC*RF*XPI) LANBN1=LANBN+1 DO 40 L=1,LANBN1 T=L*DELTAT C C--------BOUCLE SUR LES EXTREMITES---------------------------- C DO 20 NE=1,2 DL=0.D0 IF(NE.EQ.2) DL=DLL DKSI=DL/RF CSRF=CTC/RF TETA=CSRF*T RTETA=SQRT(TETA) STK=0.5D0/RTETA U2=DKSI*DKSI/(4.D0*TETA) SDK=RPI*SIN(U2-PIS4) CDK=RPI*COS(U2-PIS4) IF(NE.EQ.1) THEN C C PREMIERE EXTREMITE C G4=-STK*CDK G3=0.5D0 G2=RTETA*SDK G1=0.D0 G0=(2.D0/3.D0)*RTETA*TETA*CDK AB4=G4-GP4 GP4=G4 AB3=G3-GP3 GP3=G3 AB2=G2-GP2 GP2=G2 AB1=G1-GP1 GP1=G1 AB0=G0-GP0 GP0=G0 AB(1,L)=AB0 AB(2,L)=AB1 AB(3,L)=AB2 AB(4,L)=AB3 AB(5,L)=AB4 ELSE C C SECONDE EXTREMITE C IF(U2.GT.XTG) THEN TK=2.D0*TETA/DKSI TK1=STK*TK TK2=TK1*TK TK3=TK2*TK TK4=TK3*TK TK5=TK4*TK TK6=TK5*TK G3=-TK1*SDK G2=TK2*CDK G1=TK3*SDK G0=-TK4*CDK GG3=-TK3*CDK GG2=-TK4*SDK GG1= TK5*CDK ELSE IF(T.EQ.DELTAT) THEN U2P=XG+1.D0 ELSE U2P=DKSI*DKSI/(4.D0*CSRF*(T-DELTAT)) ENDIF IF(U2.GT.XP.AND.U2P.LT.XG) THEN CALL INTFR2(DCC,DSS,U2P,U2) SS=SS-DSS CC=CC-DCC ELSE CALL INTFRE(CC,SS,U2) ENDIF SC=SS-CC SC1=1.D0-SS-CC U=SQRT(U2) U3=U*U2 U4=U*U3 GG4=-RTETA*(U*SC+CDK) G3=0.5D0*SC1 G2=RTETA*(SDK+U*SC1) G1=RTETA*(0.5D0*RTETA*SC+U*G2) G0=(2.D0/3.D0)*RTETA*(-RTETA*GG4+U*G1) GG3=TETA*(0.5D0*SC1-U*CDK-U2*SC) GG2=(2.D0/3.D0)*TETA*RTETA*(SDK+1.5D0*U*SC1-U2*CDK-U3*SC) GG1=TETA*RTETA*(1.5D0*SC+U*SDK+2.D0*(U3*CDK+U4*SC))/6.D0 GG1=RTETA*(GG1+U*GG2) ENDIF IF(DELTAT.LE.DTM) THEN AB0=G0-GPL0 GPL0=G0 DELT=CSRF*DELTAT DELT2=DELT*DELT AB(6,L)=AB0 AB(7,L)=GG1/DELT AB(8,L)=GG2/DELT AB(9,L)=GG3/DELT AB(10,L)=-AB0/DELT2 ELSE G4=-STK*CDK AB(10,L)=G4-G4P G4P=G4 AB(9,L)=G3-G3P G3P=G3 AB(8,L)=G2-G2P G2P=G2 AB(7,L)=G1-G1P G1P=G1 AB(6,L)=G0-G0P G0P=G0 ENDIF ENDIF 20 CONTINUE 40 CONTINUE C IF(DELTAT.GT.DTM) RETURN DO 70 I=7,10 GP=AB(I,2)-2.D0*AB(I,1) DO 50 L=2,LANBN GA=AB(I,L+1)-2.D0*AB(I,L)+AB(I,L-1) AB(I,L-1)=GP GP=GA 50 CONTINUE AB(I,LANBN)=GP GP=0.D0 DO 60 L=2,LANBN GA=0.5D0*(AB(I,L-1)+AB(I,L)) AB(I,L-1)=GP GP=GA 60 CONTINUE AB(I,LANBN)=GP 70 CONTINUE C WRITE(IOIMP,*)' FIN DE GFLEX1 ' RETURN END