trjma2
C TRJMA2 SOURCE PV 08/09/11 21:17:12 6150 * IDIM,ICONT,ITYEL,IART,INOEU) C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C CALCUL DES TRAJECTOIRES ET C INTERSECTION TRAJECTOIRE-ELEMENT ( calcul analytique pour une C formulation EFMH) C C ENTREES C XDEP POSITION INITIALE C UELEM FLUX AUX FACES C IDIM DIMENSION DE L ESPACE C ITYEL TYPE DE L ELEMENT C C SORTIES C XARI POSITION A L INTERSECTION C DTINT TEMPS ECOULE JUSQU A LA SORTIE C ICONT NUMERO DE LA PORTE DE SORTIE C IART DIFFERENT DE 0 ON EST SORTI DE L ELEMENT 3D PAR UNE ARETE C INOEU DIFFERENT DE 0 ON EST SORTI DE L ELEMENT NOEUD C C TYPES D ELEMENTS CONSIDERES C TRI3 QUA4 CUB8 PRI6 TET C 4 8 14 16 23 C C Auteur Patrick Meyniel CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) LOGICAL TEST C DIMENSION IJ(2),ZI(2),IFAT3(3),YI(3) DIMENSION IFAQ4(4),IJKL(3,3),IJT4(2,3),IFAT4(4),IFAC6(4),IFAC8(6) DIMENSION XARI(3),XDEP(3),UELEM(6),X(3),Y(3) C DATA IJKL/1,2,3,2,1,3,3,2,1/ DATA IJ /2,1/ DATA IJT4 /2,3, 1,3, 1,2/ DATA IFAT3 /3,1,2/ DATA IFAQ4 /1,3,4,2/ DATA IFAC6 /6,4,1,2/ DATA IFAC8 /6,4,3,5,1,2/ DATA IFAT4 /4,1,2,3/ DATA YI/5.D-1,5.D-1,-1.D0/ DATA ZI/-1.D0,1.D0/ C ICONT=0 IART=0 INOEU=0 ITEST=0 EPS=1.D-14 DTINT=1.D30 DO 50 I=1,IDIM XARI(I)=XDEP(I) 50 CONTINUE C C*** TRIANGLES TRI3 * C * * C FACES 3 * * 2 C * * C ****** C 1 IF(ITYEL.EQ.4)THEN IDIM=2 C C A PARTIR DES FLUX ON RECHERCHE LE POINT DE SORTIE DE C LA TRAJECTOIRE DANS L'ELEMENT C C ON TESTE L'INTERSECTION AVEC LA FACE 2 ET TOUTES LES C FACES AYANT UN FLUX POSITIF C FACE 2 C IF(UELEM(2).GT.0.D0)THEN DTINT=(XDEP(2)+XDEP(1)-1)/(UELEM(1)+UELEM(3)) XARI(1)=XDEP(1)-(UELEM(3)*DTINT) XARI(2)=XDEP(2)-(UELEM(1)*DTINT) ICONT=2 ENDIF C C FACE 1 ET 3 C DO 1 I=1,IDIM C IF(UELEM(IFAT3(I)).GT.0.D0)THEN DTI=XDEP(I)/UELEM(IFAT3(I)) C C ON NE GARDE QUE LE PLUS PETIT TEMPS POSITIF C DTINT=DTI C ON GARDE LES COORD DU POINT ET LA FACE DE SORTIE C CORRESPONDANTS AU TEMPS LE PLUS PETIT XARI(IJ(I))=XDEP(IJ(I))-(UELEM(IFAT3(IJ(I))) * *DTINT) XARI(I)=0.D0 ICONT=IFAT3(I) ENDIF ENDIF 1 CONTINUE C C ON CHERCHE SI ON A AFFAIRE A UN NOEUD DU MAILLAGE C DO 30 I=1,IDIM IF(ABS(XARI(I)).LT.EPS)ITEST=ITEST+1 IF(ABS(1.D0-XARI(I)).LT.EPS)ITEST=ITEST+1 30 CONTINUE C C C C*** QUADRANGLE QUA4 QUA9 3 C ***** C * * C FACES 4 * * 2 C ***** C 1 ELSEIF(ITYEL.EQ.8)THEN IDIM=2 Q=MAX(ABS(UELEM(1)),ABS(UELEM(2)),ABS(UELEM(3)),ABS(UELEM(4))) C SI LES FLUX OPPOSES NE SE COMPENSENT PAS C X(1)=UELEM(3)+UELEM(1) X(2)=UELEM(2)+UELEM(4) Y(1)=UELEM(3)-UELEM(1) Y(2)=UELEM(2)-UELEM(4) C IF(ABS(X(1))/Q.GT.1D-10)THEN C ON TESTE TOUTES LES FACES DE SORTIE QUI ONT UN FLUX POSITIF DO 2 I=1,IDIM DO 3 I1=1,IDIM IF(UELEM(IFAQ4(2*I+I1-2)).GT.0.D0)THEN VAR1=ZI(I1)+(Y(I)/X(I)) VAR2=XDEP(IJ(I))+(Y(I)/X(I)) C ON ELIMINE LES CAS OÙ LE LOG EST NEG OU NON DEFINI IF((VAR1/VAR2).LE.0.D0)GOTO 7 DTI=(4.D0/X(I))*LOG(VAR1/VAR2) IF(ABS(LOG(VAR1/VAR2)).LT.1.D-15)DTI=0.D0 C ON GARDE LE PLUS PETIT PAS DE TEMPS DTINT=DTI I2=I I3=I1 ENDIF ENDIF 7 CONTINUE 3 CONTINUE 2 CONTINUE C C ON EXHIBE LES COORDONNEES CORRESPONDANT AU PLUS PETIT TEMPS C C SINON (LES FLUX OPPOSES SE COMPENSENT) C ELSE C C C ON TESTE TOUTES LES FACES AYANT UN FLUX POSITIF C DO 4 I=1,IDIM DO 5 I1=1,IDIM IF(UELEM(IFAQ4(2*I+I1-2)).GT.0.D0)THEN C DTI=(ZI(I1)-XDEP(IJ(I)))/(25.D-2*Y(I)) C ON GARDE LE PLUS PETIT TEMPS POSITIF DTINT=DTI I2=I I3=I1 ENDIF ENDIF 5 CONTINUE 4 CONTINUE C C ON GARDE LES COORDONNEES CORRESPONDANT AU PLUS PETIT TEMPS ENDIF C ON EXHIBE LE NUMERO DE LA FACE DE SORTIE C C ON CHERCHE SI ON A AFFAIRE A UN NOEUD DU MAILLAGE DO 35 I=1,IDIM IF(ABS(1.D0-XARI(I)).LT.EPS)ITEST=ITEST+1 IF(ABS(1.D0+XARI(I)).LT.EPS)ITEST=ITEST+1 35 CONTINUE C C C*** CUBE CUB8 ELSEIF(ITYEL.EQ.14)THEN IDIM=3 Q=MAX(ABS(UELEM(1)),ABS(UELEM(2)),ABS(UELEM(3)), * ABS(UELEM(4)),ABS(UELEM(5)),ABS(UELEM(6))) X(1)=125.D-3*(UELEM(4)+UELEM(6)) X(2)=125.D-3*(UELEM(3)+UELEM(5)) X(3)=125.D-3*(UELEM(2)+UELEM(1)) C Y(1)=125.D-3*(UELEM(6)-UELEM(4)) Y(2)=125.D-3*(UELEM(3)-UELEM(5)) Y(3)=125.D-3*(UELEM(1)-UELEM(2)) C C SI LES FLUX NE SECOMPENSENT PAS DEUX A DEUX C IF(ABS(X(1))/Q.GT.1.D-11)THEN IF(ABS(X(2))/Q.GT.1.D-11)THEN IF(ABS(X(3))/Q.GT.1.D-11)THEN C C ON TESTE TOUTES LES FACES DE SORTIE C DO 17 I=1,IDIM DO 18 I1=1,2 C ON TESTE TOUTES LES FACES QUI ONT UN FLUX POSITIF IF(UELEM(IFAC8(2*I+I1-2)).GT.0.D0)THEN VAR1=ZI(I1)-(Y(I)/X(I)) VAR2=XDEP(I)-(Y(I)/X(I)) C ON ELIMINE LES CAS OÙ LE LOG EST NEG OU NON DEFINI IF((VAR1/VAR2).LE.0.D0)GOTO 6 DTI=(1.D0/X(I))*LOG(VAR1/VAR2) IF(ABS(LOG(VAR1/VAR2)).LT.1.D-15)DTI=0.D0 C ON GARDE LE PLUS PETIT TEMPS POSITIF DTINT=DTI I2=I I3=I1 I4=IJT4(1,I) I5=IJT4(2,I) ENDIF ENDIF 6 CONTINUE 18 CONTINUE 17 CONTINUE C ON GARDE LES COORDONNEES CORRESPONDANT AU TEMPS LE PLUS PETIT XARI(I4)=(XDEP(I4)*EXP(X(I4)*DTINT))+ * ((Y(I4)/X(I4))*(1-EXP(X(I4)*DTINT))) XARI(I5)=(XDEP(I5)*EXP(X(I5)*DTINT))+ * ((Y(I5)/X(I5))*(1-EXP(X(I5)*DTINT))) ELSE C ON TESTE TOUTES LES FACES MAIS L'EQUATION SUIVANT Z DIFFERE C (Q1+Q2=O) DO 21 I=1,2 DO 19 I1=1,2 IF(UELEM(IFAC8(2*I+I1-2)).GT.0.D0)THEN VAR1=ZI(I1)-(Y(I)/X(I)) VAR2=XDEP(I)-(Y(I)/X(I)) C ON ELIMINE LES CAS OÙ LE LOG EST NEG OU NON DEFINI IF((VAR1/VAR2).LE.0.D0)GOTO 9 DTI=(1.D0/X(I))*LOG(VAR1/VAR2) IF(ABS(LOG(VAR1/VAR2)).LT.1.D-15)DTI=0.D0 c ON GARDE LE PLUS PETIT TEMPS POSITIF DTINT=DTI I2=I I3=I1 I4=IJT4(1,I) ENDIF ENDIF 9 CONTINUE 19 CONTINUE 21 CONTINUE C ON GARDE LES COORDONNEES ET LA FACE CORRESPONDANT AU TEMPS XARI(I4)=(XDEP(I4)*EXP(X(I4)*DTINT))+ * ((Y(I4)/X(I4))*(1-EXP(X(I4)*DTINT))) XARI(3)=XDEP(3)-(Y(3)*DTINT) C ON TESTE MAINTENANT LES FACES Z=1 ET Z=-1 IF(UELEM(2).GT.0.D0)THEN DTI=(XDEP(3)-1.D0)/Y(3) INT=2 ELSE DTI=(XDEP(3)+1.D0)/Y(3) INT=1 ENDIF C ON TESTE LE TEMPS DTINT=DTI XARI(1)=(XDEP(1)*EXP(X(1)*DTINT))+ * ((Y(1)/X(1))*(1-EXP(X(1)*DTINT))) XARI(2)=(XDEP(2)*EXP(X(2)*DTINT))+ * ((Y(2)/X(2))*(1-EXP(X(2)*DTINT))) XARI(3)=ZI(INT) ICONT=INT ENDIF ENDIF ELSE C C ON A OBLIGATOIREMENT Q1+Q2 NON NUL DONC ON PEUT RAISONNER C COMME PRECEDEMMENT C ON TESTE TOUTES LES FACES MAIS L'EQUATION SUIVANT Y DIFFERE C (Q3+Q5=0) DO 23 I=1,2 DO 22 I1=1,2 C IF(UELEM(IFAC6(2*I+I1-2)).GT.0.D0)THEN VAR1=ZI(I1)-(Y(I)/X(I)) VAR2=XDEP(I)-(Y(I)/X(I)) C IF((VAR1/VAR2).LE.0.D0)GOTO 11 DTI=(1.D0/X(I))*LOG(VAR1/VAR2) C IF(ABS(LOG(VAR1/VAR2)).LT.1.D-15)DTI=0.D0 C DTINT=DTI I3=I1 I4=IFAT3(I) ENDIF ENDIF 11 CONTINUE 22 CONTINUE 23 CONTINUE XARI(I4)=(XDEP(I4)*EXP(X(I4)*DTINT))+ * ((Y(I4)/X(I4))*(1-EXP(X(I4)*DTINT))) XARI(2)=XDEP(2)-(Y(2)*DTINT) C C ON TESTE MAINTENANT LES FACES Y=1 ET Y=-1 C IF(UELEM(5).GT.0.D0)THEN DTI=(XDEP(2)-1.D0)/Y(2) INT=5 ELSE DTI=(XDEP(2)+1.D0)/Y(2) INT=3 ENDIF DTINT=DTI XARI(1)=(XDEP(1)*EXP(X(1)*DTINT))+ * ((Y(1)/X(1))*(1-EXP(X(1)*DTINT))) XARI(3)=(XDEP(3)*EXP(X(3)*DTINT))+ * ((Y(3)/X(3))*(1-EXP(X(3)*DTINT))) XARI(2)=INT-4 ICONT=INT ENDIF ENDIF C ELSE C ON TESTE TOUTE LES FACES MAIS L'EQUATION DE X DIFFERE C (Q4+Q6 =0) IF(ABS(X(2))/Q.GT.1.D-11)THEN DO 24 I=2,3 DO 25 I1=1,2 C IF(UELEM(IFAC8(2*I+I1-2)).GT.0.D0)THEN C VAR1=ZI(I1)-(Y(I)/X(I)) VAR2=XDEP(I)-(Y(I)/X(I)) C IF((VAR1/VAR2).LE.0.D0)GOTO 13 C DTI=(1.D0/X(I))*LOG(VAR1/VAR2) IF(ABS(LOG(VAR1/VAR2)).LT.1.D-15)DTI=0.D0 C DTINT=DTI I2=I I3=I1 I4=IJT4(2,I) ENDIF ENDIF 13 CONTINUE 25 CONTINUE 24 CONTINUE XARI(I4)=(XDEP(I4)*EXP(X(I4)*DTINT))+ * ((Y(I4)/X(I4))*(1-EXP(X(I4)*DTINT))) XARI(1)=XDEP(1)-(Y(1)*DTINT) C ON TESTE MAINTENANT LES FACES X=1 ET X=-1 IF(UELEM(6).GT.0.D0)THEN DTI=(XDEP(1)+1.D0)/Y(1) INT=6 ELSE DTI=(XDEP(1)-1.D0)/Y(1) INT=4 ENDIF DTINT=DTI XARI(3)=(XDEP(3)*EXP(X(3)*DTINT))+ * ((Y(3)/X(3))*(1-EXP(X(3)*DTINT))) XARI(2)=(XDEP(2)*EXP(X(2)*DTINT))+ * ((Y(2)/X(2))*(1-EXP(X(2)*DTINT))) XARI(1)=ZI(INT-5) ICONT=INT ENDIF ELSE C C Q3+Q5 NEGLIGEABLE (DONC Q1+Q2 NEG) C ON CALCULE POUR TOUTES LES FACES DO 31 I=1,3 DO 32 I1=1,2 IF(UELEM(IFAC8(2*I+I1-2)).GT.0.D0)THEN C DTI=(XDEP(I)-ZI(I1))/Y(I) C DTINT=DTI I2=I I3=I1 I4=IJT4(1,I) I5=IJT4(2,I) ENDIF ENDIF 32 CONTINUE 31 CONTINUE XARI(I4)=XDEP(I4)-(Y(I4)*DTINT) XARI(I5)=XDEP(I5)-(Y(I5)*DTINT) ENDIF ENDIF C C ON CHERCHE SI ON A AFFAIRE A UN NOEUD DU MAILLAGE C DO 45 I=1,IDIM IF(ABS(1.D0+XARI(I)).LT.EPS)ITEST=ITEST+1 IF(ABS(1.D0-XARI(I)).LT.EPS)ITEST=ITEST+1 45 CONTINUE CC CC CC*** PRISME PRI6 CC ELSEIF(ITYEL.EQ.16)THEN IDIM=3 Q=MAX(ABS(UELEM(1)),ABS(UELEM(2)),ABS(UELEM(3)), * ABS(UELEM(4)),ABS(UELEM(5))) VAR=(UELEM(3)+UELEM(4)+UELEM(5))/2.D0 X(1)=UELEM(5)/2.D0 X(2)=UELEM(3)/2.D0 X(3)=(UELEM(2)-UELEM(1))/2.D0 C IF(ABS(VAR)/Q.GT.1.D-10)THEN C ON TESTE TOUTES LES FACES QUI ONT UN FLUX POSITIF C ET ON GARDE LE PLUS PETIT TEMPS POSITIF C ON TESTE LES FACES TRIANGULAIRES: FACE 4 IF(UELEM(4).GT.0.D0)THEN A1=((1.D0-((X(1)+X(2))/VAR))) A2=(XDEP(1)+XDEP(2)-((X(1)+X(2))/VAR)) IF (A1/A2.LE.0.D0)GOTO 15 DTINT=(1.D0/VAR)*LOG(A1/A2) XARI(2)=(XDEP(2)*EXP(VAR*DTINT))+((X(1)/VAR)* * (1.D0-EXP(VAR*DTINT))) XARI(3)=(XDEP(3)*EXP(-1.D0*VAR*DTINT))+((X(3)/VAR)* * (1.D0-EXP(-1.D0*VAR*DTINT))) XARI(1)=1.D0-XARI(2) ICONT=4 15 CONTINUE ENDIF C DO 8 I=1,IDIM-1 C FACE 3 ET FACE 5 IF(X(I).GT.0.D0)THEN A3=(-1.D0*X(I)/VAR) A4=(XDEP(I)-(X(I)/VAR)) IF(A3/A4.LE.0.D0)GOTO 16 DTI=(1.D0/VAR)*LOG(A3/A4) C C ON NE GARDE QUE LE PLUS PETIT TEMPS POSITIF C DTINT=DTI XARI(IJ(I))=(XDEP(IJ(I))*EXP(VAR*DTINT))+ * ((X(IJ(I))/VAR)*(1.D0-EXP(VAR*DTINT))) XARI(3)=(XDEP(3)*EXP(VAR*DTINT))+ * ((X(3)/VAR)*(1.D0-EXP(-1.D0*VAR*DTINT))) XARI(I)=0.D0 ICONT=IFAT3(I)+2 ENDIF 16 CONTINUE ENDIF C ON TESTE LES FACES OPPOSEES IF(UELEM(I).GT.0.D0)THEN A5=(ZI(I)-(X(3)/VAR)) A6=(XDEP(3)-(X(3)/VAR)) IF(A5/A6.LE.0.D0)GOTO 26 DTI=(-5.D-1/VAR)*LOG(A5/A6) C C ON NE GARDE QUE LE PLUS PETIT TEMPS POSITIF C DTINT=DTI XARI(I)=(XDEP(I)*EXP(VAR*DTINT))+ * ((X(I)/VAR)*(1.D0-EXP(VAR*DTINT))) XARI(IJ(I))=(XDEP(IJ(I))*EXP(VAR*DTINT))+ * ((X(IJ(I))/VAR)*(1.D0-EXP(VAR*DTINT))) XARI(3)=ZI(I) ICONT=I ENDIF 26 CONTINUE ENDIF 8 CONTINUE C ELSE C C Q3 NON NEGLIGEABLE ON VA TESTER LES FACES TRIANGULAIRES C FACE 4 IF(UELEM(4).GT.0.D0)THEN DTINT=(2.D0/UELEM(4))*(1.D0-XDEP(1)-XDEP(2)) XARI(2)=XDEP(2)-(X(2)*DTINT) XARI(1)=1.D0-XARI(2) ICONT=4 ENDIF C DO 12 I=1,IDIM-1 IF(X(I).GT.0.D0)THEN DTI=XDEP(I)/X(I) C ON NE GARDE QUE LE PLUS PETIT TEMPS POSITIF DTINT=DTI XARI(IJ(I))=XDEP(IJ(I))-(X(IJ(I))*DTINT) XARI(I)=0.D0 ICONT=IFAT3(I)+2 ENDIF ENDIF 12 CONTINUE XARI(3)=XDEP(3)+(2.D0*X(3)*DTINT) C C SI Q1 NON NEGLIGEABLE ON TESTE LES FACES OPPOSEES A FLUX POSITIF IF(UELEM(1).GT.0.D0)THEN DTI=(-1.D0-XDEP(3))/(2.D0*X(3)) IND=1 ELSE DTI=(1.D0-XDEP(3))/(2.D0*X(3)) IND=2 ENDIF DTINT=DTI DO 14 I1=1,IDIM-1 XARI(I1)=XDEP(I1)-(X(I1)*DTINT) 14 CONTINUE XARI(3)=ZI(IND) ICONT=IND ENDIF ENDIF C C ON CHERCHE SI ON A AFFAIRE A UN NOEUD DU MAILLAGE C IF((ABS(XARI(3)-1.D0).LT.EPS).OR. * (ABS(XARI(3)+1.D0).LT.EPS))ITEST=ITEST+1 DO 41 I=1,2 IF(ABS(XARI(I)).LT.EPS)ITEST=ITEST+1 IF(ABS(1.D0-XARI(I)).LT.EPS)ITEST=ITEST+1 41 CONTINUE C C C ****************** TETRAEDRE C * FACE 1 Y=0 C * FACE 2 Z=0 C * FACE 4 X=0 C * FACE 3 1-X-Y-Z=0 ELSEIF(ITYEL.EQ.23)THEN IDIM=3 C*** FACES 1 2 ET 4 C C** ON TESTE L'INTERSECTION AVEC LA FACE 3 ET TOUTES LES C FACES AYANT UN FLUX POSITIF C IF(UELEM(3).GT.0.D0)THEN DTINT=(1-XDEP(3)-XDEP(2)-XDEP(1))/(2.D0*UELEM(3)) DO 56 I=1,IDIM XARI(I)=XDEP(I)-(2.D0*UELEM(IFAT4(I))*DTINT) 56 CONTINUE ICONT=3 ENDIF C DO 55 I=1,IDIM C IF(UELEM(IFAT4(I)).GT.0.D0)THEN DTI=XDEP(I)/(2.D0*UELEM(IFAT4(I))) C C ON NE GARDE QUE LE PLUS PETIT TEMPS POSITIF C DTINT=DTI I3=IJT4(2,I) C ON GARDE LES COORDONNES CORRESPONDANT AUPLUS PETIT TEMPS XARI(I3)=XDEP(I3)-(2.D0*UELEM(IFAT4(I3))*DTINT) XARI(I)=0.D0 ICONT=IFAT4(I) ENDIF ENDIF 55 CONTINUE C C ON CHERCHE LE NUMERO DU NOEUD OU DE L'ARETE C DO 51 I=1,IDIM IF(ABS(XARI(I)).LT.EPS)ITEST=ITEST+1 IF(ABS(1.D0-XARI(I)).LT.EPS)ITEST=ITEST+1 51 CONTINUE ENDIF C C TRAITEMENT DES CAS PARTICULIERS (NOEUDS/ARETES) C C SI LE POINT DE SORTIE EST UN NOEUD IF(ITEST.EQ.IDIM)THEN ELSE C SINON ON VERIFIE EN 3D QU'ON TOMBE PAS SUR UNE ARETE IF(IDIM.EQ.3)THEN ENDIF ENDIF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales