assmor
C ASSMOR SOURCE PV 20/09/26 21:15:20 10724 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC SMMATRIK -INC SMELEME POINTEUR MELEMP.MELEME,MELEMD.MELEME -INC SMLENTI POINTEUR IPADP.MLENTI,IPADD.MLENTI INTEGER PRI,DUA,LI,CO C ********************************* C On active le segment MATRIK et on C pointe sur tous les elements dont C on a besoin C ********************************* SEGACT MATRIK*MOD MELEMP=IRIGEL(1,LL) MELEMD=IRIGEL(2,LL) PMORS=IRIGEL(5,LL) SEGACT PMORS NBVA=JA(/1) SEGINI IZA C On recupere les segment MINCP et MINCD MINCP=KMINCP MINCD=KMINCD SEGACT MINCP,MINCD NPTP=MINCP.MPOS(/1) NPTD=MINCD.MPOS(/1) NBIP=MINCP.MPOS(/2)-1 NBID=MINCD.MPOS(/2)-1 C On prend le segment IMATRI IMATRI=IRIGEL(4,LL) SEGACT IMATRI NBSOUS=LIZAFM(/1) NBME=LIZAFM(/2) IF (NBSOUS.EQ.0) NBSOUS=1 IPT1=MELEMP IPT2=MELEMD C On active les connectivites primales et duales pour C prendre les NBSOUS1 et NBSOUS2 SEGACT MELEMP,MELEMD NBSOUS1=MELEMP.LISOUS(/1) NBSOUS2=MELEMD.LISOUS(/1) IF (NBSOUS1.EQ.0) NBSOUS1=1 IF (NBSOUS2.EQ.0) NBSOUS2=1 NBEL1=0 NBEL2=0 DO L=1,NBSOUS C Si NBSOUS n est pas egal a 1 c est que l on est en C multi-elements cependant, il se peut que les connectivites C (aucune, une seule ou les deux) soit un support (par C exemple l inconue primale est sur les CENTRE). Dans ce cas C le MELEME n'a pas de LISOUS. IF (NBSOUS.NE.1) THEN IF (NBSOUS1.NE.1) THEN IPT1=MELEMP.LISOUS(L) END IF IF (NBSOUS2.NE.1) THEN IPT2=MELEMD.LISOUS(L) END IF END IF SEGACT IPT1,IPT2 SEGACT IPADP,IPADD NP=IPT1.NUM(/1) MP=IPT2.NUM(/1) C Il faut faire attention pour le nombre d elements IF (NBSOUS.EQ.1) THEN ELSE IF (NBSOUS1.NE.1) THEN ELSEIF (NBSOUS2.NE.1) THEN END IF END IF c WRITE(6,*) 'IRIGEL',IRIGEL(7,LL),NP,MP,NBEL c IF (IRIGEL(7,LL.EQ.5) THEN c DO NL=1,NBME c IZAFM=LIZAFM(L,NL) c SEGACT IZAFM c DO K=1,NBEL c IF (NBSOUS.EQ.1) THEN c PRI=IPADP.LECT(IPT1.NUM(1,K)) c DUA=IPADD.LECT(IPT2.NUM(1,K)) c ELSE c IF (NBSOUS1.NE.1) THEN c PRI=IPADP.LECT(IPT1.NUM(1,K)) c ELSE c PRI=IPADP.LECT(IPT1.NUM(1,NBEL1+K)) c END IF c IF (NBSOUS2.NE.1) THEN c DUA=IPADD.LECT(IPT2.NUM(1,K)) c ELSE c DUA=IPADD.LECT(IPT2.NUM(1,NBEL2+K)) c END IF c END IF c c WRITE(6,*) 'PRI',PRI,'DUA',DUA c c END DO c SEGDES IZAFM c END DO c ELSE DO NL=1,NBME IZAFM=LIZAFM(L,NL) SEGACT IZAFM DO I=1,NP DO J=1,MP IF (NBSOUS.EQ.1) THEN PRI=IPADP.LECT(IPT1.NUM(I,K)) DUA=IPADD.LECT(IPT2.NUM(J,K)) ELSE IF (NBSOUS1.NE.1) THEN PRI=IPADP.LECT(IPT1.NUM(I,K)) ELSE PRI=IPADP.LECT(IPT1.NUM(I,NBEL1+K)) END IF IF (NBSOUS2.NE.1) THEN DUA=IPADD.LECT(IPT2.NUM(J,K)) ELSE DUA=IPADD.LECT(IPT2.NUM(J,NBEL2+K)) END IF END IF C NINCP et NINCD sont les numero des inconnues primales et C duale traite. IFLAG=0 DO JJ=1,NBIP & (IFLAG.EQ.0)) THEN IFLAG=1 NINCP=JJ END IF END DO IFLAG=0 DO JJ=1,NBID IF ((LISDUA(NL).EQ.MINCD.LISINC(JJ)).AND. & (IFLAG.EQ.0)) THEN IFLAG=1 NINCD=JJ END IF END DO LI=MINCD.NPOS(DUA)+MINCD.MPOS(DUA,NINCD)-1 CO=MINCP.NPOS(PRI)+MINCP.MPOS(PRI,NINCP)-1 NB=IA(LI+1)-IA(LI) M=IA(LI) c WRITE(6,*) 'LI',LI,'CO',CO,'M',M,'NB',NB IFLAG=0 DO KK=1,NB c WRITE(6,*) 'JA(',M+KK-1,')=',JA(M+KK-1) IF ((JA(M+KK-1).EQ.CO).AND.(IFLAG.EQ.0)) THEN IFLAG=1 A(M+KK-1)=A(M+KK-1)+AM(K,I,J) M=M+KK-1 END IF END DO c WRITE(6,*) 'AFFECT: M ',M END DO END DO END DO SEGDES IZAFM END DO SEGDES IPADP,IPADD SEGDES IPT1,IPT2 c END IF END DO SEGDES MELEMP,MELEMD SEGDES IMATRI SEGDES MINCP,MINCD SEGDES IZA SEGDES PMORS IRIGEL(6,LL)=IZA SEGDES MATRIK RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales