九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Abaqus Fortran子程序的調(diào)試攻略(一)

今日無(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ò)誤

在使用FORTRAN編寫(xiě)子程序時(shí),使用了非法的語(yǔ)句或者非法的格式,而引起的錯(cuò)誤。該類(lèi)錯(cuò)誤會(huì)直接在任務(wù)監(jiān)控界面提示Error:Problem during compilation編譯出錯(cuò)。如下圖所示。
具體的語(yǔ)法錯(cuò)誤內(nèi)容將會(huì)顯示在與任務(wù)名同名的XXX.log文件中,該文件位于Abaqus當(dāng)前的工作目錄,語(yǔ)法錯(cuò)誤點(diǎn)及所在行數(shù)都有明確的提示。

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

使用文本編輯軟件(notepad++或UE等)將log文件打開(kāi),可以看到提示信息如下,具體的錯(cuò)誤類(lèi)型和錯(cuò)誤位置都有明確的提示:


語(yǔ)法錯(cuò)誤是許多子程序初學(xué)者經(jīng)常會(huì)犯的錯(cuò)誤,按照上述方式就可以快速定位錯(cuò)誤位置了,至于基本的Fortran語(yǔ)言語(yǔ)法,可以參照應(yīng)的語(yǔ)法書(shū)。

在排除模型錯(cuò)誤之后,應(yīng)優(yōu)先解決語(yǔ)法錯(cuò)誤,此類(lèi)錯(cuò)誤,直觀明了,容易查找,也容易修改。

03


邏輯錯(cuò)誤

模型自身沒(méi)有人為建模錯(cuò)誤,子程序語(yǔ)法也沒(méi)有問(wèn)題,模型可以調(diào)用子程序順利計(jì)算,但計(jì)算結(jié)果明顯異?;蛘邉傄婚_(kāi)始計(jì)算就跳出,沒(méi)有明確的錯(cuò)誤原因,log文件中也查找不到明確的錯(cuò)誤提示。這一類(lèi)錯(cuò)誤,暫歸結(jié)為邏輯錯(cuò)誤。一般是由于公式推導(dǎo)有誤、書(shū)寫(xiě)筆誤、數(shù)據(jù)格式混亂、分母為0等情況導(dǎo)致。

邏輯錯(cuò)誤是子程序編寫(xiě)過(guò)程中最常見(jiàn)的一類(lèi)錯(cuò)誤,且十分隱秘,不易察覺(jué),調(diào)試起來(lái)費(fèi)時(shí)費(fèi)力。

常見(jiàn)邏輯錯(cuò)誤類(lèi)型有以下幾種:
  • 個(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)題的變量

例如,將某些變量打印出來(lái):

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

通過(guò)print打印出來(lái)的數(shù)據(jù)將顯示在Abaqus當(dāng)前工作目錄下與任務(wù)名同名的log文件中(或命令提示窗口),根據(jù)打印出來(lái)的數(shù)據(jù)信息,逐個(gè)檢查有問(wèn)題的數(shù)據(jù),進(jìn)而判斷錯(cuò)誤在哪里?一般應(yīng)從前到后,從主程序到子程序,一個(gè)代碼塊一個(gè)代碼塊順序檢查,直至檢查到程序最后,所有數(shù)據(jù)均正常。打印效果如下:

除了print之外,也通過(guò)write命令將數(shù)據(jù)打印輸出到指定文件中,如error.dat,根據(jù)打印出來(lái)的數(shù)據(jù)信息,逐個(gè)檢查有問(wèn)題的數(shù)據(jù),進(jìn)而判斷錯(cuò)誤在哪里?

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ò)誤提示信息。例如,下面的公式:

正常情況下,d為正數(shù),因此,當(dāng)x<=y時(shí),應(yīng)在程序中給出錯(cuò)誤提示信息。在程序執(zhí)行過(guò)程中,如果出現(xiàn)了該類(lèi)型提示,就可以直接判斷出問(wèn)題出現(xiàn)的位置。

if ( x .le. y) then
    print*,"d不是正數(shù),請(qǐng)檢查數(shù)據(jù)"  
end if 
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Abaqus中的二次開(kāi)發(fā)
Fortran基本用法小結(jié)
Abaqus焊接模擬—基于Fortran的移動(dòng)熱源子程序
ABAQUS 2020科學(xué)安裝方法及子程序關(guān)聯(lián)
[二次開(kāi)發(fā)]Abaqus子程序VUAMP若干講解(1)
《編譯原理簡(jiǎn)明教程》PPT 第12章
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服