开源地质建模GemPy实战

news2024/11/22 17:26:49

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景。

在设计任何类型的工程结构时,确定地面以下的东西并有效地将其映射出来是首要也是最重要的部分之一。 地下建模带有很大的误差范围,因为即使是我们今天使用的最先进的地下调查方法也无法完全绘制出更大区域的土壤、岩石、水位等。 无论你使用的是钻孔(SPT 或 CPT)、地震折射(seismic refraction)还是其他一些方法,最终都必须进行大量插值来构建你的地下模型。

在这里插入图片描述

Bentley 的 GINT 等软件非常适合创建 2D 和 3D 土壤剖面,其精度实际上仅受所提供数据和工程师经验的限制。 这些地下模型也可以使用 Python 创建,虽然它不像 GINT 那样简单,但它给了我们更多的自由来按照我们认为合适的方式操作我们的模型。 一旦掌握了它,你就可以比某些软件更快地生成良好的土壤剖面,而且绝对比在 CAD 中绘制它更快。

下面是有关如何使用 Python 创建地下3D模型的教程,主要关注开源地质建模库 GemPy。 它能够构建复杂的褶皱结构(folded structures)、断层网络(fault networks)和不整合面(unconformities)的 3D 地质模型。

1、安装配置GemPy

可以使用如下命令安装GemPy:

pip install gempy

我们需要来自项目现场和地下调查的数据,需要CSV 格式,因为我们将使用 pandas 将它们转换为数据框:

  • Surface_points →该区域 (x,y,z) 的现场测量表面高程
  • Orientations → 为表面点(Gx、Gy、Gz 或方位角)分配地层值。 本质上,它是与表示穿过层的断层的表面点相关联的角度
  • Grid → 模型的大小(列数 x 行数 x 层数)
  • Surfaces →土壤/岩石层
  • Series → 将表面和断层分组为单独的系列
  • Faults →要建模的断层的位置和信息(必须单独插入)

对于本教程,我们将包含这 6 个参数的 CSV 文件称为“MyProject.csv”。

使用 GemPy 建模需要先导入必要的包:

from pyvista import set_plot_theme

%matplotlib inline

import gempy as gp
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2、使用GemPy载入地质数据

首先,我们需要将包含站点信息的 CSV 文件中的数据提取到数据框中,并使用 GemPy 创建模型。

geo_model = gp.create_model('MyProject')

# Importing the data from CSV-files and setting our boundaries
gp.init_data(geo_model, [0, 2000., 0, 2000., 0, 2000.], [100, 100, 100],    
             path_o= "MyProject_model_orientations.csv",                  
             path_i= " MyProject_model_points.csv",)

这将生成地址模型,我们的数据为 100 行 x 100 列 x 100 层,跨越 2 公里 X 2 公里 X 2 公里的体积,分别是我们的“分辨率”和“网格大小”。 你做得越大,运行模型所需的时间就越长。 该模型同时接收 Surface_point 数据 (path_i) 和将用于插值的方向 (path_o) 并生成我们的 2D 和 3D 图。

使用 .surface() 我们看到用“MyProject”数据制作的 geo_model 有 5 个这样的表面,其中Basement是自动生成的,并充当下界:

geo_model.surfaces

在这里插入图片描述

表面层需要分成两个单独的分类系列,地层表面层 (Strat_Series) 和断层 (Fault_Series)。 当涉及到这些表面的顺序时,GemPy 有点挑剔。断层总是需要移动到顶部,相互独立,它们的顺序决定了哪个先穿过表面(构造关系) . Strat_Series 表面的顺序应代表我们正在建模的真实世界位置,地下室始终位于底部。 我们可以通过以下方式实现:

gp.map_stack_to_surfaces(geo_model,
                         {"Fault_Series": 'Main_Fault',
                          "Strat_Series": ('Sandstone_2',               
                          'Siltstone', 'Shale', 'Sandstone_1',  
                          'basement')},
                          remove_unused_series=True)
geo_model.surfaces

在这里插入图片描述

我们所做的只是将一个 Fault_Series 放在最上面,但现在模型表面是有序的,Gempy 应该可以毫无问题地处理它们。

3、使用GemPy可视化初始数据

我们可以为初始数据创建 2D 和 3D 图以进行可视化,这也向我们展示了界面和方向。

# 2-D
gp.plotta(geo_data, 
direction='y') 

在这里插入图片描述

# 3-D
gp.plot_3d(geo_model, 
plotter_type='basic')

在这里插入图片描述

4、使用GemPy插值地质数据

上面的图看起来没什么特别的,尤其是在 3 维空间中。 我们想填满这个网格,基本上使它成为一个 2km x 2km x 2 km 的实心块,就好像你已经撕掉了一个巨大的地球块来检查它一样。 为此,我们将通过对当前数据进行插值来填充绘图。

GemPy 使用称为 Kriging 的方法进行插值,也称为高斯过程回归,这是一种由协方差控制的方法,可在未采样位置提供最佳线性无偏预测。 我们这样插入数据:

interpol_data = gp.InterpolatorData(geo_data, output='geology',
                                    compile_theano=True,               
                                    theano_optimizer='fast_compile')

可以根据需要更改克里金参数,但我个人不会乱用它们。

gp.get_data(geo_model, 'kriging')

在这里插入图片描述

5、使用GemPy计算地质模型

插值后,我们可以使用 GemPy 创建我们的模型:

gp.compute_model(interpol_data)

生成的模型将生成两个数组,一个用于地质表面,一个用于穿过地表的断层(Faults)。

interpol_data.geo_data_res.get_formations()

结果如下:

Surfaces Array: [Main_Fault, Sandstone_2, Siltstone, Shale, Sandstone_1]

Fault Array:(5, object) [Main_Fault, Sandstone_2, Siltstone, Shale, Sandstone_1]

这两个数组也有 2 个子数组作为块模型的解。

6、使用GemPy可视化地质模型

可以2D或3D的方式可视化GemPy生成的地质模型,并且可以添加地形图。

6.1 2D可视化

使用 Matplotlib,我们可以绘制刚刚生成的模型并创建我们一直追求的土壤剖面。 下面的代码基本上将取出 2km³ 块(由 100 行 x 100 列 x 100 层网格表示)并在 y=50 标记处对其进行切片,从而为我们提供模型中间的横截面。

gp.plotting.plot_section(geo_data,
                         gp.compute_model(interpol_data)[0], 
                         cell_number=50, direction='y',           
                         plot_data=False)

在这里插入图片描述

6.2 3D可视化

我们可以使用 VTK 以 3d 形式可视化我们的模型,VTK 是一个用于 3D 计算机图形、图像处理和科学可视化的开源软件系统。 它已经整合到 GemPy 中,因此无需导入任何新内容。

我们首先需要从我们的表面和函数 get_surface 中获取顶点和三角剖分。 然后我们可以使用这些来绘制我们的 3-D 模型:

ver, sim = gp.get_surfaces(interpol_data, original_scale=True)

gp.plotting.plot_surfaces_3D(geo_data, ver, sim,  
                             plotter_type='basic')

在这里插入图片描述

6.3 添加地形图

添加地形总能使模型看起来比只是一些块更好。 地形可以高度自定义,因为你可以使用真实世界的光栅图像,创建自己的表面叠加层,基于海拔的颜色变化,还有很多选择。 我们将根据深度和图层颜色添加地形图。

geo_model.set_topography(d_z=(1000, 2000))

gp.plot_3d(interpol_data, plotter_type='basic', 
                 show_topography=True, show_surfaces=True,
                 show_lith=True, image=False)

在这里插入图片描述

7、结束语

这个教程是为了创建一个基本的地质 3D 模型,你可以从中提取 2D 横截面土壤剖面并将它们用于设计。 它肯定需要结合地下水高程、土壤/岩石参数等内容,使每一层真正变得有用。 最后,我们得到一个交互性很强的模型,可以轻松地从中提取信息。


原文链接:GemPy地质建模实战 — BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】信号概述

目录 1、信号概念2、Linux常用信号表3、信号的5种默认处理动作 橙色 1、信号概念 信号是 Linux进程间通信的最古老的方式之一,是事件发生时对进程的通知机制,有时也称之为软件中断,它是在软件层次上对中断机制的一种模拟,是一种…

Vue3(6) Transition

目录 组件 基于CSS的过渡效果 JavaScript钩子 Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动画&#xff1a; <Transition> 会在一个元素或组件进入和离开 DOM 时应用动画。 <TransitionGroup> 会在一个 v-for 列表中的元素或组件被…

C++模板template

我们现在有几个变量&#xff0c;我们向要实现他们的交换&#xff0c;所以我们现在写了一个swap函数 我们现在可以实现对这两个变量之间的交换&#xff0c; 那么我们有有两个变量需要交换呢&#xff1f;&#xff1f; 我们刚才的Swap函数的参数是int类型的&#xff0c;我们现在的…

ChatGPT 和对话式 AI 的未来:2023 年的进展和应用

人工智能(Artificial Intelligence)在过去一段时间以来以前所未有的速度快速发展。从自动化日常任务到重要提醒的设定,AI以各种方式渗透到我们的生活中。然而,在这个领域中迈出的最重要一步是ChatGPT。 ChatGPT被瑞银(UBS)评为“有史以来增长最快的消费者应用程序”,于…

Cy5.5-PEG-SH近红外荧光PEG试剂 Cyanine5.5-PEG-SH,Thiol-PEG-Cy5.5可用于活体成像

Cy5.5-PEG-SH &#xff0c;Cy5.5聚乙二醇巯基 英文名称&#xff1a;Cy5.5-PEG-SH 中文名称&#xff1a;Cy5.5聚乙二醇巯基 性状: 深蓝色固体或粘性液体&#xff0c;取决于分子量 溶剂&#xff1a;溶于水、 DMSO等常规性有机溶剂 激发/发射波长&#xff1a;684 nm/710 nm …

Windows操作系统重要内容

windows 常用用户&#xff1a; SYSTEM&#xff1a;本地机器上拥有最高权限的用户。&#xff08;为系统核心组件访问文件资源提供权限&#xff09;Administrator&#xff1a;默认系统管理员用户。Guest&#xff1a;只拥有相对较少的权限&#xff0c;默认被禁用。 Windows 常见…

【中医推荐】33部中医书籍,中医医书精品(在线免费阅读),值得珍藏的国粹,涵盖中药、针灸、推拿、按摩、拔罐、气功,食疗等诸多领域

中医诞生于原始社会&#xff0c;春秋战国时期中医理论已基本形成&#xff0c;之后历代均有总结发展。除此之外对汉字文化圈国家影响深远&#xff0c;如日本医学、韩国韩医学、朝鲜高丽医学、越南东医学等都是以中医为基础发展起来的。 中医承载着中国古代人民同疾病作斗争的经…

(华三AC+AP)在华三AC上通过用户mac地址或者IP地址查询在那一台AP下

起因&#xff1a;用户终端的WiFi信号一直不停地断开重连&#xff0c;发现AP的信号消失了&#xff0c;经过检查配置并没有问题&#xff0c;但是在后来发现重启可以让AP恢复使用&#xff0c;但是过一段时间还是会出现这样的问题&#xff0c;因为AP没有备用换下维修&#xff0c;这…

只需浏览器!在线完成Flutter从编程到打包全过程

本文作者&#xff1a;林梓泓 引言 云端 IDE 是基于云的集成开发环境&#xff0c;开发人员可以远程编写运行和调试代码&#xff0c;无需本地安装&#xff0c;仅通过浏览器即可开发软件。 与传统本地开发相比&#xff0c;云端开发环境主要有以下的优势&#xff1a; 快速启动项…

react类组件生命周期基础总结

组件的生命周期是指组件从被创建到挂载到页面中运行起来&#xff0c;再到组件不用时卸载的过程&#xff0c;只有类组件才有生命周期&#xff08;类组件 实例化 函数组件 不需要实例化&#xff09; 生命周期新版本和旧版本的对比图如下&#xff1a; 生命周期&#xff08;constr…

大数据|Spark介绍

前文回顾&#xff1a;Hive和数据仓库 目录 &#x1f4da;为什么会有Spark &#x1f4da;Spark的基本架构和组件 &#x1f407;主要体系结构和组件 &#x1f407;Spark集群的基本结构 &#x1f407;Spark系统的基本结构 &#x1f407;Spark应用程序的基本结构 &#x1f4…

Redis:主从复制_通过此功能实现对内存上的数据更好的保护

什么是主从复制&#xff1f; 简单的意义上来讲就是一个主人带着几个奴隶&#xff0c;奴隶的全部都是主人给他的&#xff0c;刚开始的时候奴隶是一无所有&#xff0c;是主人将自己的一部分给到奴隶了。因此奴隶翻身了&#xff0c;变得有钱了&#xff0c;也就是有一定价值了&…

SYSU程设c++(第十三周)虚函数、覆盖与隐藏

虚函数 形式&#xff1a;是一个类的成员函数&#xff0c;前面有关键字 virtual 作用&#xff1a;在公有继承的派生类中会对虚函数进行重定义。 当使用基类的指针&#xff08;或引用&#xff09;调用派生类的对象的虚函数时&#xff0c;将调用该对象的虚函数的重定义版本 性质&a…

STM32单片机厨房环境油烟温湿度调节系统加湿加热排风

实践制作DIY- GC0131-厨房环境油烟温湿度调节系统 一、功能说明&#xff1a; 基于STM32单片机设计-厨房环境油烟温湿度调节系统 二、功能介绍&#xff1a; 硬件组成&#xff1a;STM32F103C系列最小系统DHT11温度湿度传感器1个5V直流风扇 5V风扇 USB加湿器1个5V直流风扇排烟1…

RestNet详解及在pytorh下基于CIFAR10数据集的实现

1 RestNet介绍 RestNet是2015年由微软团队提出的&#xff0c;在当时获得分类任务&#xff0c;目标检测&#xff0c;图像分割第一名。该论文的四位作者何恺明、张祥雨、任少卿和孙剑如今在人工智能领域里都是响当当的名字&#xff0c;当时他们都是微软亚研的一员。实验结果显示&…

STM32单片机蓝牙APP自动伸缩遮阳棚雨伞雨滴角度温度光强控制

实践制作DIY- GC0130-蓝牙APP自动伸缩遮阳棚 一、功能说明&#xff1a; 基于STM32单片机设计-蓝牙APP自动伸缩遮阳棚 二、功能介绍&#xff1a; 基于STM32F103C系列&#xff0c;LCD1602显示器&#xff0c;光敏电阻采集光强&#xff0c;雨滴传感器&#xff0c;ULN2003控制步进…

MySQL:5.6同步到5.7 GTID报错

问题描述和处理 同步到的版本为5.7.35&#xff0c;按理说在5.7种还是一个比较新的版本了&#xff0c;报错大概如下&#xff1a; 2023-05-14T05:09:47.427031Z 12 [Note] Multi-threaded slave statistics for channel : seconds elapsed 163; events assigned 67585; worke…

GD32 系列FLASH锁死解决.

1.背景描述 使用keil开发工具JLINK调试过程中偶尔出现找不到目标版&#xff0c;或存在目标版但keil调试烧录出现如下界面&#xff1a; 2.问题查询步骤 2.1检查jlink连接线是否异常&#xff1b; 2.2确定boot0和boot1设置是否正确&#xff1b; 2.3确定是否是flash读写保护 2.3.1…

K8s进阶2——二进制搭建K8s高可用集群

文章目录 一、单master资源清单二、系统初始化三、部署etcd集群3.1 生成etcd证书3.2 部署流程3.2.1 准备二进制安装文件3.2.2 创建工作目录3.2.3 创建etcd配置文件3.2.4 设置成systemd服务3.2.5 添加etcd-2和etcd-3节点3.2.6 所有节点启动etcd并设置开机启动 四、安装容器引擎&…

webpack基础

1. 当面试官问Webpack的时候他想知道什么 前言 在前端工程化日趋复杂的今天&#xff0c;模块打包工具在我们的开发中起到了越来越重要的作用&#xff0c;其中webpack就是最热门的打包工具之一。 说到webpack&#xff0c;可能很多小伙伴会觉得既熟悉又陌生&#xff0c;熟悉是…