GprMax 3.1.5 建模的in文件编写详解(2)
gprMax是一款优秀的基于时域有限差分方法(FDTD)的电磁波数值模拟软件,目前为止,它还没有图形用户界面(GUI),它的建模关键在于in文件的编写。基于此,在浏览gprMax官方网站link后,加上自己的理解,这篇帖子希望对gprMax爱好者有所帮助。
文章目录
一、一个简单的in文件范例
在上一个帖子(GprMax 3.1.5 建模的in文件编写详解(1))中我们介绍了gprMax中的”helloworld“,它输出的是探地雷达A扫描的结果,这篇帖子介绍B扫描文件的编写,同样的,还是建立一个介电半空间介质中的金属圆柱模型。
具体的in文件如下:
#title: B-scan from a metal cylinder buried in a dielectric half-space
#domain: 0.240 0.210 0.002
#dx_dy_dz: 0.002 0.002 0.002
#time_window: 3e-9
#material: 6 0 1 0 half_space
#waveform: ricker 1 1.5e9 my_ricker
#hertzian_dipole: z 0.040 0.170 0 my_ricker
#rx: 0.080 0.170 0
#src_steps: 0.002 0 0
#rx_steps: 0.002 0 0
#box: 0 0 0 0.240 0.170 0.002 half_space
#cylinder: 0.120 0.080 0 0.120 0.080 0.002 0.010 pec
#geometry_view: 0 0 0 0.240 0.210 0.002 0.002 0.002 0.002 cylinder_half_space n
对应的模型如下图所示:
二、解释上面命令的意思
从上面的命令可以看出,与A-scan相比,仅是多了两行命令:
#src_steps:0.002 0 0
#rx_steps:0.002 0 0
其他的命令与解释我都在(GprMax 3.1.5 建模的in文件编写详解(2))link说明,在这里我介绍这两行命令的意思。
gprMax用#src_steps:和#rx_steps:这两个命令分别表示源和接收点位置的移动,在我们实际工作或建模数值模拟时,探地雷达的发射天线和接收天线位置不是一成不变的,而是沿着测线移动的。gprMax 3.0 提供了这个功能,在一次正演模拟中,不仅接收器可以移动,源也可以移动,这样为了更好的模拟探地雷达提供了方便。
#src_steps:和#rx_steps:这两个命令各有三个参数,分别为x,y,z方向上的移动步长。
我们也可以使用#rx_array:命令在模型中定义多个输出点。命令如下:
#rx_array:f1 f2 f3 f4 f5 f6 f7 f8 f9
f1 f2 f3为输出体积(如输出线或矩形等)的左下(x,y,z)坐标;
f4 f5 f6为输出体积的右上(x,y,z)坐标;
f7 f8 f9是增量(x,y,z),它定义了每个方向的输出点的数量。f7、f8或f9可以设置为零,增量设置的最小值为网格单元的长度。
三、gprMax运行结果
要运行模型来创建B-scan,必须传递一个可选参数来指定模型应运行的次数。在本例中,这是组成b扫描(轨迹)的数量,B扫描的距离为120毫米,步长为2毫米,则要进行60次a扫描。
在cmd中运行gprMax,输入命令为:
$ python -m gprMax user_models/cylinder_Bscan_2D.in -n 60
通过这个命令我们运行gprMax会得到60个输出文件,他们的文件名末尾以数字1、2、3…60表示,我们可以用命令将他们合成一个文件。命令如下:
$ python -m tools.outputfiles_merge user_models/cylinder_Bscan_2D
然后,我们就可以绘出B-scan图了,输入命令:
$ python -m tools.plot_Bscan user_models/cylinder_Bscan_2D_merged.out Ez
后续我还会发布一些高级操作,希望这篇入门级介绍对大家有所帮助,可以关注我后面的帖子。