施 蕭 聶于棚 仵建勛 楊道勇 李 剛(西昌衛(wèi)星發(fā)射中心 四川 西昌 65000)(洛陽電子裝備試驗中心 河南 洛陽 47003)
隨著網(wǎng)絡(luò)安全上升成國家戰(zhàn)略[1],基于國產(chǎn)操作系統(tǒng)(比如中標(biāo)麒麟[2]等)的自主可控變得尤為迫切,而Qt則以其良好的跨平臺性能成為自主可控趨勢下的優(yōu)先選擇。Qt是一個支持跨平臺C++應(yīng)用程序的開發(fā)框架,廣泛應(yīng)用于圖形界面開發(fā)。Qt不僅擁有完善的C++圖形庫,還集成了數(shù)據(jù)庫、OpenGL、多媒體、網(wǎng)絡(luò)、XML、WebKit等,其核心庫也加入了進(jìn)程、線程模塊。Qt能夠在Windows、Linux、OS X、Android平臺上進(jìn)行使用,極大地方便了不同操作系統(tǒng)下程序共享與移植。
天氣預(yù)報業(yè)務(wù)中,包括MICAPS[3](氣象信息綜合分析處理系統(tǒng))在內(nèi)的大部分軟件在跨平臺方面都具有局限性,因此可以選擇Qt作為自主可控趨勢下氣象行業(yè)中的開發(fā)工具。熱力學(xué)圖解是氣象中研究局地大氣垂直結(jié)構(gòu)及特性所引入的圖解,能夠幫助預(yù)報員更加準(zhǔn)確地判斷未來幾小時以內(nèi)的天氣潛勢。MICAPS中的熱力學(xué)圖解模塊包括站點的各種層結(jié)量、T-lnP圖、V3-θ圖等,功能比較完善。本文將在中標(biāo)麒麟操作系統(tǒng)上,基于Qt實現(xiàn)氣象熱力學(xué)圖解的繪制,并仿照MICAPS進(jìn)行圖解的完善。
氣象熱力學(xué)圖解的數(shù)據(jù)源是大氣參數(shù)的計算,其繪制的整體思路是在面向?qū)ο蟮幕A(chǔ)上,相繼實現(xiàn)地圖及站點窗口、T-lnP窗口、V3-θ窗口、對流參數(shù)窗口、層結(jié)量窗口以后,通過類的提升、窗口布局、信號與槽等方式進(jìn)行繪制與交互?;玖鞒倘鐖D1所示。
圖1 熱力學(xué)圖解實現(xiàn)的基本技術(shù)流程
熱力學(xué)圖解中用到的大氣參數(shù)涉及到溫度、露點、各層風(fēng)場、位溫、水汽壓、假相當(dāng)位溫、干絕熱線、假絕熱線、抬升凝結(jié)高度、自由對流高度、平衡高度、對流抑制能、對流有效位能的計算[5-6]。此外,圖解還將顯示常用的其他物理參數(shù)。這些參數(shù)可以分為層結(jié)參數(shù)和對流參數(shù)。以上涉及到的參數(shù)如表1所示。
表1 熱力學(xué)圖解中涉及到的大氣參數(shù)
氣象探空會得到溫、壓、濕、風(fēng)等基本量,通過這些基本量可以計算得到其他層結(jié)量和物理參數(shù)。計算程序選用氣象中常用的Fortran語言。中標(biāo)麒麟中的Fortran和C系列的編譯器都屬于GNU,所以編譯運行比較方便。目前,要想共同實現(xiàn)擅長科學(xué)計算的Fortran和Qt顯示界面的開發(fā),混合編程是一種不錯的選擇[7-8]。這里通過Qt的QProcess類調(diào)用Fortran的可執(zhí)行文件。在調(diào)用之前需要將Fortran程序設(shè)置好命令行參數(shù)(時間變量),便于實現(xiàn)業(yè)務(wù)化運行。
其中在Fortran程序內(nèi)使用函數(shù)get_command_argument進(jìn)行命令行參數(shù)的引入,隨后進(jìn)行編譯生成可執(zhí)行文件。
call get_command_argument(1,time)
而Qt在定義QProcess變量后,使用start()函數(shù)調(diào)用Fortran的可執(zhí)行文件。
arguments< QProcess.start(tlog_exe,arguments) 圖2所示的顯示界面仿照MICAPS的熱力學(xué)圖解的主體,由于探空站點的分析多集中在中國區(qū)域,因此拋棄了MICAPS中的雙窗口顯示,改成單窗口顯示,將地圖部件放在界面右下,對流參數(shù)同MICAPS放在右上,而T-lnP、V3-θ、站點層結(jié)資料放在左邊。對流參數(shù)分為6類,每一類都存放在一個QTableWidget中,6類統(tǒng)一存放在QToolbox容器控件類中。T-lnP、V3-θ、站點層結(jié)資料利用QTabWidget容器控件類進(jìn)行存放。 圖2 熱力學(xué)圖解的顯示界面設(shè)計 氣象業(yè)務(wù)中,地圖的投影常見的有墨卡托、蘭伯特、極射赤面三種,墨卡托最簡單,且適用于中低緯度,因此采用墨卡托投影進(jìn)行地圖繪制。地圖的繪制依據(jù)Qt中畫多邊形的方式,即將中國國界經(jīng)緯度點(島嶼邊界經(jīng)緯點)用QPainterPath進(jìn)行連接,然后用QPainter的drawPath()函數(shù)繪制多邊形,生成地圖。兩個類在繪制之前,要將經(jīng)緯度點依據(jù)墨卡托投影進(jìn)行轉(zhuǎn)化。由于每個探空時次收集的探空站點數(shù)目是不定的,這里對MICAPS第5類探空數(shù)據(jù)進(jìn)行處理,獲取該時次探測站點,經(jīng)過墨卡托投影繪制在地圖上(圖3)。地圖的繪制還有一個作用就是數(shù)據(jù)的通信,利用QMap容器類將站點及該站點對應(yīng)的層結(jié)量、對流參數(shù)等寫入序列,利用QWidget的鼠標(biāo)點擊或者移動事件進(jìn)行響應(yīng),得到一組關(guān)于某站點的層結(jié)和對流參數(shù)序列,并把該數(shù)據(jù)序列提供給T-lnP、V3-θ、對流參數(shù)和層結(jié)量顯示部件。 QMap //各站點及對應(yīng)的探測——序列 QMap //各站點及對應(yīng)的層結(jié)量——序列 QMap //各站點及對應(yīng)的對流參數(shù)——序列 QVector //某一站點探測序列 QVector //某一站點層結(jié)序列 QVector //某一站點對流參數(shù) 熱力學(xué)圖解用來顯示某一站點上空大氣的垂直結(jié)構(gòu),通過QWidget上的鼠標(biāo)點擊或移動,可以獲取響應(yīng)鼠標(biāo)事件的站點大氣參數(shù),并將其顯示在圖解上,其核心構(gòu)件是T-lnP、V3-θ圖。 T-lnP圖是分析大氣層結(jié)穩(wěn)定度的基本工具,常用于分析對流性天氣;V3-θ圖常用來判斷大氣滾流對天氣演變的影響來預(yù)報天氣轉(zhuǎn)折性變化。T-lnP、V3-θ圖的繪制有共同處,都是提前設(shè)置好橫縱坐標(biāo),橫坐標(biāo)單位都是℃,縱坐標(biāo)單位都是hPa,此外縱坐標(biāo)要進(jìn)行對數(shù)壓力處理,即取氣壓的對數(shù)。 T-lnP部件需要繪制4條曲線,分別是氣溫的探空層結(jié)、露點的探空層結(jié)、氣塊的狀態(tài)曲線(干絕熱到假絕熱)、各層風(fēng)矢量(依附氣溫層結(jié)線),另外T-lnP圖還要進(jìn)行填色,區(qū)分對流有效位能CAPE和對流抑制能CIN。V3-θ也要繪制4條曲線,分別是位溫層結(jié)線、假相當(dāng)位溫層結(jié)線、飽和假相當(dāng)位溫層結(jié)線、各層風(fēng)矢量(依附位溫層結(jié)線)。 各種層結(jié)線的繪制在前述層結(jié)量計算的基礎(chǔ)上,利用QPainterPath進(jìn)行繪制。風(fēng)矢量需要定義一個繪制函數(shù),該函數(shù)包括風(fēng)向桿、鳳羽的繪制,先畫風(fēng)向桿確定風(fēng)向,然后根據(jù)風(fēng)速繪制鳳羽,其中“一長條”表示4 m/s、“半條”表示2 m/s、一個“空三角”表示20 m/s、一個“實三角”表示50 m/s。 繪制的難點在于T-lnP中氣塊的層結(jié)以及CAPE和CIN的填色。T-lnP圖包含了干絕熱線和假絕熱線。干絕熱線是氣塊在垂直方向上按照大氣干絕熱溫度遞減率進(jìn)行遞減形成的一條直線,原因在于干絕熱遞減率是確定值。而假絕熱遞減率不定,由于氣塊假絕熱上升時有一個守恒量,即假相當(dāng)位溫。因此,可以利用假相當(dāng)位溫進(jìn)行假絕熱線的繪制,具體就是對假絕熱線逐段計算,一般是取逐10 hPa。在氣溫層結(jié)和氣塊曲線雙線之間的填色時,還需要對干絕熱線和氣溫層結(jié)線也進(jìn)行相對應(yīng)的逐10 hPa的插值計算,這樣雙線廓線的層數(shù)是一致的,在連續(xù)兩個點進(jìn)行氣溫的判斷,確定是正值(CAPE)還是負(fù)值(CIN),然后填色。圖4是T-lnP圖的繪制流程。 圖4 T-lnP和V3-θ的繪制流程 以下是干絕熱線的算法。 //干絕熱線 ta=theta00*pow((P_L/1000.),RD/CPD)-273.15;qk_tp10< P_L=P_L-10 假絕熱中,假相當(dāng)位溫是不變的。 //假絕熱線 thse1=cal_thse(P_L,t1); //假相當(dāng)位溫 thse2=cal_thse(P_L,t1-0.1); t2=t1-(thse1-thse)/(thse1-thse2)*0.1; if(t2<0&&KZERO==1) { thse=cal_thse(P_L,t2); KZERO=0; } 氣溫層結(jié)也需要進(jìn)行對數(shù)壓力插值,以實現(xiàn)逐10 hPa的氣溫序列。 //氣溫層結(jié)插值 te=t_L+(t_L-t_T)/log(p_L/p_T)*log(pbot/p_L) 在關(guān)鍵的T-lnP、V3-θ部件實現(xiàn)以后,再加上對流參數(shù)的表格顯示,再結(jié)合前述額地圖部件,熱力學(xué)圖解中的子部件繪制工作就完成了。將各子部件引入顯示框架,利用信號槽機制實現(xiàn)消息的傳遞,熱力學(xué)圖解繪制過程結(jié)束。 選擇2017年10月7日的天氣個例進(jìn)行實際應(yīng)用,10月7日海口市在午后出現(xiàn)強對流天氣,伴隨了雷暴和降水。圖5主要顯示了T-lnP圖、地圖及對流參數(shù)。對應(yīng)T-lnP圖可以發(fā)現(xiàn),??谡驹谠缟?時,CAPE值遠(yuǎn)遠(yuǎn)大于CIN值,說明海口上空不穩(wěn)定能量較大;而且在500~400 hPa和200~150 hPa有明顯的風(fēng)場切變,不穩(wěn)定能量加上垂直風(fēng)場切變,有利于??谏峡諒妼α鞯陌l(fā)生發(fā)展,在特定天氣系統(tǒng)的觸發(fā)下,雷暴天氣就發(fā)生了。 圖5 熱力學(xué)圖解的整體情況 圖6是MICAPS的T-lnP圖,可以發(fā)現(xiàn)這里通過Qt繪制的圖例與MICAPS圖例是吻合的,說明算法是一致且可靠的,存在的不足是在部分細(xì)節(jié)上還有待提高,比如圖形需要美化、特性層需要注明等。 圖6 MICAPS中的T-lnP圖 本文在中標(biāo)麒麟操作系統(tǒng)上,基于Qt(C++)和Fortran,結(jié)合MICAPS的熱力學(xué)圖解顯示界面,實現(xiàn)了國產(chǎn)操作系統(tǒng)上熱力學(xué)圖解的繪制。繪制得到的圖解包含了T-lnP、V3-θ、以及25種層結(jié)量和33種對流參數(shù)。該熱力學(xué)圖解可以在不同操作系統(tǒng)上進(jìn)行顯示和交互,既是國產(chǎn)操作平臺下業(yè)務(wù)軟件開發(fā)的一種嘗試,也豐富了不同平臺下氣象熱力學(xué)圖解的開發(fā)顯示。 [1] 國家網(wǎng)絡(luò)空間安全戰(zhàn)略[OL].2016.http://www.cac.gov.cn/2016-12/27/c_1120195926.htm. [2] 中標(biāo)軟件介紹[OL].2017.http://www.cs2c.com.cn/index.php?id=106. [3] 李月安,曹莉,高嵩,等.MICAPS預(yù)報業(yè)務(wù)平臺現(xiàn)狀與發(fā)展[J].氣象,2010,36(7):50- 55. [4] 朱文劍,鄭永光.基于NCL的斜溫T-logP圖的改進(jìn)及其應(yīng)用前景[J].天氣預(yù)報,2013,5(1):19- 23. [5] 陶祖鈺.基礎(chǔ)理論與預(yù)報實踐[J].氣象,2011,37(2):129- 135. [6] 陳禎烈,周莉蓉,郝利萍.V-3θ圖在區(qū)域暴雨預(yù)報中的應(yīng)用[J].氣象,2003,29(1):20- 22. [7] 蒲軍平,劉鵬.VB界面設(shè)計與FORTRAN數(shù)值計算功能的組合應(yīng)用[J].計算機應(yīng)用與軟件,2010,27(12):148- 150. [8] 龐曉瓊,陳立潮,陳文俊.基于Web服務(wù)的氣象信息發(fā)布服務(wù)系統(tǒng)[J].計算機應(yīng)用與軟件,2007,24(9):88- 90.1.2 顯示界面設(shè)計
1.3 地圖的繪制
2 熱力學(xué)圖解的實現(xiàn)
2.1 T-lnP、V3-θ窗口部件的實現(xiàn)
2.2 熱力學(xué)圖解的實現(xiàn)及應(yīng)用
3 結(jié) 語