SPECFEM手册的一些翻译(Chapter 4)
要运行求解器,在主工作目录下输入以下命令:
bin/xspecfem2D
(如果你使用了并行支持的编译,可以使用 mpirun
或等效命令)。
运行后,求解器将在 OUTPUT_FILES/
目录中输出地震记录和不同时间步长的波前快照。
可视化输出结果:
-
要查看波场的 Postscript 文件,输入:
gs OUTPUT_FILES/vect.ps*
在这些文件中,波场用小箭头表示,流体/固体的匹配界面用粗粉线表示,吸收边界用粗绿线表示。
-
要查看彩色波场快照,输入:
gimp OUTPUT_FILES/image.gif*
这将显示你选定输出的波场的像素化图像(或压力场,取决于你在DATA/Par_file
中的选择)。
在运行求解器时,请注意以下几点:
-
提供的
DATA/Par_file
文件可以正常运行,测试代码时无需修改。 -
地震记录
OUTPUT_FILES/*.sem*
是简单的 ASCII 文件,包含两列数据:第一列是时间,第二列是振幅。你可以使用任何工具来可视化这些数据,例如 "gnuplot"。如果你希望以 Seismic Unix 格式输出二进制地震记录,可以使用参数SU_FORMAT
。在这种情况下,所有地震记录将写入一个带有.bin
扩展名的文件。要查看头文件信息,可以使用以下命令(取决于你的 Seismic Unix 安装):surange < Uz_file_single.bin suoldtonew < Uz_file_single.bin | surange
-
要查看地震记录的波形图,请将
surange
替换为suxwigb
。 -
如果
DATA/Par_file
中的MODEL
标志设置为default
,则速度和密度模型通过nbmodels
和nbregions
来确定。否则,nbmodels
的值将被忽略,速度和密度模型由用户提供的文件或子程序确定。 -
使用 Intel 的
ifort
编译时,使用-assume byterecl
选项来创建显示波场的二进制 PNM 图像。 -
目录
utils/
中包含一些有用的脚本和 Fortran 程序。 -
你可以在
EX2DDIR
中找到用于计算简单介质的解析解的 Fortran 代码,许多文章中的基准测试都使用了该代码作为参考。此代码在 Berg et al. [1994] 中有描述。
关于 DATA/Par_file
参数的说明
DATA/Par_file
文件包含详细的注释,几乎是自解释的。生成网格时,请参考相应的说明。以下是一些影响求解器的参数的更详细说明:
1. ATTENUATION_VISCOELASTIC 或 ATTENUATION_VISCOACOUSTIC
- 关于衰减(粘弹性和粘声学性),在
Par_file
中需要选择标准线性固体(N_SLS
)的数量,以模拟恒定的 Q 品质因数。通常使用N_SLS = 3
是安全的。如果(仅在你确定知道自己在做什么时)想降低模拟成本,可以尝试减少这个值。 - 图 4.2 提供了一些可供参考的值(再次提醒,只有在你确定知道自己在做什么时才使用这些值)。该表格由 Zhinan Xie 创建,通过比较真实恒定 Q 与基于
N_SLS
标准线性固体近似的结果得出。比较依据是 Kristeková et al. [2009] 提出的时频失配和拟合优度标准。该表格针对一个无量纲参数绘制,表示传播距离。
2. USE_TRICK_FOR_BETTER_PRESSURE
- 这个选项仅适用于所有接收器记录压力且位于声学元素中的情况。此选项通过使用一种技巧来提高流体(声学)元素中压力地震记录的准确性:
- 使用源的二阶导数作为源时间函数,而不是直接使用源本身,然后记录
potential_acoustic()
作为压力地震记录,而不是potential_dot_dot_acoustic()
。 - 从数学上讲,这两者是等价的,但在数值上,使用
potential_acoustic()
更加准确,因为在显式 Newmark 时间方案中,加速度是零阶精度,而位移是二阶精度。因此,在流体元素中,potential_dot_dot_acoustic()
仅是零阶精度,而potential_acoustic()
是二阶精度,因而含有显著更少的数值噪声。
- 使用源的二阶导数作为源时间函数,而不是直接使用源本身,然后记录
这两个参数对模拟的影响较大,特别是在涉及粘弹性或压力地震记录的情况下,建议根据需要谨慎调整这些参数。
关于 DATA/SOURCE
参数的说明
DATA/
目录中的 SOURCE
文件应按如下方式编辑:
-
source_surf:将此标志设置为
.true.
,以强制源位于模型的表面;否则源将位于介质内部。 -
xs 和 zs:源的位置,
xs
为 x 方向的位置(单位:米),zs
为 z 方向的位置(单位:米)。 -
source_type:设置源类型:
1
表示弹性力或声学压力源。2
表示矩张量源。- 对于包含自由表面反射和转换波的平面波:
P 波
= 1S 波
= 2瑞利波
= 3
- 对于不包含自由表面反射和转换波的平面波(仅入射波):
P 波
= 4S 波
= 5
- 入射平面波由
DATA/Par_file
中的initialfield
参数启用。
-
time_function_type:选择源时间函数类型:
1
使用 Ricker 波(高斯函数的二阶导数)。2
使用高斯函数的一阶导数。3
使用高斯函数。4
使用 Dirac 函数。5
使用 Heaviside 源时间函数。
Ricker 波形的标准定义为:
Ricker(t)=(1−2at2)e−at2\text{Ricker}(t) = (1 - 2at^2)e^{-at^2}Ricker(t)=(1−2at2)e−at2
其中 a=π2f02a = \pi^2 f_0^2a=π2f02,该波形的傅里叶变换如图 4.3 所示。 -
f0:设置源的主频率。对于使用 Heaviside 源时间函数的点源模拟(
time_function_type = 5
),建议将频率参数f0
设置为较高值,这相当于模拟一个阶跃源时间函数,即一个 δ 函数的矩率函数。源的半持续时间由
1/f0
给出。如果使用高斯源时间函数(time_function_type = 3
),源时间函数的半宽度等于其半持续时间。通常我们在模拟中设置半持续时间为 0,并在后处理时卷积合成地震图,以方便使用多种源时间函数。 -
t0:对于单一源,建议将时间移位参数
t0
设置为0.0
。时间移位可以在后处理时应用,但对于多个源,t0
可以设置为非零值。 -
anglesource:源的角度(仅适用于力源);对于平面波,这表示入射角。对于矩张量源,该参数不适用。
-
Mxx, Mzz, Mxz:矩张量分量(仅适用于矩张量源,
source_type = 2
)。请注意,在 SPECFEM2D 和 SPECFEM3D 中,矩张量分量的单位不同:- 在 SPECFEM3D 中,单位是 dyne*cm。
- 在 SPECFEM2D 中,单位是 N*m。
要将 Strike / Dip / Rake 转换为 CMTSOLUTION 矩张量格式,可以使用
SPECFEM3D_GLOBE
提供的两个小型 C 程序:strike_dip_rake_to_CMTSOLUTION.c
CMTSOLUTION_to_AkiRichards.c
但是在 2D 平面应变 P-SV 模型中,这实际上是一个线源,而不是 3D 点源。有关更多详细信息,请参考 Pilant [1979] 的书中的第 7.3 节“二维点源”,以及 Helmberger 和 Vidale [1988] 的研究。
-
factor:放大因子。
模拟的零时间点
模拟的零时间对应于三角形/高斯函数的中心,或地震事件的质心时间。模拟的起始时间为:
t=−1.2×half duration+t0t = -1.2 \times \text{half duration} + t0t=−1.2×half duration+t0
其中,因子 1.2 用于确保模拟开始时,矩率函数接近于零。对于 Heaviside 函数,这个因子为 2.0。半持续时间由 1/f0
给出。如果你希望手动设置起始时间,可以在 constants.h
文件中将参数 USER_T0
设置为一个正的非零值,在这种情况下,模拟将在 -USER_T0
的时间点开始。