Download cmct2.eso

Back to the list

   1 : C CMCT2     SOURCE    CHAT      09/10/09    21:16:24     6519           
   2 :       SUBROUTINE CMCT2(MCOEF,LSINCO,IRIG2)
   3 : *_______________________________________________________________________
   4 : c
   5 : c      opérateur cmct
   6 : c
   7 : c entrée
   8 : c   MCOEF : coefficient de la matrice de blocage reordonnés
   9 : c   LSINCO : indice du dit tableau
  10 : c     
  11 : c sortie
  12 : c   IRIG2 : rigidité contenant la matrice condensée
  13 : c
  14 : *_______________________________________________________________________
  15 : 
  16 :       IMPLICIT INTEGER(I-N)
  17 :       IMPLICIT REAL*8(A-H,O-Z)
  18 : *
  19 : -INC CCOPTIO
  20 : -INC SMRIGID
  21 : -INC SMELEME
  22 : -INC SMCOORD
  23 : *
  24 : * tableau pour pointer vers MCOEF à partir du nombre d'inconnues
  25 : * 
  26 :       SEGMENT LSINCO
  27 :           INTEGER LESINC(NINC,2)
  28 :           REAL*8  XMAS(NINC)
  29 :       ENDSEGMENT
  30 : *
  31 : *  tableau des coefficient de la matrice C
  32 : *  ordonné dans l'ordre des inconnues
  33 :       SEGMENT MCOEF 
  34 : *        numero du noeud support du multiplicateur ligne 1
  35 : *        est il en marié avec un autre multiplicateur ligne 2 
  36 :          INTEGER ICOEF(2,NCOEF)
  37 : *         valeur des coefficients
  38 :          REAL*8 XCOEF(NCOEF) 
  39 :       ENDSEGMENT
  40 : *
  41 :       SEGMENT WORK1
  42 :             REAL*8 XDUM(NBNN)
  43 :       ENDSEGMENT
  44 :       LOGICAL NOER
  45 : *_______________________________________________________________________
  46 : 
  47 :       NOER = .TRUE.
  48 : *  il y a autant de matrices élémentaires qu'il y a de coefficients
  49 : *   
  50 :       NRIGEL = LESINC(/1)
  51 :       NRIGE = 7
  52 :       SEGINI MRIGID 
  53 :       IRIG2 = MRIGID
  54 :       MTYMAT = 'RIGIDITE' 
  55 : *
  56 : *    boucle sur les sous zones
  57 : *
  58 :       DO 700 I=1,NRIGEL
  59 :         GRXDUM = 0.D0
  60 :         PTXDUM = 9.D50
  61 :         COERIG(I) = 1.D0
  62 :         NBNN = LESINC(I,2)
  63 : *
  64 : *  il faut tenir compte des doubles multiplicateurs
  65 :         DO 100 J=0,LESINC(I,2)-1
  66 :             IF (ICOEF(2,J+LESINC(I,1)).NE.0) NBNN = NBNN + 1
  67 :  100    CONTINUE
  68 : *
  69 : * creation du maillage et du vecteur des coefficients
  70 :         NBELEM = 1    
  71 :         NBSOUS = 0
  72 :         NBREF = 0 
  73 :         SEGINI WORK1 
  74 :         SEGINI MELEME
  75 :         INOEU = 0 
  76 :         DO 200 J=0,LESINC(I,2)-1
  77 :              INOEU = INOEU + 1
  78 :              NUM(INOEU,1) = ICOEF(1,J+LESINC(I,1))
  79 :              XDUM(INOEU) = XCOEF(J+LESINC(I,1))
  80 :              IF (ICOEF(2,J+LESINC(I,1)).NE.0) THEN
  81 :                 INOEU = INOEU + 1
  82 :                 NUM(INOEU,1) = ICOEF(2,J+LESINC(I,1))
  83 :                 XDUM(INOEU) = XDUM(INOEU-1)
  84 :              ENDIF
  85 :              GRXDUM=MAX(GRXDUM,ABS(XDUM(INOEU)))
  86 :              IF (XDUM(INOEU).NE.0.D0) THEN
  87 :                 PTXDUM=MIN(PTXDUM,ABS(XDUM(INOEU)))
  88 :              ENDIF
  89 :  200    CONTINUE
  90 : *
  91 : *  petit controle sur le conditionnement de la matrice
  92 :         IF (((PTXDUM/GRXDUM).LT.1.D-12).AND.NOER) THEN
  92 :            CALL ERREUR(-320)
  93 :            NOER = .FALSE.
  94 :         ENDIF
  95 :         ITYPEL = 29
  96 :         IRIGEL(1,I) = MELEME
  97 : *
  98 : *    segment descripteur DESCR
  99 :         NLIGRP = NBNN
 100 :         NLIGRD = NBNN
 101 :         SEGINI DESCR
 102 :         DO 300 J=1,NBNN 
 103 :           LISINC(J)='LX  '
 104 :           LISDUA(J)='FLX '
 105 :           NOELEP(J)=J
 106 :           NOELED(J)=J
 107 :  300    CONTINUE
 108 :         IRIGEL(3,I) = DESCR
 109 : *
 110 : *   la matrice elle meme
 111 : *
 112 :          NELRIG = 1
 113 :          SEGINI xMATRI 
 114 :          IRIGEL(4,I)=xMATRI
 115 : *         SEGINI XMATRI
 116 : *         IMATTT(1)=XMATRI            
 117 :          DO 600 J=1,NLIGRP
 118 :            DO 500 K=1,NLIGRP
 119 :               RE(K,J,1)=XDUM(K)*XDUM(J)*XMAS(I)
 120 :  500       CONTINUE
 121 :  600     CONTINUE
 122 : *
 123 : *     dans le cas des doubles multiplicateurs il faut rajouter la matrice
 124 : *    bidiagonale
 125 : *
 126 :         INOEU = 0 
 127 :         DO 650 J=0,LESINC(I,2)-1
 128 :              INOEU = INOEU + 1
 129 :              IF (ICOEF(2,J+LESINC(I,1)).NE.0) THEN
 130 :                 RE(INOEU,INOEU+1,1)=RE(INOEU,INOEU+1,1) + 
 131 :      &                            RE(INOEU,INOEU,1)/1.5D0
 132 :                 RE(INOEU,INOEU,1)= RE(INOEU,INOEU,1)/3.D0
 133 :                 RE(INOEU+1,INOEU+1,1)=RE(INOEU,INOEU,1)
 134 :                 RE(INOEU+1,INOEU,1)=RE(INOEU,INOEU+1,1)
 135 :                 INOEU = INOEU + 1
 136 :                 NUM(INOEU,1) = ICOEF(2,J+LESINC(I,1))
 137 :                 XDUM(INOEU) = XDUM(INOEU-1)
 138 :               ENDIF
 139 :  650    CONTINUE    
 140 :          SEGDES XMATRI
 141 : *         SEGACT XMATRI
 142 : * 
 143 :         SEGDES DESCR
 144 : *        SEGDES XMATRI,IMATRI
 145 :         SEGSUP WORK1
 146 :         SEGDES MELEME
 147 :  700  CONTINUE  
 148 : *
 149 :       SEGSUP LSINCO,MCOEF
 150 :       SEGDES MRIGID
 151 : *_______________________________________________________________________
 152 :       RETURN
 153 :       END
 154 :      
 155 :  
 156 :  
 157 :  
 158 :  
 159 :  
 160 :  
 161 :  
 162 :  

© Cast3M 2003 - All rights reserved.
Disclaimer