999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

火災(zāi)模擬軟件FDS場景建模環(huán)境的設(shè)計

2014-12-25 02:23:22苗志宏馬金強(qiáng)
關(guān)鍵詞:環(huán)境設(shè)計

●苗志宏,馬金強(qiáng)

(武警學(xué)院 消防工程系,河北廊坊 065000)

0 引言

FDS(Fire Dynamics Simulator)是美國國家技術(shù)標(biāo)準(zhǔn)局(NIST)建筑火災(zāi)實驗室開發(fā)的基于場模擬的火災(zāi)動力學(xué)模擬軟件[1-2]。它采用數(shù)值方法求解一系列適用于低速流動熱驅(qū)動形的N-S方程,并以火災(zāi)時的煙氣流動和熱傳遞過程為重點研究對象。FDS的特點是針對性較強(qiáng),可以得到比較詳細(xì)的物理量的時空分布,能精細(xì)地體現(xiàn)火災(zāi)現(xiàn)象。目前FDS已經(jīng)被用來解決消防領(lǐng)域中的一些實際問題,在火災(zāi)理論研究、建筑性能化設(shè)計中,常用這種方法來模擬火災(zāi)過程[3-4]。但是,F(xiàn)DS是基于控制臺的應(yīng)用程序,場景建模文件的構(gòu)建只能通過手工編輯文本文件的方式進(jìn)行,文件編輯需要熟悉FDS的文件格式和記憶大量的命令;同時,F(xiàn)DS的模擬計算結(jié)果需要使用SmokeView軟件來展現(xiàn)三維場景,它們都需要用戶回到DOS環(huán)境中使用命令形式來調(diào)用,這些對于FDS的用戶是個不小的困難,直接影響著軟件的應(yīng)用效率。因此,對FDS的場景建模環(huán)境進(jìn)行專門的研究和開發(fā),使其擁有更強(qiáng)的功能和更高的效率,成為火災(zāi)和消防科學(xué)領(lǐng)域的設(shè)計及研究人員關(guān)注的重點課題[5-7]。本文給出了一個Windows下基于圖形用戶界面的FDS場景建模環(huán)境的設(shè)計過程。該環(huán)境集FDS場景建模文檔編輯、FDS運算、FDS運算步驟輸出以及SmokeView的運行為一身,可以使火災(zāi)模擬的效率大大提高。

1 編程環(huán)境的基本組成

火災(zāi)模擬軟件FDS編程環(huán)境的主界面如圖1所示,其組成主要部分有主框架和客戶區(qū)。在主框架中有標(biāo)題欄、菜單欄、工具欄和狀態(tài)欄。客戶區(qū)由3個子窗口組成,分別是工作目錄窗口、編輯窗口和運算過程顯示窗口,其中編輯窗口可同時打開多個文檔。FDS的場景建模命令在編輯窗口中按文本文件進(jìn)行編輯,具有一般文本編輯的各種功能,并且對FDS命令的關(guān)鍵字具有語法識別功能,并按高亮顯示。工作目錄窗口按樹型目錄顯示當(dāng)前工作目錄中的所有文件,這樣FDS運算輸出文件也顯示在其中,選中文件后雙擊鼠標(biāo)右鍵可打開文件。運算過程顯示窗口顯示FDS運算過程的步驟信息,這里我們將FDS原來在控制臺下的步驟顯示重定向到該窗口,并屏蔽了控制臺窗口。狀態(tài)欄中能顯示當(dāng)前運算的信息和當(dāng)前光標(biāo)所在的行號和列號。建模環(huán)境主界面與FDS后臺運算的連接是設(shè)計的核心部分,其運行結(jié)構(gòu)圖如圖2所示。

圖1 FDS場景建模環(huán)境主界面

圖2 FDS場景建模運行結(jié)構(gòu)圖

2 FDS編程環(huán)境設(shè)計過程

FDS編程環(huán)境的主要功能包括:多文檔編輯,調(diào)用外部程序FDS,運算過程顯示等。場景建模環(huán)境由VC++6.0平臺進(jìn)行設(shè)計,采用MFC的多文檔視圖模式進(jìn)行開發(fā)。開發(fā)基本過程如下:

2.1 多窗口界面的設(shè)計

窗口界面是用戶的主要操作區(qū)域,如圖1所示。客戶區(qū)中的工作目錄窗口和運算過程顯示窗口是以浮動窗口方式設(shè)計的,初始情況下分別停靠在主窗口的左邊和下端。其主要實現(xiàn)過程是采用了Cristi Posea提供的 CSizingControlBar類和 CSizingControl-BarG 類(類聲明和實現(xiàn)文件是:sizecbar.h,sizecbar.cpp,源代碼見 http://www.codeproject.com/Articles/6/CSizingControlBar-a-resizable-control-bar),它們是從MFC中CControlBar類繼承來的。

為此,在工程FdsEditor中載入文件sizecbar.h,sizecbar.cpp,scbarg.h,scbarg.cpp,并在 stdafx.h 文件中添加文件包含指令:#include"sizecbar.h"#include"scbarg.h"。這樣就可以在主框架類CMain-Frame中添加以下3個成員對象:(1)CSizingControl-BarG m_wndLeftBar(工作目錄窗口);(2)CBottomBar m_wndBottomBar(運算過程顯示窗口);(3)CTreeCtrl m_wndTree(工作目錄窗口中的樹狀目錄)。這里CBottomBar是CSizingControlBarG的公有派生類,在其中添加了CEdit類型的公有成員對象m_wndEdit,它是運算過程顯示窗口中的編輯框。并在CBottom-Bar類中重寫WM_CREATE消息映射函數(shù)OnCreate()。在CMainFrame類的成員函數(shù)OnCreate()中,可調(diào)用Create函數(shù)來實現(xiàn)上面3個成員對象的創(chuàng)建和控制窗口的初始停靠位置(這里省去了代碼實現(xiàn)部分)。

2.2 關(guān)鍵字高亮編輯器設(shè)計

關(guān)鍵字高亮編輯器的設(shè)計使用了已有的類CSynEditView[8],該類是 CRichEditorView 的派生類,既繼承了CRichEditorView類的所有功能,又具有關(guān)鍵字高亮顯示的特點,因此在工程中將視類CFdsEditorView設(shè)置為CSynEditView的派生類。為使FDS的建模關(guān)鍵字按高亮顯示,這里需要在CSynEdit-View類的成員函數(shù)LoadSynWord(INT nLanguage)的分支結(jié)構(gòu)switch中添加FDS建模語句的關(guān)鍵字,如&HEAD、&MISC等(這里省去了代碼實現(xiàn)部分)。

2.3 FDS運算連接

建模環(huán)境主界面與FDS后臺運算的連接是本設(shè)計的核心部分。本文建模環(huán)境中FDS運算過程是通過建立一個線程[9]來開啟FDS運算引擎的,主要是通過調(diào)用線程創(chuàng)建函數(shù)AfxBeginThread()來實現(xiàn)。通過主框架中運算按鈕的響應(yīng)函數(shù)OnBuildFds5()來調(diào)用AfxBeginThread(),其調(diào)用流程如圖3所示。

圖3 FDS運算調(diào)用流程圖

其實現(xiàn)代碼為:

void CMainFrame::OnBulidFds5()

{

//TODO:Add your command handler code here

//Step 1:讀取FDS安裝路徑//

ifstream infile("FdsPath.txt");//FDS安裝路徑已存放在 FdsPath.txt中

if(!infile)

{MessageBox("請先設(shè)置FDS的安裝路徑!");

return;}

char str[255];

int i=0;

while(infile.get(str[i++ ]))

{}

strFdsSetupPath=str;//存放FDS安裝路徑

infile.close();

//Step 2:重新或繼續(xù)運算選擇//

CString strStop;//存放stop文件路徑

strStop=GetFdsStopFile();

//先判斷*.stop是否存在,如果存在則刪除掉!

if(strStop!="")//有否stop文件

{DeleteFile(strStop);//刪除stop文件

UINT nRet=MessageBox("檢測到stop文件,如果要繼續(xù)上次運算,則請在MISC語句里添加:RESTART=.TRUE.;選擇確定按鈕,則回到文件添加:RESTART=.TRUE.;選擇取消按鈕,則重新計算.","Stop 文件",MB_OKCANCEL);

if(nRet==IDOK)

{return;}

}

//Step 3:設(shè)置運算狀態(tài)//

BuildState=1;

SmokeviewState=FALSE;

//Step 4:獲取FDS建模文檔//

GetFdsDocPath();

//Step 5:為FDS創(chuàng)建和啟動一個線程//

if(strFdsSetupPath!="")

AfxBeginThread(FDSThreadFun,this);

}

上面代碼中分別調(diào)用了成員函數(shù)GetFdsDocPath(),GetFdsStopFile()來獲取FDS建模文檔的路徑和中斷文件(*.stop)的路徑。由于篇幅問題這里略去實現(xiàn)代碼,其方法是先獲得活動文檔類的指針,然后調(diào)用文檔類的函數(shù)GetPathName()來實現(xiàn)。

在主框架類CMainFrame中添加一個靜態(tài)成員函數(shù) FDSThreadFun(),以它作為函數(shù) AfxBeginThread中的線程的入口函數(shù),并聲明一個全局線程句柄m_hThread。

為重定向控制臺下運算步驟信息至本環(huán)境的相應(yīng)窗口中,在函數(shù)FDSThreadFun()中通過調(diào)用API函數(shù) CreatePipe()來創(chuàng)建匿名管道(Anonymous Pipes),并將標(biāo)準(zhǔn)輸出重定向到匿名管道。然后通過API函數(shù)CreateProcess()來創(chuàng)建一個子進(jìn)程實現(xiàn)對外部應(yīng)用軟件FDS的調(diào)用,并利用ReadFile()函數(shù)來讀取匿名管道中的運算步驟信息。最后將運算步驟信息重新顯示在主框架的下端窗口中。

為實現(xiàn)FDS運算中途暫停和停止,在主框架中的工具欄增加“暫停/繼續(xù)”和“停止”兩個按鈕。FDS的暫停運算是通過使用SuspendThread掛起該線程來實現(xiàn)的,繼續(xù)運算是使用線程恢復(fù)函數(shù)ResumeThread來實現(xiàn)的。“暫停/繼續(xù)”的響應(yīng)函數(shù)代碼如下:

void CMainFrame::OnBulidSuspendAndContinue()

{

//TODO:Add your command handler code here

m_fdsRun=!m_fdsRun;//FDS是否處于運算狀態(tài)

if(m_fdsRun)

{::SuspendThread(m_hThread);

m_wndToolBar.SetButtonText(11,"繼續(xù)");}

else

{::ResumeThread(m_hThread);

m_wndToolBar.SetButtonText(11,"暫停");

}}

由于FDS內(nèi)核采用大渦模擬算法,運算時間會很長,因此在工具欄中添加了“停止”按鈕來中途停止運算,以便下次從原來停止的地方繼續(xù)運算。為此,在“停止”按鈕的響應(yīng)函數(shù)中,實現(xiàn)了自動產(chǎn)生Stop文件的過程。

2.4 連接SmokeView

輸入的建模文檔經(jīng)過FDS運算后,就會輸出可以在SmokeView中打開的smv文件。為啟動Smoke-View模塊并在其中同時打開smv文件,在主框架的工具欄中添加了“SmokeView”按鈕,其響應(yīng)函數(shù)如下所示:

void CMainFrame::OnBuildSmokeview()

{

//TODO:Add your command handler code here

CString strChid;

strChid=GetFdsCHIDFile();//獲得輸出文件名

strChid=strChid+".smv";//加擴(kuò)展名 smv

if(BuildSuccess)//運算成功

//啟動smokeview,并打開當(dāng)前的smv文件

ShellExecute(NULL,"open","smokeview.exe",strChid,"",SW_SHOW);

else//啟動 smokeview

ShellExecute(NULL,"open","smokeview.exe",NULL,"",SW_SHOW);

}

上面代碼中使用了API函數(shù)ShellExecute來調(diào)用外部程序SmokeView。

3 FDS編程環(huán)境的使用

下面實際運行設(shè)計好的FDS場景建模環(huán)境,為此選用FDS5.0提供的一個例子room_fire.fds來運行,打開文件后,進(jìn)行運算,其最終的運算效果圖如圖4所示。

圖4 運算效果圖

4 結(jié)語

本文設(shè)計出了Windows下的FDS場景建模環(huán)境,該環(huán)境采用類似VC++6.0開發(fā)界面風(fēng)格進(jìn)行設(shè)計,使FDS場景建模文檔編輯、FDS運算、FDS運算步驟輸出以及SmokeView的運行為一體。本環(huán)境屏蔽了FDS基于控制臺的參數(shù)輸入輸出過程,使FDS的建模輸入和運算輸出展現(xiàn)在同一個圖形用戶界面中。使用本文設(shè)計的FDS場景建模環(huán)境可以大大提高火災(zāi)模擬的效率。

[1]Kevin McGrattan,Bryan Klein,Simo Hostikka,et al.Fire Dynamics Simulator(Version 5)User’s Guide[M].US:National Institute of Standards and Technology,2009.

[2]Kevin McGrattan,Simo Hostikka,Jason Floyd,et al.Fire Dynamics Simulator(Version 5)Technical Reference Guide[M].US:National Institute of Standards and Technology,2009.

[3]霍然.性能化建筑防火分析與設(shè)計[M].合肥:安徽科學(xué)技術(shù)出版社,2003.

[4]李引擎.建筑防火性能化設(shè)計[M].北京:化學(xué)工業(yè)出版社,2005.

[5]陳馳,任愛珠,張新.基于虛擬現(xiàn)實的建筑火災(zāi)模擬系統(tǒng)[J].自然災(zāi)害學(xué)報,2007,16(1):55-60.

[6]邵鋼,金浩,楊培中,等.可視化隧道火災(zāi)仿真系統(tǒng)開發(fā)[J].計算機(jī)仿真,2007,24(3):198-206.

[7]吳煒煜,高佐人,任愛珠.基于FDS的火場空間物理建模器研究[J].系統(tǒng)仿真學(xué)報,2005,17(8):1800-1802.

[8]夏俊杰,趙剛.基于MFC的代碼編輯器設(shè)計方法[J].現(xiàn)代電子技術(shù),2012,35(12):28-30.

[9]孫鑫.VC++深入詳解[M].修訂版.北京:電子工業(yè)出版社,2012.

猜你喜歡
環(huán)境設(shè)計
長期鍛煉創(chuàng)造體內(nèi)抑癌環(huán)境
一種用于自主學(xué)習(xí)的虛擬仿真環(huán)境
何為設(shè)計的守護(hù)之道?
《豐收的喜悅展示設(shè)計》
流行色(2020年1期)2020-04-28 11:16:38
孕期遠(yuǎn)離容易致畸的環(huán)境
不能改變環(huán)境,那就改變心境
環(huán)境
孕期遠(yuǎn)離容易致畸的環(huán)境
瞞天過海——仿生設(shè)計萌到家
設(shè)計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
主站蜘蛛池模板: www亚洲精品| 亚洲欧美日韩成人高清在线一区| 国产精品漂亮美女在线观看| 国产毛片一区| 亚洲第七页| 国产小视频a在线观看| 2020国产在线视精品在| 亚洲精品国产精品乱码不卞| 91成人精品视频| 国产精品久久久久久久久| 色综合中文字幕| 欧美成人h精品网站| 欧美中日韩在线| 99热线精品大全在线观看| 久久福利片| 久久久久亚洲精品成人网| 亚洲精品视频免费看| 天堂亚洲网| 97青草最新免费精品视频| 亚洲一区二区三区香蕉| 免费视频在线2021入口| 免费国产高清视频| 亚洲欧美成人综合| 久久中文电影| 青青久视频| 日本欧美精品| 99re在线视频观看| 三级视频中文字幕| 成年av福利永久免费观看| JIZZ亚洲国产| 午夜少妇精品视频小电影| 成年人国产视频| 人妻无码一区二区视频| 一区二区三区高清视频国产女人| 91po国产在线精品免费观看| 免费毛片a| 国产精品一区在线麻豆| 国产丝袜丝视频在线观看| 青青青国产视频| 亚洲中文字幕在线观看| 日韩天堂在线观看| 天堂av高清一区二区三区| 亚洲欧美天堂网| 欧美性色综合网| 精品亚洲麻豆1区2区3区| 欧美激情一区二区三区成人| 亚洲日韩精品无码专区97| 亚洲一区二区视频在线观看| 国产日产欧美精品| 九九九九热精品视频| 一区二区自拍| 成人在线欧美| 成人伊人色一区二区三区| 亚洲中文字幕97久久精品少妇| 色婷婷天天综合在线| 91久久精品日日躁夜夜躁欧美| 欧美日韩激情在线| 好紧太爽了视频免费无码| 国产美女在线观看| 91高清在线视频| h网站在线播放| 国产91蝌蚪窝| 久久亚洲黄色视频| 国产麻豆va精品视频| 久久黄色影院| 国产亚洲精品自在久久不卡 | 欧美一级视频免费| 久久久精品国产SM调教网站| 国产草草影院18成年视频| 天天综合天天综合| 伊人色婷婷| 制服丝袜一区二区三区在线| 国产精品午夜电影| www.91在线播放| 亚洲无线观看| 亚洲欧美在线精品一区二区| 在线看国产精品| 亚洲成人精品在线| 在线播放真实国产乱子伦| jizz国产在线| 中文字幕无线码一区| 亚洲三级a|