最近尝试用深度学习算法做点探地雷达的研究,发现缺点数据,之前用gprMax模拟都是cmd中手动输入命令运行,对于批量处理显然不合理,还是使用代码管理运行比较靠谱!
参考链接:Pycharm运行gprmax3.0具体步骤_行同陌路619的博客-CSDN博客_gprmax python
设置按照该链接中的设置进行,只是运行路径出现问题,进行小修后即可。
gprMax3.0关于api函数说明的官方链接:Code Overview — gprMax User Guide
里面用到的gprMax关于api函数的定义:
def api(
inputfile,
n=1,
task=None,
restart=None,
mpi=False,
mpi_no_spawn=False,
mpicomm=None,
gpu=None,
benchmark=False,
geometry_only=False,
geometry_fixed=False,
write_processed=False,
opt_taguchi=False
):
#必须输入的是inputfile和n
# inputfile--文件名称,如果文件与代码不在同一位置,要带路径
# n--扫描次数(道数),Ascan时n=1,Bscan时,n根据需要设置
Ascan实现代码:
import os
import numpy as np
from gprMax.gprMax import api
from tools.outputfiles_merge import get_output_data, merge_files
#文件路径+文件名
dmax=os.getcwd() #项目目录
filename = os.path.join(dmax,'Ascan.in')
print(filename)
#正演 n:仿真次数(A扫描次数)->B扫描
api(filename, n=1)
# 获取回波数据
# A B扫描时out文件名不一样
filename = os.path.join(dmax,"Ascan.out")
rxnumber = 1
rxcomponent = 'Ez'
outputdata, dt = get_output_data(filename, rxnumber, rxcomponent)
print(outputdata)
# 保存回波数据
np.savetxt('Ascan.txt',outputdata,delimiter=' ')
## A扫描绘图
from tools.plot_Ascan import mpl_plot
from gprMax.receivers import Rx
outputs = Rx.defaultoutputs
outputs = ['Ez']
print(outputs)
plt = mpl_plot(filename, outputs)
plt.show()
Ascan.in文件内容
#domain: 10.2 4.2 0.01
#dx_dy_dz: 0.01 0.01 0.01
#time_window: 50e-9
#material: 4 0.001 1 0 car
#material: 8 0.01 1 0 shale
#waveform: ricker 1 300e6 my_ricker
#hertzian_dipole: z 0.7 0.2 0 my_ricker
#rx: 0.2 0.2 0
#box: 0 0 0 10.2 4.2 0.01 shale
#box: 0 0 0 10.2 0.7 0.01 car
##geometry_view: 0 0 0 10.2 4.2 0.01 0.01 0.01 0.01 A1 n
##模型显示注释掉,运行就不会输出vti文件了
Ascan运行结果
Bscan实现代码
import os
import numpy as np
from gprMax.gprMax import api
from tools.outputfiles_merge import get_output_data, merge_files
#文件路径+文件名
dmax=os.getcwd() #项目目录
filename = os.path.join(dmax,'Bscan.in')
print(filename)
#正演 n:仿真次数(A扫描次数)->B扫描,
api(filename, n=5)
merge_files("Bscan", removefiles=True)
# 获取回波数据
# A B扫描时out文件名不一样
filename = os.path.join(dmax,"Bscan_merged.out")
rxnumber = 1
rxcomponent = 'Ez'
outputdata, dt = get_output_data(filename, rxnumber, rxcomponent)
print(outputdata)
# 保存回波数据
np.savetxt('Bscan_merged.txt',outputdata,delimiter=' ')
## B扫描绘图
from tools.plot_Bscan import mpl_plot
plt = mpl_plot(filename,outputdata, dt*1e9, rxnumber, rxcomponent)
plt.ylabel('Time [ns]')
plt.show()
Bscan.in文件内容
#domain: 8.4 14.4 0.02
#dx_dy_dz: 0.02 0.02 0.02
#time_window: 50e-9
#material: 6 0.01 1 0 car
#waveform: ricker 1 100e6 my_ricker
#hertzian_dipole: z 4.2 0.2 0 my_ricker
#rx: 4.2 0.75 0
##比Ascan多的内容为源以及接收的步长
#src_steps: 0 0.02 0
#rx_steps: 0 0.02 0
#box: 0 0 0 8.4 14.4 0.02 car
#box: 4.7 11 0 6.7 12 0.02 free_space
#box: 4.7 6.5 0 5.7 7.5 0.02 free_space
#box: 4.7 2.5 0 5.2 3.5 0.02 free_space
##geometry_view: 0 0 0 8.4 14.4 0.02 0.02 0.02 0.02 Bscan n