数值模拟实验报告Word文档格式.docx
《数值模拟实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《数值模拟实验报告Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
1)垂直入射:
图一垂直入射图二非垂直入射
2、褶积方法
(1)离散化(数值化)
计算机数值模拟要求首先必须
针对连续信号离散化处理。
反射系数在空间模型中存在,不同深度反射系数不同,是深度的函数。
子波是在时间记录上一延续定时间的信号,是时间的概念。
在离散化时,通过深度采样完成反射系数的离散化,通过时间采样完成子波的离散化。
如呆记录是Trace(t),则记录是时间的函数,以时间采样离散化。
时间采样间距以M表示,深度采样间距以"
表示。
在做多道的数值模拟时,还有横向X的概念,横向采样间隔以Ax表示。
离散化的实现:
t=ltxAt;
x=lxxAx;
z=lzxAz或:
lt=t/At;
lx=x/Ax;
lz=z/Az
(2)离散序列的褶积
trace(It)=S?
tao=-corflct(Itao)xwave(It—Itao)
四、实验内容
1、垂直入射地震记录数值模拟的褶积模型;
2、非垂直入射地震记录数值模拟的褶积模型;
3、点绕射的地震记录数值模拟的褶积模型;
五、方法路线
根据褶枳模型的实验原理编写C++程序,完成对于垂直入射波的褶积。
改变子波的长度与主频的人小,关注其对于实验结果的影响。
通过增加一个地层来模拟地下两层界面的反射情况,通过改变界面的高度来说明其对于实验结果的影响,同时改变子波长度与主频。
非垂直入射改变时间t来改变褶积结果显示地面情况。
点绕射模型通过时间的改变,任意位置检波器的自激自搜时间来改变褶积结果,同时改变子波长度
v=4500
v=5750
与主频来分析影响。
六、实验结果:
1.垂直入射:
单层界面
1>
h=1000.fm=10,Nw=80
v=2000
2>
h=1000,v=4000,fm=10
Nw=80
Nw=120
Nw=140
U3
Nw=160
UL
51IIIS
3>
h=1000tv=4000»
Nw=80
4>
h=1000,v=4000,Nw=160
fm=5
■:
r
fm=10
ID
0•Hil
-r
LD
112
sixse
fm=15
It
iM
1»
IJJ
h=1400
:
5(XI
QK・iTTnirninnnnnrmiTHTirnn门rniNiiiTHTHiirnnTirrirnininniirnHTFT・T】rnnrriiFiniriV
5>
v=4000tfm=10,Nw=80
h=800
h=1200
h=1600
双层界面
H12=20
h=1000»
v=4000,Nw=80
lllililllilQ
hili
KI
ar«
K
山
fm=20
fm=46
v=4000»
Nw=160
H12=40
h=1000.v=4000»
v=4000,Nw=160
H12=60
l%
叩iiTiTiii】iiiinnnnniiirninmiiFirnnnniiiHiiiiiiiiHiii】’
JUA
■Tiiif
1
IS*M
u>
4tn
H12=80
2•非垂直入射
h=1000ffm=10,Nw=80
gm
h=1000,v二4000,fm=10
Nw=100
v=7000
III
WIII
&
MIII
i么
fm=55
v=4000>
fm=10tNw=80
h=1000
lWIII
3•点绕射卷积模型图件
相关程序:
#include<
math.h>
#include<
stdio.h>
string・h>
intCnltn(float,float);
intRflct(float,float,float);
intWave(float,float);
#defineNx128
#defineNt256
#defineNw32
•<
A■■■
wu<
voidmain()
{
float
dt=0.004/dx=20.0/fm=25.0,h=1000.0/v=3000.0;
int讦lag_Co,iflag_ReJflag_Wv;
if(iflag_Wv=Wave(fm/dt)!
=l)printf(,,Waveiserror"
);
if(iflag_Re=Rflct(dt,h/v)!
=l)printf(,,Reflectioniserror
if(iflag_Co=Cnltn(dt,dx)!
=l)printf(,,Convosioniserror
"
);
}
//WaveFormaingfunction
intWave(floatfmjloatdt)
FILE*fpw;
intIt;
floatWa[Nw],t;
doublepai=3.1415926;
if((fpw=fopen(,,wave.dat,,/,,wb"
))==NULL)printf(,,Connotopenfile,,,,wave,,,,H);
for(11=0;
lt<
Nw;
lt++)
t=(float)(lt+l)*dt;
Wa[lt]=(float)(l.-2*pai*pai*fm*fm*t*t)*(float)exp(-2*pai*pai*fm*fm*t);
//雷克子波的计算?
fwrite(&
Wa[lt],sizeof(Wa[lt])丄fpw);
}fclose(fpw);
return(l);
//ReflectFormaingfunctionintRflct(floatdtjloath,floatv){
FILE*fpr;
intltJx,Ltdpth;
floatt;
floatRe[Nt];
if((fpr=fopen(,,Reflect.dat,,,,,wb,,))==NULL)printf(,,Connotopenfile"
Reflect"
for(lx=0;
lx<
Nx;
lx++)
for(lt=0;
lt<
Nt;
lt++)
Re[lt]=0.;
for(lx=l;
2;
for(lt=O;
{fread(&
Wal[lt],sizeof(Wal[lt])lfpw);
Wa[Nw-l-lt]=Wal[lt];
}//子波数据反褶?
fclose(fpw);
Rel[lt]/sizeof(&
Rel[lt])/l,fpr);
}for(lt=0;
Nt+2*Nw;
t=(float)2.*h/v;
Ltdpth=(int)(t/dt);
Re[Ltdpth]=l.;
{fwrite(&
Re[lt],sizeof(Re[lt])/l,fpr);
fclose(fpr);
return(l);
//Convolutionfunction
intCnltn(floatdtjloatdx)
FILE*fpc/*fpw/*fpr;
intItjxjtao;
Wal[Nw]M/a[Nw],Re[Nt+Nw+Nw],Rel[Nt];
floatCon[Nt+Nw];
if((fpc=fopen("
Convosion.dat,,/,,wb,,))==NULL)printf("
ConnotopenfileZConvosionif((fpw=fopen(,,wave.dat,,/,,rb,,))==NULL)printf(,,Connotopenfile,,"
wave"
if((fpr=fopen(,,Reflect.dat,\"
rb,,))==NULL)printf(,,Connotopenfile^Reflect);
Re[lt]=Rel[lt+Nw];
〃反射系数数据移
动:
”0到Nt”移为”Nw到Nw+Nt"
Nt+Nw;
Con[lt]=0;
for(ltao=0;
ltao<
Nw;
ltao++)
Con[lt]=Con[lt]+Wa[ltao]*Re[-ltao+lt];
//褶积运算
{fclose(fpw);
fwrite(&
Con[lt]zsizeof(Con[lt]),l,fpc);
fclose(fpc);
}return(l);
对比分析:
1.垂直入射的结果是一条直线,反映了地下为水平界面;
非垂直入射的结果是半条的双曲线,其反映了地下的非水平界面。
2.子波的频率越高其反射结果面积越大,子波长度越大其时间越短。
3.在两层反射界面垂直距离的情况下,其界面间距越人则反射信号越容易识别,子波长度越长,主频越大垂直距离越大则识别极限越小。
4.褶积结果与图4上半部分基本吻合,因为任意检波器的自激自收情况与计算的褶枳过程相同,则计算出的褶积结果与图吻合。
七、讨论建议
1、实验收获
学到了怎么利用褶枳计算各种波的反射结果,学到了一个程序应该怎样建立。
2、存在问题
编写程序的过程中出现的调试过程有难度。
3、其它问题
对于程序的取值,是否出界。
4、心得体会
要踏实的学习怎么编写一个好的程序,从编写程序的过程中建立好的编写习惯,对于个中反射波的褶积情况能够熟练的应用。
数值模拟实验一
《地震记录数值模拟的褶积模型》实验报告
学院:
地球物理学院
班级:
勘查技术与工程