已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Abstreact基于VB的矩陣位移法的fortrans的可視化開發(fā)畢業(yè)論文目錄1 緒論11.1 研究的目的和意義11.2 基于VB的矩陣位移法Fortran的可視化開發(fā)研究的方法概述21.3 本文的主要工作22 簡介矩陣位移法程序化的實現(xiàn)42.1 基本信息的輸入42.1.1 結(jié)構(gòu)的幾何形狀及材料特性數(shù)據(jù)52.1.2 結(jié)構(gòu)的約束情況數(shù)據(jù)52.1.3 荷載情況數(shù)據(jù)62.2 剛度矩陣62.2.1 單元剛度矩陣62.2.2 總剛度矩陣72.2.3 邊界條件的處理72.2.4 非結(jié)點荷載的等效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 應(yīng)用實例20平面剛架計算程序舉例和簡要說明20II泰山學(xué)院本科畢業(yè)設(shè)計1 緒論1.1 研究的目的和意義 矩陣位移法在結(jié)構(gòu)力學(xué)中用于解決桿系結(jié)構(gòu)的位移和內(nèi)力的重要方法,它以 位移法為理論基礎(chǔ)。矩陣位移法的基本方法是:以結(jié)點位移為基本未知量,將要分 析的結(jié)構(gòu)離散成一個組件,然后通過分析單元和組裝單元,簡單列出剛度方程,得 到了桿端力和結(jié)點位移。其實質(zhì)是一種位移法的延伸,是將矩陣運(yùn)算運(yùn)用到位移 法中,使之可以編制成數(shù)值計算的計算機(jī)程序。借助計算機(jī)強(qiáng)大的運(yùn)算能力,使難 以完成大量的未知變量來解決,容易實現(xiàn)。因為矩陣位移法編程的存在,讓更多的 結(jié)構(gòu)力學(xué)問題變得簡單,能夠解決更復(fù)雜的問題。矩陣位移法通常使用Fortran語言編寫的計算機(jī)程序。Fortran語言起源于 1950年代,是最早適用于科學(xué)計算的計算機(jī)語言。Fortran語言的高度標(biāo)準(zhǔn)化、 易于程序交換和交易優(yōu)化,而且具有非常精確的數(shù)據(jù)結(jié)構(gòu)。雖然經(jīng)過多年的發(fā)展, 應(yīng)用Fortran語言有了很大發(fā)展。并與C+語言相比,Fortran編程具有C+所有的重要功能。然而,Fortran語言有其本身無法克服的缺點。圖形處理能力弱,人機(jī)界面交換僵硬,而且應(yīng)該運(yùn)行在DOS環(huán)境下,黑色的屏幕和可憐的兼容性都無法滿足需求。相對于編程人員不熟悉,使用起來更費(fèi)力又容易出錯。矩陣位移法 只在Fortran語言計算結(jié)果,及其復(fù)雜的計算過程和結(jié)果圖形表達(dá)不好,應(yīng)用和推廣方面非常不利。Visual Basic是微軟開發(fā)協(xié)助開發(fā)環(huán)境的事件驅(qū)動編程語言, 它來自BASIC編程語言,是現(xiàn)今全球使用人數(shù)最多的編程語言。VB的圖形用戶界面(GUI)和快速應(yīng)用程序開發(fā)(RAD)系統(tǒng),可以輕松創(chuàng)建ActiveX控件,也很容易地使用DAO、RDO、ADO連接數(shù)據(jù)庫。程序員可以很容易地使用VB組件來快速創(chuàng)建應(yīng)用程序。 經(jīng)過多年的發(fā)展,VB 6.0已經(jīng)很成熟,是一個基于Windows平臺的開發(fā)工具,以其靈活簡單,易于使用和功能強(qiáng)大,界面友好等優(yōu)點,獲得了非計算機(jī)專業(yè)的程序員的喜愛。然而,Visual Basic 6.0也有自己的缺點,如計算能力差,執(zhí)行速度慢等等。通過基于Visual Basic 6.0對矩陣位移法 Fortran語言進(jìn)行開發(fā),實現(xiàn)在Windows環(huán)境下運(yùn)行,同時也實現(xiàn)了既可以延續(xù)矩陣位移法Fortran語言高效的計算能力,又矩陣位移法程序界面更友好。非專業(yè)程序員靈活的借助計算機(jī)運(yùn)行矩形位移法,在計算機(jī)的幫助下也可以簡單和直接的獲取計算結(jié)果,提高項目運(yùn)作的工作效率。1.2 基于VB的矩陣位移法Fortran的可視化開發(fā)研究的方法概述基于VB 6.0的矩形位移法Fortran的界面化開發(fā)設(shè)計采用矩陣位移法為基本原理,通過Visual Basic 6.0和Fortran混合編程的方法,實現(xiàn)矩陣位移法程序的可視化更優(yōu)化。矩陣位移法的Fortran編程經(jīng)過多年來的不斷開發(fā)已經(jīng)非常成熟,是應(yīng)用非常廣泛的矩陣位移法計算程序。本設(shè)計首先把矩陣位移法Fortran編程語言轉(zhuǎn)化成VB 6.0可以直接調(diào)用的可執(zhí)行文件,實現(xiàn)在VB 6.0中執(zhí)行矩陣位移法Fortran的運(yùn)算,再基于VB 6.0進(jìn)行程序可視化的優(yōu)化。 在第三章中詳細(xì)說明所用到的VB 6.0直接調(diào)用Fortran編程語言的可執(zhí)行文件的方法、VB 6.0和Fortran的接口、VB調(diào)用用Fortran編譯的可執(zhí)行文件(矩陣位移法Fortran可執(zhí)行文件)、shell函數(shù)異步執(zhí)行和黑屏的解決方案。然后對運(yùn)算結(jié)果進(jìn)行可視化處理。在WINDOWS平臺上,使用VB 6.0軟件和FORTAN混合編程計算的矩陣位移法,現(xiàn)成的矩形位移法的前后期的運(yùn)算輸入、輸出簡單明了,結(jié)果可以由圖像直觀的顯示出來。1.3 本文的主要工作本文介紹用Visual Basic 6.0為平臺,將矩陣位移法Fortran編程語言轉(zhuǎn)換為Visual Basic 6.0的可執(zhí)行,生成Visual Basic 6.0的一個子程序。介紹順序為矩陣位移法的原理和矩陣位移法編程、VB 6.0和Fortran混合編程方法及其對比、基于VB的矩陣位移法Fortran的可視化開發(fā)。(1)矩陣位移法程序化的實現(xiàn)部分討論了矩陣位移法計算機(jī)程序?qū)崿F(xiàn)過程中注意的幾個問題:基本信息的輸入,剛度矩陣,邊界條件處理,非結(jié)點荷載的等效,建立求解剛度方程,計算桿端力。提供一些關(guān)于如何利用程序解決剛架、桁架、連續(xù)梁的位移和內(nèi)力等問題的幫助(2)對基于Visual Basic 6.0的矩陣位移法Fortran程序進(jìn)行兼容,制作出可應(yīng)用的編程程序,并進(jìn)行可視化前后處理界面。介紹混合編程的主要方法,對混合編程中出現(xiàn)的每一個問題所需要的解決方案進(jìn)行簡要的描述,對在Visual Basic 6.0中對于Fortran程序的調(diào)用進(jìn)行簡要說明。(3)生成基于VB 6.0的矩陣位移法Fortran軟件,達(dá)到程序操作簡單,數(shù)據(jù)以文件形式輸入,為檢查和修改方便,每項數(shù)據(jù)都可以清晰的顯示出來。程序在運(yùn)行時,自動由輸入的數(shù)據(jù)生成圖形,通過圖中的各種信息可以很容易檢驗出信息是否出錯。計算結(jié)束后,計算結(jié)果自動生成圖像,達(dá)到預(yù)測結(jié)構(gòu)承受荷載后的情況。所生成的程序為exe格式,程序小,對計算機(jī)沒有特殊要求。(4)應(yīng)用基于Visual Basic 6.0的矩陣位移法的可視化程序進(jìn)行例題計算,驗證程序的正確性和易用性。2 簡介矩陣位移法程序化的實現(xiàn)隨著工程技術(shù)和材料等的發(fā)展,工程結(jié)構(gòu)向復(fù)雜化、大型化的發(fā)展,傳統(tǒng)的結(jié)構(gòu)力學(xué)運(yùn)算和分析方法很難進(jìn)行大型復(fù)雜的結(jié)構(gòu)分析任務(wù)。上世紀(jì)六十年代,隨著計算機(jī)技術(shù)的快速發(fā)展和在結(jié)構(gòu)計算方面的應(yīng)用,矩陣位移法程序化得到了廣泛的發(fā)展應(yīng)用,使的結(jié)構(gòu)力學(xué)運(yùn)算和分析可以用計算機(jī)來運(yùn)行,非常的簡單方便。矩陣位移法在結(jié)構(gòu)力學(xué)中用于解決桿系結(jié)構(gòu)的位移和內(nèi)力的重要方法,它以位移法為理論基礎(chǔ)。矩陣位移法的基本方法是:以結(jié)點位移為基本未知量,將要分析的結(jié)構(gòu)離散成一個組件,然后通過分析單元和組裝單元,簡單列出剛度方程,得到了桿端力和結(jié)點位移。其實質(zhì)是一種位移法的延伸,是將矩陣運(yùn)算運(yùn)用到位移法中,使之可以編制成數(shù)值計算的計算機(jī)程序。借助計算機(jī)強(qiáng)大的運(yùn)算能力,使難以完成大量的未知變量來解決,容易實現(xiàn)。因為矩陣位移法編程的存在,讓更多的結(jié)構(gòu)力學(xué)問題變得簡單,能夠解決更復(fù)雜的問題。這里介紹實現(xiàn)矩陣位移法計算機(jī)程序話的思路和方法2.1 基本信息的輸入使用矩陣位移法解決問題時,首先要進(jìn)行結(jié)構(gòu)的離散化,這一步是需要手動完成的。首先用結(jié)點將結(jié)構(gòu)進(jìn)行劃分,得到一系列的結(jié)點和單元,按順序(一般用順時針)對結(jié)點和單元進(jìn)行編號(如圖1,2)。這樣就可以用數(shù)字和編號描述結(jié)點坐標(biāo),單元的材料特性、所取截面的特征、支撐信息和所受荷載信息等等,為矩陣位移法分析、計算和程序應(yīng)用提供信息。需要向程序提供數(shù)據(jù)有以下信息:2.1.1 結(jié)構(gòu)的幾何形狀及材料特性數(shù)據(jù)這部分包括所選取的結(jié)點數(shù)量、坐標(biāo)的位置、單元數(shù)、單位編號,單元的截面性質(zhì)和單元的彈性模量。由于鉸結(jié)點不能確定,因此相對轉(zhuǎn)動的位置不確定,需要以上在同一位置處編不只一個號,如圖1中3、4號結(jié)點。一般根據(jù)要輸入結(jié)點和單元編號的順序依次輸入。需要注意的是,在連續(xù)梁和框架分析不考慮軸向變形,經(jīng)常對程序不做任何改動,而是在數(shù)據(jù)輸入相應(yīng)的結(jié)構(gòu)單元設(shè)置為更大的值,可以擴(kuò)大lOOO倍;沒有彎曲變形的桁架,可以設(shè)置為O。2.1.2 結(jié)構(gòu)的約束情況數(shù)據(jù)結(jié)構(gòu)的約束情況數(shù)據(jù)包括:約束的數(shù)量、約束處結(jié)點和方向,桁架的每個結(jié)點,包括自由端,也可視為角度位移O,如圖中的5、6結(jié)點,不需要修改源程序來提高程序的通用性。2.1.3 荷載情況數(shù)據(jù)荷載分為結(jié)點荷載和非結(jié)點荷載。在輸入時,兩者各有差別。結(jié)點荷載需要輸入荷載力作用的結(jié)點、方向和大小。而非結(jié)點荷載則需輸入荷載作用單元編號、荷載的類型、荷載的作用位置,大小和方向。2.2 剛度矩陣2.2.1 單元剛度矩陣單元剛度矩陣分為局部坐標(biāo)下的單元剛度矩陣和整體坐標(biāo)下的單元剛度矩陣。這里,我們把局部坐標(biāo)下的單元剛度矩規(guī)格為統(tǒng)一的基本形式(假設(shè)桿的彎矩順時針為正)通常條件下,我們在手算時,對于不同的單元剛度矩陣可以簡化成不同形式,比如不考慮軸向變形的鋼架、有約束的鋼架和桁架。對于提高程序計算速度的意義來說,根據(jù)計算機(jī)擅長重復(fù)的計算,剛度矩陣化簡的意義并不不大,而起在編寫程序的時候也很麻煩。所以在電話算中,一般采用統(tǒng)一的單元剛度矩陣。把一個單元設(shè)置為兩個結(jié)點,表示成i、j。單元的局部坐標(biāo)系中可將沿i、j 的方向默認(rèn)為局部坐標(biāo)x 方向,這樣在單元信息輸入時就自動定義了各單元的局部坐標(biāo)。至于整體坐標(biāo)可取水平方向為x 方向。然后由局部矩陣向整體剛度矩陣調(diào)成。根據(jù)生成的局部坐標(biāo)的單元剛度矩陣后向整體坐標(biāo)的剛度矩陣轉(zhuǎn)換時,只要根據(jù)單元基本信息就可以計算出與水平方向的夾角,生成新的剛度矩陣T,做矩陣乘法,就得到了整體坐標(biāo)下的單元剛度矩陣。2.2.2 總剛度矩陣 總剛度矩陣反映了整個結(jié)構(gòu)的基礎(chǔ)上引入邊界條件的剛度而形成的整體剛度矩陣法。根據(jù)形成的原因分為先處理法和后處理法。結(jié)構(gòu)剛度矩陣形成前引入位移條件稱為的前處理方法;結(jié)構(gòu)剛度矩陣形成之后引入位移情況稱為后處理法。當(dāng)程序處理后,通常使用時,采取的后處理法,由單元剛度矩陣對號入座,形成總剛度矩陣。2.2.3 邊界條件的處理具體方法為單獨(dú)開辟4個列寬的與結(jié)構(gòu)矩陣存儲有關(guān)結(jié)點的約束數(shù)據(jù)。第一列存放結(jié)點的編號,第二、三、四列存放用1、0表示的控制的結(jié)點各方向的約束情況。比如用l 代表有約束,0表示無約束。固端支座的約束信息就可以表示成1、1、1。本設(shè)計在處理界面時更簡化,直接在VB 6.0中存儲了各種約束條件的數(shù)據(jù),分為三列:約束號、結(jié)點號、約束類型(包括固定支座、鉸支座、水平輥軸支座、豎直輥軸支座、水平滑移制作、豎直滑移支座)2.2.4 非結(jié)點荷載的等效前邊在我們已經(jīng)提到的數(shù)據(jù)輸入,結(jié)構(gòu)的荷載因為作用位置的不同,分為結(jié)點荷載和非結(jié)點荷載。結(jié)點荷載在輸入時處理起來相對簡單,可以直接形成了結(jié)點力矢量進(jìn)行輸入計算。但非結(jié)點荷載變化需要處理才可以成為結(jié)點荷載的矩陣進(jìn)行運(yùn)算。常用的方法為生成非結(jié)點荷載的單獨(dú)的子程序,用生成子程序求解非結(jié)點荷載作用下的單元固端力。這樣處理后,不論桿件兩端的約束情況如何,統(tǒng)一看作固定端,用位移法計算桿端支座反力,再將反力反向加在桿端,作為等效結(jié)點荷載。非負(fù)載共同結(jié)點有四種形式,可以采用加載一個程序來解決編碼來區(qū)分荷載的類型的類型。在根據(jù)荷載作用的結(jié)點、位置、大小、方向作為參數(shù)來選擇計算式,從而求出各單元下的非結(jié)點荷載。這樣就可以得到結(jié)點荷載和等效的非結(jié)點荷載疊加起來的向量為P的總負(fù)荷。2.2.5 建立求解剛度方程各結(jié)點的位移是剛度方程中的未知量。剛度方程是一個多元的線性方程組P = K ,用易于實現(xiàn)程序化的高斯消元法、矩陣分解法進(jìn)行開發(fā)運(yùn)算。這樣就把復(fù)雜,重復(fù)的運(yùn)算用計算機(jī)來解決,實現(xiàn)矩陣位移法的程序化。2.2.6 計算桿端力根據(jù)得到的結(jié)點位移,利用下列公式就可以求出單元坐標(biāo)系中單元桿端位移產(chǎn)生的單元桿端力:注意的是最終結(jié)果的確定是根據(jù)由單元的非結(jié)點荷載產(chǎn)生的單元固端力疊加確定的各單元的桿端力。公式拓展為:+這一步利用矩陣乘法進(jìn)行運(yùn)算。矩陣乘法程序化也很容易實現(xiàn),這樣就把復(fù)雜,重復(fù)的運(yùn)算用計算機(jī)來解決,實現(xiàn)矩陣位移法的程序化。 例題:求解圖l 所示剛架內(nèi)力的數(shù)據(jù)輸入和結(jié)果輸出。 輸入數(shù)據(jù):3,5,3,l,l “單元數(shù)、結(jié)點數(shù)、特殊點數(shù)、結(jié)點荷載數(shù)目、非結(jié)點荷載數(shù)目”0.0,0.0,4.0,0.0,0.0,4.0,0.0,4.0,4.0,4.0 “各結(jié)點坐標(biāo)(按結(jié)點編號順序輸入)”l,3,0.3l2E + 07,0.4l6E + 05,4,5,0.3l2E + 07,0.4l6E + 05,2,5,0.3l2E + 07,0.4l6E + 05“各單元定義,包括單元兩端結(jié)點編號、的值(按單元編號順序輸入)”l,l,l,l,2,l,l,l,4,3,3,0 “約束信息(l 代表有約束,0 代表無約束)”4.l,30.0 “結(jié)點荷載信息”l.0,l.0,4.0, - 20.0 “非結(jié)點荷載信息(正負(fù)號號代表方向)”結(jié)果輸出: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為結(jié)點位移的自由度數(shù);m為結(jié)點數(shù)。拉伸(壓縮)、扭轉(zhuǎn)、s=1;彎曲s=2;彎扭組合s=3;平而析架s=2;平而剛架s=3等等。F為結(jié)點載荷列陣;為結(jié)點位移列陣。 單元的基本變形有三種:拉(壓)、扭轉(zhuǎn)、彎曲。一般的變形形式都可以認(rèn)為是這三種基本變形的組合。整體剛度矩陣可由單元剛度矩陣疊加而成。因為拉(壓)與扭轉(zhuǎn)的單元剛度矩陣形式相同,這樣就只有兩種單元剛度矩陣。整體剛度矩陣形成后,需要把單元剛度矩陣的各元素放到相應(yīng)位置,在操作時是十分繁瑣的。單元較多時更是讓人難以忍受,很容易出錯。所以要進(jìn)行以下處理。對于析架、剛架等,各單元軸線方向各異。在整體坐標(biāo)中的單元剛度矩陣不能直接寫出。但在以各單元軸線為x軸的局部坐標(biāo)中的單元剛度矩陣可由基本變形的單元剛度矩陣直接寫出,然后得到整體坐標(biāo)系下的單元剛度矩陣: (2)注:式中為整體坐標(biāo)中的單元剛度矩陣;為坐標(biāo)變換矩陣;為坐標(biāo)變換矩陣的轉(zhuǎn)置矩陣;為局部坐標(biāo)中單元剛度矩陣。根據(jù)疊加得到整體剛度矩陣.整體剛度方程式(1)也可寫成: = (1) 對于實際結(jié)構(gòu)都可以知道有一定數(shù)量的結(jié)點位移。假定有p個位移已知,則要在式(1)中將結(jié)點位移的項移到方程的右邊并將對應(yīng)的行由方程中去掉。這時方程的階數(shù)變?yōu)閞=n-p.即得到方程 (3) 通過這方程解出未知位移,再加上已知位移就得到了所有結(jié)點位移。再將其代入原方程中可解出未知結(jié)點力,再加上已知結(jié)點力即可得到全部結(jié)點力.單元結(jié)點力= (4)式中為單元結(jié)點位移,由中相應(yīng)元素組成。 對于桁架、剛架等應(yīng)給出局部坐標(biāo)中的結(jié)點力和結(jié)點位移 (5) (6) 由局部坐標(biāo)中的,-u點力和結(jié)點位移就可以進(jìn)行單元的強(qiáng)度和剛度計算。將上述過程寫成了圖1所示的程序,可以解決:拉伸(壓縮)、扭轉(zhuǎn)、彎曲、拉扭組合、拉彎組合、彎扭組合、拉扭彎組合、平面桁架、平面剛架等9個方面的問題。把已知條件按設(shè)定的格式輸入就能運(yùn)算出問題的解。為了便于數(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 直接調(diào)用可執(zhí)行文件( 利用Shell函數(shù)直接調(diào)用Fortran編譯出來的可執(zhí)行文件) ;第二種,利 用 動態(tài) 鏈 接 庫 DLL( Dynamic Link Library) 與Fortran混合編程(1)采用VB 6.0直接調(diào)用 Fortran 可執(zhí)行文件的方法 利用 VB 6.0編寫程序的界面部分, 后將Fortran 的應(yīng)用程序編譯成可執(zhí)行的應(yīng)用程序。計算時, 由VB 6.0應(yīng)用程序啟動由Fortran編譯成的可執(zhí)行文件。在計算結(jié)束后, 將計算數(shù)據(jù)以數(shù)字或者圖形的形式顯示在 VB 6.0 的界面上。程序整個運(yùn)行過程,Fortran 應(yīng)用程序編譯成的可執(zhí)行文件一直在后臺運(yùn)行,建立連接接口,通過磁盤文件對 VB 6.0和 Fortran 之間的所有數(shù)據(jù)進(jìn)行交換。具體步驟是先在Fortran Power Station 中編寫 Fortran 的源程序代碼, 并編譯成可執(zhí)行文件。然后在 VB 6.0需要調(diào)用時, 利用Shell 函數(shù)調(diào)用就可以了。Shell 函數(shù)語法如下:Shell(pathname, window style )pathname 是可執(zhí)行文件的程序名, 含有所必需的目錄、文件夾、驅(qū)動器。Windowstyle 表示在程序運(yùn)行時,Fortran窗口的樣式。例如, 在VB中調(diào)用Fortran編譯成的可執(zhí)行文件生成的 work 目錄下的計算程序test.exe, 語法如下:Call shell ( D: worktest. exe, vbNormalfocus)此方法適合于交互操作不多的情況。Shell 函數(shù)是以異步方式執(zhí)行的, 這種執(zhí)行方式使 VB 6.0程序不能等待 Fortran 程序計算結(jié)束就繼續(xù)執(zhí)行后續(xù)的程序, 使最終運(yùn)算過程錯亂,結(jié)果非常容易出現(xiàn)錯誤。(2)調(diào)用 Fortran 動態(tài)鏈接庫 此方法是將Fortran的源代碼分成若干個子程序或函數(shù), 并編譯生成.DLL 文件。用VB 6.0編寫主程序。在使用時調(diào)用編譯好的. DLL 文件, 從而實現(xiàn) VB 6.0和Fortran的混合編程。創(chuàng)建Fortran的動態(tài)鏈接庫的源程序必須是子程序或函數(shù), 不能有主程序。還有注意的是,必須明確外部例程的實現(xiàn)機(jī)制、調(diào)用約定(調(diào)用約定就是明確程序如何調(diào)用過程, 傳遞過程以及命名規(guī)范)、例程名和參數(shù)列表。做到這些,VB 6.0在導(dǎo)入動態(tài)鏈接時才能協(xié)調(diào)好。調(diào)用約定就是明確程序如何調(diào)用過程, 傳遞過程以及命名規(guī)范。Fortran Power Station 中三個調(diào)用約定: C、ST DCALL 及缺省約定。而VB6.0只有兩個調(diào)用約定: 缺省約定、 DCALL調(diào)用約定。通常, 兩種語言統(tǒng)一采用缺省調(diào)用約定。具體的聲明語句是:! MS ATT RIBUT ES DLLEXPORT : : name變量傳遞的缺省方式是“傳址”。若變量采用數(shù)值傳遞, 需要在參數(shù)前添加ByVal 屬性; 而且同時要注意 Fortran 和 VB 6.0之間數(shù)據(jù)類型的對應(yīng)關(guān)系, 具體見表 1。由于 Fortran 語言的數(shù)組變量是從 1開始 , 而VB 6.0數(shù)組變量隱含從 0 開始的。 在數(shù)組傳遞時, 如果使用隱含傳遞,需要注意數(shù)組元素的傳遞次序。如果事先聲明數(shù)組的上、下限, 則可以免去許多不必要的麻煩。對于多維數(shù)組, VB和Fortran都是按列傳遞的。按照這些規(guī)則, 在 VB 對 Fortran 動態(tài)鏈接庫源文件的調(diào)用過程中, 多維數(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”: 指明被調(diào)用過程在 DLL中的別名, 這一屬性是必須的。aliasname語法及組成部分如下:-subnamen其中, n 為棧的大小, 它是 4 的倍數(shù)。arglist: 當(dāng)被調(diào)用時, 代表被傳送到該過程的參數(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。兩個文本框的作用是為了顯示返回的結(jié)果, 以檢驗程序是否正確執(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 運(yùn)行后 T ext1. Text 為 20, T ext2. Text 為33. 3, 結(jié)果正確。以上程序均在 Visual Basic 6. 0 和 Fortran Power Station 4. 0 環(huán)境下運(yùn)行。(3)兩種方法的比較使用動態(tài)鏈接庫和VB 6.0直接調(diào)用 Fortran 編譯生成的可執(zhí)行文件( . exe 文件)這兩種方法都可以實現(xiàn) VB 6.0和Fortran的混合編程。但是它們還是有一定區(qū)別的, 具體比較如表 2 所示。 介紹了兩種方法來實現(xiàn)的Fortran用戶友好的,在一般情況下,每個國家都有它的優(yōu)點和缺點:VB直接調(diào)用Fortran編譯的可執(zhí)行文件是簡單的,但這種方法很容易犯錯誤,不利于大型程序的開發(fā);和強(qiáng)大的使用動態(tài)鏈接庫DLL,不僅功能齊全,占據(jù)一個小磁盤和內(nèi)存空間,并且比第一種方法更實用。 VB中有操作簡便的優(yōu)點,非常適合非計算機(jī)專業(yè)的程序員使用。3.1.2 基于VB 6.0的矩陣位移法Fortran的可視化開發(fā)混合兩種語言Fortran和VB開發(fā)科學(xué)計算軟件,一般有兩種方法:一是用VB界面設(shè)計和控制程序, Fortran程序被編譯為動態(tài)鏈接庫,由VB程序調(diào)用它。通過實現(xiàn),對于海量數(shù)據(jù)的交換是不經(jīng)濟(jì)的,而且難以處理傳入的數(shù)據(jù)交換的參數(shù)。二是設(shè)計用VB 6.0接口, Fortran程序會被編譯成一個可執(zhí)行程序,在適當(dāng)?shù)臅r候由VB 6.0程序啟動它,計算后,結(jié)果顯示在VB 6.0界面上。整個計算和處理過程,F(xiàn)ortran程序一直在后臺運(yùn)行。VB 6.0和Fortran間的所有數(shù)據(jù)都通過磁盤文進(jìn)行交換,交換海量數(shù)據(jù)非常經(jīng)濟(jì),效率也非常高。由于有些結(jié)構(gòu)比較復(fù)雜,桿件個數(shù)比較多,擁有大量的待處理的數(shù)據(jù),因此該系統(tǒng)采用了第二種方法。即利用VB 6.0的shell函數(shù)來調(diào)用Fortran應(yīng)用程序。Fortran優(yōu)化程序同步運(yùn)行的實現(xiàn):在VB 6.0界面上設(shè)置好界面和按鈕,對每個按鈕設(shè)置好對應(yīng)的數(shù)據(jù)庫位置,植入可執(zhí)行文件,用shell函數(shù)處理可執(zhí)行文件運(yùn)行。輸出的數(shù)據(jù)進(jìn)行處理,使之形成自動形成表格。運(yùn)用表格的數(shù)據(jù)進(jìn)行再設(shè)置,使結(jié)果輸出數(shù)據(jù)對應(yīng)到圖像成型中,形成計算后的結(jié)果。所需要解決的問題和辦法如下:(1) “Shell函數(shù)是以異步方式執(zhí)行問題的解決。Shell函數(shù)是異步執(zhí)行的,不等Fortran程序結(jié)束就繼續(xù)執(zhí)行后續(xù)VB 6.0程序,使VB 6.0得不到最終的數(shù)據(jù)結(jié)果而出錯。W in32API提供的進(jìn)程操作函數(shù)可解決上述外殼程序的異步運(yùn)行問題。實現(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)境下運(yùn)行,在windows平臺運(yùn)行容易進(jìn)入DOS界面而造成黑屏。用shell(pathname,【windows】)函數(shù)啟動Fortran外殼程序,外殼程序的窗口風(fēng)格由可選參數(shù)windowstyle的取值決定,取值為VBHide就能隱藏外殼程序的運(yùn)行窗口而解決黑屏問題。(3) 優(yōu)化程序的自動生成和執(zhí)行。Fortran源文件的生成采用文件操作結(jié)合print過程和文本框來實現(xiàn)。為減少程序的處理量,將主程序和優(yōu)化方法子程序事先編譯成目標(biāo)代碼,程序僅生成和優(yōu)化模型有關(guān)的目標(biāo)函數(shù)、約束條件子程序文件和優(yōu)化參數(shù)數(shù)據(jù)文件。由shell函數(shù)啟動相關(guān)程序生成優(yōu)化計算程序并執(zhí)行優(yōu)化計算,避開了用戶的編程和調(diào)試過程。 作為結(jié)構(gòu)力學(xué)算法可視化系統(tǒng),最關(guān)鍵的是用戶只需要輸入架構(gòu)的最少量信息,由系統(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 應(yīng)用實例 平面剛架計算程序舉例和簡要說明 程序名:FEM2.FOR2、 功能:用于平面剛架受一般荷載作用下的結(jié)點位移、內(nèi)力和支座反力的計算。程序說明:(1)輸入變量說明表1-1輸入數(shù)據(jù)總表次序變量名說明輸入格式1NENPNRMTMX單元總數(shù)結(jié)點總數(shù)支座結(jié)點數(shù)材料類型數(shù)組工況數(shù)自由格式2AEAE(1:MT,1:3):材料特性數(shù)組AE(,1):組彈模AE(,2):組截面積AE(,3):組慣性矩自由格式3EPEP(1:NE,3):單元信息 EP(,1):單元端結(jié)點編號EP(,2):單元端結(jié)點編號 EP(,3):單元材料類型號自由格式4RPRP(1:NR,4):支座結(jié)點信息自由格式5XZXZ(1:NP,1:2):結(jié)點坐標(biāo)XZ(,1)坐標(biāo)XZ(,2)坐標(biāo)自由格式6KI2受結(jié)點荷載的結(jié)點數(shù)自由格式7MI2受結(jié)點荷載的結(jié)點編號 MI2(1:KI2)自由格式8FI2FI2(1:KI2,1:3):結(jié)點荷載值FI2(,1):結(jié)點的向集中力FI2(,2):結(jié)點的向集中力FI2(,3):結(jié)點繞軸集中力矩(均為整體坐標(biāo)方向)自由格式9KI3受荷載的單元數(shù)自由格式10MI3受荷載的單元號MI3(1:KI3)自由格式11FI3FI3(1:KI3,1:6)單元六個固端力值端:FI3(,1):單元軸力FI3(,2):單元剪切力 FI3(,3):單元彎矩端:FI3(,4):單元軸力FI3(,5):單元剪切力 FI3(,6):單元彎矩(均為局部坐標(biāo)方向)自由格式(2) 其他主要變量及其說明 NX 自由度數(shù); NH 一維變帶寬存貯總?cè)萘浚?RR(1:NM,1:3)結(jié)點自由度序號數(shù)組; AA(1:NX)整體勁度矩陣主元素在一維存貯中的序號; GG(1:6)單元兩端6個方程號; ME(1:2)單元兩端結(jié)點號; LT(1:3,1:3)轉(zhuǎn)換矩陣; KE(1:6,1:6)整體坐標(biāo)系中的單元勁度矩陣; KK(1:NH)整體勁度矩陣一維變帶寬存貯數(shù)組; FF(1:NX)先放可動結(jié)點等效荷載,后放可動結(jié)點位移; 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形成結(jié)點自由度序號數(shù)組RR;FORAA形成一維存貯指示矩陣AA;FORKK形成KK;DIVKK求解方程的分解階段;FORFF輸入荷載信息,形成可動結(jié)點等效荷載列陣FF;FORDIS求解方程的前代、回代階段,形成可動結(jié)點位移列陣FF;FORFM求桿端力;FORRC求支座反力;KET形成整體坐標(biāo)系中的單元勁度矩陣KE;DIV分解單元信息;MIC求旋轉(zhuǎn)矩陣及分解材料類型數(shù)組;GGT形成單元6個方程序號。(4) 例題一平面剛架如圖1-1()所示,剛架各桿尺寸及所受荷載如圖上所示,各桿的彈性模量2、橫截面面積0.05、慣性矩0.005,求內(nèi)力及支座反力。建立整體坐標(biāo)和局部坐標(biāo),如圖1-1()所示,單元編號和結(jié)點編號亦如圖中所示。圖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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度辦公室裝修設(shè)計咨詢與監(jiān)理合同2篇
- 二零二五年度企業(yè)員工職業(yè)規(guī)劃協(xié)議范本3篇
- 2025年度液化天然氣液化與氣化設(shè)備進(jìn)出口合同3篇
- 2024年適用凱悅酒店管理標(biāo)準(zhǔn)化協(xié)議版
- 2024年高端醫(yī)療設(shè)備引進(jìn)與技術(shù)培訓(xùn)合同
- 第一單元《上學(xué)了》(說課稿)-2023-2024學(xué)年一年級下冊綜合實踐活動海天版
- 2024年跨國海運(yùn)貨物運(yùn)輸合作協(xié)議
- 2024收養(yǎng)協(xié)議書范本:收養(yǎng)兒童醫(yī)療保健服務(wù)2篇
- 暑假幼兒園活動策劃方案三篇
- 倉庫電動叉車駕駛員安全操作守則
- 張家爺爺?shù)男』ü?
- 高中思想政治-高三一輪復(fù)習(xí)講評課教學(xué)課件設(shè)計
- 自動噴水滅火系統(tǒng)的設(shè)計計算
- 教師評職稱個人綜述
- 旅游景區(qū)組織機(jī)構(gòu)
- LSI-陣列卡操作手冊
- 漢字文化解密(華中師范大學(xué))超星爾雅學(xué)習(xí)通網(wǎng)課章節(jié)測試答案
- 黑龍江省哈爾濱市八年級上學(xué)期物理期末考試試卷及答案
- 商業(yè)綜合體設(shè)計說明書
- GB/T 19587-2017氣體吸附BET法測定固態(tài)物質(zhì)比表面積
- 比賽車門凹陷修復(fù)
評論
0/150
提交評論