李 進 曲淑英
(煙臺大學土木工程學院,山東 煙臺 264000)
?
·計算機技術及應用·
C#與Fortran混合編程在剪切波速測試中的應用
李進曲淑英
(煙臺大學土木工程學院,山東 煙臺264000)
基于互相關函數和C#,Fortran混合編程開發單孔法剪切波速分析計算軟件,借助C#強大的界面開發的平臺,通過調用動態鏈接庫的方法,以Fortran為計算內核,完成剪切波速的計算分析工作。充分利用兩種編程語言的優勢,突破自身的局限,避免資源的浪費,提高編程效率,實現了數值計算的可視化。在實際工程應用中,可以減少波速測試技術人員的工作量,提高工作效率及計算精度。
混合編程,動態鏈接庫,單孔法,剪切波速
土的剪切波速是土動力學中一個重要的物理量。在巖土工程、地震減災工程中,被應用于建筑場地類別的劃分,并為評價地基飽和砂土層地震液化可能性的一種判別指標[1]。剪切波速測試技術還被廣泛應用到巖土勘察中,如推求飽和土層的孔隙率及重度、計算土的動力學參數、計算固有周期等[2]。但是在實際波速測試中,技術人員會面臨諸多的困難,這些困難會影響計算精度,尤其是對剪切波到時的分辨,由于受到外界條件及干擾信號的影響,使得剪切波初至時刻難以識別。直接影響到剪切波速計算的精度。而基于互相關函數判別剪切波到時的方法能夠很好的解決這個問題。Fortran語言是一種底層的數值計算語言,自身擁有強大的程序集和計算類的數據結構,計算速度快。C#(sharp)是一種具有強大的可視化界面設計的優勢和開發高效等特點的計算機語言,其設計目的之一就是快速的實現應用程序的開發;這一特點正好彌補了Fortran不易可視化的缺點[2-6]。因此,C#調用Fortran編譯的程序,能夠提高使用效率、代碼的重用率,降低使用其他語言重新開發的難度并減少勞動量,同時也能充分利用C#和Fortran各自的優點,編制既計算能力高效又界面友好的計算機程序[7,8]。
1.1剪切波速測試方法
土的剪切波速測試方法目前主要有鉆孔法和面波法。根據測試原理不同,鉆孔法又分為單孔法和跨孔法;面波法則分為瞬態面波法和穩態面波法。單孔法測試方法具有方法簡單且試驗設備簡便的特點,也是在目前實際工程中應用最廣泛的測試方法。《地基土動力特性測試規范》對單孔法剪切波速測試做出了明確的規定,如圖1所示為單孔法波速測試示意圖。該方法利用木錘或鐵錘水平敲擊木板以激發剪切波,木板下部鋪砂土墊平,并在中心位置下埋置觸發傳感器。木板上壓重物或者將汽車兩前輪壓在木板上以保證與地面的緊密接觸。木板的長向中垂線與測試孔中心對齊,孔口距離木板1 m~3 m。測試時,應根據工程情況及地質分層,每隔1 m~3 m布置一個測點,并宜按預定深度自下而上進行測試。在單孔法剪切波速測量時,在預定深度固定井下探頭后,激發剪切波時,沿木板縱軸方向分別敲擊木板兩端,這樣能記錄極性相反的兩組激發剪切波。井下探頭記錄剪切波到時,取兩個水平檢波器中振幅較大的作為靈敏接受方向,并根據兩個方向激發剪切波極性相反的特點,確定剪切波的初至時刻,剪切波的旅行時間初至時刻與觸發傳感器信號的起點的差[9,10]。單孔法剪切波速測試,測量的剪切波速是鉆孔內相鄰兩個測點中間土層的平均波速。確定了剪切波旅行時間后,通過測量繩的讀數和激振源到孔口的距離確定波的行程,最后按照規范給出的公式計算測點所在土層剪切波速。

1.2互相關函數測試剪切波速的原理
剪切波速測試中,決定波速測量精度的關鍵是對剪切波初至時刻的判別。但是在實際測量中,由于受到環境振動等因素的干擾,使得初至時刻難以判別。傳統方法采用人工識別剪切波的初至時刻,會存在以下問題:1)借助信號的波峰判別到時差,使剪切波速測量結果偏小,影響精度。2)前面測點的數據會影響到后面測點數據,出現測點數值不合理問題。3)分析效率低。
為了有效的消除場地環境振動等因素帶來的干擾,對探頭信號、觸發傳感器信號以及探頭信號背景噪聲進行頻譜分析,以及對探頭信號進行帶通濾波。在實際測量中,激振器和拾振器距離很近,所以觸發傳感器信號和探頭水平信號有良好的相關性。由于不同頻的信號其互相關函數為零,即它們的周期信號是不相關的[11],可以描述兩信號波形相似度以及它們在時間軸上的位置差異。
根據互相關函數定義:在保持觸發傳感器記錄不動的前提下,每前移探頭水平記錄的一個點,就將時間軸上的縱坐標與對應的觸發傳感器記錄縱坐標相乘并求和,并作為互相關函數值。當激發剪切波到時與接受點到時重合的時候,互相關函數值的絕對值達到最大。這樣就把分析到時差轉換成搜索互相關函數絕對值最大時所對應的時間[12]。
基于帶通濾波后進行互相關分析的方法識別剪切波的初至,可以有效的減少環境等因素帶來的干擾,提高分析效率。
Fortran是一門歷史悠久的計算機編程語言,在其發展過程中,積累了大量的科學計算程序資源,很多土木工程的計算程序都是用Fortran編制的。C#是基于.NET平臺先進的、安全的、面向對象設計的語言,實現Fortran與C#混合編程,可以提高土木工程計算分析軟件的開發效率和使用性能,充分發揮這兩種語言的優勢。
本文編譯平臺為Visual studio 2010。打開Microsoft Visual studio,選擇Fortran下的Library模塊,創建Dynamic-Link Library類型的工程,工程名為:SHAP。在編寫程序時,動態鏈接庫使用的是子函數形式,推薦使用SUBROUTINE。并作以下聲明:
!DEC$ATTRIBUTES DLLEXPORT::SHAP//編譯DLL的注釋性命名;這是解決C#和Fortran語言約定一致性的接口問題的關鍵步驟。如果不做處理C#調用時,將無法找到接口。
!DEC$ATTRIBUTES StdCall,ALIAS:‘SHAP’::SHAR//使用StdCall屬性作為堆棧約定,ALIAS屬性限定子例程混合書寫形式。
在混合編程時要特別注意的是參數的傳遞。由于C#和Fortran的默認傳遞方式不同,在編程時需要對變量參數進行聲明。值得一提的是C#和Fortran對數組的傳遞方式是相同的,為引用傳遞。本文SHAP程序參數為數組參數,所以無需對變量參數進行另外聲明。SHAP子程序包括以下幾個模塊:互相關函數計算子程序、到時差計算子程序、剪切波速計算子程序以及波速結構圖子程序。完成代碼編寫后,編譯、生成解決方案。在工程名為SHAP的debug目錄下,就會生成SHAP.DLL文件。把這個文件拷貝到C#工程的debug目錄下。

在C#中,創建Windows窗體應用程序,并對該窗體應用程序進行設計,圖2為程序設計的主界面。添加using System.Runtime.InteropService引用,此為關鍵引用,若不引用則無法實現混合編程,以調用Fortran生成的動態鏈接庫;添加using System.IO引用,用于數據文件的操作。創建一個SHAP程序生成的SHAP.dll的調用類:class callForDll{
[DllImport(“SHARP.dll”)]
public extern static string SHARP();}
利用callForDll.SHARP()語句,完成C#對Fortran動態鏈接庫的調用,最終實現兩種語言的混合編程。
功能介紹:輸入數據文件名,單擊“讀取數據”,在表格中顯示數據,單擊“刪除數據”清除表格數據。單擊“計算按鈕”,運行Fortran編寫的SHAP程序,計算剪切波速,計算完成后生成結果數據文件,便于后處理。單擊“生成波速結構圖并保存”和“生成分析結果并保存”分別生成波速結構圖和分析結果數據文件。
基于剪切波速測試的互相關函數,通過C#和Fortran混合編程,開發了單孔法剪切波速測試的計算分析軟件。對帶通濾波后的觸發傳感器信號和探頭水平信號進行互相關分析,可以準確的識別到時差,并使用Fortran語言編制波速計算程序(SHAP),生成動態鏈接庫(DLL),并用C#調用Fortran生成的動態鏈接庫。該軟件具有自動讀取數據;自動計算;自動生成波速結構圖和自動生成報告等功能,大大提高了數據分析效率和精度。
[1]汪聞韶.土工地震減災工程中的一個重要參量——剪切波速[J].水利學報,1994(3):80-84,89.
[2]朱菲菲,胡志東,楊曉艷.單孔法波速測試技術相關性因素分析及其在巖土工程勘察中的應用[J].土工基礎,2012(6):117-121.
[3]周濤,郭占元,郭向榮.FORTRAN與C#混合編程在土木工程計算中的應用[J].山東交通學院學報,2009(5):16-17.
[4]朱泰山,王一一,馮國泰.基于Fortran與C#混編數值仿真軟件系統的實現[J].電腦編程技巧與維護,2008(4):32-33.
[5]楊帆.利用Visual C#實現FORTRAN程序可視化的方法[J].計算機與數字工程,2008(1):170-172,187.
[6]安晶,安鵬.Fortran與C#混合編程在地震屬性分析中的應用[J].鹽城工學院學報(自然科學版),2012(2):34-37.
[7]林國勇,董洵,吳婉凡.在.Net平臺下C#和Fortran的混合語言編程[J].計算機系統應用,2003(9):58-60.
[8]鄭暉.基于txt文件快速實現C#與Fortran混合編程[J].計算機與數字工程,2010(10):146-149.
[9]GBT 50269—97,地基動力特性測試規范[S].
[10]GB 50011—2010,建筑抗震設計規范[S].
[11]侯興民,薄景山,楊學山,等.互相關函數在單孔法剪切波速測量中的應用[J].地震工程與工程振動,2004(2):59-63.
[12]侯興民,楊學山,廖振鵬,等.基于互相關函數的單孔法波速測試優化算法[J].巖土力學,2006(7):1161-1165.
[13]安輝,趙昌朋,楊明爽,等.Fortran和VB混合編程在場地剪切波速測試中的實現[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
李進(1990- ),男,在讀碩士;曲淑英(1963- ),女,教授
TP319
A