




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、泰 山 學(xué) 院 本科畢業(yè)論文(設(shè)計)基于vb的矩陣位移法fortran程序可視化開發(fā)所 在 學(xué) 院 機(jī)械與工程學(xué)院 專 業(yè) 名 稱 土木工程 申請學(xué)士學(xué)位所屬學(xué)科 工科 年 級 2010級 學(xué)生姓名、學(xué)號 韓奇孝 2010170214 指導(dǎo)教師姓名、職稱 李琦 講師 完 成 日 期 2014年 月 日 摘要綜合visual basic語言的良好界面開發(fā)和矩陣位移法的fortran的強大語言運算功能,基于visual basic 6.0對矩陣位移法fortran語言進(jìn)行混合編程開發(fā),可使矩陣位移法fortran語言運算的前后處理過程可視化。用vb設(shè)計界面,將矩陣位移法fortran程序編譯成可執(zhí)
2、行程序,運算開始前,打開程序輸入所要計算的桿系結(jié)構(gòu)的原始參數(shù),vb和fortran間的所有數(shù)據(jù)都通過磁盤文件進(jìn)行交換,用vb程序中的shell函數(shù)異步方式啟動可執(zhí)行程序經(jīng)行運算,計算結(jié)果顯示在vb界面上。整個運行過程中,fortran程序都在后臺進(jìn)行運行,用磁盤文件進(jìn)行交換海量數(shù)據(jù)也很經(jīng)濟(jì),效率非常的高。基于vb的矩陣位移法fortran的可視化開發(fā)出的程序,繼承了fortran的強大運算功能和vb的良好界面,也避免了fortran程序在dos環(huán)境下運行時輸入數(shù)據(jù)容易出錯和計算結(jié)果輸出繁瑣的缺點。方便非專業(yè)的編程人員靈活運用計算機(jī)進(jìn)行桿件結(jié)構(gòu)的矩陣位移法運算。關(guān)鍵詞:visual basic語
3、言;矩陣位移法;fortran語言;可視化abstract integrated visual basic language interface development and goodmatrix displacement method of fortran language powerful computing capabilities, based on visual basic 6.0 for the matrix displacement method mixed fortran programming language development, before and after t
4、he treatment process can fortran language computing matrix displacement method of visualization . design interface with vb , fortran matrix displacement method will be compiled into an executable program , before the operation began , the original input parameter to open the program to calculate the
5、 truss structure , all data between vb and fortran are exchanged via a disk file , vb program shell function asynchronously executable program started by the line operator , the result is displayed on the vb interface. throughout the operation , fortran programs running in the background , huge amou
6、nts of data to be exchanged with a disk file is also very economical , efficiency is very high . vb-based matrix displacement method fortran visualization developed program , inherited a good interface fortran powerful computing capabilities and vb , but also avoids the disadvantages of the input da
7、ta fortran program running under dos environment prone to error and calculate the resulting output tedious . non-professional programmers to facilitate flexible use of computer matrix displacement method calculation rod structure. keywords : visual basic language ; matrix displacement method ; fortr
8、an language ; visualization目錄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的矩陣位移法fo
9、rtran的可視化開發(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平面剛架計算程序舉例和簡要說明201 緒論1.1 研究的目的和意義 矩陣位移法在結(jié)構(gòu)力學(xué)中用于解決桿系結(jié)構(gòu)的位移和內(nèi)力的重要方法,它以 位移法為理論基礎(chǔ)。矩陣位移法的基本方法是:以結(jié)點位移為基本未知量,將要分 析的結(jié)構(gòu)離散成一個組件,然后通過分析單元和組裝單元,簡單列出剛度方程,得 到了桿端力和結(jié)點位移。其實質(zhì)是一種位移法的延伸,是
10、將矩陣運算運用到位移 法中,使之可以編制成數(shù)值計算的計算機(jī)程序。借助計算機(jī)強大的運算能力,使難 以完成大量的未知變量來解決,容易實現(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語言有其本身無法克服的缺點。圖形處
11、理能力弱,人機(jī)界面交換僵硬,而且應(yīng)該運行在dos環(huán)境下,黑色的屏幕和可憐的兼容性都無法滿足需求。相對于編程人員不熟悉,使用起來更費力又容易出錯。矩陣位移法 只在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
12、已經(jīng)很成熟,是一個基于windows平臺的開發(fā)工具,以其靈活簡單,易于使用和功能強大,界面友好等優(yōu)點,獲得了非計算機(jī)專業(yè)的程序員的喜愛。然而,visual basic 6.0也有自己的缺點,如計算能力差,執(zhí)行速度慢等等。通過基于visual basic 6.0對矩陣位移法 fortran語言進(jìn)行開發(fā),實現(xiàn)在windows環(huán)境下運行,同時也實現(xiàn)了既可以延續(xù)矩陣位移法fortran語言高效的計算能力,又矩陣位移法程序界面更友好。非專業(yè)程序員靈活的借助計算機(jī)運行矩形位移法,在計算機(jī)的幫助下也可以簡單和直接的獲取計算結(jié)果,提高項目運作的工作效率。1.2 基于vb的矩陣位移法fortran的可視化開發(fā)研
13、究的方法概述基于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的運算,再基于vb 6.0進(jìn)行程序可視化的優(yōu)化。 在第三章中詳細(xì)說明所用到的vb 6.0直接調(diào)用fortran編程語言的可執(zhí)行文件的方法、vb 6.0和fortran
14、的接口、vb調(diào)用用fortran編譯的可執(zhí)行文件(矩陣位移法fortran可執(zhí)行文件)、shell函數(shù)異步執(zhí)行和黑屏的解決方案。然后對運算結(jié)果進(jìn)行可視化處理。在windows平臺上,使用vb 6.0軟件和fortan混合編程計算的矩陣位移法,現(xiàn)成的矩形位移法的前后期的運算輸入、輸出簡單明了,結(jié)果可以由圖像直觀的顯示出來。1.3 本文的主要工作本文介紹用visual basic 6.0為平臺,將矩陣位移法fortran編程語言轉(zhuǎn)換為visual basic 6.0的可執(zhí)行,生成visual basic 6.0的一個子程序。介紹順序為矩陣位移法的原理和矩陣位移法編程、vb 6.0和fortran混
15、合編程方法及其對比、基于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)行簡
16、要說明。(3)生成基于vb 6.0的矩陣位移法fortran軟件,達(dá)到程序操作簡單,數(shù)據(jù)以文件形式輸入,為檢查和修改方便,每項數(shù)據(jù)都可以清晰的顯示出來。程序在運行時,自動由輸入的數(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é)運算和分析方法很難進(jìn)行大型
17、復(fù)雜的結(jié)構(gòu)分析任務(wù)。上世紀(jì)六十年代,隨著計算機(jī)技術(shù)的快速發(fā)展和在結(jié)構(gòu)計算方面的應(yīng)用,矩陣位移法程序化得到了廣泛的發(fā)展應(yīng)用,使的結(jié)構(gòu)力學(xué)運算和分析可以用計算機(jī)來運行,非常的簡單方便。矩陣位移法在結(jié)構(gòu)力學(xué)中用于解決桿系結(jié)構(gòu)的位移和內(nèi)力的重要方法,它以位移法為理論基礎(chǔ)。矩陣位移法的基本方法是:以結(jié)點位移為基本未知量,將要分析的結(jié)構(gòu)離散成一個組件,然后通過分析單元和組裝單元,簡單列出剛度方程,得到了桿端力和結(jié)點位移。其實質(zhì)是一種位移法的延伸,是將矩陣運算運用到位移法中,使之可以編制成數(shù)值計算的計算機(jī)程序。借助計算機(jī)強大的運算能力,使難以完成大量的未知變量來解決,容易實現(xiàn)。因為矩陣位移法編程的存在,讓更
18、多的結(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ì)和單元的彈性模量。由于
19、鉸結(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é)點荷載需要輸入荷載力
20、作用的結(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、
21、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)程序
22、處理后,通常使用時,采取的后處理法,由單元剛度矩陣對號入座,形成總剛度矩陣。2.2.3 邊界條件的處理具體方法為單獨開辟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)的荷載因為作用位置的不同,分
23、為結(jié)點荷載和非結(jié)點荷載。結(jié)點荷載在輸入時處理起來相對簡單,可以直接形成了結(jié)點力矢量進(jìn)行輸入計算。但非結(jié)點荷載變化需要處理才可以成為結(jié)點荷載的矩陣進(jìn)行運算。常用的方法為生成非結(jié)點荷載的單獨的子程序,用生成子程序求解非結(jié)點荷載作用下的單元固端力。這樣處理后,不論桿件兩端的約束情況如何,統(tǒng)一看作固定端,用位移法計算桿端支座反力,再將反力反向加在桿端,作為等效結(jié)點荷載。非負(fù)載共同結(jié)點有四種形式,可以采用加載一個程序來解決編碼來區(qū)分荷載的類型的類型。在根據(jù)荷載作用的結(jié)點、位置、大小、方向作為參數(shù)來選擇計算式,從而求出各單元下的非結(jié)點荷載。這樣就可以得到結(jié)點荷載和等效的非結(jié)點荷載疊加起來的向量為p的總負(fù)荷
24、。2.2.5 建立求解剛度方程各結(jié)點的位移是剛度方程中的未知量。剛度方程是一個多元的線性方程組p = k ,用易于實現(xiàn)程序化的高斯消元法、矩陣分解法進(jìn)行開發(fā)運算。這樣就把復(fù)雜,重復(fù)的運算用計算機(jī)來解決,實現(xiàn)矩陣位移法的程序化。2.2.6 計算桿端力根據(jù)得到的結(jié)點位移,利用下列公式就可以求出單元坐標(biāo)系中單元桿端位移產(chǎn)生的單元桿端力:注意的是最終結(jié)果的確定是根據(jù)由單元的非結(jié)點荷載產(chǎn)生的單元固端力疊加確定的各單元的桿端力。公式拓展為:+這一步利用矩陣乘法進(jìn)行運算。矩陣乘法程序化也很容易實現(xiàn),這樣就把復(fù)雜,重復(fù)的運算用計算機(jī)來解決,實現(xiàn)矩陣位移法的程序化。 例題:求解圖l 所示剛架內(nèi)力的數(shù)據(jù)輸入和結(jié)果
25、輸出。 輸入數(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, -
26、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 +
27、 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
28、 + 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.6
29、464 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;
30、平而剛架s=3等等。f為結(jié)點載荷列陣;為結(jié)點位移列陣。 單元的基本變形有三種:拉(壓)、扭轉(zhuǎn)、彎曲。一般的變形形式都可以認(rèn)為是這三種基本變形的組合。整體剛度矩陣可由單元剛度矩陣疊加而成。因為拉(壓)與扭轉(zhuǎn)的單元剛度矩陣形式相同,這樣就只有兩種單元剛度矩陣。整體剛度矩陣形成后,需要把單元剛度矩陣的各元素放到相應(yīng)位置,在操作時是十分繁瑣的。單元較多時更是讓人難以忍受,很容易出錯。所以要進(jìn)行以下處理。對于析架、剛架等,各單元軸線方向各異。在整體坐標(biāo)中的單元剛度矩陣不能直接寫出。但在以各單元軸線為x軸的局部坐標(biāo)中的單元剛度矩陣可由基本變形的單元剛度矩陣直接寫出,然后得到整體坐標(biāo)系下的單元剛度矩陣: (
31、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é)點
32、位移 (5) (6) 由局部坐標(biāo)中的,-u點力和結(jié)點位移就可以進(jìn)行單元的強度和剛度計算。將上述過程寫成了圖1所示的程序,可以解決:拉伸(壓縮)、扭轉(zhuǎn)、彎曲、拉扭組合、拉彎組合、彎扭組合、拉扭彎組合、平面桁架、平面剛架等9個方面的問題。把已知條件按設(shè)定的格式輸入就能運算出問題的解。為了便于數(shù)據(jù)的輸入和修改,已知條件要以文件的形式給出。3 基于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 的混合編程主要方法有兩種
33、:第一種,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 的界面上。程序整個運行過程,fortran 應(yīng)用程序編譯成的可執(zhí)行文件一直在后臺運行
34、,建立連接接口,通過磁盤文件對 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 表示在程序運行時,fortran窗口的樣式。例如, 在vb中調(diào)用fortran編譯成的可執(zhí)行文件生成的 work 目錄下的計算程序test.
35、exe, 語法如下:call shell ( d: worktest. exe, vbnormalfocus)此方法適合于交互操作不多的情況。shell 函數(shù)是以異步方式執(zhí)行的, 這種執(zhí)行方式使 vb 6.0程序不能等待 fortran 程序計算結(jié)束就繼續(xù)執(zhí)行后續(xù)的程序, 使最終運算過程錯亂,結(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)鏈接庫的源程序必須是
36、子程序或函數(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ù)值
37、傳遞, 需要在參數(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)鏈接庫前,
38、 必須先用 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ù)。a
39、rglist: 當(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
40、 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 arra
41、yt 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, 結(jié)果正確。以上程序均在 visual basic 6. 0 和 fortran power stati
42、on 4. 0 環(huá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ā);和強大的使用動態(tài)鏈接庫dll,不僅功能齊全,占據(jù)一個小磁盤和內(nèi)存空間,并且比第一種方法更實用。 vb中有操作簡便的優(yōu)點,非常適合非計算機(jī)專業(yè)的程序員使用
43、。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界面上。整個計算和處理過程,fortran程序一直在后臺運行。vb 6.0和fortran間的所有數(shù)據(jù)都通過磁盤文進(jìn)行交換,交換海量數(shù)據(jù)非常經(jīng)濟(jì),效率也非常高。由
44、于有些結(jié)構(gòu)比較復(fù)雜,桿件個數(shù)比較多,擁有大量的待處理的數(shù)據(jù),因此該系統(tǒng)采用了第二種方法。即利用vb 6.0的shell函數(shù)來調(diào)用fortran應(yīng)用程序。fortran優(yōu)化程序同步運行的實現(xiàn):在vb 6.0界面上設(shè)置好界面和按鈕,對每個按鈕設(shè)置好對應(yīng)的數(shù)據(jù)庫位置,植入可執(zhí)行文件,用shell函數(shù)處理可執(zhí)行文件運行。輸出的數(shù)據(jù)進(jì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程序,使
45、vb 6.0得不到最終的數(shù)據(jù)結(jié)果而出錯。w in32api提供的進(jìn)程操作函數(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
46、 andle或openprocess和getexitcodeprocess(2) 黑屏問題的解決。由于fortran程序在dos環(huán)境下運行,在windows平臺運行容易進(jìn)入dos界面而造成黑屏。用shell(pathname,【windows】)函數(shù)啟動fortran外殼程序,外殼程序的窗口風(fēng)格由可選參數(shù)windowstyle的取值決定,取值為vbhide就能隱藏外殼程序的運行窗口而解決黑屏問題。(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
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療軟件合同范例
- 出售固定資產(chǎn)合同范本
- 單方出資合作合同范本
- 農(nóng)村大包建房合同范本
- 合同范例效力
- 印刷合同范本 博客
- 廠房消防設(shè)計合同范本
- 農(nóng)業(yè)合作社入股合同范本
- 醫(yī)生顧問聘用合同范本
- 導(dǎo)演工作室合作合同范本
- 初三化學(xué)一輪復(fù)習(xí)計劃
- 關(guān)于進(jìn)一步加強路基路面施工質(zhì)量的通知
- (正式版)YS∕T 5040-2024 有色金屬礦山工程項目可行性研究報告編制標(biāo)準(zhǔn)
- AQ/T 2080-2023 金屬非金屬地下礦山在用人員定位系統(tǒng)安全檢測檢驗規(guī)范(正式版)
- NB-T35020-2013水電水利工程液壓啟閉機(jī)設(shè)計規(guī)范
- JCT 841-2024《耐堿玻璃纖維網(wǎng)布》
- 2024年甘肅省天水市中考生物·地理試題卷(含答案)
- 壓力變送器的拆卸及安裝 壓力變送器維護(hù)和修理保養(yǎng)
- 【女性勞動力就業(yè)歧視及優(yōu)化建議探析8400字(論文)】
- 充電樁授權(quán)委托書
- 電化學(xué)儲能電站并網(wǎng)運行與控制技術(shù)規(guī)范 第3 部分:并網(wǎng)運行驗收
評論
0/150
提交評論