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