PFC導入地震波加載
這串個案例的核心其實有兩個,一個是如何從外部讀取數據,一個是如何將加速度轉化為速度給墻體。
一、外部導入地震波
我們可以在網頁上搜索經典的地震波曲線,比如下面這個就是百度搜到的([轉載]常用地震波數據匯總(72448地震波-hach.txt)_THheat_新浪博客 (sina.com.cn)):
其實我們仔細看一下時間的數據是一個等差數列,這是因為采樣的時候我們都是每隔相等的時間采集一個加速度值。所以第一列數據我們是不需要的,我們需要第二列數據的加速度值,可以copy下來存儲為一個txt文件。如下
把這個txt文件放入我們的項目目錄中,后面進行調用。
然后我們看一下導入文件的代碼:
def fileInarray jiasudu(2000)fp=file.open.pointer("jiasudu1.txt",0,1)file.read(jiasudu,1000,fp)file.close()end@fileIn
這個其實是比較簡單的,首先我們需要用一個數組(array)來作為容器存儲數據,這個容器的大小肯定是不能比你讀取的數據要小的。
第二行是打開文件的命令,第二個參數0的意思是這個文件是用來讀取的,第三個參數1的意思是編碼格式,對應的ASCII碼,文本格式的文件讀取都可以用這個,二進制文件用2,fish文件格式用0。
第三行是讀取文件了,這個100是讀取100個數據。
讀取完后注意要關閉文件。
二、施加地震波
加速度對時間積分可以得到速度,這個積分的數值實現研一的數值分析課都學過。我們就簡單的認為某個時間區間內加速度是恒定的,那么:
V2=V1+A*detaT
這里V2為當前時間對應的速度,V1為上一個時間對應的速度,A為加速度,detaT為這兩個時間點間的時間差。
首先我們可以使用跳躍結構來得到當前時間對應的加速度,即addVel,然后再每個cycle中疊加速度,對于一個cycle來說,時間的差值就是timestep。需要注意的是array里面存放的數據是string,需要用float來轉化為浮點數。
[][][][]def updataVelwhilesteppingtime=mech.ageif time>time_record+0.01 thenaddVel=jiasudu(count)time_record=timecount+=1endif; V2=V1+detaT*awall.vel.y(wp)= wall.vel.y(wp)+float(addVel)*global.timestepend
我們可以監測一下速度:
def jiancewhilesteppingwallVel= wall.vel.y(wp)endhistory deletehistory id 1 @timehistory id 2 @wallVelsolve time 10
可以看一下結果,墻體的變化還是我們所預想的。
因為加速度比較小,而且我們的阻尼系數比較大,所以邊坡的反應并不是很大。邊坡的反應并不是這篇文章的重點,提出的這種加載地震波的方式是可以參考一下的,感興趣的話積分方法可以采用數值分析中介紹的方法去優化。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















