最近在学习gprmax的使用,国内网上有关gprmax的经验帖子有些陈旧,分享一些自己最新的软件安装配置以及实际三维建模的经验,希望能帮助到需要使用这款软件的朋友。
目录
3.安装Microsoft Visual C++2019 Tools
一、gprmax3.0下载与安装
软件包的下载地址:https://github.com/gprmax/gprMax
该网址下拉也能看到gprmax的安装英文教程
1. Anaconda&Miniconda下载与安装
可前往官网下载anaconda(https://www.anaconda.com/products/individual)或者miniconda(https://docs.conda.io/en/latest/miniconda.html),注意在安装的时候点击添加环境变量如下图红字部分需要勾选。
2. gprmax下载
打开cmd命令提示符(win+R打开运行框输入cmd即可),依次输入如下
conda update conda #更新conda到最新版本
conda install git #安装git
git clone https://github.com/gprMax/gprMax.git #下载gpmax包
cd gprMax #目录导航到gprmax文件夹下
conda env create -f conda_env.yml #在anaconda的env文件下加载gprmax模块
其中git clone https://github.com/gprMax/gprMax.git 可能因为网络问题下载过程中链接中断,如果中断下载失败了的话再多试几次就行了,也可以直接从https://github.com/gprMax/gprMax上下载Zip压缩包(git命令一般默认下载到C:\Users\Administrator路径下),如下图所示。
3.安装Microsoft Visual C++2019 Tools
可以前往官网直接下载VS2019,为精简可只下载VS2019的生成工具(下载地址:https://docs.microsoft.com/zh-cn/visualstudio/?view=vs-2022)
*注:最好不要下载超过2019版本的VS或工具,后续GPU配置会失败
官网下载的是VS的安装软件,注意勾选C++桌面开发作为工作负荷,以及勾选MSVC v142和Windows 10 SDK(默认是勾选上的),安装位置为了后续方便默认就好。
安装完成后需添加以下环境变量到系统path(注意根据实际路径修改)
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\bin\Hostx64\x64
4.gprmax安装
打开cmd,激活gprmax环境并cd导航到gprmax目录(左边括号是conda的环境,不用输入)
(base)conda activte gprMax
(gprMax)python setup.py build
(gprMax)python setup.py install
这里目前最新2022/1/9版本的gprmax3.15在build操作时可能会出现错误 “~/c1.exe” failed with exit code 2,解决方法有两种:
①安装旧版本gprmax
②删除目录文件gprMax\cython\fields_updates_dispersive.pyx
成功安装完成后运行一个Ascan测试:
(base)conda activate gprMax
(gprMax)cd gprMax
(gprMax)python -m gprMax user_models/cylinder_Ascan_2D.in
(gprMax)python -m tools.plot_Ascan user_models/cylinder_Ascan_2D.out
成功绘制图形说明安装完成。
5.GPU配置
要进行GPU加速,首先电脑必须配置NVIDIA图形显卡。GPU加速可以提升运算速度2-5倍。
CUDA下载
首先要查看电脑能支持的CUDA版本,这里贴一下其他博主介绍的方法:CUDA版本查看
然后前往官网下载对应版本的CUDA tookit:官网链接
下载完成后,默认路径安装,添加环境变量到系统path
C:\Program Files\NVIDIA GPU Computing Tookit\CUDA\vX.X\bin
打开cmd,输入nvcc -V,正确显示如下说明安装成功。
pycuda安装
打开cmd,用pip安装
conda activate gprMax
pip install pycuda
GPU加速
在in文件后加上-gpu即可,如
(gprMax)python -m gprMax user_models/cylinder_Ascan_2D.in -gpu
*注:此时运行结束可能出现错误如下:
解决方式已有博主答出https://blog.csdn.net/weixin_44385758/article/details/101721599
这里另附一条:如果只下载了VS的工具,安装的MicroSoft VisualStudio/2019/VC下没有bin文件夹的话,可以参考VS2019配置MSVC环境变量的方法去解决。
链接:Visual Studio 2019 配置 MSVC 环境变量,使用命令行编译。_westinyang blog-CSDN博客
在cmd里输入cl正确显示编译器信息的话就说明配置成功了。
二、gprmax3.0建模
gprmax的二维建模已有许多经验贴,在这里重点介绍一些其他博主可能没提到的细节以及三维建模。
2.1 二维建模指令
#domain: x y z 表示模型空间大小,表示二维时z设置为网格dz的大小。
#dx_dy_dz: 0.01 0.01 0.01 表示模型网格大小为1cm*1cm*1cm
#time_window: 2e-8 设置时间窗口为20ns
*注:时间窗口至少需要包含电磁波在介质中的最大往返时间,同时时间窗口的大小会影响模型运行的速度,时间窗口越小运行计算量越少,程序跑的更快。
#material: a b c d name 自定义材质参数分别表示相对介电常数,电导率(S/m),相对磁化率和磁损
*注:
①如果想设置参数为无穷大可以使用inf
②软件正常运行必须保证电磁波在某材质运行时,波长能由十个以上的网格表示,所以这里相对介电常数和模型网格大小其实是有关联的,会影响到模型误差。否则可能会出现如下警告:
Numerical dispersion analysis: estimated largest physical phase-velocity error is -0.70% in material 'water' whose wavelength sampled by 12 cells. Maximum significant frequency estimated as 5.99141e+08Hz
又因为模型电磁波频率会影响到波长,所以三者应综合考虑。
#waveform: ricker 1 200e6 my_ricker 自定义电磁波类型参数分别表示波的类型(例子中定义的是ricker波),波的振幅(m),中心频率(Hz),波的名称。
#python:
...
#end_python:
表示调用python,里面可以根据python的语法输入代码,最常用的方式就是print(),可以根据这种方法定义环线勘测等。
举个例子:
#python:
import numpy as np
print('#hertzian_dipole: z {} {} 1.0 my_ricker'.format(2*np.sin(np.radians(90+(current_model_run)*0.1)),2*np.cos(np.radians(90+(current_model_run)*0.1))))
print('#rx: {} {} 1.0'.format(2*np.sin(np.radians(91+(current_model_run)*0.1)),2*np.cos(np.radians(91+(current_model_run)*0.1))))
#end_python:
其中print括号中的{}由format()里的参数替代,以上代码表示的是发射点和接收点绕半径为2m,圆心在原点的圆旋转。
*注:current_model_run表示的是当前模型是Bscan运行的第几个模型
#cylinder_sector: z 0 0 0 2.00 3 30 1 free_space 表示绘制圆柱体的部分扇形区域,其中参数z表示圆柱体上下底面垂直于Z轴,0 0 0 表示下底面圆圆心位置,2.00表示上底面圆圆心位置,3表示底面圆半径,30 1表示扇形区域为[30°,31°]。
#geometry_view: 0 0 0 0.240 0.210 0.002 0.002 0.002 0.002 model n
生成建立模型的VTK可视化文件,参数是可视化文件域左下坐标和右上坐标,各轴网格大小,model是模型文件名,n是可调参数表示正常输出,f表示细节输出,当你只想检查模型的几何模型的形状时,可以使用可选命令参数-geometry-only运行gprMax,这样不会运行正演模拟。
#snapshot:0 0 0 0.240 0.170 0.002 0.002 0.002 0.002 1e-9 snap1
生成波场快照VTK可视化文件,前9个参数同上,第10个参数是以秒为单位的时间(浮点数)或迭代次数(整数),表示将进行快照的时间点;第11个参数是存储快照文件的名称
2.2 查看vti模型
下载paraview,官网链接:https://www.paraview.org/download/
*注:paraview2022/1/9的最新版本v5.10加载的vti图像材质全部统一在一起,建议下载使用v5.9版本
添加gprmax插件,如下图。插件路径:gprmax\tools\Paraview macros
加载模型只需要打开模型vti文件,并点击gprmax-info即可。
2.2 三维模型以及C-scan图绘制
gprmax不专门提供C-scan图绘制的命令,所以需要提取出数据自己绘制,其中gprmax运行生成的out文件是h5文件。gprmax提供matlab的对应Bscan绘制函数接口,路径为:gprMax\tools\MATLAB_scripts\plot_Bscan.m,可通过修改该脚本绘制C-scan图。
用matlab打开该脚本文件,可以看到绘制Bscan图的主要函数是imagesc,其中道数参数为traces,信号强度为field,时间为time,利用这三个参数绘制三维切片图,由于我没找到imagesc函数的三维图绘制方法,最后使用的是surf函数,具体实施方式只是matlab的可视化处理,这里只提供绘制C-scan图的思路。
C-scan绘制部分matlab代码:
[x,y]=meshgrid(traces,time);
Z=ones(numel(time),numel(traces))*0.02;
C=field;
h1=surf(Z,x,y,C,'FaceAlpha',0.75);
hold on;
set(gca,'zdir','reverse');
h1.EdgeColor='none';
以下是随意绘制的未处理信号的C-scan图