C RTADET SOURCE FANDEUR 13/01/29 21:16:23 7683 SUBROUTINE RTADET(XYZPT,IDIMC,ITRNOE,NBNMAX,ITRTRI,NBCMAX, > NBE,COORD,SPH, > IADET,NBADET,NADMAX,ZERO,iarr) C ********************************************************************** C OBJET : RECHERCHE DES TRIANGLES A DETRUIRE (IE "NON-DELAUNAY") C A L'AJOUT D'UN POINT C EN ENTREE : C XYZPT : COORDONNEES DU POINT AJOUTE C IDIMC : DIMENSION DE L'ESPACE C ITRNOE,NBNMAX,ITRTRI,NBCMAX,NBE,COORD : LA TRIANGULATION C SPH : LES SPHERES CIRCONSCRITES AUX TRIANGLES C NBADETMNAX : TAILLE DU TABLEAU IADET C ZERO : PRECISION DU TEST "POINT DANS SPHERE" C EN SORTIE : C IADET : TABLEAU DES TRIANGLES "NON-DELAUNAY" C NBADET : NOMBRE DE TRIANGLES " " " " C ********************************************************************** IMPLICIT INTEGER(I-N) REAL*8 XYZPT(*) INTEGER IDIMC INTEGER ITRNOE(*),NBNMAX,ITRTRI(*),NBCMAX INTEGER NBE,IADET(*),NBADET,NADMAX,iarr REAL*8 COORD(*),SPH(*),ZERO C C C --- POUR LE DEBUG --- C C COMMON /DEBUG/ ITRACE, ITEST, ierrOR, IMESS C INTEGER ITRACE, ITEST, ierrOR C CHARACTER*256 IMESS C --------------------------------------------------------------------- C --- POUR LES STATS --- C C COMMON /STATS/ ICARD(100) C INTEGER ICARD C --------------------------------------------------------------------- C --- VARIABLES INTERNES --- INTEGER I,NT,IPTDS,IPTDSC,IPTDS2,ITRACE REAL*8 SPHC(4) C INTEGER SPPOIN, SPPOI2 modif TC INTEGER SPPOIN, SPPOI2,SPCIRC C EXTERNAL SPPOIN, SPPOI2 modif TC EXTERNAL SPPOIN, SPPOI2,SPCIRC C ITRACE = 0 DO i = 1, 4 SPHC(i) = 0.D0 ENDDO iarr = 0 NBADET = 0 DO 30 I=1,NBE C ----- ON PREND LE DERNIER NOEUD --- NT =ITRNOE((I-1)*NBNMAX+1+IDIMC) IF ( NT.EQ. 0 ) GO TO 30 IPTDS = SPPOIN(IDIMC,COORD((NT-1)*IDIMC+1),XYZPT, > SPH((I-1)*(IDIMC+1)+1),ZERO) C C ---- POUR LE DEBUG ---- C IF( ITRACE .GT. 0 )THEN IPTDS2 = SPPOI2(IDIMC,COORD((NT-1)*IDIMC+1),XYZPT, > SPH((I-1)*(IDIMC+1)+1),ZERO) IF( IPTDS2.NE.IPTDS )THEN C ICARD(1) = ICARD(1) + 1 C PRINT *,'DIFFERENCE DE CALCUL' C PRINT *,'SPPOI2 = ',IPTDS2,' SPPOIN = ',IPTDS C PRINT *, (SPHC(J),J=1,3) IPTDS = SPPOIN(IDIMC,COORD((NT-1)*IDIMC+1),XYZPT, > SPH((I-1)*(IDIMC+1)+1),ZERO) IPTDS2 = SPPOI2(IDIMC,COORD((NT-1)*IDIMC+1),XYZPT, > SPH((I-1)*(IDIMC+1)+1),ZERO) ENDIF C modif TC spcirc est une fonction C CALL SPCIRC(ITRNOE((I-1)*NBNMAX+1),COORD,SPHC,ZERO) IBID= SPCIRC(ITRNOE((I-1)*NBNMAX+1),COORD,SPHC,ZERO) IPTDSC = SPPOIN(IDIMC,COORD((NT-1)*IDIMC+1),XYZPT, > SPHC(1),ZERO) IF(( SPHC(1).NE. SPH((I-1)*(IDIMC+1)+1)).OR. > ( SPHC(2).NE. SPH((I-1)*(IDIMC+1)+2)).OR. > ( SPHC(3).NE. SPH((I-1)*(IDIMC+1)+3)))THEN C PRINT *,'ERREUR SUR LA SPHERE' C PRINT *, (SPH((I-1)*(IDIMC+1)+J),J=1,3) C PRINT *, (SPHC(J),J=1,3) ENDIF ENDIF C ------------------------ IF( IPTDS.EQ.1 )THEN IADET(1) = I NBADET = 1 CALL RTCONN(XYZPT,IDIMC,ITRNOE,NBNMAX,ITRTRI,NBCMAX, > COORD,SPH,IADET,NBADET,NADMAX,ZERO,iarr) RETURN ENDIF C 30 CONTINUE RETURN END