单炮数据正演

经过学习完整的正演模拟过程之后,可以得到波场快照,波场快照的含义是指在某时刻t下波的传播情况的展示。同时,也可以通过设置检波点来接收波,可以得到单炮数据。检波器可以放在地面称为地面检波器,也可以垂直地面排列放入地下,称为井中检波器。除此之外,检波器也可以水平方向放置在地下。

(1)地面检波器

如何获得地面检波器接收的信息,是由检波器位置x和检波器接收到波的时间t构成的,因此生成图像应为以x为横坐标,t为纵坐标的图像。与之前得到的波长快照不同的是,确定一个时间t不变,观察波形传播的位置,地面检波器接收到的则是,确定一行位置不变,观察何时t接收到波。
方法:由此我们可以知道,检波器得到的与波长快照的实际信息是一样的,只是表达方式不一样,因此我们可以再新开辟一个数组land[]用来存储检波器检测到波的信息,该数组包含检波器位置x和检波器接受到波的时间t。而检波器位置是固定的,因此可以从wf2[]数组中提取出检波器位置的波场信息即可。
由此设置一个函数copydata()用来实现以上操作,此处将检波器分别排列在水平界面上,范围与速度模型的水平长度相等。

void copydata(float *land,float *wf,int nt,int nz,int it,int N)
{
	int iz=N/2,ix;//由于波动方程是从(N/2,N/2)位置开始计算,因此检波器也需放置在深度为N/2处的水平方向
	for(ix=0;ix<nx;ix++)
	{
		land[ix*nt+it]=wf[ix*nz+iz];
	}
}

此处要注意,由于copydata()引用了参数it,因此要将copydata()放在zhengyan()循环中如下:

void zhengyan_display(float *wf1,float *wf2,float *wf3,float *velocity,int nx,int nz,int nt,float dx,float dz,float dt,float *coe,int N)
{
	int it;
	for(it=0;it<nt;it++)
	{
		add_wavelet(wf2,wavelet,nx,nz,it,sx,sz);
		exteapolation(wf1,wf2,wf3,velocity,nx,nz,dx,dz,dt,coe,N);
		replace_wf(wf1,wf2,wf3,nx,nz);
		copydata(land,wf2,nt,nz,it,N);
		copydata2(well,wf2,nt,nz,it,N,Z);
		if(it==400)
			output("zhengyan.bin",wf2,nx,nz);
	}
	output("ricive_land.bin",land,nx,nt);//输出文件
	output("ricive_well.bin",well,Z,nt);

编译并执行ximage<ricive_land.bin n1=501&运行之后得到如下结果
image.png
由于震源位置再sx=200,sz=150处,因此地面检波器得到如图结果。为了方便观测,我们将震源改为设置在地面中心上,并将nt设置为1001,输入命令ximage<ricive_land.bin n1=1001&得到如下结果
image.png

(2)井中检波器

与地面检波器原理相同,只不过改变了检波器的位置,并开辟新数组well[]用来存储信息,函数copydata2()函数来实现:

void copydata2(float *land,float *wf,int nt,int nz,int it,int N,int Z)
{
	int iz,ix=150;//检波器位置是在ix=150处垂直水平面,深度由0—Z。
	for(iz=0;iz<Z;iz++)
	{
		land[iz*nt+it]=wf[ix*nz+iz];
	}
}

使Z=150得到如下结果(震源位置和nt与地面检波器设置相同)
image.png

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值