资源描述
海岸动力学实验报告
专业年级: 港 航 五 班
姓 名: 汪 中 琦
学 号: 1003010535
二〇一三年五月
中国 南京
目录
实验一:波浪数据采集与波高统计实验…………………………3
一、实验目的……………………………………………………3
二、实验要求……………………………………………………3
三、实验过程……………………………………………………3
四、结果分析……………………………………………………3
五、实验结论与反思……………………………………………10
实验二:波压力测量实验…………………………………………11
一、实验目的……………………………………………………11
二、实验要求……………………………………………………11
三、实验水文要素………………………………………………12
四、实验仪器……………………………………………………12
五、实验过程……………………………………………………12
六、结果分析……………………………………………………13
七、实验结论与反思……………………………………………15
实验一:波浪数据采集与波高统计实验
一、试验目的
了解波浪中规则波及不规则波的区别,波浪模型的一般方法,规则波波高、周期、不规则波高的统计方法。
二、试验要求
试验采用规则波及不规则波进行。
1、规则波及不规则波的测量。
2、规则波及不规则波特征值的统计。
3、试验报告的编写,要求报告能准确的反映试验目的、方法、过程及结论。
三、试验过程
试验中共设置四根波高传感器,四个同学为一组,每人采用其中一根传感器的数据计算波高,规则波采样时间为20s,不规则波采样时间为80s左右。
规则波试验结果主要统计平均波高。波峰减波谷即为波高,将采集到的所有波高进行算术平均,得到规则波的平均波高。不规则波试验结果主要统计有效波高。波峰减波谷即为波高,将采集到的所有波高进行排序,取前1/3大波进行算术平均,得到不规则波的有效波高。
四、结果分析:
本次实验使用c++ 语言编写计算程序。
1) 规则波
具体代码:
#include "guizebo.h"
#include <iostream>
using namespace std;
double a[100]={0};//a存放上跨零点
int GZ_top=0;//存放最后一个上跨零点
double GZ_max[100]={0},GZ_min[100]={0};//存放每个周期的最大值和最小值
void search_GZ_up0();//找出上跨零点函数
void search_GZ_maxandmin();//找出规则序列最大值最小值
int main()
{
cout<<"规则波:"<<endl;
search_GZ_up0();
for(int i=0;i<GZ_top;i++)
{
int temp=a[i];
cout<<temp<< " "<<GZ_table[temp]<<endl;
}
search_GZ_maxandmin();
cout<<endl;
for(int j=0;j<GZ_top-1;j++)
{
cout<<GZ_max[j]-GZ_min[j]<<endl;
}
double sum=0;
for(int k=0;k<GZ_top-1;k++) //求波高总和
{
sum+=GZ_max[k]-GZ_min[k];
}
double average=sum/(GZ_top-1);//波高平均
cout<<endl<<average<<endl;
return 0;
}
void search_GZ_up0()
{
int i=0;
for(int temp=0;temp<SIZE_GZ-1;temp++)
{
if(GZ_table[temp]*GZ_table[temp+1]<=0)
{
if(GZ_table[temp]<=0)
{
a[i]=temp;
i++;
}
}
GZ_top=i;
}
}
void search_GZ_maxandmin()
{
int temp1=0,temp2=0;
int length;//周期长度
for(int i=0;i<GZ_top-1;i++)
{
temp1=a[i];
temp2=a[i+1];
length=temp2-temp1;
GZ_max[i]=GZ_min[i]=0;
for(int j=0;j<length;j++)
{
if(GZ_table[temp1+j]>GZ_max[i]) GZ_max[i]=GZ_table[temp1+j];
if(GZ_table[temp1+j]<GZ_min[i]) GZ_min[i]=GZ_table[temp1+j];
}
}
}
运行结果:
(1)上跨零点
上跨零点位置
44
209
375
539
704
868
1033
1197
对应坐标
-0.137
-0.083
-0.016
-0.217
-0.07
-0.177
-0.204
-0.137
1362
1527
1693
1858
-0.177
-0.15
-0.003
-0.016
(2)波高分析
①相邻两个上跨零点间取定为一个单波
取每个波中最高点与最低点之差为波高,依次为:
11.974 11.84 11.893 11.853 11.92 11.719 11.464 11.17 11.21 10.647 10.164
单位:cm
②将波高取平均得平均波高为11.4388cm
2)不规则波
具体代码:
#include "buguizebo.h"
#include <iostream>
using namespace std;
double a[100]={0};//a存放上跨零点
int BGZ_top=0;//存放最后一个上跨零点
double BGZ_max[100]={0},BGZ_min[100]={0},BGZ_bg[100];//存放每个周期的最大值和最小值
void search_BGZ_up0();//找出上跨零点函数
void search_BGZ_maxandmin();//找出规则序列最大值最小值
void sequence_BGZ_max();//排序波高
int main()
{
cout<<"不规则波:"<<endl;
search_BGZ_up0();
for(int i=0;i<BGZ_top;i++)
{
int temp=a[i];
cout<<temp<< " "<<BGZ_table[temp]<<endl;
}
search_BGZ_maxandmin();
cout<<endl;
for(int j=0;j<BGZ_top-1;j++)
{
BGZ_bg[j]=BGZ_max[j]-BGZ_min[j];//求波高
cout<<BGZ_bg[j]<<endl;
}
cout<<endl;
sequence_BGZ_max();
for(j=0;j<BGZ_top-1;j++)
{
cout<<BGZ_bg[j]<<endl;
}
double sum=0;
int x;
x=(int)BGZ_top/3;
for(int k=0;k<x-1;k++) //求前1/3波高总和
{
sum+=BGZ_bg[k];
}
double average=sum/x;//波高平均
cout<<endl<<average<<endl;
return 0;
}
void search_BGZ_up0()
{
int i=0;
for(int temp=0;temp<SIZE_BGZ-1;temp++)
{
if(BGZ_table[temp]*BGZ_table[temp+1]<=0)
{
if(BGZ_table[temp]<=0)
{
a[i]=temp;
i++;
}
}
BGZ_top=i;
}
}
void search_BGZ_maxandmin()
{
int temp1=0,temp2=0;
int length;//周期长度
for(int i=0;i<BGZ_top-1;i++)
{
temp1=a[i];
temp2=a[i+1];
length=temp2-temp1;
BGZ_max[i]=BGZ_min[i]=0;
for(int j=0;j<length;j++)
{
if(BGZ_table[temp1+j]>BGZ_max[i]) BGZ_max[i]=BGZ_table[temp1+j];
if(BGZ_table[temp1+j]<BGZ_min[i]) BGZ_min[i]=BGZ_table[temp1+j];
}
}
}
void sequence_BGZ_max()
{
int temp=0,i=0,j=0,length=0;
double tempnum=0;
for(i=0;i<BGZ_top-1;i++)
{
tempnum=0;
length=BGZ_top-i-1;
for(j=0;j<length;j++)
{
if(BGZ_bg[i+j]>tempnum)
{
tempnum=BGZ_bg[i+j];
temp=i+j;
}
}
tempnum=BGZ_bg[temp];
BGZ_bg[temp]=BGZ_bg[i];
BGZ_bg[i]=tempnum;
}
}
运行结果:
(1) 上跨零点
与规则波一样,都要通过上跨零点的选取来进行波的选取(由于数据较多,在此不一一列出)
(2)波高分析
①相邻两个上跨零点间取定为一个单波
取每个波中最高点与最低点之差为波高,并按从大到小排序,依次为:
单位:cm
②将前三分之一波高取平均得有效波高为10.8237cm
五、实验结论和反思:
本次实验本人采用的是6通道数据,经测量和数据分析可得:①规则波平均波高为11.4388cm;②不规则波有效波高为10.8237cm。
在本次实验过程中我使用了c++作为平台进行数据处理,程序的算法大致为“数据导入-上跨零点法取波-找最大最小值并求差得波高-波高求平均(不规则波时先排序再取前三分之一大波平均值)
通过总结发现,本实验的程序算法还有诸多可改进之处:
1)数据导入处,我使用的是文件导入 ,而实际情况下“.800”后缀的文件无法直接导入,尤其是四列数据而只取用一列数据时,需要通过excel进行编辑,再复制到txt文件,最后才能被主程序引用。在实际操作过程中,我花费了大量时间在这一步上,而这明显阻碍了实验的高效性。因此在之后的实验中应该在数据导入方式上有所改进,最好能做到“.800”
文件的直接取用,以提高效率。
2)在波高排序时,我采用了直接比较法,资源占用较大,尤其在处理较多数据时效率低下,应采用冒泡法等替代方法以节省内存占用;
与此同时,我在实验过程中也存在一些疑惑:
1)由于规则波和不规则波的采样时间分别为20s和80s,那么所求得的波峰值和波谷值实际上也只是一组数据中的极值,可能并不能反映波高的真实情况。
部分程序运行结果:
规则波 不规则波
实验二:波压力测量实验
一、试验目的
海岸和近海工程的设计和建设,波浪与建筑物相互作用的研究是前提。波浪与建筑物的相互作用,决定工程目标的实现和建筑物的稳定与安全。
在海岸和近海工程中,如海上平台,离岸式码头,防波堤,挡土墙等建筑物,这类建筑物的主要外力之一就是作用在其上的波浪力,因此,波浪与建筑物相互作用研究中,波浪作用力的研究显得非常重要。
二、试验要求
(1)、确定模型比尺,率定波浪要素,测量模型上压力分布规律,模型比尺1:30;
(2)、明确实验目的,掌握实验原理。掌握基本仪器的使用方法,了解波压力数据采集系统的工作原理。试验中需要设计合理的试验比尺,结合试验任务书所提供的潮位及波浪要素确定建筑物迎浪面压力测点的布置位置,采集在设计波浪作用下各压力测点数据,通过参与试验的全过程,深入了解波浪与建筑物相互作用的一般规律。正确处理试验数据,能通过处理采样数据文件得出斜坡建筑物在波浪作用下分布的规律,画出压力分布图,得出实验结论。分析实验误差,提出减少误差的方法,分析误差范围。
(3)、试验报告的编写,要求报告能准确的反映试验目的、方法、过程及结果,能总结出压力在建筑物上分布的规律性,包含压力分布图,压力实测波形并给出最终压力的原型值。
三、试验水文条件
底高程
潮位
水深
波要素
Zd(m)
Z(m)
D(m)
五十年一遇
周期
H1%(m)
T(s)
-5.24
4.00
9.24
2.67
5.35
四、试验仪器
本次试验使用的主要仪器为DJ800型多功能监测系统。 DJ800型多功能监测系统是由计算机、多功能监测仪和各种传感器组成的数据采集和数据处理系统。它能对多种物理量的数据,进行准同步采集。例如水位、波高、点脉动压力、面脉动压力、拉力、三维总力、二维流速、护舷、位移、温度、应变以及模拟电压等。本次试验用其进行点脉动压力的同步采集。
五、试验过程
试验成员分为2组,一组成员进行波浪要素的率定,另外一组成员同时进行波压力传感器的安装,在斜坡中选取6个测点装入压力传感器,待率定结束后再将建筑物防入试验水槽,进行波浪压力的量测。
试验采用规则波,试验结果主要统计平均正向波压力。零线以上波峰的峰值即为试验得出的正向波压力,每个波峰得到一个正向波压力值,将采集到的所有正向波压力值进行算术平均,得到平均正向波压力值。
注:1)为了使来波不受反射波影响,应先将模型移去后率定波要素造波,再将模型放回进行实验;
2)每组实验结束后要重新调零。
六、结果分析
本次实验采用c++语言编程,由于本实验的目的和规则波实验有想通之处,因此在上次程序的算法基础上进行改进处理。
程序代码:
#include "yali.h"
#include <iostream>
using namespace std;
double a[100]={0};//a存放上跨零点
int YL_top=0;//存放最后一个上跨零点
double YL_max[100]={0};//存放每个周期的最大值
void search_YL_up0();//找出上跨零点函数
void search_YL_max();//找出压力最大值
int main()
{
search_YL_up0();
search_YL_max();
double sum=0;
for(int i=0;i<YL_top-1;i++)
{
sum+=YL_max[i];
cout<<YL_max[i]<<endl;
}
cout<<endl<<sum/(YL_top-1)<<endl;
return 0;
}
void search_YL_up0()
{
int i=0;
for(int temp=0;temp<SIZE_YL-1;temp++)
{
if(YL_table[temp]*YL_table[temp+1]<=0)
{
if(YL_table[temp]<0)
{
a[i]=temp;
i++;
}
}
YL_top=i;
}
}
void search_YL_max()
{
int temp1=0,temp2=0;
int length;//周期长度
for(int i=0;i<YL_top-1;i++)
{
temp1=a[i];
temp2=a[i+1];
length=temp2-temp1;
YL_max[i]=0;
for(int j=0;j<length;j++)
{
if(YL_table[temp1+j]>YL_max[i]) YL_max[i]=YL_table[temp1+j];
}
}
}
程序部分运行结果:
传感器9 传感器12 传感器57 传感器60 传感器53 传感器51
传感器12第一次测量波压力变化图
七、实验结论和反思
序号
测点
12
60
9
57
51
53
1
0.273
0.380
0.447
0.535
0.122
0.106
2
0.218
0.396
0.519
0.519
0.162
0.166
3
0.150
0.399
0.516
0.632
0.123
0.212
平均值
0.214
0.392
0.494
0.562
0.136
0.161
注:1)沿斜坡共有六个测点,进行三组实验,取平均值以减小误差
2)单位:kpa
波浪正压力分布图
实验结论:
1) 波压力分布如上图,可见,在水面以下约一倍波高处波浪正压力最大,为16.86kpa,向两侧减小。
实验反思:
1)在本次实验过程中,我依然采用了上跨零点的方法来取用每个周期波压力的最大值,但由波压力变化图可知,造波机产生的并非严格规则,在某一周期内有最大波压力的同时也存在比之稍微较小的波压力极值,即双峰甚至多峰的形式,且此类情况不在少数。那么久产生了一个问题:这些极值我们并没有取用,但它们在实际的设计施工中确实也起到了不可忽视的作用,那么对于这些非最大值的极值我们应该如何进行评估?
2) 在数据处理的过程中,经常会遇到因紊动作用或者是实验本身偶然误差导致的测量不准确,于是在各测点波压力平均值表中可见,几次测量的结果差距较大,而由于只进行了三组实验,实验次数较少无法通过舍去数据来减小误差,导致实验结果的不准确性。因而,应通过增加实验次数,取舍明显错误数据来保证实验结果的可靠度。
展开阅读全文