参考:Pycharm运行gprmax3.0具体步骤-CSDN博客
1、配置环境
新建项目,位置自定义,解释器类型:自定义环境——>选择现有环境——>选择安装gprmax时安装的anaconda3中的envs/gprMax中的python.exe路径,点击向下角箭头选择该环境
2、创建.in文件
该输入文件是之前写的编写in文件并使用cmd命令窗口运行gprmax仿真(零基础)-CSDN博客文章中的,这里不过多解释。
#title: Scan
#domain: 1.6 1.1 0.003
#dx_dy_dz: 0.003 0.003 0.003
#time_window: 2.5e-8
#material: 20 0 1 0 rongdong
#material: 1 0 1 0 kongdong
#material: 2.7 0 1 0 meiceng
#material: 7 0 1 0 xianluozhu
#waveform: ricker 1 6e8 my_ricker
#hertzian_dipole: z 0.1 1 0 my_ricker
#rx: 0.15 1 0
#src_steps: 0.02 0 0
#rx_steps: 0.02 0 0
#box: 0 0 0 1.6 1 0.003 meiceng
#box: 0.3 0.6 0 0.5 0.7 0.003 rongdong
#box: 0.8 0.4 0 0.95 0.55 0.003 kongdong
#cylinder: 1.4 0.2 0 1.4 0.2 0.003 0.075 xianluozhu
geometry_view: 0 0 0 1.6 1.1 0.003 0.003 0.003 0.003 moni n
此时我的项目目录为
3、创建编写A扫python脚本
import os
import numpy as np
from gprMax.gprMax import api
from tools.outputfiles_merge import get_output_data
dmax = r".\gprmax" #项目目录
filename = os.path.join(dmax, "gpr.in") #组合得到gprmax位置下的输入文件gpr.in
#正演
#输入文件(filename),生成扫描次数(n),使用第0块GPU加速(gpu={0})
api(filename, n=3, gpu={0})
#获取回波数据
filename = os.path.join(dmax, "gpr1.out") #获取当前目录下第一次扫描输出的文件(获取哪一次A扫数据后面就是画哪一次图像)
rxnumber = 1 #发射天线数量
rxcomponent = 'Ez' #接收Ez向数据
outputdata, dt = get_output_data(filename, rxnumber, rxcomponent) #获得回波数据(outputdata)和时间分辨率(dt)
#保存为.txt类型数据
np.savetxt("gpr_Ascan1.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()
图像为
此时我的项目目录为
其中.out文件和.txt文件是运行Ascan.py文件后生成的文件
4、创建编写B扫python脚本
import os
import numpy as np
from gprMax.gprMax import api
from tools.outputfiles_merge import get_output_data, merge_files
dmax = r".\gprmax" #项目目录
filename = os.path.join(dmax, 'gpr.in') #获得输入文件
#正演获得3次A扫
api(filename, n=3, gpu={0})
merge_files(r".\gprmax\gpr", removefiles=False) #将A扫合成B扫,在合成后不删除原文件(removefiles=False)
#r".\gprmax\gpr"代表该位置中的以gpr.in为输入文件的输出的一系列A扫文件(如gpr1.out、gpr2.out…)
#获取B扫数据
filename = os.path.join(dmax, "gpr_merged.out") #获取生成的B扫文件
rxnumber = 1 #1个发射天线
rxcomponent = 'Ez' #获得Ez向数据
outputdata, dt = get_output_data(filename, rxnumber, rxcomponent) #B扫数据传给outputdata,时间分辨率传给dt
#保存为.txt文件
np.savetxt('Bscan.txt', outputdata, delimiter=' ')
#画出B扫图像
from tools.plot_Bscan import mpl_plot
plt = mpl_plot(filename, outputdata, dt*1e9, rxnumber, rxcomponent) #时间转换为ns
plt.ylabel('Time [ns]')
plt.show()
图像
运行之后的项目目录