gprMax中任意不规则形状建模与地质雷达模拟
gprMax中给出了不规则几何形状的建模方法。常规的几何建模都是基于gprMax内置的几何命令建模,所建立的模型是规则的,如圆球、正方体、圆柱体、三角体等。不规则形状三维建模需要利用matlab或者python生成三维数组,然后将三维数组保存到HDF5格式文件中,因此,需要利用matlab编程生成任意不规则三维数组。本帖子给出一个生成任意不规则形状的代码。
文章目录
1、任意不规则几何形状建模
首先看一下,建模的效果。
2、matlab生成不规则形状的代码
下面给出的代码,需要作细微改动,即可满足生成任意不规则形状的要求。
close all
clear
clc
% 此程序是写gprmax不规则形状的几何文件
% 创建任意不规则几何体
% 给定网格单元边长
dx = 0.002;
dy = 0.002;
dz = 0.002;
% 网格单元个数,注意x,y,z的方向
nex = 1;
ney = 1000;
nez = 2000;
% 设置保存的文件名
file_name = 'stestbig01.h5';
% 创建一个HDF5文件
h5create(file_name,'/data',[nex ney nez]);
% 创建一个三维数组
data = zeros(nex,ney,nez);
% 第一层填充1
data(:,1:100,:) = 1;
% 第二层填充2
data(:,101:250,:) = 2;
% 第三层默认是0
% 中间设置不规则空洞,设空洞材质为3
% 设置不规则几何体中心位置
xw = 650;
yw = 1000;
% 设置不规则几何体半径
xlength = 550;
ylength = 700;
% 生成随机的正负1
nzf = rand(2*ylength,1);
nzf(nzf<0.5) = -1;
nzf(nzf>=0.5) = 1;
nzfx = flipud(nzf);
nws = zeros(2*ylength,1);
nwx = zeros(2*ylength,1);
ws = 25;
wx = 25;
for i = 1:2*ylength
if ws == 1
ws = ws + 1;
elseif ws == 75
ws = ws - 1;
else
ws = ws + nzf(i);
end
nws(i) = ws;
if wx == 1
wx = wx + 1;
elseif wx == 75
wx = wx - 1;
else
wx = wx + nzfx(i);
end
nwx(i) = wx;
end
% 开始循环
for i = 1:2*ylength
neyw = yw - ylength + i;
nexwz = xw + nws(i);
nexwf = xw - nwx(i);
data(:,nexwf:nexwz,neyw) = 3;
end
data = flip(data,2);
% 三维转二维,绘图
data1D = data(:);
data2D = reshape(data1D,ney,nez);
imagesc(data2D);
shading interp
3、paraview显示模型
运行gprmax,将模型图在paraview中显示,得到模型图
4、模拟结果
不规则异常体运行得到的雷达结果图,在matlab中成图
5、in命令文件
运行得到4所示结果的in文件如下
#title: Tuokong2Drand
#domain: 4.000 2.000 0.002
#dx_dy_dz: 0.002 0.002 0.002
#time_window: 40e-9
#waveform: ricker 1.0 400e6 my_ricker
#hertzian_dipole: z 0.05 1.95 0 my_ricker
#rx: 0.15 1.95 0
#src_steps: 0.050 0.000 0.000
#rx_steps: 0.050 0.000 0.000
#geometry_objects_read: 0 0 0 D:\Learnfile\test02/stestbig01.h5 D:\Learnfile\test02/materials.txt
#geometry_view: 0 0 0 4.000 2.000 0.002 0.002 0.002 0.002 Tuokong2Drand n