开源软件mtpy(该软件可以处理大地电磁的诸多数据和生成ModEM等软件的输入文件)的安装和使用

    科技2024-12-01  4

    开源软件mtpy的安装和使用

    1. 为什么要使用这个软件2. mtpy软件的下载3. 安装```Anoconda3```4. 安装好后首先给Anaconda和pip进行换源5. 进行所需库文件的安装6. 安装mtpy7. 使用mtpy8. 使用```mtpy```生成```ModEM```输入文件

    1. 为什么要使用这个软件

    该软件提供了丰富的python自动化处理脚本文件,为我们在处理大地电磁二维和三维数据过程中节省了不少时间,而且可以自动生成很多软件的模型输入文件,例如Occam反演的输入文件和ModEM的三维反演输入文件,还有大地电磁处理过程中的各种分析,都提供了一键处理edi的python脚本文件。而且全部开源,便于各位同学查看源码和快速入门。也避免了大家重复造轮子浪费大量的时间,我们要的是快速使用和快速理解各种知识。

    2. mtpy软件的下载

    从github上下载,链接如下: https://github.com/MTgeophysics/mtpy鉴于墙的存在,部分同学可能会无法下载,所以提供上传到csdn的安装包,里面不仅包括mtpy的安装包,还有些其他提升安装正确率的文件,下载链接如下: https://download.csdn.net/download/Shrekul/12913159

    3. 安装Anoconda3

    经过本人不断重复的安装和卸载,折腾了不下20余次,终于总结出不会出错的安装方法,而且配置好导出vtk图件格式的方法。下面就是正式安装教程。

    首先安装Anoconda3 大家直接从清华的源下载即可,免得在官网直接下载很慢,下载链接是: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Windows-x86_64.exe 安装过程大家全部下一步即可,安装好后大家的程序里面会有这样的结果:

    4. 安装好后首先给Anaconda和pip进行换源

    不换源下载一些依赖库会特别慢。

    换源教程链接 https://blog.csdn.net/JohnLeeK/article/details/102686424

    5. 进行所需库文件的安装

    打开Anaconda Navigator (Anaconda3),打开后结果: 点击Environments – Creat,创建名为’mtpy’的环境,创建好后会多出下面这样一个叫做mtpy的环境: 点击到mtpy的环境上,我们开始依次添加所需要的库:

    依次搜索这些库,并勾选添加:

    gdal libgdal geopandas netcdf4 pyyaml

    下面示意一个: 依次把这些安装完后,下面安装另外所需的东西。

    安装mtpy环境下的spyder,按照如下图示,进行操作即可: 安装obspy 以管理员权限打开下图所示powershell

    然后输入如下命令进行激活mtpy环境:

    conda activate mtpy

    激活后结果是这样: 然后在这里输入一句命令即可安装所需要的文件:

    pip install obspy

    效果图是这样:

    安装pyvtk 安装这个前需要先安装visualcppbuildtools_full.exe,该文件在前面的下载包中已经提供,直接双击,大概5分钟安装完成。安装图如下: 然后在powershell中输入如下安装pyvtk的命令: pip install pyevtk

    效果图如下: 以上这些准备工作做完就可以安装mtpy了。

    6. 安装mtpy

    把握提供的mtpy安装包文件解压会有一个mtpy-develop的文件夹,然后改名为mtpy,然后复制到电脑的如下目录下: C:\mtpywin

    还是打开之前的powershell,然后在里面输入如下命令切换到如下文件夹: cd C:\mtpywin\mtpy

    最后在该处输入如下命令,mtpy就安装好了:

    pip install .

    到这里mtpy软件就安装好了。

    7. 使用mtpy

    通过打开spyder(mtpy)来操作python脚本

    切换到内置脚本文件夹来使用很多自动化处理脚本 把目录切换到下面目录: C:\mtpywin\mtpy\examples\scripts

    然后这里就有很多自带的脚本文件了,大家看自己需要的去探索。

    任意执行一个例子,其效果图如下图:

    8. 使用mtpy生成ModEM输入文件

    在Spyder(mtpy)中打开C:\mtpywin\mtpy\examples\scripts\ModEM_build_inputfiles.py的该文件,就可以生成ModEM的输入文件了。只需要改下edi文件路径,下面就是该文件的代码: # -*- coding: utf-8 -*- """ Created on Wed Oct 18 10:18:12 2017 @author: u64125 """ import os os.chdir(r'C:\mtpywin\mtpy') # change this path to the path where mtpy is installed import os.path as op from mtpy.modeling.modem import Model from mtpy.modeling.modem import Data from mtpy.modeling.modem import Covariance from mtpy.core.edi import Edi from mtpy.utils.calculator import get_period_list import numpy as np # path to save to workdir = r'C:\test\ModEM' #修改为你需要生成ModEM输入文件的位置 # path where edi files are located edipath = r'C:\mtpywin\mtpy\examples\data\edi_files_2' # 修改为你的edi文件的文件夹 ## period list (won't include periods outside of the range of the edi file) ### ## comment/uncomment your desired method ###################################### ############################################################################### ## example to specify start, stop and total number of periods #start_period = 0.001 #stop_period = 1000 #n_periods = 25 #period_list = np.logspace(np.log10(start_period), # np.log10(stop_period), # n_periods) # example to specify a number of periods per decade start_period = 0.002 #起始周期 stop_period = 2000 #结束周期 periods_per_decade = 4 period_list = get_period_list(start_period,stop_period,periods_per_decade, include_outside_range=True) ## an example to use the periods from a particular edi file #edifile_periods = op.join(edipath,'Synth00.edi') #eobj = Edi(edifile_periods) #period_list = 1./eobj.freq ############################################################################### # list of edi files, search for all files ending with '.edi' edi_list = [op.join(edipath,ff) for ff in os.listdir(edipath) if (ff.endswith('.edi'))] # make the save path if it doesn't exist if not op.exists(workdir): os.mkdir(workdir) do = Data(edi_list=edi_list, inv_mode = '1', save_path=workdir, period_list=period_list, period_buffer = 2, # factor to stretch interpolation by. For example: if period_buffer=2 # then interpolated data points will only be included if they are # within a factor of 2 of a true data point error_type_z=np.array([['floor_percent','floor_egbert'], # error type, options are 'egbert', 'percent', 'mean_od', 'eigen', 'median', 'off_diagonals' ['floor_egbert','percent']]), # add floor to apply it as an error floor # can supply a 2 x 2 array for each component or a single value error_value_z=np.array([[20.,5.], # error floor value in percent [5.,20.]]), # can supply a 2 x 2 array for each component or a single value error_type_tipper = 'floor_abs', # type of error to set in tipper, # floor_abs is an absolute value set as a floor error_value_tipper =.03, model_epsg=28354 #这个知己查网上的表,改为自己工区的epsg代码 # model epsg, currently set to utm zone 54. # See http://spatialreference.org/ to find the epsg code for your projection ) do.write_data_file() # set elevations to zero as we need to ensure the stations are on the topography do.data_array['elev'] = 0. do.write_data_file(fill=False) # create model file mo = Model(station_locations=do.station_locations, cell_size_east=8000, # 东西向网格的步长,单位m cell_size_north=8000, # 南北向向网格的步长,单位m pad_north=7, # 南北向扩边网格数目(一共扩边数量7*2=14) pad_east=7,# # 东西向扩边网格数目(一共扩边数量7*2=14) pad_z=6, # 垂直扩边网格数 pad_stretch_v=1.6, # 垂直扩边系数比 pad_stretch_h=1.4, # 水平(南北和东西)扩边系数比 pad_num=3, # 在扩边网格开始前的添加固定网格数目#number of constant-width cells to add to outside of model before padding cells start # this number is currently multiplied by 1.5 internally n_air_layers = 10, # 空气层数目#number of air layers, set to 0 to incorporate bathymetry only res_model=100, # 半空间电阻率模型的电阻率值halfspace resistivity value for reference model n_layers=100, # 包括空气层的z方向的网格总层数 total number of z layers, including air z1_layer=10, # z方向初始层厚 first layer thickness pad_method='stretch', # 计算扩边网格的方法# method for calculating padding z_mesh_method='new', z_target_depth=120000 # z方向设置的最大反演深度 depth to bottom of core model (padding after this depth) ) mo.make_mesh() mo.write_model_file(save_path=workdir) # add topography to res model # if the number of air layers is zero - bathymetry only will be added. # if the number of air layers is nonzero - topography will be added, discretised into that number of cells mo.add_topography_to_model2(r'C:\mtpywin\mtpy\examples\data\AussieContinent_etopo1.asc') mo.write_model_file(save_path=workdir) # update data elevations do.project_stations_on_topography(mo) # show the mesh mo.plot_sealevel_resistivity() co = Covariance() co.smoothing_east = 0.4 co.smoothing_north = 0.4 co.smoothing_z = 0.4 co.write_covariance_file(model_fn=mo.model_fn)

    大家可以按照我写的中文注释更改自己所需要的反演模型参数,每次更改后运行会自动生成一个网格剖分图,下面就是该程序自带的edi文件生成的网格剖分图: 同时会生ModEM反演输入文件在C:\test\ModEM这个默认文件夹,大家按需修改即可。 教程到这里就完了,大家有什么需要,还可以一起探讨,后面可以增加一些该软件其他的处理的教程。大家可以修改文件夹路径为自己的edi数据处理自己的文件。非常方便,高效。

    Processed: 0.046, SQL: 8