Abaqus中Fortran子程序的調試方法 附ABAQUS2020關聯Fortran下載
近兩年,收到許多同學關于Abaqus軟件使用過程中Fortran子程序調試的問題,在的錯誤面前許多初學者無從下手,不知如何去查找問題所在。本文將對Abaqus中子程序的調試方法以及如何對錯誤進行預警做一個簡單的介紹。
通過總結各類錯誤問題,大致可以把子程序編寫過程中的常見錯誤歸為三類:模型錯誤、語法錯誤和邏輯錯誤。
(一)模型錯誤:
有限元模型中自身材料、截面屬性、網格類型、網格劃分方式、接觸設置、邊界/載荷設置、輸出設置、軟件子程序配置等引起的錯誤,非子程序本身的錯誤。此類錯誤一般會在任務監控界面下的Error或Warning欄中有具體提示。
模型錯誤屬于有限元模型常規建模錯誤,可以先使用非子程序模型予以測試,排除建模錯誤之后,再改為子程序計算模型。該類錯誤屬于最容易解決的一類。
(二)語法錯誤:
在使用FORTRAN編寫子程序時,使用了非法的語句或者非法的格式,而引起的錯誤。該類錯誤會直接在任務監控界面提示Error:Problem during compilation編譯出錯。如下圖所示。
具體的語法錯誤內容將會顯示在與任務名同名的XXX.log文件中,該文件位于Abaqus當前的工作目錄,語法錯誤點及所在行數都有明確的提示。
例如,將以下代碼中第29行注釋掉,第28行的語句被打斷,變得不完整,將會有哪些提示信息呢?提示信息又將在哪里顯示呢?
使用文本編輯軟件(notepad++或UE等)將log文件打開,可以考單提示信息如下,具體的錯誤類型和錯誤位置都有明確的提示:
語法錯誤是許多子程序初學者經常會犯的錯誤,按照上述方式就可以快速定位錯誤位置了,至于基本的Fortran語言語法,可以參照響應的語法書。
在排除模型錯誤之后,應優先解決語法錯誤,此類錯誤,直觀明了,容易查找,也容易修改。
(三)邏輯錯誤:
模型自身沒有人為建模錯誤,子程序語法也沒有問題,模型可以調用子程序順利計算,但計算結果明顯異常或者剛一開始計算就跳出,沒有明確的錯誤原因,log文件中也查找不到明確的錯誤提示。這一類錯誤,暫歸結為邏輯錯誤。一般是由于公式推導有誤、書寫筆誤、數據格式混亂、分母為0等情況導致。
邏輯錯誤是子程序編寫過程中最常見的一類錯誤,且十分隱秘,不易察覺,調試起來費時費力。
常見邏輯錯誤類型有以下幾種:
個別變量未聲明或者聲明類型與實際數據類型不一致
主程序實參維度與子程序形參維度不一致
分母為0
If 判斷語句位置不復合正常邏輯
無限循環
引用位置超出數組自身范圍
理論公式代碼化的過程中編寫有誤
針對邏輯錯誤,建議如下:
應對措施:從前到后,從主程序到子程序,逐個代碼塊進行檢查
檢查方式:監控打印疑似有問題的變量
例如,將某些變量打印出來:
print * ,NOEL,dft,dmt,dfc,dmc
!輸出多個單變量
print *,stress(1:6)
!輸出數組strss
print*,‘F1=’,F1,‘F2=’,F2
!輸出變量及提示信息
do ii=1,6
print*,int(C0 (ii,1:6))
end do
!輸出6*6矩陣C0
通過print打印出來的數據將顯示在Abaqus當前工作目錄下與任務名同名的log文件中(或命令提示窗口),根據打印出來的數據信息,逐個檢查有問題的數據,進而判斷錯誤在哪里?一般應從前到后,從主程序到子程序,一個代碼塊一個代碼塊順序檢查,直至檢查到程序最后,所有數據均正常。打印效果如下:
除了print之外,也通過write命令將數據打印輸出到指定文件中,如error.dat,
根據打印出來的數據信息,逐個檢查有問題的數據,進而判斷錯誤在哪里?
open(unit=10, file=‘error.dat')
! 打開error.dat文件,unit指定文件代碼,file指定文件名稱。
write(10, *) "hello" ,SDV1 ,X,Y,Z
!在文件中寫入hello及多個變量
預警提示
有些情況下,錯誤是可以預計的,即在某種條件下,數據自然會出現異常,因此,可以提前在可能出現錯誤的地方給予相應的錯誤提示信息。例如,下面的公式:
正常情況下,d為正數,因此,當x<=y時,應在程序中給出錯誤提示信息。在程序執行過程中,如果出現了該類型提示,就可以直接判斷出問題出現的位置。
if ( x .le. y) then
print*,"d不是正數,請檢查數據"
end if
下載地址:ABAQUS2020關聯Fortran2020&VS2019
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















