ptori
C PTORI SOURCE PV 20/03/24 21:21:03 10554 C CE SOUS-PROGRAMME RAMENE UN TORE SUR SES COORDONNEES PROPRES C LES DONNEES DU TORE SONT : LE CENTRE UN POINT DE L'AXE ET UN CENTRE C SECONDAIRE C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC CCREEL -INC SMCOORD -INC PPARAM -INC CCOPTIO real*8 tcval(*) SEGMENT/FER/(NFI(ITT),MAI(IPP),ITOUR) * tcval(1) 2 3 4 5 6 * SAVE XORIG,YORIG,ZORIG,XAXE,YAXE,ZAXE * 7 8 9 * SAVE XPC,YPC,ZPC * 10 11 * SAVE ISENS,GRAY,PRAY IF (IOP.EQ.2) GOTO 100 IMCT=MAI(ITOUR+1) INCT=MAI(1)+1 NDEB=IMCT+1 SEGINI XPROJ SEGACT MCOORD*mod C CENTRE DU TORE IREF=IPC*4-3 XPC=XCOOR(IREF) YPC=XCOOR(IREF+1) ZPC=XCOOR(IREF+2) tcval(7)=xpc tcval(8)=ypc tcval(9)=zpc C POINT DE L'AXE IREF=IPA*4-3 XPA=XCOOR(IREF) YPA=XCOOR(IREF+1) ZPA=XCOOR(IREF+2) C CENTRE SECONDAIRE IREF=IP1*4-3 XP1=XCOOR(IREF) YP1=XCOOR(IREF+1) ZP1=XCOOR(IREF+2) XAXE=XPC-XPA YAXE=YPC-YPA ZAXE=ZPC-ZPA DAXE=SQRT(XAXE**2+YAXE**2+ZAXE**2) XAXE=XAXE/DAXE YAXE=YAXE/DAXE ZAXE=ZAXE/DAXE tcval(4)=xaxe tcval(5)=yaxe tcval(6)=zaxe C CALCUL DU GRAND RAYON GRAY=SQRT((XPC-XP1)**2+(YPC-YP1)**2+(ZPC-ZP1)**2) tcval(10)=gray IF (IIMPI.NE.0) WRITE (IOIMP,9901) GRAY 9901 FORMAT (/,' GRAND RAYON ',G12.5) C DEROULONS LE TORE (DANS LES DEUX SENS) IREF=4*NFI(IMCT)-3 XV1=XCOOR(IREF)-XPC YV1=XCOOR(IREF+1)-YPC ZV1=XCOOR(IREF+2)-ZPC XI=XV1*XAXE+YV1*YAXE+ZV1*ZAXE XC1=XV1-XI*XAXE YC1=YV1-XI*YAXE ZC1=ZV1-XI*ZAXE C CENTRE SECONDAIRE SC1=SQRT(XC1**2+YC1**2+ZC1**2) U1=XC1/SC1 V1=YC1/SC1 W1=ZC1/SC1 XD1=XPC+U1*GRAY YD1=YPC+V1*GRAY ZD1=ZPC+W1*GRAY XORIG=U1 YORIG=V1 ZORIG=W1 tcval(1)=xorig tcval(2)=yorig tcval(3)=zorig U2=YAXE*W1-ZAXE*V1 V2=ZAXE*U1-XAXE*W1 W2=XAXE*V1-YAXE*U1 XVOR1=XV1+XPC-XD1 YVOR1=YV1+YPC-YD1 ZVOR1=ZV1+ZPC-ZD1 COT2=ATAN2(U2*(YAXE*ZVOR1-ZAXE*YVOR1)+V2* # (ZAXE*XVOR1-XAXE*ZVOR1)+W2*(XAXE*YVOR1-YAXE*XVOR1), # XAXE*XVOR1+YAXE*YVOR1+ZAXE*ZVOR1) RAYON=0.D0 COT1=0.D0 DO 1 I=INCT,max(IMCT,mai(itour+2)) II=NFI(I) IREF=4*II-3 XV2=XCOOR(IREF)-XPC YV2=XCOOR(IREF+1)-YPC ZV2=XCOOR(IREF+2)-ZPC XI=XV2*XAXE+YV2*YAXE+ZV2*ZAXE XC2=XV2-XI*XAXE YC2=YV2-XI*YAXE ZC2=ZV2-XI*ZAXE ANG=ATAN2(XAXE*(YC1*ZC2-YC2*ZC1)+YAXE*(ZC1*XC2-ZC2*XC1)+ # ZAXE*(XC1*YC2-XC2*YC1),XC1*XC2+YC1*YC2+ZC1*ZC2) COT1=COT1+ANG XPROJ(1,I)=COT1*GRAY C CENTRE SECONDAIRE SC2=SQRT(XC2**2+YC2**2+ZC2**2) U1=XC2/SC2 V1=YC2/SC2 W1=ZC2/SC2 XD2=XPC+U1*GRAY YD2=YPC+V1*GRAY ZD2=ZPC+W1*GRAY U2=YAXE*W1-ZAXE*V1 V2=ZAXE*U1-XAXE*W1 W2=XAXE*V1-YAXE*U1 XVOR2=XV2+XPC-XD2 YVOR2=YV2+YPC-YD2 ZVOR2=ZV2+ZPC-ZD2 ANG=ATAN2(U2*(YAXE*ZVOR2-ZAXE*YVOR2)+V2* # (ZAXE*XVOR2-XAXE*ZVOR2)+W2*(XAXE*YVOR2-YAXE*XVOR2), # XAXE*XVOR2+YAXE*YVOR2+ZAXE*ZVOR2) ADIF=ANG-COT2 ADIF=ADIF-INT(ADIF/(2*XPI))*2*XPI IF (ADIF.GE.XPI) ADIF=ADIF-2*XPI IF (ADIF.LE.-XPI) ADIF=ADIF+2*XPI COT2=COT2+ADIF XPROJ(2,I)=COT2 XPROJ(3,I)=XCOOR(IREF+3) if (i.le.imct) RAYON=RAYON+XVOR2**2+YVOR2**2+ZVOR2**2 XC1=XC2 YC1=YC2 ZC1=ZC2 1 CONTINUE RAYON2=RAYON/(IMCT-INCT+1) PRAY=SQRT(RAYON2) tcval(11)=pray IF (IIMPI.NE.0) WRITE (IOIMP,9902) PRAY 9902 FORMAT (' PETIT RAYON ',G12.5) DO 2 I=INCT,max(IMCT,mai(itour+2)) XPROJ(2,I)=XPROJ(2,I)*PRAY II=NFI(I) NFI(I)=I IREF=4*II-3 XV=XCOOR(IREF)-XPC YV=XCOOR(IREF+1)-YPC ZV=XCOOR(IREF+2)-ZPC XI=XV*XAXE+YV*YAXE+ZV*ZAXE XC=XV-XI*XAXE YC=YV-XI*YAXE ZC=ZV-XI*ZAXE C CENTRE SECONDAIRE SC=SQRT(XC**2+YC**2+ZC**2) U1=XC/SC V1=YC/SC W1=ZC/SC XC=XPC+U1*GRAY YC=YPC+V1*GRAY ZC=ZPC+W1*GRAY XVOR=XV+XPC-XC YVOR=YV+YPC-YC ZVOR=ZV+ZPC-ZC RAY2=XVOR**2+YVOR**2+ZVOR**2 RAP=RAY2/RAYON2 IF (i.gt.imct.or.(RAP.LE.1.02D0.AND.RAP.GE.0.98D0)) GOTO 2 IF (IIMPI.NE.0) WRITE (IOIMP,9903) I,RAP 9903 FORMAT(' POINT ',I6,' ERREUR RELATIVE SUR LE PETIT RAYON ',G12 $ .5) RETURN 2 CONTINUE C IL FAUT TOURNER DANS LE BON SENS SURF=0.D0 DO 3 IT=1,ITOUR II1=MAI(IT-1+1)+1 II2=MAI(IT+1) XV1=XPROJ(1,II2) YV1=XPROJ(2,II2) DO 31 I=II1,II2 XV2=XPROJ(1,I) YV2=XPROJ(2,I) IF (XPROJ(3,I).EQ.0.D0) XPROJ(3,I)=SQRT((XV2-XV1)**2+(YV2 $ -YV1)**2) SURF=SURF+XV1*YV2-XV2*YV1 XV1=XV2 YV1=YV2 31 CONTINUE 3 CONTINUE ISENS=1 IF (SURF.GT.0.D0) GOTO 5 ISENS=-1 DO 4 I=INCT,max(IMCT,mai(itour+2)) XPROJ(1,I)=-XPROJ(1,I) 4 CONTINUE 5 CONTINUE RETURN C TRANSFORMATION INVERSE 100 CONTINUE xorig=tcval(1) yorig=tcval(2) zorig=tcval(3) xaxe=tcval(4) yaxe=tcval(5) zaxe=tcval(6) xpc=tcval(7) ypc=tcval(8) zpc=tcval(9) gray= tcval(10) pray=tcval(11) SEGACT MCOORD*mod XREP1=XORIG YREP1=YORIG ZREP1=ZORIG XREP2=YAXE*ZREP1-ZAXE*YREP1 YREP2=ZAXE*XREP1-XAXE*ZREP1 ZREP2=XAXE*YREP1-YAXE*XREP1 IF (NDEB.GT.NUMNP) GOTO 102 NBPTA=nbpts NBPTS=NBPTA+NUMNP-NDEB+1 SEGADJ MCOORD DO 101 I=NDEB,NUMNP ANG=XPROJ(1,I)*ISENS/GRAY CO=COS(ANG) SC1=SQRT(XC1**2+YC1**2+ZC1**2) ANG=XPROJ(2,I)/PRAY CO=COS(ANG) XCOOR(NBPTA*(IDIM+1)+1)=XPC+XC1+XV1 XCOOR(NBPTA*(IDIM+1)+2)=YPC+YC1+YV1 XCOOR(NBPTA*(IDIM+1)+3)=ZPC+ZC1+ZV1 XCOOR((NBPTA+1)*(IDIM+1))=XPROJ(3,I) NBPTA=NBPTA+1 101 CONTINUE 102 CONTINUE SEGSUP XPROJ RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales