ANSYS基于VC++6.0的二次開(kāi)發(fā)ANSYS基于VC++6.0的二次開(kāi)發(fā)與 相互作用分析在ANSYS中的實(shí)
ANSYS基于VC++6.0的二次開(kāi)發(fā)ANSYS基于VC++6.0的二次開(kāi)發(fā)與
相互作用分析在ANSYS中的實(shí)現(xiàn) (轉(zhuǎn)貼)
1 概述
ANSYS是一套功能十分強(qiáng)大的有限元分析軟件,能實(shí)現(xiàn)多場(chǎng)及多場(chǎng)耦合分析;是實(shí)現(xiàn)前后處理、求解及多場(chǎng)分析統(tǒng)一數(shù)據(jù)庫(kù)的一體化大型FEA軟件;支持異種、異構(gòu)平臺(tái)的網(wǎng)絡(luò)浮動(dòng),在異種、異構(gòu)平臺(tái)上用戶界面統(tǒng)一、數(shù)據(jù)文件全部兼容,強(qiáng)大的并行計(jì)算功能支持分布式并行及共享內(nèi)存式并行。該軟件具有如下特點(diǎn):
(1) 完備的前處理功能
ANSYS不僅提供了強(qiáng)大的實(shí)體建模及網(wǎng)格劃分工具,可以方便地構(gòu)造數(shù)學(xué)模型,而且還專(zhuān)門(mén)設(shè)有用戶所熟悉的一些大型通用有限元軟件的數(shù)據(jù)接口(如MSC/NSSTRAN,ALGOR,ABAQUS等),并允許從這些程序中讀取有限元模型數(shù)據(jù),甚至材料特性和邊界條件,完成ANSYS中的初步建模工作。此外,ANSYS還具有近200種單元類(lèi)型,這些豐富的單元特性能使用戶方便而準(zhǔn)確地構(gòu)建出反映實(shí)際結(jié)構(gòu)的仿真計(jì)算模型。
(2) 強(qiáng)大的求解器
ANSYS提供了對(duì)各種物理場(chǎng)量的分析,是目前唯一能融結(jié)構(gòu)、熱、電磁、流體、聲學(xué)等為一體的有限元軟件。除了常規(guī)的線性、非線性結(jié)構(gòu)靜力、動(dòng)力分析外,還可以解決高度非線性結(jié)構(gòu)的動(dòng)力分析、結(jié)構(gòu)非線性及非線性屈曲分析。提供的多種求解器分別適用于不同的問(wèn)題及不同的硬件配置。
(3) 方便的后處理器
ANSYS的后處理分為通用后處理模塊(POST1)和時(shí)間歷程后處理模塊(POST26)兩部分。后處理結(jié)果可能包括位移、溫度、應(yīng)力、應(yīng)變、速度以及熱流等,輸出形式可以有圖形顯示和數(shù)據(jù)列表兩種。
(4) 多種實(shí)用的二次開(kāi)發(fā)工具
ANSYS除了具有較為完善的分析功能外,同時(shí)還為用戶進(jìn)行二次開(kāi)發(fā)提供了多種實(shí)用工具。如宏(Marco)、參數(shù)設(shè)計(jì)語(yǔ)言(APDL)、用戶界面設(shè)計(jì)語(yǔ)言(UIDL)及用戶編程特性(UPFs),其中APDL(ANSYS Parametric Design Language)是一種非常類(lèi)似于Fortran77的參數(shù)化設(shè)計(jì)解釋性語(yǔ)言,其核心內(nèi)容為宏、參數(shù)、循環(huán)命令和條件語(yǔ)句,可以通過(guò)建立參數(shù)化模型來(lái)自動(dòng)完成一些通用性強(qiáng)的任務(wù);UIDL(User Interface Design Language)是ANSYS為用戶提供專(zhuān)門(mén)進(jìn)行程序界面設(shè)計(jì)的語(yǔ)言,允許用戶改變ANSYS的圖形用戶界面(GUI)中的一些組項(xiàng),提供了一種允許用戶靈活使用、按個(gè)人喜好來(lái)組織設(shè)計(jì)ANSYS圖形用戶界面的強(qiáng)有力工具;UPFs(User Programmable Features)提供了一套Fortran77函數(shù)和例程以擴(kuò)展或修改程序的功能,該項(xiàng)技術(shù)充分顯示了ANSYS的開(kāi)放體系,用戶不僅可以采用它將ANSYS程序剪裁成符合自己所需的任何組織形式(如可以定義一種新的材料,一個(gè)新的單元或者給出一種新的屈服準(zhǔn)則),而且還可以編寫(xiě)自己的優(yōu)化算法,通過(guò)將整個(gè)ANSYS作為一個(gè)子程序調(diào)用的方式實(shí)現(xiàn)。
鑒于上述特點(diǎn),近幾年來(lái),ANSYS軟件在國(guó)內(nèi)外工程建設(shè)和科學(xué)研究中得到了廣泛的應(yīng)用。但這些應(yīng)用大多局限于直接運(yùn)用ANSYS軟件進(jìn)行實(shí)際工程分析,對(duì)利用ANSYS提供的二次開(kāi)發(fā)工具進(jìn)行有限元軟件設(shè)計(jì)卻很少涉及。本文首次利用ANSYS軟件的二次開(kāi)發(fā)功能,以VC++6.0為工具,運(yùn)用APDL語(yǔ)言,對(duì)ANSYS進(jìn)行二次開(kāi)發(fā),編制框筒結(jié)構(gòu)-樁筏基礎(chǔ)-土相互作用體系與地震反應(yīng)分析程序。
2 程序杓頗勘?
針對(duì)某一實(shí)際工程問(wèn)題,ANSYS所提供的APDL語(yǔ)言可對(duì)ANSYS軟件進(jìn)行封裝。APDL語(yǔ)言即ANSYS軟件提供的參數(shù)化設(shè)計(jì)語(yǔ)言,它的全稱(chēng)是ANSYS Parametric Design Language。 使用APDL語(yǔ)言可以更加有效地進(jìn)行分析計(jì)算,可以輕松地進(jìn)行自動(dòng)化工作(循環(huán)、分支、宏等結(jié)構(gòu)),而且,它是一種高效的參數(shù)化建模手段。使用APDL語(yǔ)言進(jìn)行封裝的系統(tǒng)可以只要求操作人員輸入前處理參數(shù),然后自動(dòng)運(yùn)行ANSYS進(jìn)行求解。但完全用APDL編寫(xiě)的宏還存在弱點(diǎn)。比如用APDL語(yǔ)言較難控制程序的進(jìn)程,雖然它提供了循環(huán)語(yǔ)句和條件判斷語(yǔ)句,但總的來(lái)說(shuō)還是難以用來(lái)編寫(xiě)結(jié)構(gòu)清晰的程序。它雖然提供了參數(shù)的界面輸入,但功能還不是太強(qiáng),交互性不夠流暢。針對(duì)這種情況,本文用VC++6.0開(kāi)發(fā)框筒結(jié)構(gòu)-樁筏基礎(chǔ)-土相互作用有限元分析程序(簡(jiǎn)稱(chēng)LWS程序)。
本程序設(shè)計(jì)目標(biāo)是利用VC++6.0對(duì)ANSYS進(jìn)行封裝。用VC++6.0對(duì)ANSYS模擬框筒結(jié)構(gòu)-樁筏基礎(chǔ)-土相互作用進(jìn)行二次開(kāi)發(fā),用戶只需輸入諸如地震波、計(jì)算時(shí)間步長(zhǎng)、阻尼比等物理性能參數(shù)等,系統(tǒng)就能自動(dòng)調(diào)用ANSYS計(jì)算程序,自動(dòng)進(jìn)行網(wǎng)格劃分、地震動(dòng)加載以及自動(dòng)求解。該系統(tǒng)由于前臺(tái)開(kāi)發(fā)友好、方便、易用的人機(jī)交互界面,對(duì)復(fù)雜的、難于理解和掌握的ANSYS命令流進(jìn)行后臺(tái)封裝,因此,程序設(shè)計(jì)可讓即使從未認(rèn)真學(xué)習(xí)過(guò)ANSYS軟件的工程設(shè)計(jì)人員也能很好地借助本系統(tǒng)進(jìn)行結(jié)構(gòu)抗震性能有限元分析,具有較強(qiáng)的處理實(shí)際問(wèn)題能力。
用戶輸入計(jì)算參數(shù),即可調(diào)用后臺(tái)的ANSYS命令進(jìn)行計(jì)算,ANSYS把計(jì)算結(jié)果返回給用戶,進(jìn)行后處理。
程序設(shè)計(jì)的主要原則和功能如下:
(1)方便原則,即程序模塊應(yīng)具有良好的用戶界面和易用性。程序前臺(tái)設(shè)計(jì)采用Windows提供的標(biāo)準(zhǔn)圖形用戶界面(GUI),用戶無(wú)須接受專(zhuān)門(mén)訓(xùn)練即可使用。同時(shí),程序應(yīng)具有良好的容錯(cuò)和糾錯(cuò)能力,避免用戶操作不當(dāng)造成損失。
(2)程序系統(tǒng)能夠提供用戶以下功能:
①允許用戶可以根據(jù)實(shí)際計(jì)算工況,輸入特定的計(jì)算參數(shù),包括地震波選擇、計(jì)算時(shí)間步長(zhǎng)、地震波調(diào)幅與否等。
②用戶在輸入各種參數(shù)以后、進(jìn)行計(jì)算之前可以對(duì)輸入的數(shù)據(jù)進(jìn)行修改、添加和刪除操作,以保證輸入正確的參數(shù)。
③用戶通過(guò)界面調(diào)用后臺(tái)的ANSYS命令流進(jìn)行計(jì)算,能夠得到最后的計(jì)算結(jié)果文件,供用戶進(jìn)行后處理和結(jié)果分析。
④用戶可以添加新的功能或新的二次開(kāi)發(fā)以實(shí)現(xiàn)程序升級(jí)。
(3)程序應(yīng)具有良好的可移植性,不依賴(lài)于特定的硬件設(shè)備,只要能安裝ANSYS和VC++6.0的硬件環(huán)境都能使用本系統(tǒng),保證程序使用的廣泛性。
(4)程序代碼應(yīng)具有開(kāi)放性和可重用性。這樣,在進(jìn)一步的設(shè)計(jì)中,能保證設(shè)計(jì)者可以方便地對(duì)代碼進(jìn)行修改擴(kuò)充;同時(shí),提供一定的設(shè)計(jì)接口,新的設(shè)計(jì)者可以根據(jù)接口,無(wú)須對(duì)程序進(jìn)行大幅度的修改,就可以進(jìn)行新的開(kāi)發(fā),以適應(yīng)新的特殊要求。
程序的開(kāi)發(fā)平臺(tái)是Microsoft VC++6.0、ANSYS6.1,基于WindowsXP編程。程序?qū)崿F(xiàn)是利用微軟提供的Windows編程接口MFC和ANSYS公司的ANSYS/Multiphysics產(chǎn)品,采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。
3程序的主要模塊和設(shè)計(jì)
如圖3-2所示,程序的主要模塊有:用戶界面模塊、ANSYS計(jì)算模塊、VC調(diào)用接口模塊和VC后處理模塊,分別論述如下:
3.1 ANSYS模塊
ANSYS為了滿足用戶的特殊需求,建立了開(kāi)放的體系結(jié)構(gòu),提供了二次開(kāi)發(fā)接口APDL、UIDL和UPFs(User Programming Features,用戶編程特性)等。其中,ANSYS接口允許用戶將自己的VC代碼連到ANSYS中去,或?qū)NSYS作為子程序調(diào)用,從而使ANSYS具備特殊的功能。
本文的ANSYS模塊是使用APDL語(yǔ)言進(jìn)行二次開(kāi)發(fā)的。在上面的二次開(kāi)發(fā)中用到了參數(shù)化設(shè)計(jì)方法。參數(shù)是APDL的變量(它們更象FORTRAN變量,而不像FORTRAN參數(shù)),不必明確聲明參數(shù)類(lèi)型,所有數(shù)值變量都以雙精度數(shù)存儲(chǔ)。被使用但未聲明的參數(shù)都被賦予接近0的“極小值”。在二次開(kāi)發(fā)中使用參數(shù)化設(shè)計(jì)方法,增強(qiáng)了程序的易讀性和可移植性。用戶無(wú)須了解程序的具體結(jié)構(gòu)只需改變參數(shù)值就可自動(dòng)調(diào)用ANSYS模塊。
3.2 VC調(diào)用模塊
VC調(diào)用模塊在該系統(tǒng)中起著接受用戶界面的輸入、創(chuàng)建進(jìn)程調(diào)用ANSYS模塊進(jìn)行計(jì)算的重要作用。有兩項(xiàng)工作是在實(shí)現(xiàn)在VC程序中調(diào)用ANSYS必須做的,一是要使接口程序能夠修改ANSYSB的命令流文件路徑及文件名稱(chēng),這可通過(guò)注冊(cè)表編程實(shí)現(xiàn);二是要能在接口程序中運(yùn)行ANSYSB應(yīng)用程序,這涉及到創(chuàng)建進(jìn)程的編程,下面分別介紹它們的具體實(shí)現(xiàn)。
1. 注冊(cè)表編程
在Windows(98/NT/2000/XP)系統(tǒng)上運(yùn)行ANSYS安裝程序后,便在Windows系統(tǒng)的注冊(cè)表里記錄了一些信息,如初始工作路徑,文件名等。利用VC平臺(tái)調(diào)用ANSYS計(jì)算模塊的程序必須指定ANSYS軟件的運(yùn)行目錄以及用APDL語(yǔ)言開(kāi)發(fā)的ANSYS模塊程序路徑,這樣,ANSYS軟件的批處理程序才能從給定的路徑下讀取命令流文件。在接口程序中修改這些注冊(cè)表信息,可以使用Windows提供的注冊(cè)表編輯API(Application Programming Interface)函數(shù)[30,31],具體實(shí)現(xiàn)如下:
HKEY hSubKey; // 定義子鍵
LONG lRet;
char RegPath[200]="SoftWare\\ANSYS, Inc.\\ANSYS\\ANSYS 6.1\\0";
lRet=RegOpenKeyEx(HKEY_CURRENT_USER,RegPath,0,KEY_ALL_ACCESS,&hSubKey); // 打開(kāi)子鍵
if(lRet!=ERROR_SUCCESS)return;
lRet=RegSetValueEx(hSubKey,"Extension",0,REG_SZ,(LPBYTE)"txt",3); //設(shè)置ANSYS批處理程序讀取的文件擴(kuò)展名
if(lRet!=ERROR_SUCCESS)return;
lRet=RegSetValueEx(hSubKey,"Jobname",0,REG_SZ,(LPBYTE)"ZHY");
//指定ANSYS模塊文件名
if(lRet!=ERROR_SUCCESS)return;
lRet=RegSetValueEx(hSubKey,"WorkingDirectory",0,REG_SZ,(LPBYTE)"E:\\LWS\\Workspace ",16);
if(lRet!=ERROR_SUCCESS)return; // 鍵值出錯(cuò)返回
RegCloseKey(hSubKey); // 關(guān)閉子鍵
通過(guò)以上的設(shè)置后運(yùn)行ANSYS批處理程序,界面變成如圖3-3所示。
從圖中可看出ANSYS模塊工作路徑E:\\LWS\\Workspace、初始文件名ZHY、ANSYS程序文件名ZHY.txt文件、計(jì)算結(jié)果輸出文件名ZHY.out都已經(jīng)自動(dòng)出現(xiàn)在ANSYS批處理程序的輸入框,往下ANSYS就可以自動(dòng)從ZHY.txt讀取命令流進(jìn)行計(jì)算并將結(jié)果輸出到ZHY.out文件中。若想改ANSYS模塊路徑或文件名只需對(duì)上面程序稍加修改即可。
2. 多進(jìn)程編程
本文在VC平臺(tái)上對(duì)ANSYS進(jìn)行封裝,希望前臺(tái)處理系統(tǒng)和用戶的交互,而后臺(tái)進(jìn)行ANSYS的計(jì)算。這就要求系統(tǒng)具有并發(fā)性,為此,引入多進(jìn)程編程機(jī)制。進(jìn)程是一個(gè)正在運(yùn)行程序的實(shí)例,它具有動(dòng)態(tài)性、并發(fā)性、獨(dú)立性、異步性和結(jié)構(gòu)性等特點(diǎn)。系統(tǒng)中的進(jìn)程動(dòng)態(tài)產(chǎn)生與消亡,多個(gè)進(jìn)程并發(fā)運(yùn)行,分別執(zhí)行各自對(duì)應(yīng)的程序段,為各自的目標(biāo)而工作。一個(gè)程序可以包含多個(gè)進(jìn)程。
圖3-3 ANSYS批處理運(yùn)行界面
在VC++6.0中可以利用CreateProcess函數(shù)來(lái)創(chuàng)建一個(gè)進(jìn)程去執(zhí)行其他程序,而且可以設(shè)置該進(jìn)程的優(yōu)先級(jí)。CreateProcess函數(shù)的原型是:
BOOL CreateProcess(
LPCTSTR lpAppliciatonName
LPTSTR lpCommandLine
LPSECURITY_ATTRIBUTES lpProcessAttributes
LPSECURITY_ATTRIBUTES lpThreadAttributes
BOOL bInheritHandles
DWORD dwCreationFlags
LPVOID lpEnvironment
LPCTSTR lpCurrentDirectory
LPSTARTUPINFO lpStartupInfo
LPPROCESS_INFORMATION lpProcessInformation
);
當(dāng)系統(tǒng)調(diào)用CreateProcess時(shí),會(huì)創(chuàng)建一個(gè)進(jìn)程內(nèi)核對(duì)象,其初始使用計(jì)數(shù)是1。該進(jìn)程內(nèi)核對(duì)象不是進(jìn)程本身,而是操作系統(tǒng)管理進(jìn)程時(shí)使用的一個(gè)較小的數(shù)據(jù)結(jié)構(gòu)。然后,系統(tǒng)為新進(jìn)程創(chuàng)建一個(gè)虛擬地址空間,并將可執(zhí)行文件或任何必要的DLL文件的代碼和數(shù)據(jù)加載到該進(jìn)程的地址空間中。接著,系統(tǒng)為新進(jìn)程的主線程創(chuàng)建一個(gè)線程內(nèi)核對(duì)象(其使用計(jì)數(shù)為1)。與進(jìn)程內(nèi)核對(duì)象一樣,線程內(nèi)核對(duì)象也是操作系統(tǒng)用來(lái)管理線程的小型數(shù)據(jù)結(jié)構(gòu)。通過(guò)執(zhí)行C/C++運(yùn)行期啟動(dòng)代碼,該主線程便開(kāi)始運(yùn)行,它最終調(diào)用WinMain、wWinMain、main或wmain函數(shù)。如果系統(tǒng)成功創(chuàng)建了新進(jìn)程和主線程,CreateProcess便返回True。
PszApplicationName和pszCommandLine參數(shù)分別用于設(shè)定新進(jìn)程將要使用的可執(zhí)行文件的名字和傳遞給新進(jìn)程的命令行字符串。PszApplicationName的參數(shù)可以是NULL,表示系統(tǒng)將使用全路徑來(lái)查看可執(zhí)行文件,并且不再搜索這些目錄;如果參數(shù)不是NULL可以將地址傳遞給pszApplicationName參數(shù)中包含可運(yùn)行的文件的名字字符串。當(dāng)系統(tǒng)找到了可執(zhí)行文件后,就創(chuàng)建一個(gè)新進(jìn)程,并將可執(zhí)行文件的代碼和數(shù)據(jù)映射到新進(jìn)程的地址空間中。
PsaProcess和psaThread參數(shù)分別設(shè)定進(jìn)程對(duì)象和線程對(duì)象需要的安全性。可以為這些參數(shù)傳遞NULL,這種情況下,系統(tǒng)為這些對(duì)象賦予默認(rèn)安全性描述符;也可以指定兩個(gè)SECURITY_ATTRIBUTES結(jié)構(gòu),并對(duì)它們進(jìn)行初始化,以便創(chuàng)建自己的安全性權(quán)限,并將它們賦予進(jìn)程對(duì)象和線程對(duì)象。將SECRURITY_ATTRIBUTES 結(jié)構(gòu)用于psaProcess和psaThread參數(shù)的另一個(gè)原因是,父進(jìn)程將來(lái)生成的任何子進(jìn)程都可以繼承這兩個(gè)對(duì)象句柄中的任何一個(gè)。本程序除了創(chuàng)鍵調(diào)用ANSYS計(jì)算模塊的進(jìn)程外,無(wú)需再創(chuàng)建其它進(jìn)程,因而,psaProcess和psaThread參數(shù)都為NULL。同理,binheritHandles參數(shù)為FALSE。
fdwCreate參數(shù)用于標(biāo)識(shí)標(biāo)志,以便用于規(guī)定如何來(lái)創(chuàng)建新進(jìn)程,fdwCreate參數(shù)也可以用來(lái)設(shè)定優(yōu)先級(jí)類(lèi),不過(guò)對(duì)于大多數(shù)應(yīng)用程序來(lái)說(shuō)不應(yīng)該這樣做,因?yàn)橄到y(tǒng)會(huì)為新進(jìn)程賦予一個(gè)默認(rèn)優(yōu)先級(jí)。
PszCurDir參數(shù)允許父進(jìn)程設(shè)置子進(jìn)程的當(dāng)前驅(qū)動(dòng)器和目錄。如果本參數(shù)為NULL,則新進(jìn)程的工作目錄將與生成新進(jìn)程的應(yīng)用程序的目錄相同;若不為空,則必須指向包含需要的工作驅(qū)動(dòng)器和工作目錄的以0結(jié)尾的字符串。課題中該參數(shù)選擇為NULL就可以了。
PsiStartInfo參數(shù)用于指向一個(gè)STARTUPINFO結(jié)構(gòu)。當(dāng)Windows創(chuàng)建新進(jìn)程時(shí),它將使用該結(jié)構(gòu)的有關(guān)成員。大多數(shù)應(yīng)用程序?qū)⒁笊傻膽?yīng)用程序僅僅使用默認(rèn)值。至少應(yīng)該將該結(jié)構(gòu)中的所有成員初始化為零,然后將cb(cb為STARTUPINFO結(jié)構(gòu)成員)設(shè)置為該結(jié)構(gòu)的大小。STARTUPINFO結(jié)構(gòu)的其他具體成員參見(jiàn)VC++6.0幫助系統(tǒng)MSDN。
PpiProcInfo參數(shù)用于指向你必須指定的PROCESS_INFORMATION結(jié)構(gòu)。CreateProcess在返回之前要對(duì)該結(jié)構(gòu)的成員進(jìn)行初始化。該結(jié)構(gòu)的形式如下面所示:
Typedef struct _PROCESS_INFORMATION{
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
}PROCESS_INFORMATION;
CreateProcess在返回之前打開(kāi)進(jìn)程對(duì)象和線程對(duì)象,并將每個(gè)對(duì)象的與進(jìn)程相關(guān)的句柄放入PROCESS_INFORMATION結(jié)構(gòu)的hProcess和hThread成員中。
綜上所述,課題創(chuàng)建進(jìn)程的關(guān)鍵程序如下:
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;
memset(&StartupInfo,0,sizeof(STARTUPINFO)); //分配內(nèi)存
StartupInfo.cb=sizeof(STARTUPINFO); // 初始化
StartupInfo.dwFlags=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow=SW_SHOWMAXIMIZED;
if(!::CreateProcess(NULL,d:\\ProgramFiles\\Ansys
Inc\\ANSYS61\\bin\\intel\\AnsysB”,NULL,NULL,FALS E,0,NULL,NULL,&StartupInfo,&ProcessInfo))
{
AfxMessageBox("error!");
GetLastError();
} // 創(chuàng)建進(jìn)程
3. 進(jìn)程的終止
要終止進(jìn)程的運(yùn)行可以使用如下四種方法:①主線程的進(jìn)入點(diǎn)函數(shù)返回;②進(jìn)程中的一個(gè)線程調(diào)用ExitProcess函數(shù);③另一個(gè)進(jìn)程中的線程調(diào)用TerminateProcess函數(shù);④所有進(jìn)程中的線程自動(dòng)終止運(yùn)行(這種情況一般不會(huì)發(fā)生)。本文采用第一種方法終止所創(chuàng)建的進(jìn)程,即當(dāng)ANSYS計(jì)算結(jié)束時(shí)通過(guò)函數(shù)返回。
在WindowsXP系統(tǒng)中,如果ANSYS批處理程序運(yùn)行完后,窗口標(biāo)題會(huì)顯示“ANSYS已完成”。本文程序開(kāi)發(fā)便可通過(guò)這一特點(diǎn)來(lái)終止系統(tǒng)所創(chuàng)建的進(jìn)程。當(dāng)ANSYS計(jì)算模塊運(yùn)行完畢后,系統(tǒng)會(huì)彈出一個(gè)消息框提示ANSYS已計(jì)算完畢,可以進(jìn)行后處理了。
3.3.3 用戶界面接口模塊
用戶界面模塊主要完成系統(tǒng)和用戶的交互。用戶界面模塊包括計(jì)算參數(shù)輸入和程序調(diào)用兩部分。計(jì)算參數(shù)輸入部分的主要功能是負(fù)責(zé)輸入諸如地震波數(shù)據(jù)、是否調(diào)幅、時(shí)間步長(zhǎng)等。計(jì)算輸入是由對(duì)話框構(gòu)成。計(jì)算參數(shù)輸入對(duì)話框界面如下:
圖3-4 計(jì)算參數(shù)輸入界面
程序?qū)Ω鲄?shù)的輸入范圍都進(jìn)行了設(shè)定,如果用戶輸入的參數(shù)超過(guò)了這一設(shè)定,系統(tǒng)就會(huì)彈出對(duì)話框以提醒用戶輸入錯(cuò)誤,需要重新輸入。ANSYS程序調(diào)用通過(guò)菜單方式進(jìn)行。該菜單首先不處于激活狀態(tài),而是當(dāng)三維數(shù)值模擬所需參數(shù)輸入完成后才得到消息激活菜單。這樣設(shè)計(jì)的優(yōu)點(diǎn):能夠提醒用戶輸入并檢查用于三維數(shù)值模擬的相關(guān)參數(shù),避免用戶在不輸入?yún)?shù)的情況下直接調(diào)用ANSYS進(jìn)行計(jì)算而造成錯(cuò)誤。
程序設(shè)計(jì)采用文檔讀寫(xiě)的方式將輸入的計(jì)算參數(shù)插入到用APDL語(yǔ)言進(jìn)行二次開(kāi)發(fā)的ANSYS計(jì)算模塊。參數(shù)化設(shè)計(jì)的ANSYS計(jì)算模塊就可以根據(jù)輸入的參數(shù)進(jìn)行數(shù)值模擬計(jì)算。
3.3.4 ANSYS后處理模塊的二次開(kāi)發(fā)
ANSYS軟件提供了兩個(gè)后處理器,可以對(duì)結(jié)果進(jìn)行時(shí)間-歷程后處理
和通用后處理。對(duì)于相互作用體系地震反應(yīng)分析,它可以將模擬結(jié)果用應(yīng)力圖、等值線(面)、動(dòng)畫(huà)等形式輸出與轉(zhuǎn)換。其中POST1通用后處理器可用于觀察整個(gè)模型或模型的一部分在某一時(shí)間的模擬結(jié)果,可顯示結(jié)構(gòu)在地震作用下的應(yīng)力圖和位移變形圖;時(shí)間—?dú)v程后處理器POST26用于檢查模型中指定點(diǎn)的分析結(jié)果與時(shí)間的函數(shù)關(guān)系,可顯示模型上各個(gè)節(jié)點(diǎn)的各變量的時(shí)程曲線。可見(jiàn),對(duì)于大多數(shù)的后處理分析我們可以直接使用ANSYS的后處理器。但由于ANSYS是一個(gè)通用軟件,而對(duì)某些特殊領(lǐng)域的后處理分析無(wú)能為力或者不是很方便,因而,需要對(duì)其進(jìn)行二次開(kāi)發(fā),以減輕后處理工作和提高后處理效率。
在相互作用體系地震反應(yīng)分析中,有時(shí)除了關(guān)注各物理量時(shí)程曲線外,還關(guān)心其在結(jié)構(gòu)高度方向的分布(如層間位移、層間剪力、層間加速度反應(yīng)等)。解決這一問(wèn)題的二次開(kāi)發(fā)需要結(jié)合相互作用體系地震反應(yīng)分析特點(diǎn)進(jìn)行。
(1)物理量分析
在地震反應(yīng)時(shí)程分析中,我們對(duì)樓層位移時(shí)程、加速度時(shí)程、柱應(yīng)力應(yīng)變時(shí)程 、剪力墻應(yīng)力應(yīng)變時(shí)程比較關(guān)心,同時(shí)還需要分析層間位移和層間加速度變化。考慮到本文將計(jì)算多種工況,本程序?qū)ΤR?jiàn)的變量編寫(xiě)了后處理程序,具有通用性,極大地提高了后處理效率。
(2) 程序?qū)崿F(xiàn)
基于上面分析,本程序是通過(guò)接口程序調(diào)用ANSYS,讀入編寫(xiě)的后處理命令流,讀取ANSYS計(jì)算的結(jié)果數(shù)據(jù)庫(kù),生成各變量的結(jié)果文件,然后用本程序的后處理模塊進(jìn)行讀數(shù)繪圖處理,進(jìn)而生成結(jié)果圖形。這一過(guò)程采用VC編程實(shí)現(xiàn)的,VC編程的算法流程圖如圖3-2的后處理模塊。(
ansys與VC++/Fortran程序的接口資料將ANSYS作為子程序調(diào)用
對(duì)于優(yōu)化或參數(shù)化設(shè)計(jì),可以在VC或FORTRAN中將ANSYS作為子程序調(diào)用。具體調(diào)用方法如下:
1.在VC中調(diào)用ANSYS
::WinExec("d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ansys_product_feature -i input_file -o output_file",SW_SHOWNORMAL);
2.在FORTRAN中調(diào)用ANSYS
LOGICAL(4) result
RESULT=SYSTEMQQ('d:\ANSYS57\BIN\INTEL\ANSYS57 -b -p
ansys_product_feature -i input_file -o output_file')
3.說(shuō)明
1和2中,input_file為用APDL語(yǔ)言編寫(xiě)的ANSYS輸入文件。
ansys_product_feature為你的ANSYS產(chǎn)品特征代碼。
需要注意的是,在VC中調(diào)用ANSYS時(shí),需要加一條判斷語(yǔ)句,以確定ANSYS
已經(jīng)執(zhí)行完畢。
在ANSYS中當(dāng)然也可以以VC或FORTRAN作為子程序調(diào)用。可以參看有關(guān)ANSYS二次開(kāi)發(fā)方面的資料。
這個(gè)方法應(yīng)該是與系統(tǒng)無(wú)關(guān)的。
在FORTRAN中不需要判斷,F(xiàn)ORTRAN會(huì)等ANSYS執(zhí)行完畢才繼續(xù)執(zhí)行下一條語(yǔ)句。
在VC中,我沒(méi)有找到與FORTRAN類(lèi)似的函數(shù),只好加一條循環(huán)判斷語(yǔ)句。
如果誰(shuí)能找著這樣的函數(shù),請(qǐng)告訴我,謝謝!
判斷方法很簡(jiǎn)單,只需判斷錯(cuò)誤文件file.err是否可寫(xiě)就可以了。
因?yàn)楫?dāng)ANSYS在運(yùn)行時(shí),file.err是不可寫(xiě)的,只有當(dāng)它運(yùn)行完畢,此文件才可寫(xiě)。
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺(tái)客服
TOP




















