sculpt
C SCULPT SOURCE CHAT 06/03/29 21:33:14 5360 > IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX, > NOETRI,NBE,ITVL,IMAX,NCC,iarr) C ********************************************************************** C OBJET : SCULPT DETERMINE LE PLEIN ET LE VIDE A PARTIR DE FRONTIERES C DONNEES C EN ENTREE : C IFR : LES ELEMENTS DES FRONTIERES C NBIFR : NOMBRE D'ELEMENTS FRONTIERE C C ITVL : TABLEAU DE TRAVAIL = 2 * NBE + PILE (APPEL TMA1CC) C IMAX : TAILLE DU TABLEAU DE TRAVAIL C C EN SORTIE : LA TRIANGULATION MISE A JOUR C ITRNOE,NBNMAX : NOEUDS DES ELEMENTS " " " " C ITRTRI,NBCMAX : ELEMENTS VOISINS C NOETRI : UN DES ELEMENTS INCIDENT A UN POINT C NCC : NOMBRE DE COMPOSANTES CONNEXES C iarr : CODE D'ERREUR C -1 UN ELEMENT FRONTIERE DE IFR N'EXISTE PAS C -2 ITVL OU RTRAVAIL TROP PETIT C ********************************************************************** IMPLICIT INTEGER(I-N) INTEGER IFR(*),NBIFR,NBNIFR,IDE INTEGER ITRNOE(*),NBNMAX,ITRTRI(*),NBCMAX C INTEGER IMAT,ITRAV,NITMAX INTEGER ICREUX,NCREUX,NCCREU INTEGER NBSOMP,ISOMP,NBFNOE,I,J,IP,NOEMAX C ======================================= C --- 1. AFFECTATION DES PLEIN ET DES CREUX ---- C ======================================= NCC = 1 iarr = 0 IF( NBIFR.EQ. 0)GOTO 999 IMAT = 1 ITRAV = IMAT + NBE IF( NITMAX.LT. (2*NBE))THEN iarr = -2 GOTO 999 ENDIF C > IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX, > NOETRI,NBE,ITVL(ITRAV),NITMAX, > ITVL(IMAT),NCC,NCCREU,iarr) IF( iarr.NE. 0 )GOTO 999 NCREUX = 0 ICREUX = IMAT DO 10 I=1,NBE IF( ITVL(I-1+IMAT).EQ.-1 )THEN NCREUX = NCREUX + 1 ITVL(NCREUX-1+ICREUX) = I ENDIF 10 CONTINUE C ================================== C --- 2. DESTRUCTION DES ELEMENTS CREUX ---- C ================================== C C --- 2.1 DECONNECTION DES NOEUDS NOETRI(IP)=0 ---- NOEMAX = 0 C --- BUG_12 CORRIGE LE 20.11.95 O.STAB --------- DO 25 I=1,NCREUX DO 20 J=1,NBNMAX IP = ITRNOE((ITVL(ICREUX-1+I)-1)*NBNMAX+J) IF(IP.NE.0)NOETRI(IP) = 0 20 CONTINUE 25 CONTINUE C --- 2.2 COMPRESSION AU DEBUT --- > NOEMAX,NBE,ITVL(ICREUX),NCREUX,iarr) IF(iarr .NE. 0)THEN GOTO 999 ENDIF C C --- POUR LE DEBUG --- C CALL DEBSTRF1(IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,NOETRI, C > NBE,NOEMAX,ITRACE,iarr) C IF( iarr .NE. 0 )THEN C CALL DSERRE(1,iarr,'SCULPT',' NUCOMP') C GO TO 999 C ENDIF C --- 2.3 DESTRUCTION --- NBFNOE = 0 NBSOMP = 0 ISOMP = IMAT DO 30 I=1,NCREUX > NBFNOE,I,NBCMAX,ITVL(ISOMP+NBSOMP),NBSOMP,iarr) IF( iarr .NE. 0 )GOTO 999 30 CONTINUE C --- BUG_12 CORRIGE LE 20.11.95 O.STAB --------- DO 40 I=1,MIN(NCREUX,NBE-NCREUX) > NOEMAX,NBE,I,(NBE+1-I),iarr) IF( iarr .NE. 0 )GOTO 999 40 CONTINUE NBE = NBE - NCREUX C --- POUR LE DEBUG --- C CALL DEBSTRF1(IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,NOETRI, C > NBE-I,NOEMAX,ITRACE,iarr) C IF( iarr .NE. 0 )THEN C CALL DSERRE(1,iarr,'SCULPT',' NUCOMP') C GO TO 999 C ENDIF C IF( NBSOMP.NE.0 )THEN iarr = -1 C PRINT *, (ITVL(ISOMP),I=1,NBSOMP) GO TO 999 ENDIF C ================================== C --- MISE A JOUR DE NOETRI : O(3*NBE) --- C ================================== DO 70 I=1,NBE DO 60 J=1,NBNMAX IP = ITRNOE((I-1)*NBNMAX+J) IF(IP.NE.0)NOETRI(IP) = I 60 CONTINUE 70 CONTINUE C C 999 END
© Cast3M 2003 - Tous droits réservés.
Mentions légales