Download prepa.eso

Back to the list

   1 : C PREPA     SOURCE    CHAT      05/01/13    02:25:48     5004           
   2 : C****************************************************************************
   3 : C****************************************************************************
   4 : C*************PREPA....PREPAration des donnees*******************************
   5 : C****************************************************************************
   6 : C****************************************************************************
   7 : 
   8 : 
   9 : 
  10 : C Cette procedure transforme les sous espaces crees par la nested disection
  11 : C   pour en faire une gestion de donnees.chaque sous espace est considere
  12 : C   comme un point, de plus la structure de donnees est triee pour l'utilisation
  13 : C   plus rapide du minimum degre avec multifrontale.
  14 : 
  15 : 
  16 : 
  17 : 
  18 :       SUBROUTINE PREPA(IPOS,NPVOIS,NVOIS,NBENS,NUMERO,NODES,IADJ,IVOIS)
  19 :  
  20 :       IMPLICIT INTEGER(I-N)
  21 :         SEGMENT NPVOIS(2*NBENS)
  22 :         SEGMENT NVOIS(0)
  23 :         INTEGER NBENS,NODES
  24 :         SEGMENT NUMERO(NODES)
  25 :         SEGMENT IPOS(0)
  26 :         SEGMENT IADJ(0),IVOIS(0)
  27 :         
  28 : 
  29 :         SEGMENT IENS(0)
  30 :         SEGMENT IPELEM(0),NPELEM(NBENS+1)
  31 :         SEGMENT IELEM(ND)
  32 :         LOGICAL BOOL
  33 : 
  34 : 
  35 :         NBENS=1
  36 :         SEGINI IPELEM
  37 :         SEGINI IENS
  38 :         IENS(**)=IPOS(NODES+1)
  39 :         NUMERO(1)=1
  40 :         IPELEM(**)=1
  41 : 
  42 :         
  43 : C   NUMERO(i) donne le nouveau numero du sous espace auquel appartient 
  44 : C   le noeud i
  45 : C   IPELEM(i) donne le nombre de noeuds de l'element i
  46 : 
  47 :         DO 10 I=2,NODES
  48 :           DO 20 J=1,NBENS
  49 :             IF (IPOS(I+NODES).EQ.IENS(J)) THEN
  50 :                 NUMERO(I)=J
  51 :                 IPELEM(J)=IPELEM(J)+1
  52 :                 GOTO 10
  53 :             ENDIF
  54 : 20        CONTINUE
  55 :           NBENS=NBENS+1
  56 :           NUMERO(I)=NBENS
  57 :           IENS(**)=IPOS(I+NODES)  
  58 :           IPELEM(**)=1
  59 : 10      CONTINUE
  60 : 
  61 :         SEGINI NPELEM,NPVOIS,NVOIS
  62 : 
  63 :         NPELEM(1)=1
  64 :         DO 50 I=2,NBENS+1
  65 :            NPVOIS(I-1)=1
  66 :            NPVOIS(I-1+NBENS)=0
  67 :            NPELEM(I)=NPELEM(I-1)+IPELEM(I-1)
  68 :            IPELEM(I-1)=0
  69 : 50      CONTINUE
  70 : 
  71 : C   NPELEM(i) pointe sur le premier noeud de l'element i dans ELEM 
  72 : 
  73 :         ND=NPELEM(NBENS+1)
  74 :         SEGINI IELEM
  75 :         DO 60 I=1,NODES
  76 :           DO 70 J=1,NBENS
  77 :             IF (IPOS(I+NODES).EQ.IENS(J)) THEN
  78 :                 IELEM(NPELEM(J)+IPELEM(J))=I
  79 :                 IPELEM(J)=IPELEM(J)+1
  80 :                 GOTO 60
  81 :             ENDIF
  82 : 70        CONTINUE
  83 : 60      CONTINUE
  84 : 
  85 : 
  86 : C construction d'une nouvelle base de donnees pour les elements,
  87 : C c'est a dire  on recherche les voisins de chaque element.
  88 : 
  89 : 
  90 :         DO 100 I=1,NBENS-2
  91 :            DO 110 J=NPELEM(I),NPELEM(I+1)-1
  92 :               DO 120 K=IADJ(IELEM(J)),IADJ(IELEM(J)+1)-1
  93 :                 IF(NUMERO(IVOIS(K)).NE.I) THEN
  94 :                    DO 130 IK=NPVOIS(I),NPVOIS(I+NBENS)
  95 :                     IF(NUMERO(IVOIS(K)).EQ.NVOIS(IK)) GOTO 120
  96 : 130                CONTINUE
  97 :                    NPVOIS(I+NBENS)=NPVOIS(I+NBENS)+1
  98 :                    NPVOIS(I+1)=NPVOIS(I+1)+1
  99 :                    NVOIS(**)=NUMERO(IVOIS(K))
 100 :                 ENDIF
 101 : 120           CONTINUE
 102 : 110        CONTINUE
 103 :         NPVOIS(I+1+NBENS)=NPVOIS(I+NBENS)
 104 :         NPVOIS(I+2)=NPVOIS(I+1)
 105 : 100     CONTINUE 
 106 : 
 107 :         DO 140 J=NPELEM(NBENS-1),NPELEM(NBENS)-1
 108 :               DO 150 K=IADJ(IELEM(J)),IADJ(IELEM(J)+1)-1
 109 :                 IF(NUMERO(IVOIS(K)).NE.(NBENS-1)) THEN
 110 :                    DO 160 IK=NPVOIS((NBENS-1)),NPVOIS(2*NBENS-1)
 111 :                     IF(NUMERO(IVOIS(K)).EQ.NVOIS(IK)) GOTO 150
 112 : 160                CONTINUE
 113 :                    NPVOIS(2*NBENS-1)=NPVOIS(2*NBENS-1)+1
 114 :                    NPVOIS(NBENS)=NPVOIS(NBENS)+1
 115 :                    NVOIS(**)=NUMERO(IVOIS(K))
 116 :                 ENDIF
 117 : 150           CONTINUE
 118 : 140        CONTINUE
 119 : 
 120 :         NPVOIS(2*NBENS)=NPVOIS(2*NBENS-1)
 121 :         DO 170 J=NPELEM(NBENS),NPELEM(NBENS+1)-1
 122 :               DO 180 K=IADJ(IELEM(J)),IADJ(IELEM(J)+1)-1
 123 :                 IF(NUMERO(IVOIS(K)).NE.NBENS) THEN
 124 :                    DO 190 IK=NPVOIS(NBENS),NPVOIS(2*NBENS)
 125 :                     IF(NUMERO(IVOIS(K)).EQ.NVOIS(IK)) GOTO 180
 126 : 190                CONTINUE
 127 :                    NPVOIS(2*NBENS)=NPVOIS(2*NBENS)+1
 128 :                    NVOIS(**)=NUMERO(IVOIS(K))
 129 :                 ENDIF
 130 : 180           CONTINUE
 131 : 170        CONTINUE
 132 : 
 133 : C tri de cette nouvelle base de donnees NVOIS.
 134 : C on range les elements voisins par ordre croissant.
 135 : 
 136 :         DO 200 I=1,NBENS
 137 :                 DO 210 J=1,NPVOIS(I+NBENS)-NPVOIS(I)+1
 138 :                    BOOL=.FALSE.
 139 :                    DO 220 K=NPVOIS(I),NPVOIS(I+NBENS)-J
 140 :                         IF(NVOIS(K).GT.NVOIS(K+1)) THEN
 141 :                                 NGINT=NVOIS(K)
 142 :                                 NVOIS(K)=NVOIS(K+1)
 143 :                                 NVOIS(K+1)=NGINT
 144 :                                 BOOL=.TRUE.
 145 :                         ENDIF
 146 : 220                CONTINUE
 147 :                    IF(.NOT.BOOL) GOTO 200
 148 : 210             CONTINUE
 149 : 200     CONTINUE
 150 : 
 151 :         SEGSUP IPELEM,NPELEM,IELEM,IENS
 152 : 
 153 : 
 154 :         RETURN
 155 :         END
 156 :  

© Cast3M 2003 - All rights reserved.
Disclaimer