trjrnd
C TRJRND SOURCE CB215821 20/11/25 13:41:39 10792 * IELL2,XARI,DTI,ICONT,INOEU) C ******************************************************************* * * CE SOUS PROGRAMME CHERCHE UN VOISIN ET CALCULE LA TRAJECTOIRE * LORSQU'ON TOMBE SUR UN NOEUD. * ENTREES: * IZN3 SEGMENT QUI STOCKE LES RESULTATS * IZVIT SEGMENT QUI CONTIENT LES INFOS SUR LES FLUX * MELEME MAILLAGE * TTEMP TEMPS COURANT PLUS LE PAS DE LA MAILLE IEL1 * INOEU NOEUD PAR LEQUEL ON SORT DE IEL1 * IEL1 ELEMENT DUQUEL ON SORT * NDIM * SORTIES: * IEL2 ELEMENT DANS LEQUEL PASSE LA TRAJECTOIRE * XARI POSITION DE SORTIE DE L'ELEMENT * DTINT TEMPS MIS POUR PARCOURIR IEL2 * ICONT FACE DE SORTIE DE IEL2 * ******************************************************************* C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC SMELEME -INC SMCHPOI C SEGMENT IZN3 INTEGER NAPAR3(NPOS),NUM3(NPOS) REAL*8 CREF3(NDIM,NPOS),TPAR(NPOS) ENDSEGMENT C SEGMENT IZVIT REAL*8 TEMTRA(NVIPT) INTEGER IPUN(NBS),IDUN(NBS),IPVPT(NVIPT),IFORML ENDSEGMENT C IDUN(I) nombre d elements avant le sous maillage I C IPVPT pointeurs de izvpt pour chaque pas de temps C SEGMENT IZUN ENDSEGMENT POINTEUR IZUN1.IZUN,IZUN2.IZUN C DIMENSION XARI(3),XDEP(3),X(4) C DIMENSION XTRI3(2,3),XQUA4(2,4),XTET4(3,4) DIMENSION XPRI6(3,6),XCUB8(3,8) C DATA XTRI3 /0.D0,0.D0, 1.D0,0.D0, 0.D0,1.D0/ C DATA XQUA4 /-1.D0,-1.D0, 1.D0,-1.D0, 1.D0,1.D0, -1.D0,1.D0/ C DATA XTET4 /0.D0,0.D0,0.D0, 1.D0,0.D0,0.D0, 0.D0,1.D0,0.D0, * 0.D0,0.D0,1.D0 / C DATA XCUB8 /-1.D0,-1.D0,-1.D0, 1.D0,-1.D0,-1.D0, 1.D0,1.D0,-1.D0, * -1.D0,1.D0,-1.D0, -1.D0,-1.D0,1.D0, 1.D0,-1.D0,1.D0, * 1.D0,1.D0,1.D0, -1.D0,1.D0,1.D0/ C DATA XPRI6 /0.D0,0.D0,-1.D0, 1.D0,0.D0,-1.D0, 0.D0,1.D0,-1.D0, * 0.D0,0.D0,1.D0, 1.D0,0.D0,1.D0, 0.D0,1.D0,1.D0/ C C*** RATTRAPAGE C ON VA CHERCHER DANS LE MAILLAGE LES ELEMENTS QUI ONT UN C NOEUD EN COMMUN AVEC L'ELEMENT DE CALCUL C C*** ON CHERCHE DANS LE MAILLAGE UN ELEMENT IEL2 AYANT LE NOEUD C D'ENTREE EN COMMUN AVEC LE NOEUD DE SORTIE DE IEL1 C C INITIALISATION NPAPAR=0 IEL2=0 IND=0 IVPT=1 ITEST=4 NPOS=CREF3(/2) C C*** ON ACTIVE LE MAILLAGE ET ON FAIT UNE RECHERCHE PAR SOUS MAILLAGE C IPT5 EST LE SOUS DOMAINE CONTENANT LA MAILLE PAR LAQUELLE ON C SORT PAR UN NOEUD C IPT1 REPRESENTE LE SOUS MAILLAGE DANS LEQUEL ON RECHERCHE UN VOISIN C SEGACT MELEME NBSOUS=LISOUS(/1) NBS=NBSOUS IF(NBSOUS.EQ.0) NBS=1 IPT1=MELEME SEGACT IPT5 IELE=IEL-NEL5 DO 100 ISOUS=1,NBS IF(NBSOUS.GT.0)THEN IPT1=LISOUS(ISOUS) ENDIF SEGACT IPT1 NEL=IPT1.NUM(/2) NBN=IPT1.NUM(/1) C C POUR CHAQUE NOEUD DE CHAQUE ELEMENT ON REGARDE SI CE NOEUD C CORRESPOND AU NOEUD DE L'ELEMENT COURANT PAR LEQUEL PASSE C LA TRAJECTOIRE.DES QU'ON TROUVE UN ELEMENT AYANT LE NOEUD C EN COMMUN ON CALCULE LA TRAJECTOIRE DE LA PARTICULE DANS CET C ELEMENT. C C C BOUCLE SUR LES ELEMENTS DO 1 IEL2=1,NEL C ON VA TESTER LES ELEMENTS DIFFERENTS DE L'ELEMENT COURANT IF((IEL2.NE.IELE).OR.(IPT1.NE.IPT5))THEN C BOUCLE SUR LES NOEUDS DO 2 INO=1,NBN C TEST DE COMPARAISON DES NOEUDS IF((IPT1.NUM(INO,IEL2)).EQ.(IPT5.NUM(NOE,IELE)))THEN IELL2=IEL2+IND ITEST=0 C C ON DETERMINE LES COORDONNES DU POINT D'ENTREE DE LA PARTICULE C A PARTIR DU NOEUD TROUVE.ON CALCULE ENSUITE LA TRAJECTOIRE ET C ON TESTE SI LES COORDONNEES DE SORTIE SONT VALABLES C C C ON TESTE LES TRIANGLES C IF(ITYG.EQ.4)THEN DO 7 I=1,2 XDEP(I)=XTRI3(I,INO) 7 CONTINUE * ICONT,4,IART,INOEU) XARI(3)=1.D0-XARI(1)-XARI(2) DO 5 I=1,3 IF(XARI(I)*(1.D0-XARI(I)).GE.0.D0)ITEST=ITEST+1 5 CONTINUE ITEST=ITEST-1 C ELSEIF(ITYG.EQ.8)THEN C C ON TESTE LES QUADRANGLES C DO 8 I=1,2 XDEP(I)=XQUA4(I,INO) 8 CONTINUE * ICONT,8,IART,INOEU) DO 3 I=1,NDIM XY=(1.D0+XARI(I))*(1.D0-XARI(I)) IF(XY.GE.0.D0)ITEST=ITEST+1 3 CONTINUE C C ON EST EN DIMENSION 3 ON TESTE LES CUBES C ELSEIF(ITYG.EQ.14)THEN DO 9 I=1,3 XDEP(I)=XCUB8(I,INO) 9 CONTINUE * ICONT,14,IART,INOEU) DO 13 I=1,NDIM XY=(1.D0+XARI(I))*(1.D0-XARI(I)) IF(XY.GE.0.D0)ITEST=ITEST+1 13 CONTINUE C C ON TESTE LES PRISMES ELSEIF(ITYG.EQ.16)THEN C DO 10 I=1,3 XDEP(I)=XPRI6(I,INO) 10 CONTINUE * ICONT,16,IART,INOEU) X(1)=XARI(1) X(2)=XARI(2) X(3)=1.D0-X(1)-X(2) X(4)=XARI(3) DO 14 I=1,3 IF(X(I)*(1.D0-X(I)).GE.0.D0)ITEST=ITEST+1 14 CONTINUE IF((X(4)+1.D0)*(1.D0-X(4)).GE.0.D0)ITEST=ITEST+1 ITEST=ITEST-1 C C ON TESTE LES TETRAEDRES ELSEIF(ITYG.EQ.23)THEN C DO 11 I=1,3 XDEP(I)=XTET4(I,INO) 11 CONTINUE * ICONT,23,IART,INOEU) DO 20 I=1,3 IF(XARI(I)*(1.D0-XARI(I)).GE.0.D0)ITEST=ITEST+1 20 CONTINUE XXX=XARI(1)+XARI(2)+XARI(3) IF(XXX*(1.D0-XXX).GE.0.D0)ITEST=ITEST+1 ITEST=ITEST-1 C ENDIF C C UNE FOIS QUE L'ON A CALCULER LA TRAJECTOIRE POUR UN ELEMENT C ON TESTE SI LA TRAJECTOIRE APPARTIENT A CET ELEMENT C DANS CE CAS ON STOCKE LES VALEURS A CONSERVER C IF((ITEST.EQ.NDIM).AND.(INO.NE.INOEU))THEN TPAR(ITER)=TTEMP DO 4 ID1=1,NDIM CREF3(ID1,ITER)=XDEP(ID1) 4 CONTINUE NAPAR3(ITER)=IELL2 IF ((NPOS-ITER).LE.1) THEN NPOS=NPOS+50 SEGADJ IZN3 ITER=ITER+1 ENDIF ITER=ITER+1 C SI ON A TROUVE LE BON ELEMENT ON SORT GOTO 17 ENDIF C C SINON ON RECOMMENCE AVEC UN AUTRE NOEUD OU UN AUTRE ELEMENT C ENDIF 2 CONTINUE ENDIF 1 CONTINUE IND=IND+NEL IF(IPT1.NE.IPT5)SEGDES IPT1 100 CONTINUE SEGDES IPT5 C C CAS OU ON ARRIVE EN BORD DE DOMAINE C SI ON TROUVE PAS DE VOISIN ON RETOURNE DANS TRJAVA DTI=0.D0 IF(ITEST.EQ.4)GOTO 17 C CAS OU LA TRAJECTOIRE NE PASSE PAS PAR LE VOISIN TROUVE DO 18 I=1,NDIM XARI(I)=XDEP(I) 18 CONTINUE 17 CONTINUE RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales