Download impos4.eso

Back to the list

   1 : C IMPOS4    SOURCE    CHAT      09/10/09    21:19:01     6519           
   2 :       SUBROUTINE IMPOS4
   3 : c
   4 : c     sous routine pour l'opérateur IMPO option CONT
   5 : c     qui donne le contour des contacts à partir de la rigidite
   6 : c     active calculée par impos4.eso
   7 : c
   8 : c   
   9 : c
  10 : c  entree:
  11 : c      IPRIG pointeur sur l
  12 : c  sortie:
  13 : c  MAIL2 = contour des surfaces en contact formé d'elements SEG2
  14 : c
  15 : c
  16 :       IMPLICIT INTEGER(I-N)
  17 :       IMPLICIT REAL*8 (A-H,O-Z)
  18 :       LOGICAL FLAG1
  19 : -INC CCOPTIO
  20 : -INC SMCOORD
  21 : -INC SMELEME     
  22 : -INC SMRIGID  
  23 : -INC SMCHPOI   
  24 :       SEGMENT MCTC
  25 : c      mctc contient les surface en vis a vis
  26 :         INTEGER IPOT1(NNO1)
  27 :         INTEGER IPOT2(NNO2)
  28 :       ENDSEGMENT
  29 :       POINTEUR MCTC1.MCTC,MCTC2.MCTC
  30 : c
  31 :       SEGMENT LCTC
  32 : c       imctc pointe vers les mctc
  33 :         INTEGER IMCTC(NBELEM,2)
  34 :       ENDSEGMENT
  35 : c
  36 :       SEGMENT MPLX
  37 : c        contient les numero de points qui supportent un composante
  38 : c        'lx'  
  39 :           INTEGER IPLX(NPLX)
  40 :       ENDSEGMENT     
  41 : c
  42 : c executable:
  43 :       IF ( IDIM .NE. 2 ) THEN
  44 :           INTERR(1) = IDIM
  45 :           RETURN
  46 :       ENDIF
  47 : c
  47 :       CALL LIROBJ ('MAILLAGE',MELEME,1,IRETOU)                                  
  48 :       IF (IERR.NE.0) RETURN                                                      
  48 :       CALL LIROBJ ('CHPOINT ',MCHPOI,1,IRETOU)                                  
  49 :       IF (IERR.NE.0) RETURN      
  50 : c
  51 :       SEGACT MCHPOI
  52 :       NPLX = 0
  53 :       SEGINI MPLX
  54 : c       boucle sur les msoupo pour remplir mplx de tous les points 
  55 : c       supportant une composante nommée 'lx'
  56 :       DO 300 I=1,IPCHP(/1)
  57 :          MSOUPO = IPCHP(I)
  58 :          SEGACT MSOUPO
  59 : c        boucle sur les noms de composantes
  60 :          DO 200 J=1,NOCOMP(/1)
  61 :            IF ( NOCOMP(J) .EQ. 'LX' ) THEN
  62 :              IPT1 = IGEOC 
  63 :              SEGACT IPT1 
  64 :              NNPLX = NPLX
  65 : *             print *, 'nplx=',nplx
  66 :              NPLX = NPLX + IPT1.NUM(/2)
  67 :              SEGADJ MPLX
  68 : c            on remplit mplx
  69 :              DO 100 K = 1,IPT1.NUM(/2)
  70 : *               print *,'noeud actif',IPT1.NUM(1,K)
  71 :                IPLX(NNPLX+K)=IPT1.NUM(1,K)
  72 :  100         CONTINUE
  73 :              SEGDES IPT1
  74 :           ENDIF
  75 :  200    CONTINUE
  76 :         SEGDES MSOUPO
  77 :  300  CONTINUE
  78 :       SEGDES MCHPOI
  79 : *
  80 : *      PRINT *,'nplx=',nplx
  81 : *
  82 : c
  83 :       SEGACT MELEME
  84 : c     on attend un maillage d'elements type 22 a 4 noeuds
  85 :       IF (ITYPEL .NE. 22 .OR. NUM(/1) .NE. 4) THEN
  85 :         CALL ERREUR(26)
  86 :       ENDIF
  87 : c
  88 :       NBELEM = NUM(/2)
  89 :       NB = NBELEM
  90 : *
  91 : *      PRINT *,'NBELEM=',nbelem
  92 : *
  93 : *       remplissage du segment lctc
  94 : *
  95 :       SEGINI LCTC
  96 :       DO 600 I=1,NBELEM
  97 : c       l'element est il actif
  98 :         I1 = NUM(1,I)
  99 : *        print *,'noeud lx ',i1
 100 :         FLAG1 = .FALSE.
 101 :         DO 400 J=1,NPLX
 102 :           IF (IPLX(J) .EQ. I1 ) FLAG1 = .TRUE.
 103 :  400    CONTINUE
 104 : c
 105 :         IF  (FLAG1) THEN
 106 : *
 107 : *      PRINT *,'element actif'
 108 : *        
 109 : c      l'element est actif on cree un mctc elementaire de trois points
 110 :           NNO1 = 2
 111 :           NNO2 = 1
 112 :           SEGINI MCTC
 113 :           IM2 = MCTC 
 114 :           IPOT1(1) = NUM(2,I)
 115 :           IPOT1(2) = NUM(3,I)
 116 :           IPOT2(1) = NUM(4,I)
 117 : c
 118 :          DO 500 J=1,I-1
 119 : c          on test  si le mctc a un point commun avec
 120 : c          ceux deja mis
 121 :              IM1 = IMCTC(J,1)
 122 :              IF ( IMCTC(J,2) .NE. 0) THEN
 123 : *             points communs ?
 123 :                CALL IMPOS5(IM1,IM2,IRET)
 124 :                IF (IRET .NE. 0) THEN
 125 : *                  assemblage des deux mctc
 126 : c                  im2 est remplace par le mctc resulatant de
 127 : c                  l'assemblage
 127 :                    CALL IMPOS6(IM1,IM2,IRET)
 128 : c                  invalidation du mctc im1
 129 :                    IMCTC(J,2)=0
 130 :                ENDIF
 131 :              ENDIF
 132 :  500     CONTINUE
 133 :          IMCTC(I,1)=IM2
 134 :          IMCTC(I,2)=1
 135 : c
 136 :         ENDIF
 137 :  600   CONTINUE
 138 :        SEGDES MELEME
 139 : c
 140 : c   creation du maillage correspondant formé de seg2
 141 : c
 142 : c
 143 :         NBELEM = 0
 144 :         DO 700 I=1,NB
 145 :            IF (IMCTC(I,2) .EQ. 1) THEN
 146 :                 MCTC = IMCTC(I,1)
 147 :                 NBELEM = NBELEM + IPOT1(/1) + IPOT2(/1)
 148 :            ENDIF
 149 :  700    CONTINUE 
 150 :         NBREF = 0
 151 :         NBNN = 2
 152 :         NBSOUS = 0
 153 :         SEGINI MELEME
 154 :         MAIL1 = MELEME
 155 :         ITYPEL = 2
 156 : c
 157 :         INDI1 = 0
 158 :         DO 1000 I=1,NB
 159 :            MCTC = IMCTC(I,1)
 160 :            IF (IMCTC(I,2) .EQ. 1) THEN
 161 : c          ligne inferieure
 162 :               DO 800 J = 1,(IPOT1(/1)-1)
 163 :                 INDI1 = INDI1 + 1
 164 :                 NUM(1,INDI1)=IPOT1(J+1)
 165 :                 NUM(2,INDI1)=IPOT1(J)
 166 :  800          CONTINUE
 167 : c          premiere interconnection
 168 :               INDI1 = INDI1 + 1
 169 :               NNN = IPOT1(/1)
 170 :               NUM(1,INDI1 )=IPOT2(1)
 171 :               NUM(2,INDI1 )=IPOT1(NNN)
 172 :               
 173 : c          ligne superieure
 174 :               DO 900 J = 1,(IPOT2(/1)-1)
 175 :                 INDI1 = INDI1 + 1
 176 :                 NUM(1,INDI1)=IPOT2(J+1)
 177 :                 NUM(2,INDI1)=IPOT2(J)
 178 :  900          CONTINUE 
 179 : c          deuxieme interconnection
 180 :               INDI1 = INDI1 + 1
 181 :               NNN = IPOT2(/1)
 182 :               NUM(1,INDI1)=IPOT1(1)
 183 :               NUM(2,INDI1)=IPOT2(NNN)
 184 :            ENDIF 
 185 :            SEGSUP MCTC  
 186 :  1000   CONTINUE
 187 : c       desactivation des meleme
 188 :         SEGSUP LCTC,MPLX
 189 :         MELEME = MAIL1
 190 :         SEGDES MELEME
 190 :         CALL ECROBJ('MAILLAGE',MELEME)
 191 :         RETURN
 192 :         END 
 193 :  
 194 :  
 195 :  
 196 :  
 197 :  
 198 :  
 199 :  

© Cast3M 2003 - All rights reserved.
Disclaimer