dual01
C DUAL01 SOURCE FANDEUR 22/01/19 21:15:05 11256 C a appeler dual ulterieurement c==================================================================== c c entrees c mrigid rigidité [C] de dependance rela depend c sorties C ri1 [C] Transpose non symétrique C La différence par rapport à dual00, c'est que la matrice à C transposer n'est pas nécessairement symétrique. c c==================================================================== IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCHAMP -INC SMRIGID -INC SMELEME CHARACTER*4 CMOT character*(LOCHPO) NOMM,NODUA segment snomip character*(LOCHPO) nomip(0) endsegment segment snomda character*(LOCHPO) nomda(0) endsegment segment snomm character*(LOCHPO) nompi(nomip(/2)),nompa(nomda(/2)) endsegment segact mrigid C on en profite pour recenser les inconnues en question (primales) C a voir segini snomip,snomda DO 1501 I=1,IRIGEL(/2) * MELEME=IRIGEL(1,I) * SEGACT MELEME DESCR=IRIGEL(3,I) SEGACT DESCR C attention ces matrices ne sont pas carrees il faut 2 boucles C pour identifier les inconnues DO 1402 J=1,LISINC(/2) IF(nomip(/2).EQ.0) THEN nomip(**)=LISINC(J) ELSE DO 1406 K=1,nomip(/2) IF(LISINC(J).EQ.nomip(K)) GO TO 1405 1406 CONTINUE nomip(**)=LISINC(J) 1405 CONTINUE ENDIF 1402 CONTINUE C DO 1502 J=1,LISDUA(/2) IF(nomda(/2).EQ.0) THEN nomda(**)=LISDUA(J) ELSE DO 1506 K=1,nomda(/2) IF(LISDUA(J).EQ.nomda(K)) GO TO 1505 1506 CONTINUE nomda(**)=LISDUA(J) 1505 CONTINUE ENDIF 1502 CONTINUE 1501 CONTINUE C tableau des correspondances segini snomm do 325 il=1,nomip(/2) NOMM =nomip(IL) do 326 in = 1,lnomdd if (NOMM.EQ.NOMDD(in)) then NOMPI(il) =NOMDU(in) goto 327 endif 326 continue NOMPI(il)=NOMM 327 continue 325 continue do 425 il=1,nomda(/2) NOMM =nomda(IL) do 426 in = 1,lnomdd if (NOMM.EQ.NOMDU(in)) then NOMPA(il) =NOMDD(in) goto 427 endif 426 continue NOMPA(il)=NOMM 427 continue 425 continue * write(6,*) 'primales',(nomip(j),j=1,nomip(/2)),'sortie ' , * & ( nompi(j),j=1,nompi(/2)) * * * write(6,*) 'duales ',(nomda(j),j=1,nomda(/2)),'sortie ' , * & ( nompa(j),j=1,nompa(/2)) C on stoke le ddel en question en position ad-hoc nrigel=coerig(/1) segini , ri1 ri1.mtymat=mtymat ri1.iforig=iforig do 1700 ima=1,IRIGEL(/2) ri1.coerig(ima)=coerig(ima) do 1750 iri =1,irigel(/1) if(iri.eq.3.or.iri.eq.4) goto 1750 ri1.irigel(iri,ima)= IRIGEL(iri,ima) 1750 continue descr = irigel(3,ima) nligrp = lisdua(/2) nligrd = lisinc(/2) segini des1 ri1.irigel(3,ima) = des1 C do 1634 ik=1,lisinc(/2) nomm = lisinc(ik) do 1635 ij=1,nomip(/2) if(NOMM.eq.NOMIP(ij)) des1.lisdua(ik) = nompi(ij) 1635 continue des1.noeled(ik)=noelep(ik) 1634 continue do 1644 ik=1,lisdua(/2) nomm = lisdua(ik) do 1645 ij=1,nomda(/2) if(NOMM.eq.NOMDA(ij)) des1.lisinc(ik) = nompa(ij) 1645 continue des1.noelep(ik)=noeled(ik) 1644 continue segdes des1,descr if (irigel(7,ima).ne.0.or.nligrp.ne.nligrd) then XMATRI = IRIGEL(4,ima) segact XMATRI NELRIG=XMATRI.RE(/3) SEGINI xmatr1 xmatr1.symre=symre do i=1,nelrig do j=1,nligrp do k=1,nligrd xmatr1.re(k,j,i)=re(j,k,i) enddo enddo enddo segdes xmatr1,xmatri ri1.irigel(4,ima)=xmatr1 else ri1.irigel(4,ima)=irigel(4,ima) endif 1700 continue segdes ri1,mrigid segsup ,snomm,snomip,snomda c RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales