pplan
C PPLAN SOURCE PV 20/03/24 21:20:16 10554 C CE SOUS-PROGRAMME RAMENE UN PLAN SUR DES COORDONNEES INTRINSEQUES C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCOORD real*8 tcval(*) SEGMENT /FER/(NFI(ITT),MAI(IPP),ITOUR),AFER.FER * tcval (1) 2 3 4 5 6 * COMMON/CPPLAN/XVEC1,YVEC1,ZVEC1,XVEC2,YVEC2,ZVEC2,XNORM,YNORM, * * # ZNORM * 7 8 9 * SAVE XGRAV,YGRAV,ZGRAV IF (IOP.EQ.2) GOTO 100 ctest=1d-2 IMCT=MAI(ITOUR+1) INCT=MAI(1)+1 NDEB=IMCT+1 SEGINI XPROJ SEGACT MCOORD*mod C CENTRE DE GRAVITE XGRAV=0 YGRAV=0 ZGRAV=0 DO 1 I=INCT,IMCT IREF=(NFI(I))*(IDIM+1)-IDIM XGRAV=XGRAV+XCOOR(IREF) YGRAV=YGRAV+XCOOR(IREF+1) ZGRAV=ZGRAV+XCOOR(IREF+2) 1 CONTINUE XGRAV=XGRAV/(IMCT-INCT+1) YGRAV=YGRAV/(IMCT-INCT+1) ZGRAV=ZGRAV/(IMCT-INCT+1) IF (IDIM.EQ.2) ZGRAV=0 tcval(7)=xgrav tcval(8)=ygrav tcval(9)=zgrav C VECTEUR NORMAL XNORM=0 YNORM=0 ZNORM=0 DO 2 IT=1,ITOUR IPR=NFI(MAI(IT+1))*(IDIM+1)-IDIM XV1=XCOOR(IPR)-XGRAV YV1=XCOOR(IPR+1)-YGRAV ZV1=XCOOR(IPR+2)-ZGRAV IF (IDIM.EQ.2) ZV1=0 DO 2 I=MAI(IT-1+1)+1,MAI(IT+1) IREF=(NFI(I))*(IDIM+1)-IDIM XV2=XCOOR(IREF)-XGRAV YV2=XCOOR(IREF+1)-YGRAV ZV2=0 IF (IDIM.GE.3) ZV2=XCOOR(IREF+2)-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 2 CONTINUE DNORM=SQRT(XNORM**2+YNORM**2+ZNORM**2) IF (IERR.NE.0) RETURN XNORM=XNORM/DNORM YNORM=YNORM/DNORM ZNORM=ZNORM/DNORM C FORMATION DU REPERE IREF=NFI(INCT)*(IDIM+1)-IDIM XVEC1=XCOOR(IREF)-XGRAV YVEC1=XCOOR(IREF+1)-YGRAV ZVEC1=0 IF (IDIM.GE.3) ZVEC1=XCOOR(IREF+2)-ZGRAV PVEC=XVEC1*XNORM+YVEC1*YNORM+ZVEC1*ZNORM XVEC1=XVEC1-PVEC*XNORM YVEC1=YVEC1-PVEC*YNORM ZVEC1=ZVEC1-PVEC*ZNORM DVEC1=XVEC1**2+YVEC1**2+ZVEC1**2 DVEC1=SQRT(DVEC1) XVEC1=XVEC1/DVEC1 YVEC1=YVEC1/DVEC1 ZVEC1=ZVEC1/DVEC1 tcval(1)=xvec1 tcval(2)=yvec1 tcval(3)=zvec1 XVEC2=YNORM*ZVEC1-ZNORM*YVEC1 YVEC2=ZNORM*XVEC1-XNORM*ZVEC1 ZVEC2=XNORM*YVEC1-YNORM*XVEC1 tcval(4)=xvec2 tcval(5)=yvec2 tcval(6)=zvec2 C EN AVANT POUR LA PROJECTION DO 40 I=INCT,max(IMCT,mai(itour+2)) II=NFI(I) NFI(I)=I IREF=II*(IDIM+1)-IDIM XRE=XCOOR(IREF)-XGRAV YRE=XCOOR(IREF+1)-YGRAV ZRE=XCOOR(IREF+2)-ZGRAV if (idim.eq.2) zre=0 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 DRE =SQRT(XRE*XRE+YRE*YRE+ZRE*ZRE) IF (IDIM.EQ.3.AND.ABS(XTEST).GT.DRE*ctest.AND. IF (IERR.NE.0) RETURN XPROJ(3,I)=XCOOR(IREF+IDIM) 40 CONTINUE C SI LA DENSITE LOCALE N'EST PAS DEFINIE IL FAUT LE FAIRE DO 41 IT=1,ITOUR II1=MAI(IT-1+1)+1 II2=MAI(IT+1) IAP=II2 DO 41 I=II1,II2 IF (XPROJ(3,I).NE.0) GOTO 41 XPROJ(3,I)=SQRT((XPROJ(1,I)-XPROJ(1,IAP))**2+(XPROJ(2,I)-XPROJ(2, # IAP))**2) IAP=I 41 CONTINUE RETURN 100 CONTINUE 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) C ON RECONSTITUE LE MAILLAGE SEGACT MCOORD*mod IF (NDEB.GT.NUMNP) GOTO 111 NBPTA=nbpts NBPTS=NBPTA+NUMNP-NDEB+1 SEGADJ MCOORD DO 110 I=NDEB,NUMNP XCOOR(NBPTA*(IDIM+1)+1)=XPROJ(1,I)*XVEC1+XPROJ(2,I)*XVEC2+XGRAV XCOOR(NBPTA*(IDIM+1)+2)=XPROJ(1,I)*YVEC1+XPROJ(2,I)*YVEC2+YGRAV IF (IDIM.GE.3) #XCOOR(NBPTA*(IDIM+1)+3)=XPROJ(1,I)*ZVEC1+XPROJ(2,I)*ZVEC2+ZGRAV 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