国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

OpenGL在計算水力學(xué)后處理中的應(yīng)用

2012-09-04 10:18:44張詩悅吳東偉
山東水利 2012年7期
關(guān)鍵詞:水力學(xué)圖形化調(diào)用

王 雷,張詩悅,吳東偉

(河海大學(xué),江蘇 南京 210098)

通常水力學(xué)數(shù)值模擬的結(jié)果是一系列二進制數(shù)據(jù)或ASCII數(shù)據(jù)文件,為便于分析水流運動狀態(tài)需要把這些數(shù)據(jù)圖形化,這種數(shù)據(jù)可視化軟件稱為后處理軟件。目前常用的后處理軟件是Tecplot和Surfer軟件。他們提供了繪制流速矢量圖的簡單數(shù)據(jù)接口,但這些軟件一次僅能繪制一幅靜態(tài)矢量圖或標(biāo)量圖,若想生成動態(tài)效果,需要事先準(zhǔn)備大量數(shù)據(jù)。并且這些軟件不提供源代碼或通用數(shù)據(jù)接口,所以通常不能與水力學(xué)計算程序合并編譯。因此,開發(fā)一套較完善的計算水力學(xué)軟件必須研發(fā)其獨立的后處理模塊。本課題立足于此,根據(jù)水力學(xué)模型計算的數(shù)據(jù)結(jié)果,在通過OpenGL構(gòu)建的三維可視化虛擬場景中,利用底層圖形開發(fā)方式進行洪水流場的可視化模擬分析研究,在流速變化較大區(qū)域和需要重點觀測區(qū)域提取斷面,分析斷面和洪水淹沒情況,從而解決洪水流場數(shù)值可視化的問題,彌補目前存在的中間數(shù)據(jù)存儲量大、模擬時間滯后和采用商業(yè)軟件很難進行交互控制等不足。

1OpenGL概述

在計算水力學(xué)中常用的圖形有流速向量圖和流場內(nèi)物理量等值圖,這些圖須具有顯示準(zhǔn)確、便于查看以及美觀等特點。計算機高級編程語言VB、VC++和Delphi等均提供了繪圖工具。從理論上講,這些繪圖工具可以滿足流場的圖形化,但對于復(fù)雜的圖形,尤其是三維圖形,繪圖算法往往很復(fù)雜以致于難以實現(xiàn)。為高效地開發(fā)流場圖形化軟件,須選用圖形應(yīng)用程序接口(Application Programming Interface,簡稱API)。圖形API是由計算機軟件或硬件公司開發(fā)的通用繪圖程序,其中包含了構(gòu)造景物模型和實現(xiàn)人機交互的圖形操作函數(shù)。程序員只需要調(diào)用API指令集進行布景、建模、光照與渲染,無須考慮圖形硬件和圖形效果的算法。

目前常用的計算機圖形API有DirectX和OpenGL。DirectX僅能用于Windows系列的操作系統(tǒng),而OpenGL獨立于操作系統(tǒng)和硬件環(huán)境,具有良好的可移植性和易用性。OpenGL的圖形操作函數(shù)十分靈活,用戶可從點、線、面等最基本的圖形開始構(gòu)造自己的模型。實際上,OpenGL可以看做圖形硬件的軟件接口,其中不包含任何窗口函數(shù)。在Windows系統(tǒng)中,OpenGL圖形庫封裝在一個動態(tài)鏈接庫內(nèi)(OPENGL32.DLL),因此,必須使用一個“窗口”系統(tǒng)來實現(xiàn)OpenGL的圖形顯示和操作。目前VB、VC++以及Delphi等高級編程平臺均可用于OpenGL的“窗口”實現(xiàn)。

2 流場圖形化軟件的設(shè)計和開發(fā)

2.1 流場圖形化軟件的設(shè)計

水力學(xué)計算程序大多是用FORTRAN或C語言編制,也有BASIC或PASCAL等語言。為保持軟件通用性,須采用多語言混合編程技術(shù)實現(xiàn)后處理模塊與計算程序間的數(shù)據(jù)傳遞。

由于VC++包含了功能強大的窗口開發(fā)框架,并易實現(xiàn)多語言混合編程,本文采用Visual C++調(diào)用圖形庫OpenGL實現(xiàn)流場的圖像顯示,使用計算機語言混合編程技術(shù)實現(xiàn)水力學(xué)計算程序與后處理模塊的數(shù)據(jù)傳遞,并基于VC++實現(xiàn)友好的人機交互界面。軟件框架如圖1所示。

2.2 流場圖形化軟件的開發(fā)

2.2.1 VC++調(diào)用OpenGL實現(xiàn)流場可視化

采用VC++調(diào)用OpenGL實現(xiàn)流場圖形化,首先須建立兩者之間的應(yīng)用接口,其具體方法是將支持OpenGL的動態(tài)鏈接庫函數(shù)添加到VC++預(yù)編譯頭文件中,然后調(diào)用OpenGL中的模型函數(shù)和功能函數(shù)進行建模。OpenGL能夠建立線框模型和表面模型兩種幾何模型。在進行建模時任意復(fù)雜的三維實體須用一個個小的多邊形面來近似表示。OpenGL的建模實質(zhì)上是根據(jù)所給定的頂點數(shù)據(jù)和面信息建立起各個多邊形面元,并將其存儲到顯示列表中,在需要時予以調(diào)用顯示。采用此方法可以方便地對水力學(xué)中起伏不平的河床和自由水面進行三維仿真。

繪制流速矢量圖時,可以采用3條線段組成的箭頭表示矢量;等值圖則可以采用對節(jié)點設(shè)置不同的灰度或顏色來實現(xiàn)。

2.2.2 基于VC++的多語言混合編程技術(shù)

為保證計算水力學(xué)后處理程序的通用性,應(yīng)實現(xiàn)VC++與其他編程語言的混合編程。本文以常用的計算程序編程語言FORTRAN為例進行闡述。

實現(xiàn)混合編程的方法通常有兩種:一種是動態(tài)鏈接庫法,即將FORTRAN程序在Fortran PowerStation 4.0開發(fā)環(huán)境中做成動態(tài)鏈接庫,然后VC++程序調(diào)用此動態(tài)鏈接庫,通過數(shù)據(jù)列表實現(xiàn)VC++程序與FORTRAN程序的數(shù)據(jù)傳遞。

第二種方法是VC++直接調(diào)用FORTRAN可執(zhí)行文件。這種方法簡單,不必對現(xiàn)有的FORTRAN程序進行任何改動。實現(xiàn)方法是在VC++程序塊中使用語句調(diào)用exe可執(zhí)行文件。這種方法實際上是用存儲介質(zhì)作為兩種語言數(shù)據(jù)交流的載體,代替了第一種方法中的參數(shù)列表。由于多了寫入、讀出環(huán)節(jié),同樣的算例,第二種方法的耗時比第一種方法多,但是第一種方法要求VC++程序與FORTRAN程序?qū)?yīng)的變量字節(jié)數(shù)應(yīng)相同,否則可能得出不合理的結(jié)果,第二種方法就不必考慮這個問題。在數(shù)據(jù)量較小的情況下,兩種方法都具有較快的計算速度,均可采用。

3 以明渠水流為例

采用數(shù)值方法模擬寬淺河道中丁壩附近的流場。數(shù)值模擬方法為采用有限體積法離散求解基于坐標(biāo)的準(zhǔn)三維淺水方程,計算網(wǎng)格取為正交曲線網(wǎng)格,并采用FORTRAN語言編制計算程序。

采用第二種VC++與FORTRAN的混合編程方法,后處理程序可以清楚地顯示河床地形。圖2為河道地形高程的等值圖。丁壩布置在河床右岸,設(shè)定壩頂高程為4.0m,壩底高程0.0 m,上游河床來水流量為264 m3/s,下游恒定水位為6.4 m。這些參數(shù)通過VC++編制的用戶界面?zhèn)鬟f給FORTRAN程序,F(xiàn)ORTRAN程序計算穩(wěn)定后將計算結(jié)果以硬盤文件的方式輸出,再由VC++調(diào)用OpenGL將結(jié)果圖形化。圖3為丁壩附近水面處流場矢量圖。

通過實例分析可知,通過Visual C++調(diào)用圖形庫OpenGL可實現(xiàn)流場的圖像顯示,使用計算機語言混合編程技術(shù)可實現(xiàn)水力學(xué)計算程序與后處理模塊的數(shù)據(jù)傳遞,并可基于VC++編制友好的人機交互界面。

猜你喜歡
水力學(xué)圖形化調(diào)用
飽和紫色土初始態(tài)和穩(wěn)定態(tài)細(xì)溝水力學(xué)特征研究*
核電項目物項調(diào)用管理的應(yīng)用研究
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
LKJ自動化測試系統(tǒng)圖形化技術(shù)研究
二維水力學(xué)模型在紅光大橋洪水影響評價中的應(yīng)用
基于管網(wǎng)理論的人口遷移動力學(xué)模型構(gòu)建
科技視界(2016年27期)2017-03-14 23:09:34
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
自排式沉沙池上游渠道水力學(xué)特性研究
運用圖形化聽寫式復(fù)習(xí),構(gòu)建高效地理課堂
圖形化地區(qū)電網(wǎng)無功優(yōu)化軟件開發(fā)與應(yīng)用
耒阳市| 麻城市| 宜州市| 边坝县| 武隆县| 盐亭县| 弋阳县| 金湖县| 贵南县| 灌南县| 开平市| 伊吾县| 政和县| 内黄县| 聂荣县| 南涧| 平邑县| 孝感市| 怀集县| 凯里市| 香格里拉县| 天台县| 濮阳市| 金寨县| 广昌县| 永安市| 永新县| 巴林左旗| 万荣县| 宁蒗| 潮安县| 新乐市| 梧州市| 望都县| 临颍县| 乌恰县| 德清县| 浏阳市| 三原县| 青河县| 民丰县|