欧美ZOZO牲交另类

<th id="pq4ci"><video id="pq4ci"><span id="pq4ci"></span></video></th>

      1. <center id="pq4ci"></center>

        <code id="pq4ci"></code>
        1. <big id="pq4ci"></big>
        2. 上海卓位信息技術有限公司歡迎您!

          熱點推薦詞:

          行業新聞

          非線性靜力分析與非線性時程分析的區別

          文字:[大][中][小] 手機頁面二維碼 2016/10/21     瀏覽次數:    

          ANSYS基于VC++6.0的二次開發與

          相互作用分析在ANSYS中的實現

          1 概述

          ANSYS是一套功能十分強大的有限元分析軟件,能實現多場及多場耦合分析;是實現前后處理、求解及多場分析統一數據庫的一體化大型FEA軟件;支持異種、異構平臺的網絡浮動,在異種、異構平臺上用戶界面統一、數據文件全部兼容,強大的并行計算功能支持分布式并行及共享內存式并行.該軟件具有如下特點:

          (1) 完備的前處理功能

          ANSYS不僅提供了強大的實體建模及網格劃分工具,可以方便地構造數學模型,而且還專門設有用戶所熟悉的一些大型通用有限元軟件的數據接口(如MSC/NSSTRAN,ALGOR,ABAQUS等),并允許從這些程序中讀取有限元模型數據,甚至材料特性和邊界條件,完成ANSYS中的初步建模工作.此外,ANSYS還具有近200種單元類型,這些豐富的單元特性能使用戶方便而準確地構建出反映實際結構的仿真計算模型.

          (2) 強大的求解器

          ANSYS提供了對各種物理場量的分析,是目前能融結構、熱、電磁、流體、聲學等為一體的有限元軟件.除了常規的線性、非線性結構靜力、動力分析外,還可以解決高度非線性結構的動力分析、結構非線性及非線性屈曲分析.提供的多種求解器分別適用于不同的問題及不同的硬件配置.

          (3) 方便的后處理器

          ANSYS的后處理分為通用后處理模塊(POST1)和時間歷程后處理模塊(POST26)兩部分.后處理結果可能包括位移、溫度、應力、應變、速度以及熱流等,輸出形式可以有圖形顯示和數據列表兩種.

          (4) 多種實用的二次開發工具

          ANSYS除了具有較為完善的分析功能外,同時還為用戶進行二次開發提供了多種實用工具.如宏(Marco)、參數設計語言(APDL)、用戶界面設計語言(UIDL)及用戶編程特性(UPFs),其中APDL(ANSYS Parametric Design Language)是一種非常類似于Fortran77的參數化設計解釋性語言,其核心內容為宏、參數、循環命令和條件語句,可以通過建立參數化模型來自動完成一些通用性強的任務;UIDL(User Interface Design Language)是ANSYS為用戶提供專門進行程序界面設計的語言,允許用戶改變ANSYS的圖形用戶界面(GUI)中的一些組項,提供了一種允許用戶靈活使用、按個人喜好來組織設計ANSYS圖形用戶界面的強有力工具;UPFs(User Programmable Features)提供了一套Fortran77函數和例程以擴展或修改程序的功能,該項技術充分顯示了ANSYS的開放體系,用戶不僅可以采用它將ANSYS程序剪裁成符合自己所需的任何組織形式(如可以定義一種新的材料,一個新的單元或者給出一種新的屈服準則),而且還可以編寫自己的優化算法,通過將整個ANSYS作為一個子程序調用的方式實現.

          鑒于上述特點,近幾年來,ANSYS軟件在國內外工程建設和科學研究中得到了廣泛的應用.但這些應用大多局限于直接運用ANSYS軟件進行實際工程分析,對利用ANSYS提供的二次開發工具進行有限元軟件設計卻很少涉及.本文剛利用ANSYS軟件的二次開發功能,以VC++6.0為工具,運用APDL語言,對ANSYS進行二次開發,編制框筒結構-樁筏基礎-土相互作用體系與地震反應分析程序.

          2 程序設計目標

          針對某一實際工程問題,ANSYS所提供的APDL語言可對ANSYS軟件進行封裝.APDL語言即ANSYS軟件提供的參數化設計語言,它的全稱是ANSYS Parametric Design Language. 使用APDL語言可以更加有效地進行分析計算,可以輕松地進行自動化工作(循環、分支、宏等結構),而且,它是一種高有效的參數化建模手段.使用APDL語言進行封裝的系統可以只要求操作人員輸入前處理參數,然后自動運行ANSYS進行求解.但完全用APDL編寫的宏還存在弱點.比如用APDL語言較難控制程序的進程,雖然它提供了循環語句和條件判斷語句,但總的來說還是難以用來編寫結構清晰的程序.它雖然提供了參數的界面輸入,但功能還不是太強,交互性不夠流暢.針對這種情況,本文用VC++6.0開發框筒結構-樁筏基礎-土相互作用有限元分析程序(簡稱LWS程序).

          本程序設計目標是利用VC++6.0對ANSYS進行封裝.用VC++6.0對ANSYS模擬框筒結構-樁筏基礎-土相互作用進行二次開發,用戶只需輸入諸如地震波、計算時間步長、阻尼比等物理性能參數等,系統就能自動調用ANSYS計算程序,自動進行網格劃分、地震動加載以及自動求解.該系統由于前臺開發友好、方便、易用的人機交互界面,對復雜的、難于理解和掌握的ANSYS命令流進行后臺封裝,因此,程序設計可讓即使從未認真學習過ANSYS軟件的工程設計人員也能很好地借助本系統進行結構抗震性能有限元分析,具有較強的處理實際問題能力.

          用戶輸入計算參數,即可調用后臺的ANSYS命令進行計算,ANSYS把計算結果返回給用戶,進行后處理.

          程序設計的主要原則和功能如下:

          (1)方便原則,即程序模塊應具有良好的用戶界面和易用性.程序前臺設計采用Windows提供的標準圖形用戶界面(GUI),用戶無須接受專門訓練即可使用.同時,程序應具有良好的容錯和糾錯能力,避免用戶操作不當造成損失.

          (2)程序系統能夠提供用戶以下功能:

          ①允許用戶可以根據實際計算工況,輸入特定的計算參數,包括地震波選擇、計算時間步長、地震波調幅與否等.

          ②用戶在輸入各種參數以后、進行計算之前可以對輸入的數據進行修改、添加和刪除操作,以保證輸入正確的參數.

          ③用戶通過界面調用后臺的ANSYS命令流進行計算,能夠得到最后的計算結果文件,供用戶進行后處理和結果分析.

          ④用戶可以添加新的功能或新的二次開發以實現程序升級.

          (3)程序應具有良好的可移植性,不依賴于特定的硬件設備,只要能安裝ANSYS和VC++6.0的硬件環境都能使用本系統,保證程序使用的廣泛性.

          (4)程序代碼應具有開放性和可重用性.這樣,在進一步的設計中,能保證設計者可以方便地對代碼進行修改擴充;同時,提供一定的設計接口,新的設計者可以根據接口,無須對程序進行大幅度的修改,就可以進行新的開發,以適應新的特殊要求.

          程序的開發平臺是Microsoft VC++6.0、ANSYS6.1,基于WindowsXP編程.程序實現是利用微軟提供的Windows編程接口MFC和ANSYS公司的ANSYS/Multiphysics產品,采用面向對象的程序設計方法.

          3程序的主要模塊和設計

          如圖3-2所示,程序的主要模塊有:用戶界面模塊、ANSYS計算模塊、VC調用接口模塊和VC后處理模塊,分別論述如下:

          3.1 ANSYS模塊

          ANSYS為了滿足用戶的特殊需求,建立了開放的體系結構,提供了二次開發接口APDL、UIDL和UPFs(User Programming Features,用戶編程特性)等.其中,ANSYS接口允許用戶將自己的VC代碼連到ANSYS中去,或將ANSYS作為子程序調用,從而使ANSYS具備特殊的功能.

          本文的ANSYS模塊是使用APDL語言進行二次開發的.在上面的二次開發中用到了參數化設計方法.參數是APDL的變量(它們更象FORTRAN變量,而不像FORTRAN參數),不必明確聲明參數類型,所有數值變量都以雙精度數存儲.被使用但未聲明的參數都被賦予接近0的“極小值”.在二次開發中使用參數化設計方法,增強了程序的易讀性和可移植性.用戶無須了解程序的具體結構只需改變參數值就可自動調用ANSYS模塊.

          3.2 VC調用模塊

          VC調用模塊在該系統中起著接受用戶界面的輸入、創建進程調用ANSYS模塊進行計算的重要作用.有兩項工作是在實現在VC程序中調用ANSYS必須做的,一是要使接口程序能夠修改ANSYSB的命令流文件路徑及文件名稱,這可通過注冊表編程實現;二是要能在接口程序中運行ANSYSB應用程序,這涉及到創建進程的編程,下面分別介紹它們的具體實現.

          1. 注冊表編程

          在Windows(98/NT/2000/XP)系統上運行ANSYS安裝程序后,便在Windows系統的注冊表里記錄了一些信息,如初始工作路徑,文件名等.利用VC平臺調用ANSYS計算模塊的程序必須指定ANSYS軟件的運行目錄以及用APDL語言開發的ANSYS模塊程序路徑,這樣,ANSYS軟件的批處理程序才能從給定的路徑下讀取命令流文件.在接口程序中修改這些注冊表信息,可以使用Windows提供的注冊表編輯API(Application Programming Interface)函數[30,31],具體實現如下:

          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); // 打開子鍵

          if(lRet!=ERROR_SUCCESS)return;

          lRet=RegSetValueEx(hSubKey,"Extension",0,REG_SZ,(LPBYTE)"txt",3); //設置ANSYS批處理程序讀取的文件擴展名

          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; // 鍵值出錯返回

          RegCloseKey(hSubKey); // 關閉子鍵

          通過以上的設置后運行ANSYS批處理程序,界面變成如圖3-3所示.

          從圖中可看出ANSYS模塊工作路徑E:\\LWS\\Workspace、初始文件名ZHY、ANSYS程序文件名ZHY.txt文件、計算結果輸出文件名ZHY.out都已經自動出現在ANSYS批處理程序的輸入框,往下ANSYS就可以自動從ZHY.txt讀取命令流進行計算并將結果輸出到ZHY.out文件中.若想改ANSYS模塊路徑或文件名只需對上面程序稍加修改即可.

          2. 多進程編程

          本文在VC平臺上對ANSYS進行封裝,希望前臺處理系統和用戶的交互,而后臺進行ANSYS的計算.這就要求系統具有并發性,為此,引入多進程編程機制.進程是一個正在運行程序的實例,它具有動態性、并發性、獨立性、異步性和結構性等特點.系統中的進程動態產生與消亡,多個進程并發運行,分別執行各自對應的程序段,為各自的目標而工作.一個程序可以包含多個進程.

          圖3-3 ANSYS批處理運行界面

          在VC++6.0中可以利用CreateProcess函數來創建一個進程去執行其他程序,而且可以設置該進程的優先級.CreateProcess函數的原型是:

          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

          );

          當系統調用CreateProcess時,會創建一個進程內核對象,其初始使用計數是1.該進程內核對象不是進程本身,而是操作系統管理進程時使用的一個較小的數據結構.然后,系統為新進程創建一個虛擬地址空間,并將可執行文件或任何必要的DLL文件的代碼和數據加載到該進程的地址空間中.接著,系統為新進程的主線程創建一個線程內核對象(其使用計數為1).與進程內核對象一樣,線程內核對象也是操作系統用來管理線程的小型數據結構.通過執行C/C++運行期啟動代碼,該主線程便開始運行,它最終調用WinMain、wWinMain、main或wmain函數.如果系統成功創建了新進程和主線程,CreateProcess便返回True.

          PszApplicationName和pszCommandLine參數分別用于設定新進程將要使用的可執行文件的名字和傳遞給新進程的命令行字符串.PszApplicationName的參數可以是NULL,表示系統將使用全路徑來查看可執行文件,并且不再搜索這些目錄;如果參數不是NULL可以將地址傳遞給pszApplicationName參數中包含可運行的文件的名字字符串.當系統找到了可執行文件后,就創建一個新進程,并將可執行文件的代碼和數據映射到新進程的地址空間中.

          PsaProcess和psaThread參數分別設定進程對象和線程對象需要的安全性.可以為這些參數傳遞NULL,這種情況下,系統為這些對象賦予默認安全性描述符;也可以指定兩個SECURITY_ATTRIBUTES結構,并對它們進行初始化,以便創建自己的安全性權限,并將它們賦予進程對象和線程對象.將SECRURITY_ATTRIBUTES 結構用于psaProcess和psaThread參數的另一個原因是,父進程將來生成的任何子進程都可以繼承這兩個對象句柄中的任何一個.本程序除了創鍵調用ANSYS計算模塊的進程外,無需再創建其它進程,因而,psaProcess和psaThread參數都為NULL.同理,binheritHandles參數為FALSE.

          fdwCreate參數用于標識標志,以便用于規定如何來創建新進程,fdwCreate參數也可以用來設定優先級類,不過對于大多數應用程序來說不應該這樣做,因為系統會為新進程賦予一個默認優先級.

          PszCurDir參數允許父進程設置子進程的當前驅動器和目錄.如果本參數為NULL,則新進程的工作目錄將與生成新進程的應用程序的目錄相同;若不為空,則必須指向包含需要的工作驅動器和工作目錄的以0結尾的字符串.課題中該參數選擇為NULL就可以了.

          PsiStartInfo參數用于指向一個STARTUPINFO結構.當Windows創建新進程時,它將使用該結構的有關成員.大多數應用程序將要求生成的應用程序僅僅使用默認值.至少應該將該結構中的所有成員初始化為零,然后將cb(cb為STARTUPINFO結構成員)設置為該結構的大小.STARTUPINFO結構的其他具體成員參見VC++6.0幫助系統MSDN.

          PpiProcInfo參數用于指向你必須指定的PROCESS_INFORMATION結構.CreateProcess在返回之前要對該結構的成員進行初始化.該結構的形式如下面所示:

          Typedef struct _PROCESS_INFORMATION{

          HANDLE hProcess;

          HANDLE hThread;

          DWORD dwProcessId;

          DWORD dwThreadId;

          }PROCESS_INFORMATION;

          CreateProcess在返回之前打開進程對象和線程對象,并將每個對象的與進程相關的句柄放入PROCESS_INFORMATION結構的hProcess和hThread成員中.

          綜上所述,課題創建進程的關鍵程序如下:

          STARTUPINFO StartupInfo;

          PROCESS_INFORMATION ProcessInfo;

          memset(&StartupInfo,0,sizeof(STARTUPINFO)); //分配內存

          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();} // 創建進程

          3. 進程的終止

          要終止進程的運行可以使用如下四種方法:①主線程的進入點函數返回;②進程中的一個線程調用ExitProcess函數;③另一個進程中的線程調用TerminateProcess函數;④所有進程中的線程自動終止運行(這種情況一般不會發生).本文采用第一種方法終止所創建的進程,即當ANSYS計算結束時通過函數返回.

          在WindowsXP系統中,如果ANSYS批處理程序運行完后,窗口標題會顯示“ANSYS已完成”.本文程序開發便可通過這一特點來終止系統所創建的進程.當ANSYS計算模塊運行完畢后,系統會彈出一個消息框提示ANSYS已計算完畢,可以進行后處理了.

          3.3.3 用戶界面接口模塊

          用戶界面模塊主要完成系統和用戶的交互.用戶界面模塊包括計算參數輸入和程序調用兩部分.計算參數輸入部分的主要功能是負責輸入諸如地震波數據、是否調幅、時間步長等.計算輸入是由對話框構成.計算參數輸入對話框界面如下:

          圖3-4 計算參數輸入界面

          程序對各參數的輸入范圍都進行了設定,如果用戶輸入的參數超過了這一設定,系統就會彈出對話框以提醒用戶輸入錯誤,需要重新輸入.ANSYS程序調用通過菜單方式進行.該菜單首先不處于激活狀態,而是當三維數值模擬所需參數輸入完成后才得到消息激活菜單.這樣設計的優點:能夠提醒用戶輸入并檢查用于三維數值模擬的相關參數,避免用戶在不輸入參數的情況下直接調用ANSYS進行計算而造成錯誤.

          程序設計采用文檔讀寫的方式將輸入的計算參數插入到用APDL語言進行二次開發的ANSYS計算模塊.參數化設計的ANSYS計算模塊就可以根據輸入的參數進行數值模擬計算.

          3.3.4 ANSYS后處理模塊的二次開發

          ANSYS軟件提供了兩個后處理器,可以對結果進行時間-歷程后處理

          和通用后處理.對于相互作用體系地震反應分析,它可以將模擬結果用應力圖、等值線(面)、動畫等形式輸出與轉換.其中POST1通用后處理器可用于觀察整個模型或模型的一部分在某一時間的模擬結果,可顯示結構在地震作用下的應力圖和位移變形圖;時間—歷程后處理器POST26用于檢查模型中指定點的分析結果與時間的函數關系,可顯示模型上各個節點的各變量的時程曲線.可見,對于大多數的后處理分析我們可以直接使用ANSYS的后處理器.但由于ANSYS是一個通用軟件,而對某些特殊領域的后處理分析無能為力或者不是很方便,因而,需要對其進行二次開發,以減輕后處理工作和提高后處理效率.

          在相互作用體系地震反應分析中,有時除了關注各物理量時程曲線外,還關心其在結構高度方向的分布(如層間位移、層間剪力、層間加速度反應等).解決這一問題的二次開發需要結合相互作用體系地震反應分析特點進行.

          (1)物理量分析

          在地震反應時程分析中,我們對樓層位移時程、加速度時程、柱應力應變時程 、剪力墻應力應變時程比較關心,同時還需要分析層間位移和層間加速度變化.考慮到本文將計算多種工況,本程序對常見的變量編寫了后處理程序,具有通用性,很大地提高了后處理效率.

          (2) 程序實現

          基于上面分析,本程序是通過接口程序調用ANSYS,讀入編寫的后處理命令流,讀取ANSYS計算的結果數據庫,生成各變量的結果文件,然后用本程序的后處理模塊進行讀數繪圖處理,進而生成結果圖形.這一過程采用VC編程實現的,VC編程的算法流程圖如圖3-2的后處理模塊.

          返回上一步
          打印此頁
          [向上]
          欧美ZOZO牲交另类