Download sculpt.eso

Back to the list

   1 : C SCULPT    SOURCE    CHAT      06/03/29    21:33:14     5360           
   2 :       SUBROUTINE SCULPT(IFR,NBNIFR,NBIFR,
   3 :      >                     IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,
   4 :      >                     NOETRI,NBE,ITVL,IMAX,NCC,iarr)
   5 : C     **********************************************************************
   6 : C     OBJET : SCULPT DETERMINE LE PLEIN ET LE VIDE A PARTIR DE FRONTIERES
   7 : C             DONNEES
   8 : C     EN ENTREE  :
   9 : C       IFR      : LES ELEMENTS DES FRONTIERES
  10 : C       NBIFR    : NOMBRE D'ELEMENTS FRONTIERE
  11 : C
  12 : C       ITVL : TABLEAU DE TRAVAIL = 2 * NBE + PILE (APPEL TMA1CC)
  13 : C       IMAX      : TAILLE DU TABLEAU DE TRAVAIL
  14 : C
  15 : C     EN SORTIE  : LA TRIANGULATION MISE A JOUR
  16 : C       ITRNOE,NBNMAX : NOEUDS DES ELEMENTS    "   "   "  "
  17 : C       ITRTRI,NBCMAX : ELEMENTS VOISINS       
  18 : C       NOETRI         : UN DES ELEMENTS INCIDENT A UN POINT
  19 : C       NCC            : NOMBRE DE COMPOSANTES CONNEXES
  20 : C       iarr           : CODE D'ERREUR
  21 : C                        -1 UN ELEMENT FRONTIERE DE IFR N'EXISTE PAS
  22 : C                        -2 ITVL OU RTRAVAIL TROP PETIT
  23 : C     **********************************************************************
  24 :       IMPLICIT INTEGER(I-N)
  25 :       INTEGER    IFR(*),NBIFR,NBNIFR,IDE
  26 :       INTEGER    ITRNOE(*),NBNMAX,ITRTRI(*),NBCMAX
  27 :       INTEGER    NOETRI(*),NBE,ITVL(*),IMAX,NCC,iarr
  28 : C
  29 :       INTEGER IMAT,ITRAV,NITMAX
  30 :       INTEGER ICREUX,NCREUX,NCCREU
  31 :       INTEGER NBSOMP,ISOMP,NBFNOE,I,J,IP,NOEMAX
  32 : C        =======================================
  33 : C     --- 1. AFFECTATION DES PLEIN ET DES CREUX ----
  34 : C        =======================================
  35 :       NCC = 1
  36 :       iarr = 0
  37 :       IF( NBIFR.EQ. 0)GOTO 999
  38 :       IMAT  = 1
  39 :       ITRAV = IMAT + NBE
  40 :       NITMAX = IMAX - ITRAV + 1
  41 :       IF( NITMAX.LT. (2*NBE))THEN
  42 :         iarr = -2
  43 :         GOTO 999
  44 :       ENDIF
  45 : C
  45 :       CALL SCMAT(IFR,NBNIFR,NBIFR,
  46 :      >           IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,
  47 :      >           NOETRI,NBE,ITVL(ITRAV),NITMAX,
  48 :      >           ITVL(IMAT),NCC,NCCREU,iarr)
  49 :       IF( iarr.NE. 0 )GOTO 999
  50 :       NCREUX = 0
  51 :       ICREUX = IMAT
  52 :       DO 10 I=1,NBE
  53 :         IF( ITVL(I-1+IMAT).EQ.-1 )THEN
  54 :           NCREUX = NCREUX + 1
  55 :           ITVL(NCREUX-1+ICREUX) = I
  56 :         ENDIF
  57 :    10 CONTINUE
  58 : C        ==================================
  59 : C     --- 2. DESTRUCTION DES ELEMENTS CREUX ----
  60 : C        ==================================
  61 : C
  62 : C     --- 2.1 DECONNECTION DES NOEUDS NOETRI(IP)=0 ----
  63 :       NOEMAX = 0
  64 : C     --- BUG_12 CORRIGE LE 20.11.95 O.STAB ---------
  65 :       DO 25 I=1,NCREUX
  66 :         DO 20 J=1,NBNMAX
  67 :            IP = ITRNOE((ITVL(ICREUX-1+I)-1)*NBNMAX+J)
  68 :            IF(IP.NE.0)NOETRI(IP) = 0
  69 :    20   CONTINUE 
  70 :    25 CONTINUE   
  71 : C     --- 2.2 COMPRESSION AU DEBUT ---
  71 :       CALL ENSTRI(ITVL(ICREUX),NCREUX)
  71 :       CALL NUCOMP(IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,NOETRI,
  72 :      >            NOEMAX,NBE,ITVL(ICREUX),NCREUX,iarr)
  73 :       IF(iarr .NE. 0)THEN
  73 :          CALL DSERRE(1,iarr,'NUCOMP','COMPRESSION EL')
  74 :          GOTO 999
  75 :       ENDIF
  76 : C
  77 : C     --- POUR LE DEBUG ---
  77 : C      CALL DEBSTRF1(IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,NOETRI,
  78 : C     >              NBE,NOEMAX,ITRACE,iarr) 
  79 : C      IF( iarr .NE. 0 )THEN
  79 : C        CALL DSERRE(1,iarr,'SCULPT',' NUCOMP')        
  80 : C        GO TO 999
  81 : C      ENDIF
  82 : C     --- 2.3 DESTRUCTION ---
  83 :       NBFNOE  = 0
  84 :       NBSOMP  = 0
  85 :       ISOMP   = IMAT
  86 :       DO 30 I=1,NCREUX
  86 :         CALL SMADET(IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,NBE,NOETRI,
  87 :      >          NBFNOE,I,NBCMAX,ITVL(ISOMP+NBSOMP),NBSOMP,iarr)
  88 :         IF( iarr .NE. 0  )GOTO 999
  89 :    30 CONTINUE
  90 : C     --- BUG_12 CORRIGE LE 20.11.95 O.STAB ---------
  91 :       DO 40 I=1,MIN(NCREUX,NBE-NCREUX)
  91 :         CALL NUPERM(IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,NOETRI,
  92 :      >                NOEMAX,NBE,I,(NBE+1-I),iarr)
  93 :         IF( iarr .NE. 0  )GOTO 999
  94 :    40 CONTINUE
  95 :       NBE = NBE - NCREUX
  96 : C     --- POUR LE DEBUG ---
  96 : C      CALL DEBSTRF1(IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,NOETRI,
  97 : C     >              NBE-I,NOEMAX,ITRACE,iarr) 
  98 : C      IF( iarr .NE. 0 )THEN
  98 : C        CALL DSERRE(1,iarr,'SCULPT',' NUCOMP')        
  99 : C        GO TO 999
 100 : C      ENDIF
 101 : C
 102 :       IF( NBSOMP.NE.0 )THEN
 103 :        iarr = -1
 103 :        CALL DSERRE(1,iarr,'SCULPT','SOMMETS PERDUS')
 104 : C       PRINT *, (ITVL(ISOMP),I=1,NBSOMP)
 105 :        GO TO 999
 106 :       ENDIF
 107 : C        ==================================
 108 : C     --- MISE A JOUR DE NOETRI : O(3*NBE) ---
 109 : C        ==================================
 110 :       DO 70 I=1,NBE
 111 :         DO 60 J=1,NBNMAX
 112 :            IP = ITRNOE((I-1)*NBNMAX+J)
 113 :            IF(IP.NE.0)NOETRI(IP) = I
 114 :    60   CONTINUE    
 115 :    70 CONTINUE    
 116 : C      
 117 : C
 118 :   999 END      
 119 :  
 120 :  
 121 :  

© Cast3M 2003 - All rights reserved.
Disclaimer