supmas
C SUPMAS SOURCE PV090527 24/10/22 21:15:04 12043 SUBROUTINE SUPMAS c c sous routine pour calculer la masse c sur les ddl maitres d'un super element c option MASS de SUPE c c Pierre Pegon (CCR d'Ispra), Juin 1997 c c l'option LCHP permet d'avoir les vecteurs de MSUPCH dans un LCHPO c c IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) c -INC PPARAM -INC CCOPTIO -INC SMELEME -INC SMRIGID -INC SMSUPER -INC SMMATRI -INC SMVECTD -INC SMCHPOI -INC TMTRAV c CHARACTER*4 INCL c SEGMENT MSUPCH(NBINMA) SEGMENT ISECO(LL) SEGMENT VSE(LL)*D c -INC SMLCHPO PARAMETER(NOLIS=1) CHARACTER*4 MOLIS(NOLIS) DATA MOLIS/'LCHP'/ c c *** lecture des objets en entre c IF(IERR.NE.0) RETURN IF(IERR.NE.0) RETURN c c *** option LCHP c SEGACT MSUPER*MOD * cas degenere IF (MSURAI.EQ.MRIGTO) THEN RETURN ENDIF c c *** mcrout contient la decomposition modifiee de la rigidite c MMATRI=MCROUT c c *** dimension de la matrice condensee c MRIGID=MSURAI SEGACT MRIGID xMATRI=IRIGEL(4,1) MOHAR=IRIGEL(5,1) SEGACT xMATRI * XMATRI=IMATTT(1) * SEGACT XMATRI NLIGRA=RE(/1) SEGDES XMATRI*NOMOD * SEGDES IMATRI*NOMOD SEGDES MRIGID*NOMOD c c *** autres dimensions c SEGACT MMATRI MILIGN=IILIGN SEGACT MILIGN NBNNMA=IPNO(/1)-NLIGRA NNOEU=ILIGN(/1) MINCPO=IINCPO SEGACT MINCPO MDNOR=IDNORM SEGACT MDNOR c c *** lecture de la geometrie et du descripteur lies a c la matrice de rigidite complete c IPT1=IGEOMA SEGACT IPT1 MIDUA=IIDUA MIMIK=IIMIK SEGACT MIDUA,MIMIK c c *** on cherche a partir de ou commence les ligne au dela de NBNNMA c et on en profite pour activer TOUTES les lignes c I1=0 ILA=0 DO I=1,NNOEU SEGACT LIGN NA=IMMM(/1) ILA=ILA+NA IF(ILA.GT.NBNNMA.AND.I1.EQ.0) THEN I1=I ILA1=ILA-NA ENDIF ENDDO c c *** creation du segment de travail et debut de son remplissage c NNNOE=IPT1.NUM(/2) NNIN=IMIK(/2) SEGINI MTRAV DO I=1,NNNOE IGEO (I)=IPT1.NUM(1,I) ENDDO DO I=1,NNIN NHAR(I)=MOHAR ENDDO DO I=1,NNNOE DO J=1,NNIN NUM1=INCPO(J,I) IF (NUM1.NE.0) IBIN(J,I)=1 ENDDO ENDDO c c *** on initialise le segment des chpo "intermediaires de calcul" c que l'on va remplir successivement avec le vecteur formant les c ligne de la matrice rectangulaire [ -R*(L**-1) I ] c NBINMA=NLIGRA SEGINI MSUPCH c c *** on loop sur les lignes qui represente R ... c INC=IPNO(/1) SEGINI,MVECTD c DO INOEUD=I1,NNOEU LIG1=ILIGN(INOEUD) NA1=LIG1.IMMM(/1) IDEB1=1 LPREC1=0 DO IDDL=1,NA1 ILA1=ILA1+1 IF(ILA1.LE.NBNNMA)GOTO 50 c c *** ... et on remplie VECTBB avec EN CHANGEANT LE SIGNE c IFIN1=LIG1.IPPVV(IDDL+1)-1 IDEB21=LIG1.IVPO(2*IDEB1) LONG1=LIG1.IVPO(2*(IFIN1+1)-1)-LIG1.IVPO(2*IDEB1-1) IPRECOL1=ILA1-LONG1 ICOL1=LIG1.IVPO(2*INDIC1-1)+IPRECOL1-LPREC1 IF (ICOL1.GT.NBNNMA) GOTO 1 DO K1=IDEB21,IFIN21 VECTBB(ICOL1)=-LIG1.VAL(K1) ICOL1=ICOL1+1 IF(ICOL1.GT.NBNNMA) GOTO 1 ENDDO IDEB21=IFIN21+1 ENDDO 1 CONTINUE c c *** on de-normalise la ligne c XNORM1=DNOR(ILA1) DO I=1,NBNNMA VECTBB(I)=VECTBB(I)/XNORM1 ENDDO c c *** on resout avec L transpose sur ce vecteur ("MOND1") c ILA=NBNNMA+NLIGRA+1 c DO I=NNOEU,1,-1 NA=IMMM(/1) IFIB=IVPO(/1) IF(ILA-NA.GT.NBNNMA)THEN ILA=ILA-NA GOTO 5 ENDIF IMOI1=IVPO(2*IPPVV(NA+1)-1) DO J=NA,1,-1 ILA=ILA-1 IDEB2=IPPVV(J)*2 IMOI2=IVPO(IDEB2-1) LLOM=IMOI1-IMOI2-1 IF (LLOM.LE.0)GOTO 3 IF (ILA.GT.NBNNMA)GOTO 3 IPOSM=IMOI2-1 VKON=VECTBB(ILA) IPLAC=IVPO(IDEB2)-1 IDEBZ=1 IPLAC2=ILA-LLOM-1 DO IDEB3=IDEB2,IFIB-1,2 IMOI = IVPO ( IDEB3+2 ) ILONZ=IMOI -IPLAC-IDEBZ IPLAC=IPLAC-IPLAC2 IDEBZC=IDEBZ+IPLAC2 DO K=IDEBZC,MIN(IDEBZC+ILONZ,ILA)-1 VECTBB(K)=VECTBB(K)-VKON*VAL(IPLAC+K) ENDDO IF (IDEBZ.GE.LLOM) GOTO 3 IDEBZ=IVPO(IDEB3+1)-IPOSM IPLAC=IMOI-IDEBZ ENDDO 3 CONTINUE IMOI1=IMOI2 ENDDO 5 CONTINUE ENDDO c c *** on normalise la colonne resultat c XNORM1=DNOR(ILA1) DO I=1,NBNNMA VECTBB(I)=VECTBB(I)*DNOR(I) ENDDO c c *** on met 1 en position ILA1 c VECTBB(ILA1)=1.D0 c c *** on cree le chpoint resultat c DO I=1,NNNOE DO J=1,NNIN NUM1=INCPO(J,I) IF (NUM1.NE.0) BB(J,I)=VECTBB(NUM1) ENDDO ENDDO SEGACT MTRAV*MOD c c *** ce champ de nature discrete est stocke dans MSUPCH c MCHPOI = ISOLU SEGACT,MCHPOI*MOD JATTRI(1)=2 SEGDES MCHPOI MSUPCH(ILA1-NBNNMA)=MCHPOI c c *** fin de la boucle sur les lignes representant R c 50 CONTINUE IDEB1=IFIN1+1 LPREC1=LPREC1+LONG1 ENDDO ENDDO c c *** desactivations diverses et variees c DO I=1,NNOEU ENDDO SEGDES MIDUA*NOMOD,MIMIK*NOMOD SEGDES MDNOR*NOMOD SEGDES MINCPO*NOMOD SEGDES MILIGN*NOMOD SEGDES IPT1 SEGDES MMATRI*NOMOD SEGSUP MVECTD,MTRAV c c *** on attaque la condensation de la masse que l'on trouve c en effectuant les produits scalaires entre V et M*W ou c V et W sont des vecteurs de MSUPCH c RI1=MSURAI SEGACT RI1 SEGINI,MRIGID=RI1 SEGDES RI1 MTYMAT='MASSE' NELRIG=1 LL=MSUPCH(/1) SEGINI ISECO,VSE DO IH=1,LL ISECO(IH)=MSUPCH(IH) ENDDO NLIGRP=LL NLIGRD=LL SEGINI XMATRI * SEGINI IMATRI * IMATTT(1)=XMATRI DO J=1,LL SEGACT ISECO MCH1= ISECO(J) SEGDES ISECO,VSE SEGACT VSE DO K=1,J RE(J,K,1)=VSE(K) RE(K,J,1)=VSE(K) ENDDO ENDDO SEGDES XMATRI * SEGDES IMATRI IRIGEL(4,1)=xMATRI ICHOLE=0 SEGDES MRIGID MSUMAS=MRIGID c c *** on fait le menage c SEGDES MSUPER SEGSUP ISECO,VSE c c *** option LCHP ou non c IF(LCHP.EQ.1)THEN N1=NBINMA SEGINI MLCHPO DO I=1,NBINMA MCHPOI=MSUPCH(I) ICHPOI(I)=MCHPOI SEGDES MCHPOI ENDDO SEGDES MLCHPO ELSE DO I=1,NBINMA MCHPOI=MSUPCH(I) ENDDO ENDIF SEGSUP MSUPCH c c *** au revoir c RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales