remplx
C REMPLX SOURCE CB215821 20/11/25 13:38:59 10792 c==================================================================== c remplissage des LX apres reso avec condensation c entrees: c mrigid rigidité de dependance ( irigel(8,irig) # 0) C (elle contient les multiplicateurs) c ipchp1 chpoint de force cree par C (rigtot * soltot) - ftot c sorties: C ipchp2 chpoint des multiplicateurs a reintroduire C dans la solution globale C c==================================================================== * on suppose pour le moment qu'il n'y a qu'une seule harmonique de fourier IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC SMCHPOI -INC SMRIGID -INC SMELEME -INC SMCOORD -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC CCHAMP character*(LOCOMP) NOMM,nom2 C segment iccoun(ncomp) C segment iicpr integer icpr(nbpts),ivers(nbpts),iinb real*8 cvers(nbpts) endsegment segment siver2 integer invnum(nbpts) integer iver2(nptc) real*8 cver2(nptc) endsegment SEGMENT SNOMIN CHARACTER*(LOCOMP) NOMIN(0) ENDSEGMENT SEGMENT SNOMDU CHARACTER*(LOCOMP) NODUA(0) ENDSEGMENT INTEGER IFO IFO = 0 mrigid = irig1 SEGACT mrigid segini snomin,snomdu C identification des inconnues liees DO 1501 I=1,IRIGEL(/2) MELEME=IRIGEL(1,I) C SEGACT MELEME DESCR=IRIGEL(3,I) ifo=irigel(5,i) SEGACT DESCR DO 1502 J=1,LISINC(/2) IF(LISINC(J).EQ.'LX '.AND.J.LE.1) GO TO 1502 IF(NOMIN(/2).EQ.0) THEN NOMIN(**)=LISINC(J) NODUA(**)=LISDUA(J) ELSE DO 1506 K=1,NOMIN(/2) IF(LISINC(J).EQ.NOMIN(K)) GO TO 1505 1506 CONTINUE NOMIN(**)=LISINC(J) NODUA(**)=LISDUA(J) 1505 CONTINUE ENDIF 1502 CONTINUE SEGDES DESCR 1501 CONTINUE *C construction du tableau des duales * segini snomdu * do 325 il=1,nomin(/2) * NOMM =nomin(IL) * do 326 in = 1,lnomdd * if (NOMM.EQ.NOMDD(in)) then ** NODUA(il) =NOMDU(in) * goto 327 * endif *326 continue *327 continue *325 continue C WRITE(IOIMP,*) 'primales bloquees' ,(nomin(k),k=1,nomin(/2)) C WRITE(IOIMP,*) 'leurs duales ' ,(nodua(k),k=1,nomin(/2)) ncomp = nomin(/2) segini iccoun do 2000 ic = 1,ncomp segini iicpr iccoun(ic) = iicpr C WRITE(IOIMP,*) ' composante et son iicpr ',ic,iicpr 2000 continue ntplx = 0 C quels sont les noeuds concernes par des liaisons do 1700 i=1,IRIGEL(/2) MELEME=IRIGEL(1,I) SEGACT MELEME ipt4=meleme descr = irigel(3,i) segact descr xmatri= irigel(4,i) segact xmatri if (lisinc(/2).le.1) goto 1701 nomm = lisinc(2) C on l identifie par un numero ipo C pour recuperer les composantes ad hoc C quelle est sa position dans nomin do 3634 ipo=1,nomin(/2) if(NOMM.eq.nomin(ipo)) goto 3635 3634 continue 3635 continue C recup et comptage des noeuds supports de multiplicateurs ideb=2 iicpr = iccoun(ipo) do 1703 iel=1,num(/2) * xmatri=imattt(iel) * segact xmatri ip =num(noelep(ideb),iel) * WRITE(IOIMP,*) ' remplissage ip icpr(ip) ',ip,num(1,iel) icpr(ip)=num(1,iel) iinb = iinb+1 ivers(iinb)= ip cvers(iinb)= re(1,2,iel)*coerig(i) ntplx = ntplx+1 * WRITE(IOIMP,*) 'ip icpr(ip) ipo' ,ip,icpr(ip),ipo * segdes xmatri 1703 continue 1701 continue segdes descr,xmatri 1700 continue * WRITE(IOIMP,*) ' nombre de pts supports de LX ' ,ntplx C--------------------------------------------------------- * WRITE(IOIMP,*) 'ivers ' ,(ivers(k),k=1,iinb) C on ouvre le chpoint des reactions calculees par KU-F mchpoi = ipchp1 segact mchpoi nsoup1 = ipchp(/1) C initialisation du chpo de sortie support de ntplx points nat=1 nsoupo = 1 segini mchpo1 ipchp2= mchpo1 mchpo1.jattri(1) = 1 mchpo1.ifopoi= ifopoi mchpo1.mochde='CHAMP DE LX ISSU DE REMPLX' mchpo1.mtypoi='REMPLX' nc= 1 segini msoup1 mchpo1.ipchp(1)=msoup1 C nbelem = ntplx nbnn = 1 nbref = 0 nbsous=0 segini meleme msoup1.igeoc =meleme ipt1=meleme itypel= 1 n = ntplx msoup1.nocomp(1) = 'LX ' msoup1.noharm(1)= ifo segini mpova1 msoup1.ipoval = mpova1 inpp = 0 do 1000 isous=1,nsoup1 msoupo= ipchp(isous) segact msoupo meleme = igeoc segact meleme nc = nocomp(/2) mpoval=ipoval segact mpoval nptc = vpocha(/1) do 1010 icomp=1,nc nom2= nocomp(icomp) C recherche de l inconnue duale do 334 ipo=1,nomin(/2) * WRITE(IOIMP,*) ' nom de la composante et nodua ',nom2,NODUA(ipo) if(NOM2.eq.NODUA(ipo)) goto 335 334 continue C ce n est pas une composante depedante goto 1009 335 continue C WRITE(IOIMP,*) 'composante ->vpocha(1) ipo ' ,nom2 ,nptc,ipo iicpr = iccoun(ipo) C boucle sur les noeuds C WRITE(IOIMP,*) ' composante et son iicpr nbre ii ',ipo,iicpr,iinb segini siver2 C WRITE(IOIMP,*) 'num(1,il)',(num(1,il),il=1,nptc) C **************************************************** C [-DAVID-22/07/2004-] Inversion du tableau num suppression de la boucle 520 * do 500 k=1,iinb * ip = ivers(k) * do 520 lk=1,nptc * if(ip.eq.num(1,lk)) then * iver2(lk)=ip * cver2(lk)=cvers(k) * goto 500 * endif *520 continue *500 continue do lk = 1, nptc if ((num(1,lk).ge.1).and.(num(1,lk).le.nbpts)) then invnum(num(1,lk))=lk endif enddo do 500 k=1,iinb ip = ivers(k) lk = invnum(ip) if ((lk.ge.1).and.(lk.le.nptc)) then iver2(lk)=ip cver2(lk)=cvers(k) endif 500 continue C WRITE(IOIMP,*) 'iver2 ' ,(iver2(k),k=1,nptc) do 1020 j=1,nptc ip = iver2(j) if(ip.eq.0) goto 1020 if(icpr(ip).eq.0.or.iver2(j).eq.0) goto 1020 * on ne dicise plus par deux puisque simple multiplicateur xfo=-vpocha(j,icomp)/1.D0/cver2(j) * WRITE(IOIMP,*) ' ip inpp icpr ',ip,inpp,icpr(ip) ipt1.num(1,inpp+1) = abs(icpr(ip)) * pour avoir les LX au total icpr(ip)=-abs(icpr(ip)) mpova1.vpocha(inpp+1,1)=xfo C WRITE(IOIMP,*) 'ip icpr xfo ',ip,icpr(ip), C & xfo,lk,(inpp+1) inpp = inpp+1 1020 continue segsup siver2 1009 continue 1010 continue 1000 continue * on complete les LX do 1022 ic=1,nomin(/2) iicpr = iccoun(ic) do 1021 j=1,icpr(/1) if (icpr(j).le.0) goto 1021 * WRITE(IOIMP,*) ' complete j icpr(j) inpp num(/2) ', * > j,icpr(j),inpp,ipt1.num(/2) ipt1.num(1,inpp+1) = icpr(j) inpp=inpp+1 1021 continue 1022 continue * WRITE(IOIMP,*) ' on a ecrit ',inpp, ' LX' nbnn=ipt1.num(/1) nbelem=inpp nbsous=0 nbref=0 * WRITE(IOIMP,*) ' num mpova1 ',ipt1.num(/2),mpova1.vpocha(/1) if (nbelem.ne.ipt1.num(/2)) then * WRITE(IOIMP,*) ' remplx ajustement LX ' segadj ipt1 n=nbelem nc=1 segadj mpova1 endif do 3000 ic=1,nomin(/2) iicpr = iccoun(ic) segsup iicpr 3000 continue segsup iccoun,snomin,snomdu segdes mrigid END
© Cast3M 2003 - Tous droits réservés.
Mentions légales