redfor
C REDFOR SOURCE CB215821 20/11/25 13:38:49 10792 * élimination des ddls supprimés dans le second membre réduit * inspiré de transr et mschp1 (MASQ) * mchpoi : entree = second membre réduit avec ddls supprimés * ri4 : entree = matrice de relation * mchpo1 : sortie = second membre réduit sans ddls supprimés IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC SMCHPOI -INC SMRIGID -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMCOORD -INC SMELEME -INC TMTRAV SEGMENT/MTRA/(NOPOIN(nbpts)) SEGMENT MTR1 CHARACTER*(LOCOMP) IPCOM(0) ENDSEGMENT SEGMENT/MTR4/(IPHAR(0)) CHARACTER*(LOCOMP) nomp,nomd SEGINI MTRA,MTR1,MTR4 * * Initialisation de MTRAV, MTRA, MTR1, MTR4 (repris de mschp1.eso) * SEGACT MCHPOI IK=0 NSOUPO=IPCHP(/1) DO 20 IA=1,NSOUPO MSOUPO=IPCHP(IA) SEGACT MSOUPO MELEME=IGEOC SEGACT MELEME NBELEM=NUM(/2) DO 30 IB=1,NBELEM K=NUM(1,IB) IF(NOPOIN(K).NE.0) GO TO 30 IK=IK+1 NOPOIN(K)=IK 30 CONTINUE NCBBB=NOCOMP(/2) DO 40 IB=1,NCBBB NC=IPCOM(/2) DO 50 IC=1,NC IF(IPCOM(IC).NE.NOCOMP(IB)) GO TO 50 IF(IPHAR(IC).EQ.NOHARM(IB)) GO TO 40 50 CONTINUE IPCOM(**)=NOCOMP(IB) IPHAR(**)=NOHARM(IB) 40 CONTINUE 20 CONTINUE C NNIN=IPCOM(/2) NNNOE=IK SEGINI MTRAV DO 70 IA=1,NNIN NHAR(IA)=IPHAR(IA) 70 CONTINUE C C CREATION DE BB,IBIN,IGEO C NSOUPO=IPCHP(/1) DO 80 IA=1,NSOUPO MSOUPO=IPCHP(IA) SEGACT MSOUPO MELEME=IGEOC MPOVAL=IPOVAL SEGACT MELEME,MPOVAL NBELEM=NUM(/2) NC=VPOCHA(/2) NC1=NOCOMP(/2) C DO 90 IB=1,NC1 DO 100 IC=1,NNIN IF(NOCOMP(IB).NE.IPCOM(IC)) GO TO 100 IF(NOHARM(IB).EQ.IPHAR(IC)) GO TO 110 100 CONTINUE * Pas de composante trouvée, ce n'est pas normal goto 9999 110 CONTINUE DO 120 ID=1,NBELEM KI=NOPOIN(NUM(1,ID)) IGEO(KI)=NUM(1,ID) IBIN(IC,KI)=1 BB(IC,KI)=VPOCHA(ID,IB) 120 CONTINUE 90 CONTINUE 80 CONTINUE * on balaye les raideurs de dependances, on supprime les ddl dependants * dans le MTRAV segact ri4 do 1100 irig=1,ri4.irigel(/2) if (ri4.irigel(8,irig).ne.0) then descr=ri4.irigel(3,irig) meleme=ri4.irigel(1,irig) Xmatri=ri4.irigel(4,irig) segact descr,meleme,xmatri do 1110 iligrp=1,lisinc(/2) if (lisinc(iligrp).eq.'LX ') goto 1120 1110 continue goto 1100 1120 continue * Le multiplicateur de lagrange n'est pas en première position * dans le descripteur de la matrice, ce n'est pas prévu if (iligrp.ne.1) goto 9999 nbelem=num(/2) * on supprime le multiplicateur de lagrange et le ddl dépendant do idep=1,2 nomp=lisinc(idep) * on trouve le nom dual correspondant (si non trouvé dual=primal) nomd=nomp do ipri=1,lnomdd if (nomp.eq.nomdd(ipri)) nomd=nomdu(ipri) enddo iharm=ri4.irigel(5,irig) inin=0 do ii=1,nhar(/1) enddo if (inin.ne.0) then do 1130 i=1,nbelem * write(ioimp,*) 'ddl a eliminer ',iharm,nomd,' ', * $ num(noelep(idep),i) ik=nopoin(num(noelep(idep),i)) if (ik.ne.0) ibin(inin,ik)=0 1130 continue endif enddo segdes descr,meleme,xmatri endif 1100 continue segdes ri4 segsup MTRA,MTR1,MTR4 * * On reconstruit le chpoint nettoyé et on lui donne les mêmes * caractéristiques que l'original * segsup mtrav mchpo1.mochde='CHPOINT cree par redfor' mchpo1.ifopoi=ifopoi do i=1,min(mchpo1.jattri(/1),jattri(/1)) mchpo1.jattri(i)=jattri(i) enddo return 9999 continue MOTERR='REDFOR ' RETURN end
© Cast3M 2003 - Tous droits réservés.
Mentions légales