def q3e(mo2=[], kj=1.e3, add_m=0.0): if type(mo2)==list: mo2 = load_poppy(pflag=0) M,K,Ks = matrix_assembly(mo2, add_m) [w,p] = mv.feeig(K+kj*Ks,M); f=w/(2.*np.pi); [w1,p1] = mv.feeig(K*100+kj*Ks,M); f1=w1/(2.*np.pi); print('f =',f[:4],'\nfr =',f1[:4],'\ndf =',(f1[:4]/f[:4]-1)*100.)
def q3d(mo2=[], idmode=1, add_m=0.0): if type(mo2)==list: mo2 = load_poppy(pflag=0) M,K,Ks = matrix_assembly(mo2, add_m) [w,p] = mv.feeig(K+100*Ks,M); X1=p[:,idmode-1:idmode]; #Shape of first mode [w1,p1] = mv.feeig(K+1000*Ks,M); f1=w1/(2.*np.pi) fr=np.sqrt(X1.T @ (K+1000*Ks) @ X1)/ (X1.T @ M @ X1) / (2.*np.pi) print(f1[0],fr[0,0],np.abs(f1[0]/fr[0,0]-1.)*100.)
def q1(mo2=[], kj=0., pflag=1): if type(mo2)==list: mo2 = load_poppy(pflag=0) # compute modes M,K,Ks = matrix_assembly(mo2) [w,phi] = mv.feeig(K+kj*Ks, M); f = w/(2.*np.pi) #def1=res(DOF=DOF,Def=p,data=f.reshape((13,1))) mo2.TR['val'] = mo2.TR['Def'] @ phi if pflag: feplot.writePARAVIEW(mo2,mo2.TR,filename='results1.vtk') return f, phi
def q3(mo2=[], add_m=0., Nk=20, pflag=0): if type(mo2)==list: mo2 = load_poppy(pflag=0) kj=np.logspace(2,6,Nk); M,K,Ks = matrix_assembly(mo2, add_m) xyplot=dict([('X',np.log10(kj)), ('Xlabel','log(ks)'),('Ylabel','Frequency'), ('Y',np.zeros((kj.size,mo2.TR['Def'].shape[1]))) ]) for j1 in range(kj.size): [w,phi]=mv.feeig(K+kj[j1]*Ks,M); f = w/(2.*np.pi) mo2.TR['val'] = mo2.TR['Def'] @ phi; xyplot['Y'][j1,:]=f if pflag: feplot.writePARAVIEW(mo2,mo2.TR,filename='results_KS{:2d}.vtk'.format(int(kj[j1]))) mv.plot2D(xyplot,yscale='log') return xyplot
def q4(mo2=[], kj=1.e3, add_m=430.0e-6): if type(mo2)==list: mo2 = load_poppy(pflag=0) xi=0.01;freq=np.linspace(0,300,5000);w=freq*2.*np.pi; M,K,Ks = matrix_assembly(mo2,add_m); in1=9;out1=[9,3,10]; [wk,pk]=mv.feeig(K+kj*Ks,M); xyplot=dict([('X',freq), ('Xlabel','Frequency'), ('Y',np.zeros((freq.size,2))),('Ylabel',['Amplitude','Moment']) ]) for j1 in range(len(w)): d1 = 1./(wk**2-w[j1]**2 + 2.j*xi*wk*w[j1] ); h1 = pk @ np.diag(d1) @ pk.T xyplot['Y'][j1,0]=np.abs(h1[3,3]);xyplot['Y'][j1,1]=np.abs(h1[3,10]) mv.plot2D(xyplot,yscale='log') #manque calcul de moment
def q2(mo2=[], kj=0., add_m=0., Nt=20, pflag=0): if type(mo2)==list: mo2 = load_poppy(pflag=0) theta=np.linspace(0,1,Nt)*90. xyplot=dict([('X',theta), ('Xlabel','Angle'), ('Ylabel','Frequency'), ('Y',np.zeros((theta.size,mo2.TR['Def'].shape[1]))) ]) for j1 in range(len(theta)): a=theta[j1] ROT = np.array([[1,0,0],[0,mv.cosd(a),mv.sind(a)],[0,-mv.sind(a),mv.cosd(a)]]) MROT = block_diag(ROT,ROT,ROT,ROT) M,K,Ks = matrix_assembly(mo2, add_m, MROT) #compute modes [w,phi] = mv.feeig(K+kj*Ks,M); f = w/(2.*np.pi) mo2.TR['val'] = mo2.TR['Def'] @ phi; xyplot['Y'][j1,:]=f if pflag: feplot.writePARAVIEW(mo2,mo2.TR,filename='results_TH{:2d}.vtk'.format(int(a))) mv.plot2D(xyplot,yscale='log',ylim=[3.0e0,1.0e3]) return xyplot
def q7b(nout=0): #%% parameters 2 DOF system pb = dict([ ('m', 1500.), ('a', 1.2), ('b', 1.4), #2 DOF ('ka', []), ('kb', []), ('k0', 40e3), #stiffness ('u0', [1., 0.]), ('v0', [1., 0.]), #initial conditions ('balanced', 1) ]) #%% Compute matrices of 2 DOF system if pb['balanced'] == 1: pb['ka'] = (pb['a'] + pb['b']) / pb['a'] * pb['k0'] pb['kb'] = (pb['a'] + pb['b']) / pb['b'] * pb['k0'] M = np.array([[pb['m'], 0], [0., pb['m'] * (pb['a'] + pb['b'])**2 / 2.]]) K = np.array( [[pb['ka'] + pb['kb'], -pb['a'] * pb['ka'] + pb['b'] * pb['kb']], [ -pb['a'] * pb['ka'] + pb['b'] * pb['kb'], pb['ka'] * pb['a']**2 + pb['kb'] * pb['b']**2 ]]) if nout == 0: print("M= ", M) print(' ') print("K= ", K) #%% determine modes (are these mass normalized ? see code in mevib.py) vals, vecs = feeig(K, M) if nout == 0: print("Eigenvalues (Hz): ", vals / 2 / np.pi) else: return pb, vals, vecs, M, K