Matlab-python-ABAQUS數據交互及聯合使用

在Matlab可以方便地實現各種優化算法,ABAQUS可以方便地進行有限元建模及求解,有時候兩者結合可以更方便做一些自己想做的事,例如通過遺傳算法,神經網絡等算法進行參數反演,確定本構模型的參數。ABAQUS/CAE的內核語言是Python,通過Python可以方便地讀取ABAQUS的結果數據庫odb的數據。這裏介紹一些關於如何進行三者的交互,編寫交互的方法與經驗。關於ABAQUS中odb的數據結構這裏就不多說,參考相關書籍。在這裏插入圖片描述通過matlab提交inp文件給ABAQUS計算

可以在matlab裏面直接通過系統調用向ABAQUS提交計算文件及相關計算參數,包括用戶子程序,cpu數量等。下面是一個函數接口。

接口函數例子:在這裏插入圖片描述runabaqus(Path,UserFile,InpFile,cpus):
這是一個Matlab接口函數,同時也是實現程序。功能是根據指定參數向ABAQUS提交計算文件,並監測ABAQUS計算過程。參數列表(Path,userFile,InpFile,cpus)含義分別爲:
1)Path:inp計算文件所在的絕對路徑。
2)UserFile:用戶Fortran子程序,如果有子程序就給子程序的文件名,沒有的話就不要這個參數,把runabaqus的一行代碼inputFile=[‘abaqus job=’,InpFile,’ user=’,userFile,’ cpus=’,cpus],改爲inputFile=[‘abaqus job=’,InpFile,’ cpus=’,cpus]。
3)InpFile:inp計算文件的文件名。
4)cpus:指定ABAQUS求解器使用的cup數量。

其實只需一條命令,system(abaqus job=Inpfile )就可以完成提交計算文件,其他都是輔助,使接口函數適用性更好,把實現方法封裝起來。有了接口函數,在matlab定義好相關參數,調用接口就行。

應用例子:在這裏插入圖片描述
—matlab利用python腳本讀取odb數據

思路是:matlab把讀取數據的要求寫入個txt文件(這裏是req.txt),調用python腳本,python腳本讀取odb的結果數據,並寫入另一個txt文件(這裏是RF3.txt),matlab再從txt文件讀取數據。首先編寫python接口函數,實現從odb提取特定的結果數據。

例子:讀取一個參考點的反力RF3
在這裏插入圖片描述在這裏插入圖片描述這是一個python程序,是get_history_output接口的功能實現程序,被get_history_output接口函數調用。其功能是讀取req.txt裏的參數,按照設定的參數讀取odb數據庫,並把結果寫入”結果關鍵字.txt”文件,例如讀取的是反力RF3時,其結果會被寫入”RF3.txt”文件,以供其他程序使用。

有了python腳本就可以在matlab裏調用它來讀取ABAQUS的結果數據。當然在matlab裏要指定odb文件名,部件名,節點名稱等信息,爲了把實現封裝起來,也把調用python腳本的matlab程序寫成一個函數get_history_output。

調用python腳本的matlab函數:
在這裏插入圖片描述get_history_output(Path,OdbFile,step,req)說明:
這是一個matlab接口函數,實現程序是python程序odbHistoryOutput.py。get_history_output的功能是將用戶指定的參數寫入req.txt文件,調用odbHistoryOutput.py程序讀取ABAQUS結果數據庫odb的結果數據。(Path,OdbFile,step,req)參數列表含義分別爲:
1)Path:odb文件所在的絕對路徑。
2)OdbFile:odb數據庫的文件名。
3)step:指定讀取的分析步。
4)req:讀取數據的要求,包括部件名、節點名、結果關鍵字,例如,req定義如下:
req=’PLATEN-1, Node PLATEN-1.5322,RF3’;
則指明瞭程序去讀取部件名爲PLATEN-1,節點名Node PLATEN-1.5322的反力RF3。注意,與歷史變量相關的節點名是系統命名的,但是這些節點名有一定的規律,總是這樣的形式“Node+空格+instance name.節點號”。

這裏的參數(Path,OdbFile,step,req)是讀取odb結果需要的,先把它們寫入到req.txt文件,供上面的python腳本odbHistoyOutput.py讀取。其中showlogfile函數顯示python運行時輸出的信息,這些信息保存在pylog.txt文件中。該函數的實現在另一篇博客Matlab目錄操作及fgetl函數已經介紹。

那麼在matlab裏就可以指定odb相關信息,調用上面的函數來get_history_output獲得odb數據。

應用例子:在這裏插入圖片描述特別說明
這裏與歷史變量輸出的節點或節點集的名稱與你在step裏設置歷史結果輸出指定的節點名是不一樣的,與歷史變量相關的節點名是系統命名的,這裏只有用系統命名的節點名作爲參數,才能正確讀取所要的歷史結果輸出。但是這些節點名有一定的規律,總是這樣的形式“Node+空格+instance name.節點號”,例如我的模型裏有一個部件叫PLATEN-1,定義了一個參考點,並把它設置爲一個set,在step裏設置了輸出它的反力RF3,並且我知道了它的的節點號是5322,那麼我設置歷史結果相關的節點名稱是就是“Node PLATEN-1.5322”。
運行程序後,首先matlab把參數寫入req.文件。req.txt記錄了指定的相關參數,以逗號隔開,每個參數,如下:在這裏插入圖片描述然後matlab調用python腳本odbHistoyOutput.py,讀取odb數據。odb首先讀取req.txt的參數,然後再根據參數去讀取odb數據,把結果寫入ReqData(即RF3.txt),結果包含時間和反力RF3,如下(部分省略):
在這裏插入圖片描述這裏matlab與python腳本之間可能有比較的參數和數據需要傳遞,因此,我這裏先把要傳遞的參數和數據寫入特定的txt文件,然後再由另一程序去讀取。其次是這裏儘量把每個簡單的功能寫成函數,這樣有助於更容易調試程序,不斷添加新功能和集成。這就是增量式開發的思想。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章