基于VB的矩陣位移法的fortrans的可視化開發(fā)畢業(yè)論文.doc_第1頁
基于VB的矩陣位移法的fortrans的可視化開發(fā)畢業(yè)論文.doc_第2頁
基于VB的矩陣位移法的fortrans的可視化開發(fā)畢業(yè)論文.doc_第3頁
基于VB的矩陣位移法的fortrans的可視化開發(fā)畢業(yè)論文.doc_第4頁
基于VB的矩陣位移法的fortrans的可視化開發(fā)畢業(yè)論文.doc_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Abstreact基于VB的矩陣位移法的fortrans的可視化開發(fā)畢業(yè)論文目錄1 緒論11.1 研究的目的和意義11.2 基于VB的矩陣位移法Fortran的可視化開發(fā)研究的方法概述21.3 本文的主要工作22 簡介矩陣位移法程序化的實現(xiàn)42.1 基本信息的輸入42.1.1 結構的幾何形狀及材料特性數(shù)據(jù)52.1.2 結構的約束情況數(shù)據(jù)52.1.3 荷載情況數(shù)據(jù)62.2 剛度矩陣62.2.1 單元剛度矩陣62.2.2 總剛度矩陣72.2.3 邊界條件的處理72.2.4 非結點荷載的等效82.2.5 建立求解剛度方程82.2.6 計算桿端力82.3 矩陣位移法Fortran程序113 基于VB 6.0的矩陣位移法Fortran的可視化開發(fā)143.1 基于VB 6.0 的矩陣位移法Fortran的混合編程及可視化開發(fā)143.1.1 基于VB 6.0的Fortran混合編程的兩種方法及對比143.1.2 基于VB 6.0的矩陣位移法Fortran的可視化開發(fā)183.2 應用實例20平面剛架計算程序舉例和簡要說明20II泰山學院本科畢業(yè)設計1 緒論1.1 研究的目的和意義 矩陣位移法在結構力學中用于解決桿系結構的位移和內力的重要方法,它以 位移法為理論基礎。矩陣位移法的基本方法是:以結點位移為基本未知量,將要分 析的結構離散成一個組件,然后通過分析單元和組裝單元,簡單列出剛度方程,得 到了桿端力和結點位移。其實質是一種位移法的延伸,是將矩陣運算運用到位移 法中,使之可以編制成數(shù)值計算的計算機程序。借助計算機強大的運算能力,使難 以完成大量的未知變量來解決,容易實現(xiàn)。因為矩陣位移法編程的存在,讓更多的 結構力學問題變得簡單,能夠解決更復雜的問題。矩陣位移法通常使用Fortran語言編寫的計算機程序。Fortran語言起源于 1950年代,是最早適用于科學計算的計算機語言。Fortran語言的高度標準化、 易于程序交換和交易優(yōu)化,而且具有非常精確的數(shù)據(jù)結構。雖然經過多年的發(fā)展, 應用Fortran語言有了很大發(fā)展。并與C+語言相比,Fortran編程具有C+所有的重要功能。然而,Fortran語言有其本身無法克服的缺點。圖形處理能力弱,人機界面交換僵硬,而且應該運行在DOS環(huán)境下,黑色的屏幕和可憐的兼容性都無法滿足需求。相對于編程人員不熟悉,使用起來更費力又容易出錯。矩陣位移法 只在Fortran語言計算結果,及其復雜的計算過程和結果圖形表達不好,應用和推廣方面非常不利。Visual Basic是微軟開發(fā)協(xié)助開發(fā)環(huán)境的事件驅動編程語言, 它來自BASIC編程語言,是現(xiàn)今全球使用人數(shù)最多的編程語言。VB的圖形用戶界面(GUI)和快速應用程序開發(fā)(RAD)系統(tǒng),可以輕松創(chuàng)建ActiveX控件,也很容易地使用DAO、RDO、ADO連接數(shù)據(jù)庫。程序員可以很容易地使用VB組件來快速創(chuàng)建應用程序。 經過多年的發(fā)展,VB 6.0已經很成熟,是一個基于Windows平臺的開發(fā)工具,以其靈活簡單,易于使用和功能強大,界面友好等優(yōu)點,獲得了非計算機專業(yè)的程序員的喜愛。然而,Visual Basic 6.0也有自己的缺點,如計算能力差,執(zhí)行速度慢等等。通過基于Visual Basic 6.0對矩陣位移法 Fortran語言進行開發(fā),實現(xiàn)在Windows環(huán)境下運行,同時也實現(xiàn)了既可以延續(xù)矩陣位移法Fortran語言高效的計算能力,又矩陣位移法程序界面更友好。非專業(yè)程序員靈活的借助計算機運行矩形位移法,在計算機的幫助下也可以簡單和直接的獲取計算結果,提高項目運作的工作效率。1.2 基于VB的矩陣位移法Fortran的可視化開發(fā)研究的方法概述基于VB 6.0的矩形位移法Fortran的界面化開發(fā)設計采用矩陣位移法為基本原理,通過Visual Basic 6.0和Fortran混合編程的方法,實現(xiàn)矩陣位移法程序的可視化更優(yōu)化。矩陣位移法的Fortran編程經過多年來的不斷開發(fā)已經非常成熟,是應用非常廣泛的矩陣位移法計算程序。本設計首先把矩陣位移法Fortran編程語言轉化成VB 6.0可以直接調用的可執(zhí)行文件,實現(xiàn)在VB 6.0中執(zhí)行矩陣位移法Fortran的運算,再基于VB 6.0進行程序可視化的優(yōu)化。 在第三章中詳細說明所用到的VB 6.0直接調用Fortran編程語言的可執(zhí)行文件的方法、VB 6.0和Fortran的接口、VB調用用Fortran編譯的可執(zhí)行文件(矩陣位移法Fortran可執(zhí)行文件)、shell函數(shù)異步執(zhí)行和黑屏的解決方案。然后對運算結果進行可視化處理。在WINDOWS平臺上,使用VB 6.0軟件和FORTAN混合編程計算的矩陣位移法,現(xiàn)成的矩形位移法的前后期的運算輸入、輸出簡單明了,結果可以由圖像直觀的顯示出來。1.3 本文的主要工作本文介紹用Visual Basic 6.0為平臺,將矩陣位移法Fortran編程語言轉換為Visual Basic 6.0的可執(zhí)行,生成Visual Basic 6.0的一個子程序。介紹順序為矩陣位移法的原理和矩陣位移法編程、VB 6.0和Fortran混合編程方法及其對比、基于VB的矩陣位移法Fortran的可視化開發(fā)。(1)矩陣位移法程序化的實現(xiàn)部分討論了矩陣位移法計算機程序實現(xiàn)過程中注意的幾個問題:基本信息的輸入,剛度矩陣,邊界條件處理,非結點荷載的等效,建立求解剛度方程,計算桿端力。提供一些關于如何利用程序解決剛架、桁架、連續(xù)梁的位移和內力等問題的幫助(2)對基于Visual Basic 6.0的矩陣位移法Fortran程序進行兼容,制作出可應用的編程程序,并進行可視化前后處理界面。介紹混合編程的主要方法,對混合編程中出現(xiàn)的每一個問題所需要的解決方案進行簡要的描述,對在Visual Basic 6.0中對于Fortran程序的調用進行簡要說明。(3)生成基于VB 6.0的矩陣位移法Fortran軟件,達到程序操作簡單,數(shù)據(jù)以文件形式輸入,為檢查和修改方便,每項數(shù)據(jù)都可以清晰的顯示出來。程序在運行時,自動由輸入的數(shù)據(jù)生成圖形,通過圖中的各種信息可以很容易檢驗出信息是否出錯。計算結束后,計算結果自動生成圖像,達到預測結構承受荷載后的情況。所生成的程序為exe格式,程序小,對計算機沒有特殊要求。(4)應用基于Visual Basic 6.0的矩陣位移法的可視化程序進行例題計算,驗證程序的正確性和易用性。2 簡介矩陣位移法程序化的實現(xiàn)隨著工程技術和材料等的發(fā)展,工程結構向復雜化、大型化的發(fā)展,傳統(tǒng)的結構力學運算和分析方法很難進行大型復雜的結構分析任務。上世紀六十年代,隨著計算機技術的快速發(fā)展和在結構計算方面的應用,矩陣位移法程序化得到了廣泛的發(fā)展應用,使的結構力學運算和分析可以用計算機來運行,非常的簡單方便。矩陣位移法在結構力學中用于解決桿系結構的位移和內力的重要方法,它以位移法為理論基礎。矩陣位移法的基本方法是:以結點位移為基本未知量,將要分析的結構離散成一個組件,然后通過分析單元和組裝單元,簡單列出剛度方程,得到了桿端力和結點位移。其實質是一種位移法的延伸,是將矩陣運算運用到位移法中,使之可以編制成數(shù)值計算的計算機程序。借助計算機強大的運算能力,使難以完成大量的未知變量來解決,容易實現(xiàn)。因為矩陣位移法編程的存在,讓更多的結構力學問題變得簡單,能夠解決更復雜的問題。這里介紹實現(xiàn)矩陣位移法計算機程序話的思路和方法2.1 基本信息的輸入使用矩陣位移法解決問題時,首先要進行結構的離散化,這一步是需要手動完成的。首先用結點將結構進行劃分,得到一系列的結點和單元,按順序(一般用順時針)對結點和單元進行編號(如圖1,2)。這樣就可以用數(shù)字和編號描述結點坐標,單元的材料特性、所取截面的特征、支撐信息和所受荷載信息等等,為矩陣位移法分析、計算和程序應用提供信息。需要向程序提供數(shù)據(jù)有以下信息:2.1.1 結構的幾何形狀及材料特性數(shù)據(jù)這部分包括所選取的結點數(shù)量、坐標的位置、單元數(shù)、單位編號,單元的截面性質和單元的彈性模量。由于鉸結點不能確定,因此相對轉動的位置不確定,需要以上在同一位置處編不只一個號,如圖1中3、4號結點。一般根據(jù)要輸入結點和單元編號的順序依次輸入。需要注意的是,在連續(xù)梁和框架分析不考慮軸向變形,經常對程序不做任何改動,而是在數(shù)據(jù)輸入相應的結構單元設置為更大的值,可以擴大lOOO倍;沒有彎曲變形的桁架,可以設置為O。2.1.2 結構的約束情況數(shù)據(jù)結構的約束情況數(shù)據(jù)包括:約束的數(shù)量、約束處結點和方向,桁架的每個結點,包括自由端,也可視為角度位移O,如圖中的5、6結點,不需要修改源程序來提高程序的通用性。2.1.3 荷載情況數(shù)據(jù)荷載分為結點荷載和非結點荷載。在輸入時,兩者各有差別。結點荷載需要輸入荷載力作用的結點、方向和大小。而非結點荷載則需輸入荷載作用單元編號、荷載的類型、荷載的作用位置,大小和方向。2.2 剛度矩陣2.2.1 單元剛度矩陣單元剛度矩陣分為局部坐標下的單元剛度矩陣和整體坐標下的單元剛度矩陣。這里,我們把局部坐標下的單元剛度矩規(guī)格為統(tǒng)一的基本形式(假設桿的彎矩順時針為正)通常條件下,我們在手算時,對于不同的單元剛度矩陣可以簡化成不同形式,比如不考慮軸向變形的鋼架、有約束的鋼架和桁架。對于提高程序計算速度的意義來說,根據(jù)計算機擅長重復的計算,剛度矩陣化簡的意義并不不大,而起在編寫程序的時候也很麻煩。所以在電話算中,一般采用統(tǒng)一的單元剛度矩陣。把一個單元設置為兩個結點,表示成i、j。單元的局部坐標系中可將沿i、j 的方向默認為局部坐標x 方向,這樣在單元信息輸入時就自動定義了各單元的局部坐標。至于整體坐標可取水平方向為x 方向。然后由局部矩陣向整體剛度矩陣調成。根據(jù)生成的局部坐標的單元剛度矩陣后向整體坐標的剛度矩陣轉換時,只要根據(jù)單元基本信息就可以計算出與水平方向的夾角,生成新的剛度矩陣T,做矩陣乘法,就得到了整體坐標下的單元剛度矩陣。2.2.2 總剛度矩陣 總剛度矩陣反映了整個結構的基礎上引入邊界條件的剛度而形成的整體剛度矩陣法。根據(jù)形成的原因分為先處理法和后處理法。結構剛度矩陣形成前引入位移條件稱為的前處理方法;結構剛度矩陣形成之后引入位移情況稱為后處理法。當程序處理后,通常使用時,采取的后處理法,由單元剛度矩陣對號入座,形成總剛度矩陣。2.2.3 邊界條件的處理具體方法為單獨開辟4個列寬的與結構矩陣存儲有關結點的約束數(shù)據(jù)。第一列存放結點的編號,第二、三、四列存放用1、0表示的控制的結點各方向的約束情況。比如用l 代表有約束,0表示無約束。固端支座的約束信息就可以表示成1、1、1。本設計在處理界面時更簡化,直接在VB 6.0中存儲了各種約束條件的數(shù)據(jù),分為三列:約束號、結點號、約束類型(包括固定支座、鉸支座、水平輥軸支座、豎直輥軸支座、水平滑移制作、豎直滑移支座)2.2.4 非結點荷載的等效前邊在我們已經提到的數(shù)據(jù)輸入,結構的荷載因為作用位置的不同,分為結點荷載和非結點荷載。結點荷載在輸入時處理起來相對簡單,可以直接形成了結點力矢量進行輸入計算。但非結點荷載變化需要處理才可以成為結點荷載的矩陣進行運算。常用的方法為生成非結點荷載的單獨的子程序,用生成子程序求解非結點荷載作用下的單元固端力。這樣處理后,不論桿件兩端的約束情況如何,統(tǒng)一看作固定端,用位移法計算桿端支座反力,再將反力反向加在桿端,作為等效結點荷載。非負載共同結點有四種形式,可以采用加載一個程序來解決編碼來區(qū)分荷載的類型的類型。在根據(jù)荷載作用的結點、位置、大小、方向作為參數(shù)來選擇計算式,從而求出各單元下的非結點荷載。這樣就可以得到結點荷載和等效的非結點荷載疊加起來的向量為P的總負荷。2.2.5 建立求解剛度方程各結點的位移是剛度方程中的未知量。剛度方程是一個多元的線性方程組P = K ,用易于實現(xiàn)程序化的高斯消元法、矩陣分解法進行開發(fā)運算。這樣就把復雜,重復的運算用計算機來解決,實現(xiàn)矩陣位移法的程序化。2.2.6 計算桿端力根據(jù)得到的結點位移,利用下列公式就可以求出單元坐標系中單元桿端位移產生的單元桿端力:注意的是最終結果的確定是根據(jù)由單元的非結點荷載產生的單元固端力疊加確定的各單元的桿端力。公式拓展為:+這一步利用矩陣乘法進行運算。矩陣乘法程序化也很容易實現(xiàn),這樣就把復雜,重復的運算用計算機來解決,實現(xiàn)矩陣位移法的程序化。 例題:求解圖l 所示剛架內力的數(shù)據(jù)輸入和結果輸出。 輸入數(shù)據(jù):3,5,3,l,l “單元數(shù)、結點數(shù)、特殊點數(shù)、結點荷載數(shù)目、非結點荷載數(shù)目”0.0,0.0,4.0,0.0,0.0,4.0,0.0,4.0,4.0,4.0 “各結點坐標(按結點編號順序輸入)”l,3,0.3l2E + 07,0.4l6E + 05,4,5,0.3l2E + 07,0.4l6E + 05,2,5,0.3l2E + 07,0.4l6E + 05“各單元定義,包括單元兩端結點編號、的值(按單元編號順序輸入)”l,l,l,l,2,l,l,l,4,3,3,0 “約束信息(l 代表有約束,0 代表無約束)”4.l,30.0 “結點荷載信息”l.0,l.0,4.0, - 20.0 “非結點荷載信息(正負號號代表方向)”結果輸出:NE = 3 NJ = 5 NS = 3 NPJ = l NPF = l NODAL POINT COORDINATES NODE X Y l .0000 .0000 2 4.0000 .0000 3 .0000 4.0000 4 .0000 4.0000 5 4.0000 4.0000ELEMENT DATANUMBER NODE - I NODE - J EA EI 1 l 3 .3l2000E + 07 .4l6000E + 05 2 4 5 .3l2000E + 07 .4l6000E + 05 3 2 5 .3l2000E + 07 .4l6000E + 05SPECISL NODAL POINT DATA NUMBER XX YY ZZ 1 l l l 2 l l l 4 3 3 0NODAL POINT LOAD DATA NODE PX - PY - PZ 4.l 30.0000NO - NODAL POINT LOAD DATA NUMBER CLASS RANGE LOAD l. l. 4.000 - 20.000DISPLACEMENTS OFNODESELEMENT NUMBER V SATA l .000000E + 00 .000000E + 00 .000000E + 00 2 .000000E + 00 .000000E + 00 .000000E + 00 3 .94l2l2E - 02 .l99973E - 04 .288852E - 02 4 .94l2l2E - 02 .l99973E - 04 - .989866E - 03 5 .935873E - 02 - .l99973E - 04 200973E - 02ELEMENT THRUSE/ SHEAR/MOMENT ELEMENT NUMBER THRUSE SHEAR MOMENT 1 Nl = - l5.5979 Ql = 68.3536 Ml = - ll3.4l46 N2 = l5.5979 Q2 = ll.6464 M2 = .0000 2 Nl = 4l.6464 Ql = - l5.5979 Ml = .0000 N2 = - 4l.6464 Q2 = l5.5979 M2 = 62.39l5 3 N1 = 15.5979 Q1 = 41.6464 M1 = - 104.1939 N2 = - 15.5979 Q2 = - 41.6464 M2 = - 62.39152.3 矩陣位移法Fortran程序矩陣位移法中的整體剛度方程為F= (1)式中為nn方陣,是桿系的整體剛度矩陣。n= ,s為結點位移的自由度數(shù);m為結點數(shù)。拉伸(壓縮)、扭轉、s=1;彎曲s=2;彎扭組合s=3;平而析架s=2;平而剛架s=3等等。F為結點載荷列陣;為結點位移列陣。 單元的基本變形有三種:拉(壓)、扭轉、彎曲。一般的變形形式都可以認為是這三種基本變形的組合。整體剛度矩陣可由單元剛度矩陣疊加而成。因為拉(壓)與扭轉的單元剛度矩陣形式相同,這樣就只有兩種單元剛度矩陣。整體剛度矩陣形成后,需要把單元剛度矩陣的各元素放到相應位置,在操作時是十分繁瑣的。單元較多時更是讓人難以忍受,很容易出錯。所以要進行以下處理。對于析架、剛架等,各單元軸線方向各異。在整體坐標中的單元剛度矩陣不能直接寫出。但在以各單元軸線為x軸的局部坐標中的單元剛度矩陣可由基本變形的單元剛度矩陣直接寫出,然后得到整體坐標系下的單元剛度矩陣: (2)注:式中為整體坐標中的單元剛度矩陣;為坐標變換矩陣;為坐標變換矩陣的轉置矩陣;為局部坐標中單元剛度矩陣。根據(jù)疊加得到整體剛度矩陣.整體剛度方程式(1)也可寫成: = (1) 對于實際結構都可以知道有一定數(shù)量的結點位移。假定有p個位移已知,則要在式(1)中將結點位移的項移到方程的右邊并將對應的行由方程中去掉。這時方程的階數(shù)變?yōu)閞=n-p.即得到方程 (3) 通過這方程解出未知位移,再加上已知位移就得到了所有結點位移。再將其代入原方程中可解出未知結點力,再加上已知結點力即可得到全部結點力.單元結點力= (4)式中為單元結點位移,由中相應元素組成。 對于桁架、剛架等應給出局部坐標中的結點力和結點位移 (5) (6) 由局部坐標中的,-u點力和結點位移就可以進行單元的強度和剛度計算。將上述過程寫成了圖1所示的程序,可以解決:拉伸(壓縮)、扭轉、彎曲、拉扭組合、拉彎組合、彎扭組合、拉扭彎組合、平面桁架、平面剛架等9個方面的問題。把已知條件按設定的格式輸入就能運算出問題的解。為了便于數(shù)據(jù)的輸入和修改,已知條件要以文件的形式給出。323 基于VB 6.0的矩陣位移法Fortran的可視化開發(fā)3.1 基于VB 6.0 的矩陣位移法Fortran的混合編程及可視化開發(fā)3.1.1 基于VB 6.0的Fortran混合編程的兩種方法及對比 實現(xiàn) VB 6.0 與 Fortran 的混合編程主要方法有兩種:第一種,VB 直接調用可執(zhí)行文件( 利用Shell函數(shù)直接調用Fortran編譯出來的可執(zhí)行文件) ;第二種,利 用 動態(tài) 鏈 接 庫 DLL( Dynamic Link Library) 與Fortran混合編程(1)采用VB 6.0直接調用 Fortran 可執(zhí)行文件的方法 利用 VB 6.0編寫程序的界面部分, 后將Fortran 的應用程序編譯成可執(zhí)行的應用程序。計算時, 由VB 6.0應用程序啟動由Fortran編譯成的可執(zhí)行文件。在計算結束后, 將計算數(shù)據(jù)以數(shù)字或者圖形的形式顯示在 VB 6.0 的界面上。程序整個運行過程,Fortran 應用程序編譯成的可執(zhí)行文件一直在后臺運行,建立連接接口,通過磁盤文件對 VB 6.0和 Fortran 之間的所有數(shù)據(jù)進行交換。具體步驟是先在Fortran Power Station 中編寫 Fortran 的源程序代碼, 并編譯成可執(zhí)行文件。然后在 VB 6.0需要調用時, 利用Shell 函數(shù)調用就可以了。Shell 函數(shù)語法如下:Shell(pathname, window style )pathname 是可執(zhí)行文件的程序名, 含有所必需的目錄、文件夾、驅動器。Windowstyle 表示在程序運行時,Fortran窗口的樣式。例如, 在VB中調用Fortran編譯成的可執(zhí)行文件生成的 work 目錄下的計算程序test.exe, 語法如下:Call shell ( D: worktest. exe, vbNormalfocus)此方法適合于交互操作不多的情況。Shell 函數(shù)是以異步方式執(zhí)行的, 這種執(zhí)行方式使 VB 6.0程序不能等待 Fortran 程序計算結束就繼續(xù)執(zhí)行后續(xù)的程序, 使最終運算過程錯亂,結果非常容易出現(xiàn)錯誤。(2)調用 Fortran 動態(tài)鏈接庫 此方法是將Fortran的源代碼分成若干個子程序或函數(shù), 并編譯生成.DLL 文件。用VB 6.0編寫主程序。在使用時調用編譯好的. DLL 文件, 從而實現(xiàn) VB 6.0和Fortran的混合編程。創(chuàng)建Fortran的動態(tài)鏈接庫的源程序必須是子程序或函數(shù), 不能有主程序。還有注意的是,必須明確外部例程的實現(xiàn)機制、調用約定(調用約定就是明確程序如何調用過程, 傳遞過程以及命名規(guī)范)、例程名和參數(shù)列表。做到這些,VB 6.0在導入動態(tài)鏈接時才能協(xié)調好。調用約定就是明確程序如何調用過程, 傳遞過程以及命名規(guī)范。Fortran Power Station 中三個調用約定: C、ST DCALL 及缺省約定。而VB6.0只有兩個調用約定: 缺省約定、 DCALL調用約定。通常, 兩種語言統(tǒng)一采用缺省調用約定。具體的聲明語句是:! MS ATT RIBUT ES DLLEXPORT : : name變量傳遞的缺省方式是“傳址”。若變量采用數(shù)值傳遞, 需要在參數(shù)前添加ByVal 屬性; 而且同時要注意 Fortran 和 VB 6.0之間數(shù)據(jù)類型的對應關系, 具體見表 1。由于 Fortran 語言的數(shù)組變量是從 1開始 , 而VB 6.0數(shù)組變量隱含從 0 開始的。 在數(shù)組傳遞時, 如果使用隱含傳遞,需要注意數(shù)組元素的傳遞次序。如果事先聲明數(shù)組的上、下限, 則可以免去許多不必要的麻煩。對于多維數(shù)組, VB和Fortran都是按列傳遞的。按照這些規(guī)則, 在 VB 對 Fortran 動態(tài)鏈接庫源文件的調用過程中, 多維數(shù)組一般定義為維數(shù)和大小都相同的。這樣就可使實現(xiàn)傳遞時, 只對齊數(shù)組第一個元素即可。 VB 6.0引用動態(tài)鏈接庫前, 必須先用 Declare語句在模塊級聲明外部過程。具體的語法是: Public Declare Sub subname lib “l(fā)ibname”Alias “aliasname”( arglist) Declare語句的各部分說明如下: Public: 用于聲明在所有模塊中對所有其他過程均合法的過程;Sub subname: 指明該過程無返回值;Lib“l(fā)ibname”: 指明DLL 文件及其路徑;Alias “aliasname”: 指明被調用過程在 DLL中的別名, 這一屬性是必須的。aliasname語法及組成部分如下:-subnamen其中, n 為棧的大小, 它是 4 的倍數(shù)。arglist: 當被調用時, 代表被傳送到該過程的參數(shù)的變量清單。arglist 參數(shù)有下列語法和組成部分:ByRef?ByVal?argument As TypeByRef: 指明參數(shù)按“傳址”方式傳遞;ByVal: 指明參數(shù)按“傳值”方式傳遞演示程序。Fortran 子程序代碼:SUBROUT INE ARRAYT EST(n,arr)! AT T RIBUTES DLLEXPORT: : ARR-AYTEST INT EGER n,i,j REAL( 4) arr( 3, 3) DO i= 1, 3 DO j= 1, 3 arr(i,j) = 10. 1* i+ j END DO END DO n= n+ 10 END SUBROUT INE編譯生成 exam. DLL 文件, 將文件拷到 C:WINDOWSSYST EM 子 目錄下。由于 子程 序ARRAYTEST 只有兩個 參數(shù), 故它的別 名為ARRAYT EST 8。EXAM. VBP 是一個VB 程序, 它包含一個窗體 FORM1. FRM; 一個命令按鈕 Command1 和兩個文本框 Text1、Text2。兩個文本框的作用是為了顯示返回的結果, 以檢驗程序是否正確執(zhí)行。FORM1. FRM 代碼如下: Private Declare Sub ARRAYT EST LibEXAM. dll Alias ARRAYT EST 8 (XASLONG,YAS SINGLE) Private Sub Command1-Click( )Dim a As Long Dim ab( 1T o 3, 1T o 3) As Single a= 10 Call ARRAYT EST ( a, ab( 1, 1) ) Text1.T ext= Str(a) Text2. T ext= Str( ab( 3, 3) ) End Sub 運行后 T ext1. Text 為 20, T ext2. Text 為33. 3, 結果正確。以上程序均在 Visual Basic 6. 0 和 Fortran Power Station 4. 0 環(huán)境下運行。(3)兩種方法的比較使用動態(tài)鏈接庫和VB 6.0直接調用 Fortran 編譯生成的可執(zhí)行文件( . exe 文件)這兩種方法都可以實現(xiàn) VB 6.0和Fortran的混合編程。但是它們還是有一定區(qū)別的, 具體比較如表 2 所示。 介紹了兩種方法來實現(xiàn)的Fortran用戶友好的,在一般情況下,每個國家都有它的優(yōu)點和缺點:VB直接調用Fortran編譯的可執(zhí)行文件是簡單的,但這種方法很容易犯錯誤,不利于大型程序的開發(fā);和強大的使用動態(tài)鏈接庫DLL,不僅功能齊全,占據(jù)一個小磁盤和內存空間,并且比第一種方法更實用。 VB中有操作簡便的優(yōu)點,非常適合非計算機專業(yè)的程序員使用。3.1.2 基于VB 6.0的矩陣位移法Fortran的可視化開發(fā)混合兩種語言Fortran和VB開發(fā)科學計算軟件,一般有兩種方法:一是用VB界面設計和控制程序, Fortran程序被編譯為動態(tài)鏈接庫,由VB程序調用它。通過實現(xiàn),對于海量數(shù)據(jù)的交換是不經濟的,而且難以處理傳入的數(shù)據(jù)交換的參數(shù)。二是設計用VB 6.0接口, Fortran程序會被編譯成一個可執(zhí)行程序,在適當?shù)臅r候由VB 6.0程序啟動它,計算后,結果顯示在VB 6.0界面上。整個計算和處理過程,F(xiàn)ortran程序一直在后臺運行。VB 6.0和Fortran間的所有數(shù)據(jù)都通過磁盤文進行交換,交換海量數(shù)據(jù)非常經濟,效率也非常高。由于有些結構比較復雜,桿件個數(shù)比較多,擁有大量的待處理的數(shù)據(jù),因此該系統(tǒng)采用了第二種方法。即利用VB 6.0的shell函數(shù)來調用Fortran應用程序。Fortran優(yōu)化程序同步運行的實現(xiàn):在VB 6.0界面上設置好界面和按鈕,對每個按鈕設置好對應的數(shù)據(jù)庫位置,植入可執(zhí)行文件,用shell函數(shù)處理可執(zhí)行文件運行。輸出的數(shù)據(jù)進行處理,使之形成自動形成表格。運用表格的數(shù)據(jù)進行再設置,使結果輸出數(shù)據(jù)對應到圖像成型中,形成計算后的結果。所需要解決的問題和辦法如下:(1) “Shell函數(shù)是以異步方式執(zhí)行問題的解決。Shell函數(shù)是異步執(zhí)行的,不等Fortran程序結束就繼續(xù)執(zhí)行后續(xù)VB 6.0程序,使VB 6.0得不到最終的數(shù)據(jù)結果而出錯。W in32API提供的進程操作函數(shù)可解決上述外殼程序的異步運行問題。實現(xiàn)等待Shell程序的執(zhí)行,從而解決Shell函數(shù)異步執(zhí)行的問題。W in32API可提供的API函數(shù)為:OpenProcess、WaitForSingleObject、C1oseHandle、GetExitCodeProcess等。聲明的方法為:打開VB界面中【外接程序】/AP I程序,在文件中添加“C: ProgramFilesMicrosoft Visual StudioCommonTools Winapi win21API. TXT 。聲明Openprocess和C1oseH andle或Openprocess和GetExitCodeProcess(2) 黑屏問題的解決。由于Fortran程序在DOS環(huán)境下運行,在windows平臺運行容易進入DOS界面而造成黑屏。用shell(pathname,【windows】)函數(shù)啟動Fortran外殼程序,外殼程序的窗口風格由可選參數(shù)windowstyle的取值決定,取值為VBHide就能隱藏外殼程序的運行窗口而解決黑屏問題。(3) 優(yōu)化程序的自動生成和執(zhí)行。Fortran源文件的生成采用文件操作結合print過程和文本框來實現(xiàn)。為減少程序的處理量,將主程序和優(yōu)化方法子程序事先編譯成目標代碼,程序僅生成和優(yōu)化模型有關的目標函數(shù)、約束條件子程序文件和優(yōu)化參數(shù)數(shù)據(jù)文件。由shell函數(shù)啟動相關程序生成優(yōu)化計算程序并執(zhí)行優(yōu)化計算,避開了用戶的編程和調試過程。 作為結構力學算法可視化系統(tǒng),最關鍵的是用戶只需要輸入架構的最少量信息,由系統(tǒng)自動完成的工作的信息,以直觀的方式顯示給用戶,但用戶同時保持該系統(tǒng)的控制不是盲目地接受系統(tǒng)的輸出。該系統(tǒng)通過上述方法,不僅解決了數(shù)據(jù)可視化的現(xiàn)實問題,也實現(xiàn)了Fortran和VB之間無縫連接,為系統(tǒng)的后處理創(chuàng)造了條件。Fortran和VB數(shù)據(jù)交換如圖4所示的:3.2 應用實例 平面剛架計算程序舉例和簡要說明 程序名:FEM2.FOR2、 功能:用于平面剛架受一般荷載作用下的結點位移、內力和支座反力的計算。程序說明:(1)輸入變量說明表1-1輸入數(shù)據(jù)總表次序變量名說明輸入格式1NENPNRMTMX單元總數(shù)結點總數(shù)支座結點數(shù)材料類型數(shù)組工況數(shù)自由格式2AEAE(1:MT,1:3):材料特性數(shù)組AE(,1):組彈模AE(,2):組截面積AE(,3):組慣性矩自由格式3EPEP(1:NE,3):單元信息 EP(,1):單元端結點編號EP(,2):單元端結點編號 EP(,3):單元材料類型號自由格式4RPRP(1:NR,4):支座結點信息自由格式5XZXZ(1:NP,1:2):結點坐標XZ(,1)坐標XZ(,2)坐標自由格式6KI2受結點荷載的結點數(shù)自由格式7MI2受結點荷載的結點編號 MI2(1:KI2)自由格式8FI2FI2(1:KI2,1:3):結點荷載值FI2(,1):結點的向集中力FI2(,2):結點的向集中力FI2(,3):結點繞軸集中力矩(均為整體坐標方向)自由格式9KI3受荷載的單元數(shù)自由格式10MI3受荷載的單元號MI3(1:KI3)自由格式11FI3FI3(1:KI3,1:6)單元六個固端力值端:FI3(,1):單元軸力FI3(,2):單元剪切力 FI3(,3):單元彎矩端:FI3(,4):單元軸力FI3(,5):單元剪切力 FI3(,6):單元彎矩(均為局部坐標方向)自由格式(2) 其他主要變量及其說明 NX 自由度數(shù); NH 一維變帶寬存貯總容量; RR(1:NM,1:3)結點自由度序號數(shù)組; AA(1:NX)整體勁度矩陣主元素在一維存貯中的序號; GG(1:6)單元兩端6個方程號; ME(1:2)單元兩端結點號; LT(1:3,1:3)轉換矩陣; KE(1:6,1:6)整體坐標系中的單元勁度矩陣; KK(1:NH)整體勁度矩陣一維變帶寬存貯數(shù)組; FF(1:NX)先放可動結點等效荷載,后放可動結點位移; UV(1:NE,1:6)單元桿端力; FMJ(1:3)單元J端桿端力; FMK(1:3)單元K端桿端力; RC(1:NR,1:3)支座反力; DD(1:3),U(1:6),V(1:6)工作單元。(3) 各子程序段功能INPUT輸入除荷載信息外的所有變量;FORRR形成結點自由度序號數(shù)組RR;FORAA形成一維存貯指示矩陣AA;FORKK形成KK;DIVKK求解方程的分解階段;FORFF輸入荷載信息,形成可動結點等效荷載列陣FF;FORDIS求解方程的前代、回代階段,形成可動結點位移列陣FF;FORFM求桿端力;FORRC求支座反力;KET形成整體坐標系中的單元勁度矩陣KE;DIV分解單元信息;MIC求旋轉矩陣及分解材料類型數(shù)組;GGT形成單元6個方程序號。(4) 例題一平面剛架如圖1-1()所示,剛架各桿尺寸及所受荷載如圖上所示,各桿的彈性模量2、橫截面面積0.05、慣性矩0.005,求內力及支座反力。建立整體坐標和局部坐標,如圖1-1()所示,單元編號和結點編號亦如圖中所示。圖1 剛架(1)輸入文件數(shù)據(jù)3 4 2 1 12000000.0 0.05 0.0051 2 1 2 3 1 4 3 11 0 0 0 4 0 0 00.0 0.00.0 4.04.5 4.04.5 0.01220.0 0.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論