李 進(jìn) 曲淑英
(煙臺大學(xué)土木工程學(xué)院,山東 煙臺 264000)
?
·計算機(jī)技術(shù)及應(yīng)用·
C#與Fortran混合編程在剪切波速測試中的應(yīng)用
李進(jìn)曲淑英
(煙臺大學(xué)土木工程學(xué)院,山東 煙臺264000)
基于互相關(guān)函數(shù)和C#,F(xiàn)ortran混合編程開發(fā)單孔法剪切波速分析計算軟件,借助C#強(qiáng)大的界面開發(fā)的平臺,通過調(diào)用動態(tài)鏈接庫的方法,以Fortran為計算內(nèi)核,完成剪切波速的計算分析工作。充分利用兩種編程語言的優(yōu)勢,突破自身的局限,避免資源的浪費(fèi),提高編程效率,實(shí)現(xiàn)了數(shù)值計算的可視化。在實(shí)際工程應(yīng)用中,可以減少波速測試技術(shù)人員的工作量,提高工作效率及計算精度。
混合編程,動態(tài)鏈接庫,單孔法,剪切波速
土的剪切波速是土動力學(xué)中一個重要的物理量。在巖土工程、地震減災(zāi)工程中,被應(yīng)用于建筑場地類別的劃分,并為評價地基飽和砂土層地震液化可能性的一種判別指標(biāo)[1]。剪切波速測試技術(shù)還被廣泛應(yīng)用到巖土勘察中,如推求飽和土層的孔隙率及重度、計算土的動力學(xué)參數(shù)、計算固有周期等[2]。但是在實(shí)際波速測試中,技術(shù)人員會面臨諸多的困難,這些困難會影響計算精度,尤其是對剪切波到時的分辨,由于受到外界條件及干擾信號的影響,使得剪切波初至?xí)r刻難以識別。直接影響到剪切波速計算的精度。而基于互相關(guān)函數(shù)判別剪切波到時的方法能夠很好的解決這個問題。Fortran語言是一種底層的數(shù)值計算語言,自身擁有強(qiáng)大的程序集和計算類的數(shù)據(jù)結(jié)構(gòu),計算速度快。C#(sharp)是一種具有強(qiáng)大的可視化界面設(shè)計的優(yōu)勢和開發(fā)高效等特點(diǎn)的計算機(jī)語言,其設(shè)計目的之一就是快速的實(shí)現(xiàn)應(yīng)用程序的開發(fā);這一特點(diǎn)正好彌補(bǔ)了Fortran不易可視化的缺點(diǎn)[2-6]。因此,C#調(diào)用Fortran編譯的程序,能夠提高使用效率、代碼的重用率,降低使用其他語言重新開發(fā)的難度并減少勞動量,同時也能充分利用C#和Fortran各自的優(yōu)點(diǎn),編制既計算能力高效又界面友好的計算機(jī)程序[7,8]。
1.1剪切波速測試方法
土的剪切波速測試方法目前主要有鉆孔法和面波法。根據(jù)測試原理不同,鉆孔法又分為單孔法和跨孔法;面波法則分為瞬態(tài)面波法和穩(wěn)態(tài)面波法。單孔法測試方法具有方法簡單且試驗(yàn)設(shè)備簡便的特點(diǎn),也是在目前實(shí)際工程中應(yīng)用最廣泛的測試方法。《地基土動力特性測試規(guī)范》對單孔法剪切波速測試做出了明確的規(guī)定,如圖1所示為單孔法波速測試示意圖。該方法利用木錘或鐵錘水平敲擊木板以激發(fā)剪切波,木板下部鋪砂土墊平,并在中心位置下埋置觸發(fā)傳感器。木板上壓重物或者將汽車兩前輪壓在木板上以保證與地面的緊密接觸。木板的長向中垂線與測試孔中心對齊,孔口距離木板1 m~3 m。測試時,應(yīng)根據(jù)工程情況及地質(zhì)分層,每隔1 m~3 m布置一個測點(diǎn),并宜按預(yù)定深度自下而上進(jìn)行測試。在單孔法剪切波速測量時,在預(yù)定深度固定井下探頭后,激發(fā)剪切波時,沿木板縱軸方向分別敲擊木板兩端,這樣能記錄極性相反的兩組激發(fā)剪切波。井下探頭記錄剪切波到時,取兩個水平檢波器中振幅較大的作為靈敏接受方向,并根據(jù)兩個方向激發(fā)剪切波極性相反的特點(diǎn),確定剪切波的初至?xí)r刻,剪切波的旅行時間初至?xí)r刻與觸發(fā)傳感器信號的起點(diǎn)的差[9,10]。單孔法剪切波速測試,測量的剪切波速是鉆孔內(nèi)相鄰兩個測點(diǎn)中間土層的平均波速。確定了剪切波旅行時間后,通過測量繩的讀數(shù)和激振源到孔口的距離確定波的行程,最后按照規(guī)范給出的公式計算測點(diǎn)所在土層剪切波速。
1.2互相關(guān)函數(shù)測試剪切波速的原理
剪切波速測試中,決定波速測量精度的關(guān)鍵是對剪切波初至?xí)r刻的判別。但是在實(shí)際測量中,由于受到環(huán)境振動等因素的干擾,使得初至?xí)r刻難以判別。傳統(tǒng)方法采用人工識別剪切波的初至?xí)r刻,會存在以下問題:1)借助信號的波峰判別到時差,使剪切波速測量結(jié)果偏小,影響精度。2)前面測點(diǎn)的數(shù)據(jù)會影響到后面測點(diǎn)數(shù)據(jù),出現(xiàn)測點(diǎn)數(shù)值不合理問題。3)分析效率低。
為了有效的消除場地環(huán)境振動等因素帶來的干擾,對探頭信號、觸發(fā)傳感器信號以及探頭信號背景噪聲進(jìn)行頻譜分析,以及對探頭信號進(jìn)行帶通濾波。在實(shí)際測量中,激振器和拾振器距離很近,所以觸發(fā)傳感器信號和探頭水平信號有良好的相關(guān)性。由于不同頻的信號其互相關(guān)函數(shù)為零,即它們的周期信號是不相關(guān)的[11],可以描述兩信號波形相似度以及它們在時間軸上的位置差異。
根據(jù)互相關(guān)函數(shù)定義:在保持觸發(fā)傳感器記錄不動的前提下,每前移探頭水平記錄的一個點(diǎn),就將時間軸上的縱坐標(biāo)與對應(yīng)的觸發(fā)傳感器記錄縱坐標(biāo)相乘并求和,并作為互相關(guān)函數(shù)值。當(dāng)激發(fā)剪切波到時與接受點(diǎn)到時重合的時候,互相關(guān)函數(shù)值的絕對值達(dá)到最大。這樣就把分析到時差轉(zhuǎn)換成搜索互相關(guān)函數(shù)絕對值最大時所對應(yīng)的時間[12]。
基于帶通濾波后進(jìn)行互相關(guān)分析的方法識別剪切波的初至,可以有效的減少環(huán)境等因素帶來的干擾,提高分析效率。
Fortran是一門歷史悠久的計算機(jī)編程語言,在其發(fā)展過程中,積累了大量的科學(xué)計算程序資源,很多土木工程的計算程序都是用Fortran編制的。C#是基于.NET平臺先進(jìn)的、安全的、面向?qū)ο笤O(shè)計的語言,實(shí)現(xiàn)Fortran與C#混合編程,可以提高土木工程計算分析軟件的開發(fā)效率和使用性能,充分發(fā)揮這兩種語言的優(yōu)勢。
本文編譯平臺為Visual studio 2010。打開Microsoft Visual studio,選擇Fortran下的Library模塊,創(chuàng)建Dynamic-Link Library類型的工程,工程名為:SHAP。在編寫程序時,動態(tài)鏈接庫使用的是子函數(shù)形式,推薦使用SUBROUTINE。并作以下聲明:
!DEC$ATTRIBUTES DLLEXPORT::SHAP//編譯DLL的注釋性命名;這是解決C#和Fortran語言約定一致性的接口問題的關(guān)鍵步驟。如果不做處理C#調(diào)用時,將無法找到接口。
!DEC$ATTRIBUTES StdCall,ALIAS:‘SHAP’::SHAR//使用StdCall屬性作為堆棧約定,ALIAS屬性限定子例程混合書寫形式。
在混合編程時要特別注意的是參數(shù)的傳遞。由于C#和Fortran的默認(rèn)傳遞方式不同,在編程時需要對變量參數(shù)進(jìn)行聲明。值得一提的是C#和Fortran對數(shù)組的傳遞方式是相同的,為引用傳遞。本文SHAP程序參數(shù)為數(shù)組參數(shù),所以無需對變量參數(shù)進(jìn)行另外聲明。SHAP子程序包括以下幾個模塊:互相關(guān)函數(shù)計算子程序、到時差計算子程序、剪切波速計算子程序以及波速結(jié)構(gòu)圖子程序。完成代碼編寫后,編譯、生成解決方案。在工程名為SHAP的debug目錄下,就會生成SHAP.DLL文件。把這個文件拷貝到C#工程的debug目錄下。
在C#中,創(chuàng)建Windows窗體應(yīng)用程序,并對該窗體應(yīng)用程序進(jìn)行設(shè)計,圖2為程序設(shè)計的主界面。添加using System.Runtime.InteropService引用,此為關(guān)鍵引用,若不引用則無法實(shí)現(xiàn)混合編程,以調(diào)用Fortran生成的動態(tài)鏈接庫;添加using System.IO引用,用于數(shù)據(jù)文件的操作。創(chuàng)建一個SHAP程序生成的SHAP.dll的調(diào)用類:class callForDll{
[DllImport(“SHARP.dll”)]
public extern static string SHARP();}
利用callForDll.SHARP()語句,完成C#對Fortran動態(tài)鏈接庫的調(diào)用,最終實(shí)現(xiàn)兩種語言的混合編程。
功能介紹:輸入數(shù)據(jù)文件名,單擊“讀取數(shù)據(jù)”,在表格中顯示數(shù)據(jù),單擊“刪除數(shù)據(jù)”清除表格數(shù)據(jù)。單擊“計算按鈕”,運(yùn)行Fortran編寫的SHAP程序,計算剪切波速,計算完成后生成結(jié)果數(shù)據(jù)文件,便于后處理。單擊“生成波速結(jié)構(gòu)圖并保存”和“生成分析結(jié)果并保存”分別生成波速結(jié)構(gòu)圖和分析結(jié)果數(shù)據(jù)文件。
基于剪切波速測試的互相關(guān)函數(shù),通過C#和Fortran混合編程,開發(fā)了單孔法剪切波速測試的計算分析軟件。對帶通濾波后的觸發(fā)傳感器信號和探頭水平信號進(jìn)行互相關(guān)分析,可以準(zhǔn)確的識別到時差,并使用Fortran語言編制波速計算程序(SHAP),生成動態(tài)鏈接庫(DLL),并用C#調(diào)用Fortran生成的動態(tài)鏈接庫。該軟件具有自動讀取數(shù)據(jù);自動計算;自動生成波速結(jié)構(gòu)圖和自動生成報告等功能,大大提高了數(shù)據(jù)分析效率和精度。
[1]汪聞韶.土工地震減災(zāi)工程中的一個重要參量——剪切波速[J].水利學(xué)報,1994(3):80-84,89.
[2]朱菲菲,胡志東,楊曉艷.單孔法波速測試技術(shù)相關(guān)性因素分析及其在巖土工程勘察中的應(yīng)用[J].土工基礎(chǔ),2012(6):117-121.
[3]周濤,郭占元,郭向榮.FORTRAN與C#混合編程在土木工程計算中的應(yīng)用[J].山東交通學(xué)院學(xué)報,2009(5):16-17.
[4]朱泰山,王一一,馮國泰.基于Fortran與C#混編數(shù)值仿真軟件系統(tǒng)的實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2008(4):32-33.
[5]楊帆.利用Visual C#實(shí)現(xiàn)FORTRAN程序可視化的方法[J].計算機(jī)與數(shù)字工程,2008(1):170-172,187.
[6]安晶,安鵬.Fortran與C#混合編程在地震屬性分析中的應(yīng)用[J].鹽城工學(xué)院學(xué)報(自然科學(xué)版),2012(2):34-37.
[7]林國勇,董洵,吳婉凡.在.Net平臺下C#和Fortran的混合語言編程[J].計算機(jī)系統(tǒng)應(yīng)用,2003(9):58-60.
[8]鄭暉.基于txt文件快速實(shí)現(xiàn)C#與Fortran混合編程[J].計算機(jī)與數(shù)字工程,2010(10):146-149.
[9]GBT 50269—97,地基動力特性測試規(guī)范[S].
[10]GB 50011—2010,建筑抗震設(shè)計規(guī)范[S].
[11]侯興民,薄景山,楊學(xué)山,等.互相關(guān)函數(shù)在單孔法剪切波速測量中的應(yīng)用[J].地震工程與工程振動,2004(2):59-63.
[12]侯興民,楊學(xué)山,廖振鵬,等.基于互相關(guān)函數(shù)的單孔法波速測試優(yōu)化算法[J].巖土力學(xué),2006(7):1161-1165.
[13]安輝,趙昌朋,楊明爽,等.Fortran和VB混合編程在場地剪切波速測試中的實(shí)現(xiàn)[J].山東國土資源,2008(9):39-44.
Application of C# and fortran mixed programming in shear wave velocity measurement
Li JinQu Shuying
(CollegeofCivilEngineering,YantaiUniversity,Yantai264000,China)
The sing-hole shear wave velocity test analysis software based on the inter-related functions and using the method of C# and Fortran mixed programming is developed by using the platform of C# which is powerful in interface development, the method of calling dynamic-link library and the kernel of Fortran calculation in order to complete the shear wave velocity calculation and analysis. This can make full use of the advantages of C# and Fortran, break through their own limitations, avoid the waste of resources, improve the programming efficiency, finally realize the visualization of numerical calculation. In the practical engineering application, the sing-hole shear wave velocity test analysis software can reduce the workload of the test technicians, improve the efficiency and accuracy.
mixed programming, dynamic-link library, method of sing-hole, shear wave velocity
1009-6825(2016)08-0254-02
2016-01-08
李進(jìn)(1990- ),男,在讀碩士;曲淑英(1963- ),女,教授
TP319
A