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
主站蜘蛛池模板: 91青青视频| 亚洲经典在线中文字幕| 久久精品嫩草研究院| 亚洲中文精品人人永久免费| 精品少妇人妻av无码久久| 亚洲精品成人片在线播放| 在线不卡免费视频| 国产av一码二码三码无码 | 国模私拍一区二区| 中文字幕乱码二三区免费| 19国产精品麻豆免费观看| 亚洲区一区| AV不卡国产在线观看| 亚洲精品成人福利在线电影| 亚洲视频免费播放| 国产精品一区二区国产主播| 啊嗯不日本网站| 九色在线观看视频| 成人福利在线免费观看| 欧美成人日韩| 国产男女免费视频| 久久国产精品夜色| 成人免费网站在线观看| 亚洲最猛黑人xxxx黑人猛交| 日韩免费中文字幕| 国产在线97| 亚洲三级a| www.亚洲一区二区三区| 中文字幕色站| a毛片基地免费大全| 国产欧美日韩视频一区二区三区| 中文字幕欧美日韩高清| 亚洲天堂免费在线视频| 好紧好深好大乳无码中文字幕| 成年看免费观看视频拍拍| 在线欧美日韩| 久久这里只有精品2| 91九色最新地址| 在线观看视频99| 日韩精品无码免费一区二区三区| 国产成人精品视频一区二区电影 | 欧美精品成人一区二区在线观看| 日本久久网站| 国产精品视频a| 国产成人综合在线视频| 日韩 欧美 国产 精品 综合| 久久精品无码中文字幕| 国产精品真实对白精彩久久| 91精品国产91久久久久久三级| 青青草原国产av福利网站| 亚洲精品成人福利在线电影| 色婷婷亚洲综合五月| 国内精品九九久久久精品| 国产成人乱码一区二区三区在线| 色婷婷亚洲十月十月色天| 国产97视频在线观看| 欧美精品一二三区| 精品自窥自偷在线看| 青草免费在线观看| 久久人体视频| 麻豆精品国产自产在线| 丰满人妻久久中文字幕| 在线无码九区| 亚洲欧美不卡| 在线视频亚洲色图| 91精品啪在线观看国产60岁| 成人福利在线看| 亚洲婷婷在线视频| av无码一区二区三区在线| 日韩在线永久免费播放| 看国产一级毛片| 亚洲色偷偷偷鲁综合| 亚洲精品亚洲人成在线| 黄色网在线| 高清无码手机在线观看| 亚洲第一香蕉视频| 久草青青在线视频| 日韩av高清无码一区二区三区| 日韩在线第三页| 中文字幕自拍偷拍| 伊人91视频| 国产精品露脸视频|