Abaqus中Fortran子程序的調試方法 附ABAQUS2020關聯Fortran下載

近兩年,收到許多同學關于Abaqus軟件使用過程中Fortran子程序調試的問題,在的錯誤面前許多初學者無從下手,不知如何去查找問題所在。本文將對Abaqus中子程序的調試方法以及如何對錯誤進行預警做一個簡單的介紹。

通過總結各類錯誤問題,大致可以把子程序編寫過程中的常見錯誤歸為三類:模型錯誤、語法錯誤和邏輯錯誤。

  • (一)模型錯誤:

有限元模型中自身材料、截面屬性、網格類型、網格劃分方式、接觸設置、邊界/載荷設置、輸出設置、軟件子程序配置等引起的錯誤,非子程序本身的錯誤。此類錯誤一般會在任務監控界面下的ErrorWarning欄中有具體提示。

模型錯誤屬于有限元模型常規建模錯誤,可以先使用非子程序模型予以測試,排除建模錯誤之后,再改為子程序計算模型。該類錯誤屬于最容易解決的一類。

Abaqus中Fortran子程序的調試方法 附ABAQUS2020關聯Fortran下載的圖1

(二)語法錯誤:


在使用FORTRAN編寫子程序時,使用了非法的語句或者非法的格式,而引起的錯誤。該類錯誤會直接在任務監控界面提示Error:Problem during compilation編譯出錯。如下圖所示。

Abaqus中Fortran子程序的調試方法 附ABAQUS2020關聯Fortran下載的圖2

具體的語法錯誤內容將會顯示在與任務名同名的XXX.log文件中,該文件位于Abaqus當前的工作目錄,語法錯誤點及所在行數都有明確的提示。

例如,將以下代碼中第29行注釋掉,第28行的語句被打斷,變得不完整,將會有哪些提示信息呢?提示信息又將在哪里顯示呢?

Abaqus中Fortran子程序的調試方法 附ABAQUS2020關聯Fortran下載的圖3

使用文本編輯軟件(notepad++或UE等)將log文件打開,可以考單提示信息如下,具體的錯誤類型和錯誤位置都有明確的提示:

Abaqus中Fortran子程序的調試方法 附ABAQUS2020關聯Fortran下載的圖4

語法錯誤是許多子程序初學者經常會犯的錯誤,按照上述方式就可以快速定位錯誤位置了,至于基本的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文件中(或命令提示窗口),根據打印出來的數據信息,逐個檢查有問題的數據,進而判斷錯誤在哪里?一般應從前到后,從主程序到子程序,一個代碼塊一個代碼塊順序檢查,直至檢查到程序最后,所有數據均正常。打印效果如下:

Abaqus中Fortran子程序的調試方法 附ABAQUS2020關聯Fortran下載的圖5


除了print之外,也通過write命令將數據打印輸出到指定文件中,如error.dat

根據打印出來的數據信息,逐個檢查有問題的數據,進而判斷錯誤在哪里?


open(unit=10, file=‘error.dat') 

打開error.dat文件,unit指定文件代碼,file指定文件名稱

write(10, *)  "hello" ,SDV1 ,X,Y,Z

!在文件中寫入hello及多個變量

預警提示

有些情況下,錯誤是可以預計的,即在某種條件下,數據自然會出現異常,因此,可以提前在可能出現錯誤的地方給予相應的錯誤提示信息。例如,下面的公式:

Abaqus中Fortran子程序的調試方法 附ABAQUS2020關聯Fortran下載的圖6

正常情況下,d為正數,因此,當x<=y時,應在程序中給出錯誤提示信息。在程序執行過程中,如果出現了該類型提示,就可以直接判斷出問題出現的位置。


if ( x .le. y) then

    print*,"d不是正數,請檢查數據"  

end if 

下載地址:ABAQUS2020關聯Fortran2020&VS2019


登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

3
1
19