cmct2
C CMCT2 SOURCE FANDEUR 22/03/01 21:15:02 11301 *_______________________________________________________________________ c c opérateur cmct c c entrée c MCOEF : coefficient de la matrice de blocage reordonnés c LSINCO : indice du dit tableau c c sortie c IRIG2 : rigidité contenant la matrice condensée c *_______________________________________________________________________ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMRIGID -INC SMELEME * * tableau pour pointer vers MCOEF à partir du nombre d'inconnues * SEGMENT LSINCO INTEGER LESINC(NINC,2) REAL*8 XMAS(NINC) ENDSEGMENT * * tableau des coefficient de la matrice C * ordonné dans l'ordre des inconnues SEGMENT MCOEF * numero du noeud support du multiplicateur ligne 1 * est il en marié avec un autre multiplicateur ligne 2 INTEGER ICOEF(2,NCOEF) * valeur des coefficients REAL*8 XCOEF(NCOEF) ENDSEGMENT * SEGMENT WORK1 REAL*8 XDUM(NBNN) ENDSEGMENT LOGICAL NOER *_______________________________________________________________________ NOER = .TRUE. * il y a autant de matrices élémentaires qu'il y a de coefficients * NRIGEL = LESINC(/1) SEGINI MRIGID IRIG2 = MRIGID MTYMAT = 'RIGIDITE' * * boucle sur les sous zones * DO 700 I=1,NRIGEL GRXDUM = 0.D0 PTXDUM = 9.D50 COERIG(I) = 1.D0 NBNN = LESINC(I,2) * * il faut tenir compte des doubles multiplicateurs DO 100 J=0,LESINC(I,2)-1 IF (ICOEF(2,J+LESINC(I,1)).NE.0) NBNN = NBNN + 1 100 CONTINUE * * creation du maillage et du vecteur des coefficients NBELEM = 1 NBSOUS = 0 NBREF = 0 SEGINI WORK1 SEGINI MELEME INOEU = 0 DO 200 J=0,LESINC(I,2)-1 INOEU = INOEU + 1 NUM(INOEU,1) = ICOEF(1,J+LESINC(I,1)) XDUM(INOEU) = XCOEF(J+LESINC(I,1)) IF (ICOEF(2,J+LESINC(I,1)).NE.0) THEN INOEU = INOEU + 1 NUM(INOEU,1) = ICOEF(2,J+LESINC(I,1)) XDUM(INOEU) = XDUM(INOEU-1) ENDIF GRXDUM=MAX(GRXDUM,ABS(XDUM(INOEU))) IF (XDUM(INOEU).NE.0.D0) THEN PTXDUM=MIN(PTXDUM,ABS(XDUM(INOEU))) ENDIF 200 CONTINUE * * petit controle sur le conditionnement de la matrice IF (((PTXDUM/GRXDUM).LT.1.D-12).AND.NOER) THEN NOER = .FALSE. ENDIF ITYPEL = 29 IRIGEL(1,I) = MELEME * * segment descripteur DESCR NLIGRP = NBNN NLIGRD = NBNN SEGINI DESCR DO 300 J=1,NBNN LISINC(J)='LX ' LISDUA(J)='FLX ' NOELEP(J)=J NOELED(J)=J 300 CONTINUE IRIGEL(3,I) = DESCR * * la matrice elle meme * NELRIG = 1 SEGINI xMATRI IRIGEL(4,I)=xMATRI DO 600 J=1,NLIGRP DO 500 K=1,NLIGRP RE(K,J,1)=XDUM(K)*XDUM(J)*XMAS(I) 500 CONTINUE 600 CONTINUE * * dans le cas des doubles multiplicateurs il faut rajouter la matrice * bidiagonale * INOEU = 0 DO 650 J=0,LESINC(I,2)-1 INOEU = INOEU + 1 IF (ICOEF(2,J+LESINC(I,1)).NE.0) THEN RE(INOEU,INOEU+1,1)=RE(INOEU,INOEU+1,1) + & RE(INOEU,INOEU,1)/1.5D0 RE(INOEU,INOEU,1)= RE(INOEU,INOEU,1)/3.D0 RE(INOEU+1,INOEU+1,1)=RE(INOEU,INOEU,1) RE(INOEU+1,INOEU,1)=RE(INOEU,INOEU+1,1) INOEU = INOEU + 1 NUM(INOEU,1) = ICOEF(2,J+LESINC(I,1)) XDUM(INOEU) = XDUM(INOEU-1) ENDIF 650 CONTINUE SEGDES XMATRI SEGDES DESCR SEGSUP WORK1 SEGDES MELEME 700 CONTINUE * SEGDES MRIGID *_______________________________________________________________________ RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales