virec1
C VIREC1 SOURCE PB245956 20/12/21 21:15:20 10747 C RESOUR SOURCE CB215821 19/07/30 21:17:58 10273 & ICMODR,ICMODI,WR,WI,NELIM) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) * RECONSTRUCTION D'UN MODE (REEL OU COMPLEXE) * APRES OPERATIONS SUR MATRICES CONDENSEES * code en grande partie extrait de resour.eso -INC SMRIGID -INC PPARAM -INC CCOPTIO -INC SMCHPOI -INC SMELEME SEGMENT IDEME0(1,2) SEGMENT IDEME1(1,2) SEGMENT ICMODE(NVIBR) SEGMENT ICMOD1(NVIBR) SEGMENT ICHRHS(NVIBR) LOGICAL LVIBC NMXELM=2 IPT8=0 ISOUCI=0 IVERIF=0 NOEN=1 NVIBR=1 ICORR=0 SEGACT IDEME0,IDEME1 SEGINI ICMODE,ICMOD1,ICHRHS SEGACT ICMODE*MOD,ICMOD1*MOD,ICHRHS*MOD ICMODE(1)=ICMODR IF (LVIBC) THEN NVIBR=2 SEGADJ ICMODE,ICMOD1,ICHRHS ICMODE(2)=ICMODI ENDIF C------------------------------------------------------- *C LA SOLUTION EST CALCULEE --> ON LA MET EN FORME MRIGID=IPRIGI IELIM=NELIM DO IFOIS=1,NMXELM SEGACT MRIGID MRIGID=JRSUP IF(MRIGID.EQ.0) GOTO 999 segact mrigid ri6 = jrdepp ri2 = jrgard ri1 = jrelim DO IR=1,NVIBR MCHPOI=ICMODE(IR) C----------------------- * reintroduction des inconnues supprimees mchpo1=ideme1(1,IELIM) mchpo1=iret segact mchpo1*mod mchpo1.jattri(1)=1 SEGDES MCHPO1 ICMODE(IR)=MCHPO1 C ------------- deplacements complets: sur k uniquement mchpo2=ichp5 mchpo4=ichp5 segact mchpo4*mod mchpo4.jattri(1)=1 SEGDES MCHPO4 ICMOD1(IR)=MCHPO4 ENDDO C ------------- deplacements complets * outre K*phi, le reste est mis dans le second membre * au final on aura dans le rhs ICHRHS + izero C* Cas reel: on a M*(w**2)*phi dans le second membre IF (.NOT. LVIBC) THEN IMR=ICMODE(1) ICHRHS(1)=ICMMR * Cas complexe : attention a l algebre !!! * Partie reelle : C*[wI*phiR-wR*phiI] - M*[(wR**2-wI**2)*phiR+2*wR*wI*phiI] * Partie imaginaire : C*[wI*phiI-wR*phiR] + M*[(wR**2-wI**2)*phiI+2*wR*wI*phiR] ELSE IMR=ICMODE(1) IMI=ICMODE(2) ICHRHS(1)=ICRHSR ICHRHS(2)=ICRHSI ENDIF IZERO=IDEME0(1,IELIM) DO IR=1,NVIBR C ------- WRite(6,*) ' --------- KU - F ' ichp5=ICMOD1(IR) ichp6=ICHRHS(IR) ** verif on a bien l'equilibre * if (IELIM.eq.1.and.iverif.eq.1) then * call mucpri(ichp7,ri1,ichp3) * call adchpo(iret,ichp3,ichp4,1D0,1D0) * call dtchpo(iret) * iptt=0 * if(noen.eq.1) iptt=ipt8 * call vechpo(ichp5,ichp6,ichp4,ipt8,isouci) * call dtchpo(ichp3) * call dtchpo(ichp4) * endif * call dtchpo(ichp5) * call dtchpo(ichp6) if (ierr.ne.0) return ichp8=ICMODE(IR) mchpoi=iret * supression des multiplicateurs dedoubles lagdua=imlag if (lagdua.gt.0) then * WRite(6,*) ' appel a dbbcf lagdua ',lagdua ipt1=lagdua endif * WRite (6,*) ' mchpoi en fi de resour' * segact mchpoi * call ecchpo(mchpoi,0) * les champs de points qui sortent sont de nature diffuse SEGACT MCHPOI NAT = MAX(1,JATTRI(/1)) NSOUPO=IPCHP(/1) SEGADJ MCHPOI JATTRI(1)=1 IRET = MCHPOI * idemem(i)=iret ICMODE(IR)=IRET END DO IELIM=IELIM-1 ENDDO 999 CONTINUE ICMODR=ICMODE(1) IF (NVIBR.EQ.2) THEN ICMODI=ICMODE(2) ENDIF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales