代码分享:gprMax钻孔地质雷达波场模拟
创始人
2024-05-29 23:38:33
0

代码分享:gprMax钻孔地质雷达波场模拟

前言

gprMax模拟地面地质雷达被广泛使用,但是在钻孔内进行地质雷达的模拟较少。本博文尝试利用gprMax进行钻孔地质雷达的模拟,代码仅供大家借鉴。

文章目录

  • 代码分享:gprMax钻孔地质雷达波场模拟
        • 前言
    • 1、钻孔地质雷达模拟效果
        • 1.1、发射源在孔口
        • 1.2、发射源在孔底
        • 1.3、发射源在孔中
    • 2、模型参数设置
    • 3、python代码

1、钻孔地质雷达模拟效果

为了显示电磁波在钻孔内传播的状态,利用paraview将模拟的结果动态展示。

1.1、发射源在孔口

在这里插入图片描述

1.2、发射源在孔底

在这里插入图片描述

1.3、发射源在孔中

在这里插入图片描述

2、模型参数设置

假设钻孔间距为20m,钻孔深度为30m,背景介质设置为花岗岩,介电常数为6,电导率为0.005;设置两个方形充水空洞,介电常数为81,电导率为0.003。模型图如下:
在这里插入图片描述
雷达天线频率设置为32MHz,gprMax模拟的具体参数设置如下:

#title: krast_carbonatite_Bscan_2D
#domain: 21.000 30.000 0.050
#dx_dy_dz: 0.050 0.050 0.050
#time_window: 50e-8#material: 6 0.005 1 0 granite
#material: 81 0.003 1 0 krast#waveform: ricker 5 3.2e7 my_ricker#hertzian_dipole: z 0.55 29.5 0 my_ricker#python:
for i in range(1,31):print("#rx: 20.450 {} 0".format(i-0.5))
#end_python:#src_steps: 0 0 0
#rx_steps: 0 0.000 0#box: 0 0 0 21.000 30.000 0.050 granite
#box: 3.000 5.000 0 8.000 10.000 0.050 krast
#box: 11.000 19.000 0 16.000 24.000 0.050 krastcylinder: 15.500 15.000 0 15.500 15.000 2.000 0.500 krastgeometry_view: 0 0 0 21.000 30.000 0.010 0.010 0.010 0.010 krast_carbonatite n#python:
for i in range(1, 51):print("#snapshot: 0 0 0 21.000 30.000 0.050 0.050 0.050 0.050 {} snapshot{}".format(i*1e-8, i))
#end_python:

本参数设置的不是很合理,但是不影响模拟出结果。

3、python代码

运行模拟的主程序代码由python编辑,代码如下:

"""
python运行gprmax
读取.in文件
运行api函数模拟
"""import os
import numpy as np
import matplotlib.pyplot as plt
from gprMax.gprMax import api
from tools.outputfiles_merge import get_output_data, merge_files# 文件路径+文件名
dmax = r"D:\Learnfile\gprmaxSTU\guanxian3D"  # 项目目录
# filename = os.path.join(dmax, 'guanxian_granite_Bscan_2D.txt')# # 正演  n:仿真次数(A扫描次数)->B扫描
# api(filename, n=98, geometry_only=False )  # geometry_only:仅几何图形
merge_files(dmax+'/'+'PVC03', removefiles=True)
7
# # # 获取回波数据
# # # A B扫描时out文件名不一样
filename = os.path.join(dmax+'/'+'PVC03'+'_merged.out')
rxnumber = 1
rxcomponent = 'Ez'
outputdata, dt = get_output_data(filename, rxnumber, rxcomponent)# # # 保存回波数据
np.savetxt('shangxiang.txt', outputdata, delimiter=' ')# # 提取振幅
# def get_ez_value(data):
#     data = abs(data)
#     get_Evalue = data.sum(axis = 0)
#     return get_Evalue# # print(get_ez_value(outputdata))
# plt.plot(np.arange(1, outputdata.shape[1]+1, 1), get_ez_value(outputdata))
# plt.show()# # 提取走时
# def get_firsttime_value(data):
#     [a, b] = np.shape(data)
#     door=np.zeros(b)  
#     trvp = []
#     for i in range(b):
#         door[i] = np.max(abs(data))*0.02
#         for j in range(a):
#             if abs(data[j][i]) > door[i]:
#                 trvp = np.append(trvp, data[j][i])
#                 break
#     return trvp# a = get_firsttime_value(outputdata)
# print(a.shape)
# plt.plot(np.arange(1, outputdata.shape[1]+1, 1), get_firsttime_value(outputdata))
# plt.show()## B扫描绘图
# from tools.plot_Bscan import mpl_plot
# plt = mpl_plot(filename, outputdata, dt*1e9, rxnumber, rxcomponent)
# plt.ylabel('Time [ns]')
# plt.show()# # # # 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()
# # # # #
# # # #
# # # # A扫描图
# # # outputdata[1:200,]=0    ## 通过置零消除天线耦合波
# # # output = outputdata[:,0]  # 第i道A扫信号:序号从0开始
# # # plt.plot(output)
# # # plt.show()
# # # #
# # # #
# 堆叠波形
# space_signal = float(0.01)   # 信号间隔(按实际情况变更)
# tw = 10              # 时间窗(与in文件一致)
# trace_number = len(outputdata[0])
# for i in range(trace_number):
#     plt.plot(outputdata[:,i]+(i+1)*space_signal,np.linspace(0,tw,len(outputdata)),color='m')
# # plt.xticks(range(space_signal,trace_number*space_signal+1,space_signal),range(1,trace_number+1))
# plt.xlim(0, space_signal*(trace_number+2))
# plt.ylim(0, tw)
# # plt.xlabel('trace_number')
# plt.ylabel('Time [ns]')
# ax = plt.gca()          # 获取句柄
# ax.invert_yaxis()       # y轴反向
# ax.xaxis.tick_top()     # x轴放在上方
# plt.show() 

注:程序运行出现bug,注意文件目录与路径的调整。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...