声波波动方程正演模拟程序程序介绍:
第一部分:加载震源,此处选用雷克子波当作震源。
编写震源程序后,我将输出的数据复制,然后我用excel做成了图片,以检验程序编写是否正确。
以下为雷克子波公式部分的程序: for(it=0;it<Nt;it++)
{
t1=it*dt;
t2=t1-t0;
source[it]=(1.0-2.0*pow(PI*fm*t1,2.0))*exp(-pow(PI*fm*t1,2.0));
fprintf(fp,"%.8f %.8f\n",t1,source[it]);
}
此处,为了成图完整,我用的是t2,而不是 t1,也就是把雷克子波向右移动了一段距离,使主要部分都显示出来。
(频率采用的是
30hz)
从图中可以看出程序是正确的,符合理论上雷克子波的波形。
第二部分:主程序,编写声波正演模拟算子。
首先定义了各种变量,然后指定震源位置,选择权系数,给速度赋值,然后是差分算子的编写,这是主要部分,最后再进行时间转换,即把n-1时刻的值给n时刻,把n时刻的值给n+1时刻。
此处,我编写的是均匀介质声波方程规则网格的正演模拟程序,时间导数采用二阶中心差分、空间导数为2N阶差分精度,网格大小为 200*200,总时间为400。
第三部分:这一部分就是记录文件。
首先记录Un文件,然后记录record文件。