××大学地球物理学本科20××级 暑期实习《计算机地学应用》(Linux部分大作业)
指导教师:×× 助教:×× ×× 时间:20××.7.7-14
《Linux操作系统下程序设计的入门与进阶》
大作业
在速度、密度空间变化的二维声学介质中传播的波场满足如下声波方程:
?1?P?1?P1?2P()?()?2?s, (1) 2?x??x?z??zv??t其中P(x,z,t)代表声压波场,?(x,z)为介质密度,v(x,z)为波速,s(x,z,t)代表震源(数值上相当于体力散度除以密度)。 对于常密度介质,方程(1)简化成:
?2P?x2??2P?z2?2?s, (2) 2v?t1?2P这个偏微分方程可以利用有限差分(Finite-difference)、有限元(Finite-element)、伪谱法(Pseudospectral)、惠更斯原理或积分方程法、高频渐近或射线追踪(Asymptotic or ray-tracing)等方法数值求解(Carcione et al., 2002)。
在《地震波原理》课程作业中,曾要求完成声波方程有限差分正演模拟的算法编程与数值试验。本次Linux实习大作业包括如下四部分:
一.基于SU软件的地震波场模拟与傅立叶分析
科罗拉多矿业学院CWP小组SU软件提供了多种地震波模拟方法的源代码和示例(见src/demos/Synthetic目录),包括有限差分法、Kirchhoff积分法等,其中Kirchhoff积分法属于高频渐近或射线追踪方法。
首
先
进
入
CWP/SU
安
装
目
录
下
的
“src/demos/Synthetic/Kirchhoff/Susynlv”目录,用编辑器打开Xsusynlv文件,了解该Shell文件的内容,按此例搞清速度场的定义方式、反射界面的定义方式、观测系统和正演模拟参数设置。
然后自己创建的实验目录“/home/***/Susynlv”下,开展如下试验: (1)仿照Susynlv.cjb合成单炮、多炮地震记录,利用Suximage、Suxmoive
第 1 页 共 4 页
××大学地球物理学本科20××级 暑期实习《计算机地学应用》(Linux部分大作业)
指导教师:×× 助教:×× ×× 时间:20××.7.7-14
等图像或动画显示工具展示计算结果;
(2)尝试用suaddnoise在炮记录中加入随机噪音;
(3)利用sufft计算与分析单炮记录的频谱(即由(x,t)域变换到(kx,f)域进行分析);
(4)利用suspecfk计算单炮记录的频率-波数域谱;进入src/su/main目录,vi编辑器打开suspecfk.c文件,了解频率-波数域滤波程序结构、傅立叶变换与采样参数,以及FFT子函数调用。
二.用C或C++编程实现常密度声波方程伪谱法地震波传播模拟
伪谱法是基于傅立叶变换的数值计算方法(Gazdag, 1981; Kosloff and Baysal, 1982)。它与有限差分法的相同点在于时间偏导数都用有限差分实现,不同之处在于它采用傅立叶变换(而不是有限差分)计算空间偏导数。因此对空间导数的计算精度高,不存在由有限差分解法引起的数值频散。理论上讲,对伪谱法来说,空间上每个波长仅需两个网格点,因此可以采用比有限差分、有限元解法更稀疏的空间采样(Gazdag, 1981)。
针对方程(2),给定震源和t、t??t时刻的波场,t??t时刻的波场可以表示成
P(x,z,t??t)?2P((x,z,t)?P(x,z,t??t)2?2? (3) 2??P(x,z,t)?P(x,z,t)?2?v??t??(x?x0)?(z?z0)w(t)22????x?z?其中(x0,z0)代表震源位置,w(t)代表子波函数。
对于均匀介质,(3)式右端包含的空间偏导数可以用如下傅立叶域操作来实现:
?2P(x,z,t)?x2??2P(x,z,t)?z222????(kx?kz)P(kx,kz,t)ei(kxz?kzz)………… .. kxkz??(4)
其中P(x,z,t)关于x和z方向的二维正傅立叶变换满足:
P(kx,kz,t)?FT2D?P(x,z,t)????P(x,z,t)e?i(kxx?kzz)dxdz。
(5)
第 2 页 共 4 页