李 进 曲淑英
(烟台大学土木工程学院,山东 烟台 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