psphe
C PSPHE SOURCE PV 20/03/24 21:21:01 10554 C CE SOUS-PROGRAMME RAMENNE UNE SPHERE SUR SES COORDONNEES PROPRES C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC SMCOORD -INC PPARAM -INC CCOPTIO real*8 tcval(*) SEGMENT/FER/(NFI(ITT),MAI(IPP),ITOUR) SEGMENT XINT(3,max(MAI(ITOUR+1),mai(itour+2))) * tcval (1) 2 3 4 5 6 7 8 9 * SAVE XVEC1,YVEC1,ZVEC1,XVEC2,YVEC2,ZVEC2,XGRAV,YGRAV,ZGRAV * tcval (10) 11 12 13 * SAVE RAYNV,XINV,YINV,ZINV IF (IOP.EQ.2) GOTO 100 IMCT=MAI(ITOUR+1) INCT=MAI(1)+1 NDEB=IMCT+1 SEGINI XPROJ SEGINI XINT SEGACT MCOORD*mod C CENTRE DE LA SPHERE IREF=ICENT*4-3 XCENT=XCOOR(IREF) YCENT=XCOOR(IREF+1) ZCENT=XCOOR(IREF+2) C CENTRE DE GRAVITE POUR DETERMINER LE CENTRE DE L'INVERSION C CALCUL DU RAYON DE LA SPHERE XGRAVS=0 YGRAVS=0 ZGRAVS=0 RAYON=0. DO 1 I=INCT,IMCT IREF=NFI(I)*4-3 XP=XCOOR(IREF) YP=XCOOR(IREF+1) ZP=XCOOR(IREF+2) XGRAVS=XGRAVS+XP YGRAVS=YGRAVS+YP ZGRAVS=ZGRAVS+ZP RAYON=RAYON+(XCENT-XP)**2+(YCENT-YP)**2+(ZCENT-ZP)**2 1 CONTINUE XGRAVS=XGRAVS/(IMCT-INCT+1) YGRAVS=YGRAVS/(IMCT-INCT+1) ZGRAVS=ZGRAVS/(IMCT-INCT+1) RAYON=SQRT(RAYON/(IMCT-INCT+1)) C CENTRE DE L'INVERSION XDIR=XCENT-XGRAVS YDIR=YCENT-YGRAVS ZDIR=ZCENT-ZGRAVS DDIR=SQRT(XDIR**2+YDIR**2+ZDIR**2) COF=RAYON/DDIR XINV=XCENT+COF*XDIR YINV=YCENT+COF*YDIR ZINV=ZCENT+COF*ZDIR tcval(11)=xinv tcval(12)=yinv tcval(13)=zinv C EN AVANT POUR L'INVERSION ATTENTION AU CALCUL DE LA DENSITE RAYNV=4*RAYON**2 tcval(10)=raynv DO 40 I=INCT,max(IMCT,mai(itour+2)) II=NFI(I) IREF=II*4-3 XV=XCOOR(IREF)-XINV YV=XCOOR(IREF+1)-YINV ZV=XCOOR(IREF+2)-ZINV DV=XV**2+YV**2+ZV**2 IF (IERR.NE.0) RETURN XINT(1,I)=XV*RAYNV/DV XINT(2,I)=YV*RAYNV/DV XINT(3,I)=ZV*RAYNV/DV 40 CONTINUE C CENTRE DE GRAVITE DU PLAN DE PROJECTION XGRAV=0 YGRAV=0 ZGRAV=0 DO 51 I=INCT,IMCT XGRAV=XGRAV+XINT(1,I) YGRAV=YGRAV+XINT(2,I) ZGRAV=ZGRAV+XINT(3,I) 51 CONTINUE XGRAV=XGRAV/(IMCT-INCT+1) YGRAV=YGRAV/(IMCT-INCT+1) ZGRAV=ZGRAV/(IMCT-INCT+1) tcval(7)=xgrav tcval(8)=ygrav tcval(9)=zgrav C VECTEUR NORMAL XNORM=0 YNORM=0 ZNORM=0 DO 52 IT=1,ITOUR IPR=MAI(IT+1) XV1=XINT(1,IPR)-XGRAV YV1=XINT(2,IPR)-YGRAV ZV1=XINT(3,IPR)-ZGRAV DO 52 I=MAI(IT-1+1)+1,MAI(IT+1) XV2=XINT(1,I)-XGRAV YV2=XINT(2,I)-YGRAV ZV2=XINT(3,I)-ZGRAV XNORM=XNORM+YV1*ZV2-ZV1*YV2 YNORM=YNORM+ZV1*XV2-XV1*ZV2 ZNORM=ZNORM+XV1*YV2-XV2*YV1 XV1=XV2 YV1=YV2 ZV1=ZV2 52 CONTINUE DNORM=SQRT (XNORM**2+YNORM**2+ZNORM**2) XNORM=XNORM/DNORM YNORM=YNORM/DNORM ZNORM=ZNORM/DNORM C FORMATION DU REPERE IF (ABS(XNORM).LT.0.1) THEN XVEC1=1-XNORM*XNORM YVEC1= -XNORM*YNORM ZVEC1= -XNORM*ZNORM ELSE XVEC1= -YNORM*XNORM YVEC1=1-YNORM*YNORM ZVEC1= -YNORM*ZNORM ENDIF DVEC1=XVEC1**2+YVEC1**2+ZVEC1**2 DVEC1=SQRT(DVEC1) XVEC1=XVEC1/DVEC1 YVEC1=YVEC1/DVEC1 ZVEC1=ZVEC1/DVEC1 XVEC2=YNORM*ZVEC1-ZNORM*YVEC1 YVEC2=ZNORM*XVEC1-XNORM*ZVEC1 ZVEC2=XNORM*YVEC1-YNORM*XVEC1 tcval(1)=xvec1 tcval(2)=yvec1 tcval(3)=Zvec1 tcval(4)=xvec2 tcval(5)=Yvec2 tcval(6)=Zvec2 C EN AVANT POUR LA PROJECTION DO 53 I=INCT,max(IMCT,mai(itour+2)) II=NFI(I) NFI(I)=I XRE=XINT(1,I)-XGRAV YRE=XINT(2,I)-YGRAV ZRE=XINT(3,I)-ZGRAV XPROJ(1,I)=XRE*XVEC1+YRE*YVEC1+ZRE*ZVEC1 XPROJ(2,I)=XRE*XVEC2+YRE*YVEC2+ZRE*ZVEC2 XTEST =XRE*XNORM+YRE*YNORM+ZRE*ZNORM IF (IERR.NE.0) RETURN XPROJ(3,I)=XCOOR(II*4) 53 CONTINUE C VERIFIER LES DENSITES DO 54 IT=1,ITOUR II1=MAI(IT-1+1)+1 II2=MAI(IT+1) DO 54 I=II1,II2 IF (XPROJ(3,I).NE.0) GOTO 54 IAP=I+1 IF (IAP.GT.II2) IAP=II1 XPROJ(3,I)=SQRT((XPROJ(1,I)-XPROJ(1,IAP))**2+(XPROJ(2,I)-XPROJ(2, # IAP))**2) 54 CONTINUE SEGSUP XINT RETURN 100 CONTINUE C ON RECONSTITUE LE MAILLAGE xvec1=tcval(1) yvec1=tcval(2) zvec1=tcval(3) xvec2=tcval(4) yvec2=tcval(5) zvec2=tcval(6) xgrav=tcval(7) ygrav=tcval(8) zgrav=tcval(9) raynv=tcval(10) xinv=tcval(11) yinv=tcval(12) zinv=tcval(13) SEGACT MCOORD*mod IF (NDEB.GT.NUMNP) GOTO 111 NBPTA=nbpts NBPTS=NBPTA+NUMNP-NDEB+1 SEGADJ MCOORD DO 110 I=NDEB,NUMNP XI=XPROJ(1,I)*XVEC1+XPROJ(2,I)*XVEC2+XGRAV YI=XPROJ(1,I)*YVEC1+XPROJ(2,I)*YVEC2+YGRAV ZI=XPROJ(1,I)*ZVEC1+XPROJ(2,I)*ZVEC2+ZGRAV DI=XI**2+YI**2+ZI**2 XCOOR(NBPTA*(IDIM+1)+1)=XI*RAYNV/DI+XINV XCOOR(NBPTA*(IDIM+1)+2)=YI*RAYNV/DI+YINV XCOOR(NBPTA*(IDIM+1)+3)=ZI*RAYNV/DI+ZINV XCOOR((NBPTA+1)*(IDIM+1))=XPROJ(3,I) NBPTA=NBPTA+1 110 CONTINUE 111 CONTINUE SEGSUP XPROJ RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales