Open onurulku23 opened 4 years ago
@onurulku23 merhabalar, Kodunuzu inceledim, güzel bir çalışma yapmışsınız. Sizler için bir Project açayım mı? Görselleştirme ile ilgili geliştirmeyi orada devam edebiliriz.
++Ahmet
@ahmetanildindar merhaba hocam,
Olur çok seviniriz. Elimizden geldiğince oradan güncellemeye çalışırız. İlginiz için de teşekkür ederiz.
Onur
Onur ikinci yazdığın kodda deprem kaydı okuturken "yapi.earthquakeData("depremkaydi.csv",",") " kısmında sorun yaşıyorum. Okuttuğun deprem kaydı tek bir kolon şeklinde ivme dosyası mıdır? Ve ondalık ayracı virgül müdür?
@msyavas evet maalesef şuanlık sadece tek bir kolonu okuyabilecek şekilde. Ondalık ayıracı ise nokta olması lazım. Koddaki virgül ise her bir sayının birbirinden ayrılmasını gösteriyor. Eğer sayılar alt alta yazılmış ve hiç bir ayraç kullanılmamışsa virgül yerine boşluk bırakılması lazım.
@msyavas aslında tek kolon olarak demiyelim de mesela yan yana yazılmış ise de ayraç olarak ne kullanılmışsa onu tırnaklı yere girmemiz gerekiyor. Yalnız tırnaklı şekilde yazılmış olduğuna dikkat etmemiz lazım yoksa hata verir.
Deprem kayıtlarının olduğu dosyalarda temel olarak iki konu vardır.
Genel çözüm yaklaşımı
Buna göre çok kolonlu veriyi işleme almak için beraber bir sınıf yaratalım mı?
Değerli Hocalarım ve Arkadaşlarım Onur ve Alinin yazdığı koda Ahmet hocamızın yazdığı Modal Şekillerin Görselleştirilmesi kodunu uyarladım ve yine diğer issue da istediği gerçek yer değiştirmeleri hesaplayan bir kod yazdım. Kodun eksiklikleri veya hataları olabilir. Geliştirme konusunda tavsiyelerinizi ve yorumlarınızı bekliyorum.
def ModalShapes(self):
self.amp_fig = np.vstack([ np.zeros(self.storeynumber) , self.amp.T ])
fig, axs = plt.subplots(1, self.storeynumber , sharey=True , figsize=(10,5))
fig.subplots_adjust(hspace=0)
fig.suptitle("Mode Shapes", fontsize=18)
for i in range(self.storeynumber):
axs[i].plot( np.zeros(self.storeynumber+1) , np.arange(self.storeynumber+1) ,"grey" , marker="o")
axs[i].plot( self.amp_fig[:,i], np.arange(self.storeynumber+1) , "r",marker = "o",MS=10)
#axs[i].set_title(f"$wn$ = {round(self.wn_matrix[i],2)}Hz & $wd$={wd_matrix[i]}\nT = {round(T[i],2)}sn")
axs[i].set_ylim(0)
axs[i].grid()
axs[i].title.set_text("Mode" + " " +str(i+1))
#print(self.amp[i]/self.amp[:,-1])
def RealDisplacements(self):
q_i=[]
q_dot_i=[]
qt=np.zeros((self.storeynumber,int(self.finaltime/self.stepsize)))
A=np.zeros((self.storeynumber,int(self.finaltime/self.stepsize)))
B=np.zeros((self.storeynumber,int(self.finaltime/self.stepsize)))
small=1e-7
ut=[]
fig, axs = plt.subplots(1, self.storeynumber , sharey=True , figsize=(10,5))
for i in range(self.storeynumber):
plt.figure()
a=self.amp[i]/self.amp[i][-1]
q_i.append(int(np.dot(np.dot(self.amp[i]/self.amp[i][-1],self.m_matrix),self.u))/ (np.dot(np.dot(self.amp[i]/self.amp[i][-1],self.m_matrix),self.amp[i]/self.amp[i][-1])))
q_dot_i.append(int(np.dot(np.dot(self.amp[i]/self.amp[i][-1],self.m_matrix),self.u_dot))/ (np.dot(np.dot(self.amp[i]/self.amp[i][-1],self.m_matrix),self.amp[i]/self.amp[i][-1])))
for time in np.arange(0,self.finaltime+self.stepsize,self.stepsize):
coll=int((time+small)/self.stepsize)-1
qt[i,coll]=(np.array(np.dot(q_i[i],np.cos(self.wn[i]*time)))+np.dot(np.divide(q_dot_i[i],self.wn[i]),np.sin(self.wn[i]*time )))
for j in range(self.storeynumber):
axs[i].legend()
axs[i].plot(np.arange(0,self.finaltime,self.stepsize),a[j]*qt[i])
label=[label+1 for label in range(self.storeynumber)]
axs[i].set_xlabel("Time")
axs[i].set_ylabel("True Displacement")
axs[i].legend(label)
axs[i].title.set_text("Mode" + " " +str(i+1))
çalıştırmak için aşağıdaki kodu kullanabilirsiniz
from yedi_katli_MDOF2 import *
import matplotlib.pyplot as plt
import numpy as np
yapi=Yapi([2,4,3], [2,4,3],[[1],[2],[3]],[[0],[0],[0]],3,10,0.01)
yapi.rigidityMatrix()
yapi.massMatrix()
yapi.naturalFrequency()
yapi.dampingRatio(0)
yapi.dampingMatrix()
yapi.amplitudeCalc()
yapi.generalMassMat()
yapi.generalStiffnessMat()
yapi.generalDampingMat()
yapi.modeParticipatingFactor()
yapi.effectiveParticipatingMass()
yapi.earthquakeData("depremkaydi.csv",",")
yapi.spectra1()
yapi.psuedoAcceleration()
yapi.baseShear()
yapi.baseShearSRSS()
yapi.ModalShapes()
yapi.RealDisplacements()
Merhaba, Ali (@alitatici) ile ben yaptığımız Python algoritmasını sizlerle paylaşmak istedik. Elimizden geldiğince düzenlemeye ve iş görür hale getirmeye çalıştık. Programla birlikte bir yapının modal analizini yapmakla beraber taban kesme kuvvetini SRSS yöntemiyle de bulduk. Maalesef yoğunluk nedeniyle henüz bir arayüz oluşturamadık ve bir çok eksiği var bunları sizinle iş birliği içerisinde tamamlamak isteriz. Fakat bazı arkadaşlarımız için anlaması zor olabilir. Böyle bir durumda bizimle iletişime geçebilirsiniz. Geliştirme kısmında bize yardımcı olursanız tekrardan çok seviniriz. Hepinize iyi çalışmalar.
Alttaki ise, yukardaki kodu çalıştırabilmeniz için gerekli olan python dosyası. yapi kısmında ilk demet kütle, ikinci demet rijitlik, üçüncü yere de kat sayınızı yazarsanız uygulama çalışır. Bir de dampingRatio kısmında sönümünüzü girmeniz gerekiyor. Ayrıca EarthquakeData da ise tırnak içerisinde kaydınızı girmeniz ve deprem kaydınız hangi ayraç ile ayrılmış ise parantez içerisinde o ayracı kullanmanız gerekiyor.