地震波场模拟报告.docx
《地震波场模拟报告.docx》由会员分享,可在线阅读,更多相关《地震波场模拟报告.docx(17页珍藏版)》请在冰豆网上搜索。
![地震波场模拟报告.docx](https://file1.bdocx.com/fileroot1/2023-1/24/33b0ac9d-6594-4e32-ac6e-9b77886c4726/33b0ac9d-6594-4e32-ac6e-9b77886c47261.gif)
地震波场模拟报告
《地震波场模拟》
程序设计报告
姓名:
严光明
学号:
201305060208
班级:
勘查二班
教师:
熊晓军
2016年4月20日
目录
程序1:
雷克子波
程序2:
一维褶积
程序3:
二维模型的褶积
程序4:
基于MISS软件的复杂模型的模拟
程序1:
雷克子波
一、任务与要求
画出雷克子波的图形
二、方法原理
三、程序设计
(1)程序代码
#include
#include
#definePI3.1415926
#defineVm20//主频
#defineN61//采样点数
#definedt0.002//采样间隔
voidleiker(float[]);//声明采样雷克子波函数
voidmain()
{
FILE*fp;
inti;
floatf[N]={0.0};//雷克子波采样值
leiker(f);//调用子函数
fp=fopen("201305060208.txt","w");//采样值写入文件
for(i=0;ifprintf(fp,"%f\n",f[i]);
fclose(fp);
}
//采样雷克子波函数
voidleiker(floatf[])
{
inti;
for(i=0;i{
f[i]=(1-2*PI*PI*Vm*Vm*(i-30)*dt*(i-30)*dt)*exp(-PI*PI*Vm*Vm*(i-30)*dt*(i-30)*dt);//雷克子波表达式
}
}
(2)计算实例
程序2:
一维褶积
一.任务与要求
把雷克子波和反射系数进行褶积
二.方法原理
三.程序设计
1.程序代码
#include
#include
#definePI3.1415926
#defineVm20
#definedt0.002//采样间隔
voidleiker(double[]);//声明雷克子波
voidcon(doublea[],doubleb[],doublec[],intM,intL);//声明褶积函数//
voidmain()
{
inti;
FILE*fp;
doublex[100]={0};//x反射系数,f表示子波;
x[50]=1.0;
doubley[100]={0};//输出的褶积值;
doublef[61]={0.0};//雷克子波采样值
leiker(f);//调用子函数
con(x,f,y,100,61);//调用褶积//
for(i=30;i<131;i++)
printf("%f\n",y[i]);//输出y到屏幕//
fp=fopen("zheji.txt","w");//采样值写入文件
for(i=30;i<131;i++)
fprintf(fp,"%f\n",y[i]);//输出褶积后的y值
fclose(fp);
}
//采样雷克子波函数//
voidleiker(doublef[])
{
inti;
for(i=0;i<61;i++)
{
f[i]=(1-2*PI*PI*Vm*Vm*(i-30)*dt*(i-30)*dt)*exp(-PI*PI*Vm*Vm*(i-30)*dt*(i-30)*dt);//雷克子波表达式
}
}
//褶积的函数//
voidcon(doublea[],doubleb[],doublec[],intM,intL)//a代表反射系数,b代表子波,c代表褶积后的值,M是a的个数,L是b的个数,N是c的个数
{
inti,j,N;
N=M+L-1;
for(i=0;i{
doubletp=0.0;
for(j=0;j{if((i-j)>=0&&(i-j)tp+=a[j]*b[i-j];
}
c[i]=tp;
tp=0.0;
}
}
2.计算实例
程序3:
二维褶积
一.任务与要求
反射系数与二维的子波进行褶积
二.方法原理
把二维的转化为一维的数组在进行计算。
三.程序设计
1.程序代码
#include
#include
#definePI3.1415926
#defineVm20
#definedt0.002//采样间隔
voidleiker(double[]);//声明雷克子波
voidcon(doublea[],doubleb[],doublec[],intM,intL);//声明褶积函数//
voidmain()
{
inti,j,k,n;
FILE*fp;
doubleRef2d[60][100]={0},Ref1d[100]={0},yk[60][160]={0};
doubley[160]={0};//输出的褶积值;
floatTEMP;
doublef[61]={0.0};//雷克子波采样值
for(i=0;i<60;i++)
{
Ref2d[i][50]=1.0;
}
for(i=0;i<60;i++)
{
for(j=0;j<100;j++)
{
Ref1d[j]=Ref2d[i][j];
}
leiker(f);//调用子函数/
con(Ref1d,f,y,100,61);//调用褶积//
printf("第%d道",i);
n=i;
for(k=0;k<160;k++)
{
printf("%f",y[k]);
yk[n][k]=y[k];
}
}
fp=fopen("ooooo","w");
{
for(i=0;i<60;i++)
{
for(j=0;j<160;j++)
{
fprintf(fp,"%f\t",yk[i][j]);
}
fprintf(fp,"\n");
}
}
fclose(fp);
fp=fopen("123456","wb");
{
for(i=0;i<60;i++)
{
for(j=0;j<160;j++)
{
TEMP=yk[i][j];
fwrite(&TEMP,sizeof(float),1,fp);
}
}
}
fclose(fp);
}
//采样雷克子波函数//
voidleiker(doublef[])
{
inti;
for(i=0;i<61;i++)
{
f[i]=(1-2*PI*PI*Vm*Vm*(i-30)*dt*(i-30)*dt)*exp(-PI*PI*Vm*Vm*(i-30)*dt*(i-30)*dt);//雷克子波表达式
}
}
//褶积的函数//
voidcon(doublea[],doubleb[],doublec[],intM,intL)//a代表反射系数,b代表子波,c代表褶积后的值,M是a的个数,L是b的个数,N是c的个数
{
inti,j,N;
N=M+L-1;
for(i=0;i{
doubletp=0.0;
for(j=0;j{if((i-j)>=0&&(i-j)tp+=a[j]*b[i-j];
}
c[i]=tp;
tp=0.0;
}
}
2.计算实例
程序4:
基于MISS软件的复杂模型的模拟
一.任务与要求
建立一个地层模型,利用MISS做出模型。
三.方法原理
和二维褶积模型的原理类似,只是反射系数做成MISS系统计算后的模型。
三.程序设计
1.程序代码
#include
#include
#definePI3.1415926
#include
#defineNX128//水平方向采样点
#defineNZ128//深度方向采样点
#defineVm20
#definedt0.002//采样间隔
voidleiker(double[]);//声明雷克子波
voidcon(doublea[],doubleb[],doublec[],intM,intL);//声明褶积函数//
voidmain()
{
inti,j,k,n;
floatLS;
intIX,IZ;
floatV[NZ][NX]={0};
FILE*fp,*fp1;
doubleRef2d[128][128]={0},Ref1d[128]={0},yk[128][188]={0};
doubley[188]={0};//输出的褶积值;
floatTEMP;
doublef[61]={0.0};//雷克子波采样值
//*************************************************************************//
//读文本速度文件
fp=fopen("Model_V.txt","r");
for(IZ=0;IZ{
for(IX=0;IX{
fscanf(fp,"%f",&V[IZ][IX]);
}
}
fclose(fp);
fp1=fopen("Model_R.txt","wb");
for(IX=0;IX{
for(IZ=0;IZ{
LS=float(V[IZ][IX]);
fwrite(&LS,sizeof(float),1,fp1);
}
}
fclose(fp1);
//*********************************************************************//
for(i=0;i<128;i++)
for(j=0;j<128;j++)
{
Ref2d[i][j]=V[i][j];
}
for(i=0;i<128;i++)
{
for(j=0;j<128;j++)
{
Ref1d[j]=Ref2d[i][j];
}
leiker(f);//调用子函数/
con(Ref1d,f,y,128,61);//调用褶积//
printf("第%d道",i);
n=i;
for(k=0;k<188;k++)
{
printf("%f",y[k]);
yk[n][k]=y[k];
}
}
fp=fopen("ooooo.txt","w");
{
for(i=0;i<128;i++)
{
for(j=0;j<188;j++)
{
fprintf(fp,"%f\t",yk[i][j]);
}
fprintf(fp,"\n");
}
}
fclose(fp);
fp=fopen("二进制文件","wb");
{
for(i=0;i<188;i++)
{
for(j=0;j<128;j++)
{
TEMP=yk[j][i];
fwrite(&TEMP,sizeof(float),1,fp);
}
}
}
fclose(fp);
}
//采样雷克子波函数//
voidleiker(doublef[])
{
inti;
for(i=0;i<61;i++)
{
f[i]=(1-2*PI*PI*Vm*Vm*(i-30)*dt*(i-30)*dt)*exp(-PI*PI*Vm*Vm*(i-30)*dt*(i-30)*dt);//雷克子波表达式
}
}
//褶积的函数//
voidcon(doublea[],doubleb[],doublec[],intM,intL)//a代表反射系数,b代表子波,c代表褶积后的值,M是a的个数,L是b的个数,N是c的个数
{
inti,j,N;
N=M+L-1;
for(i=0;i{
doubletp=0.0;
for(j=0;j{if((i-j)>=0&&(i-j)tp+=a[j]*b[i-j];
}
c[i]=tp;
tp=0.0;
}
}
2.计算实例
构建的模型:
计算的结果: