今日無(wú)稿可推,推推老本
導(dǎo)讀
“ 在我所有的程序 Bug 中,80% 是語(yǔ)法錯(cuò)誤。剩下的 20% 中,80% 是不重要的邏輯錯(cuò)誤。剩下的 4% 中,80% 是指針錯(cuò)誤。最后剩下的 0.4% 是有難度的問(wèn)題。”
-MarcDonner,IBM Watson 研究中心
經(jīng)常收到讀者關(guān)于Abaqus軟件使用過(guò)程中Fortran子程序調(diào)試的問(wèn)題,在形形色色的錯(cuò)誤面前許多初學(xué)者無(wú)從下手,不知如何去查找問(wèn)題所在。本文將對(duì)Abaqus中子程序的調(diào)試方法以及如何對(duì)錯(cuò)誤進(jìn)行預(yù)警做一個(gè)簡(jiǎn)單的介紹。
通過(guò)總結(jié)各類(lèi)錯(cuò)誤問(wèn)題,大致可以把子程序編寫(xiě)過(guò)程中的錯(cuò)誤歸為三類(lèi):模型錯(cuò)誤、語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤。
01
—
模型錯(cuò)誤
有限元模型中自身材料、截面屬性、網(wǎng)格類(lèi)型、網(wǎng)格劃分方式、接觸設(shè)置、邊界/載荷設(shè)置、輸出設(shè)置、軟件子程序配置等引起的錯(cuò)誤,非子程序本身的錯(cuò)誤。此類(lèi)錯(cuò)誤一般會(huì)在任務(wù)監(jiān)控界面下的Error或Warning欄中有具體提示。
模型錯(cuò)誤屬于有限元模型常規(guī)建模錯(cuò)誤,可以先使用非子程序模型予以測(cè)試,排除建模錯(cuò)誤之后,再改為子程序計(jì)算模型。該類(lèi)錯(cuò)誤屬于最容易解決的一類(lèi)。
02
—
語(yǔ)法錯(cuò)誤
03
—
邏輯錯(cuò)誤
個(gè)別變量未聲明或者聲明類(lèi)型與實(shí)際數(shù)據(jù)類(lèi)型不一致
主程序?qū)崊⒕S度與子程序形參維度不一致
分母為0
If 判斷語(yǔ)句位置不符合正常邏輯
無(wú)限循環(huán)
引用位置超出數(shù)組自身范圍
理論公式代碼化的過(guò)程中編寫(xiě)有誤
針對(duì)邏輯錯(cuò)誤,建議如下:
應(yīng)對(duì)措施:從前到后,從主程序到子程序,逐個(gè)代碼塊進(jìn)行檢查
檢查方式:監(jiān)控打印疑似有問(wèn)題的變量
print * ,NOEL,dft,dmt,dfc,dmc
!輸出多個(gè)單變量
print *,stress(1:6)
!輸出數(shù)組stress
print*,'F1=’,F1,'F2=’,F2
!輸出變量及提示信息
do ii=1,6
print*,int(C0 (ii,1:6))
end do
!輸出6*6矩陣C0
open(unit=10, file='error.dat')
! 打開(kāi)error.dat文件,unit指定文件代碼,file指定文件名稱(chēng)。
write(10, *) "hello" ,SDV1 ,X,Y,Z
!在文件中寫(xiě)入hello及多個(gè)變量
04
—
提示預(yù)警
有些情況下,錯(cuò)誤是可以預(yù)計(jì)的,即在某種條件下,數(shù)據(jù)自然會(huì)出現(xiàn)異常,因此,可以提前在可能出現(xiàn)錯(cuò)誤的地方給予相應(yīng)的錯(cuò)誤提示信息。例如,下面的公式:
聯(lián)系客服