GoCAD三维构造建模全流程:断层、层面与SGrid网格生成实战
2026/9/18 4:30:12 网站建设 项目流程

做地质建模的朋友应该对GoCAD不陌生,这软件在构造建模、三维可视化、网格生成这些方面的底子是真的厚。上篇操作记录发出去后,不少同行在后台留言说正好对上手提需求有帮助,挺多人在等下面的内容。这篇就把后半程的操作继续整理出来,重点是断层模型怎么搭、层面模型怎么解算、SGrid怎么生成,以及最容易被忽略的模型质量检查。

这篇适合正在从剖面解释往三维构造建模过渡的工程师、做油藏描述的地质师,以及刚接触GoCAD想走通完整流程的研究生。默认你已经完成了上篇的内容:工区建立、钻孔和测井数据导入、剖面解释和层面散点的初步整理。下面所有步骤都建立在“数据已经准备好了”这个前提下。

1. 下篇内容定位:从剖面解释走向三维构造实体

1.1 上篇都做了什么,下篇接在哪一步

上篇我们把基础工作做完了:建工区、导入井位和测井曲线、做剖面解释、提取层面散点。这个过程相当于把二维的解释工作完成,也就是在地震剖面或者地质剖面上把断层、地层界面给“画”出来。

但画出来之后,这些解释成果还是离散的、零散的。一个断层可能出现在多个剖面上,解释点分布也不均匀,某些区域密,某些区域稀。地层的顶面解释点可能来自十几条剖面,上百个散点,这些点在空间上没有构成连续的面。

下篇要解决的就是从“二维解释”到“三维实体”的这一步:把剖面解释成果变成真正可以用于储量计算、井轨迹设计的三维构造模型。我个人的经验是,这一步是整个GoCAD工作流里最考验耐心的环节,很多模型后期出现的断层切错、层面穿层、网格畸变问题,根源都在这个阶段的某个参数没设对。

1.2 为什么构造建模是整个流程的核心

地质体本质上是三维的,但我们的解释工作基本都在二维剖面上进行。一张剖面只能看到那个切面位置上的构造形态,两个剖面之间的区域是什么情况,需要靠插值和三维空间推理。

构造模型就是把这些二维切片上的认识,通过数学方法变成三维连续的几何体。它承担了两个关键任务:一是确定断层的空间几何形态和相互切割关系,二是确定地层的空间叠置关系。这两个关系一旦确定错了,后面所有的属性建模、储量计算都会跟着错。

打个比方,剖面解释是在画施工图纸,构造建模就是搭建筑骨架,后续的属性模型是砌墙和装修。图纸上画得再精细,骨架搭歪了,后果是灾难性的。GoCAD里面有多种建模路线,我下面讲的是最常用的“面模型驱动体模型”流程:先建断层,再建层面,然后用面和断层共同约束生成SGrid体网格。

2. 搭建断层模型:从断面到断距控制

2.1 断层建模前必须先做的几件事

千万不要一上来就急着生成断面。我在实际项目中栽过跟头,在这里多花半小时,后面能少熬两个夜。

第一件事,检查断层多边形(Fault Polygon)是否闭合。断层多边形是剖面解释时沿着断层迹线圈出来的一条闭合折线。如果多边形没闭合,后面生成断面的时候会出现边缘撕裂,或者断面范围异常。检查方法是直接在三维窗口里把断层多边形全部显示出来,逐个缩放检查首尾点是否重叠。

第二件事,统一断层命名规范。GoCAD项目里的对象一多,命名乱套是常态。我见过项目里出现“F1”“F1_1”“F1旧”“F1最终版”这种混乱命名,到后面做断层关系定义时完全分不清谁是谁。建议按照“F主断层序号_次级断层序号”的方式来命名,比如F1_1表示F1断层的第一分支。

第三件事,补齐断层的几何属性。在断层属性表里把倾向、倾角、断距这些参数填好。有些参数可能暂时拿不准,但至少要把倾向和倾角填上,因为后续断面解算时这些参数会作为重要约束条件参与计算。

2.2 用断层段(Fault Segment)构建断面

断层多边形整理好之后,下一步是创建断层段(Fault Segment)。断层段是GoCAD中描述断层空间位置的核心对象,它由一系列三维点构成,点在空间上连成折线,用来表示断层在某一个位置的空间展开。

创建断层段的操作不算复杂,但要注意细节。选中断层多边形后,从工具栏调出断层段创建工具,然后沿着断层迹线逐点拾取。拾取的时候要特别注意断层上下盘的关系,GoCAD允许你在创建断层段时指定上下盘方向。如果这个方向弄反了,后面生成的断层面的法向会颠倒,层面模型在断层附近的处理会全部错乱。

一组断层数据往往对应多条断层段。比如一条主断层在浅部和深部的产状明显不同,这时候就应该拆成两段来创建,分别设置各自的产状参数,而不是强行用一条断层段去拟合。实测下来,分段的断层段在后期解算断面时,吻合度远高于不分段的。

2.3 断层关系处理:相交、截切与合并

断层关系是构造建模里最核心、也最容易出错的环节。地质上,断层之间往往存在复杂的切割关系:新断层切割老断层、主断层带动次级断层、两条断层交汇后截断等。在GoCAD中,这种关系需要在断层段之间显式定义。

GoCAD里定义了上下盘、左右盘等关系属性,核心的操作是设置断层之间的优先级。点击断层关系设定功能,把所有断层列出来,逐对指定谁切割谁。这里有一个原则:年代较新、断距较大的主断层优先级高,次级断层优先级低。优先级高的断层会在相交处截断优先级低的断层。

实际项目中大量遇到的问题是断层相交线的生成失败。这通常不是参数问题,而是两条断层的断层段在空间上并未真正相交,存在一个极小的间隙。排查方法是在三维窗口中把两条断层段都显示出来,沿着相交部位逐点检查,如果发现确实不相交,可以手动调整断层段的端点,或者用GoCAD提供的延伸功能把其中一条断层段延伸到交切位置。

3. 构建层面模型:从离散点到位面骨架

3.1 层面数据的准备与质量控制

断层的架子搭好之后,开始构建层面模型。层面数据就是我们上篇从剖面解释中提取的层面散点(Horizon points),这些散点的质量直接决定层面模型的好坏。在进入解算之前,必须做一次系统的质量检查。

第一步是剔除飞点。所谓飞点,就是明显落在地层界面以外、可能是解释错误或者数据录入失误产生的孤立点。筛选时可以用层面散点的Z值范围来过滤,也可以用剖面位置约束来检查。实际操作中,我习惯把层面散点和原始剖面叠在一起显示,逐个剖面翻一遍,视觉上不和谐的点直接删掉。这个方法土是土了点,但最靠谱。

第二步是检查层面点的分布密度。解算层面的算法一般要求点在空间上相对均匀分布。如果某一块区域点特别密集,另一块区域几乎没有点,生成的面就会在该稀疏的地方出现异常的波浪形。处理的方法是,在点密集区域适当抽稀(保留代表性的点),在稀疏区域需要补充解释点,或者用允许插值的参数来弥补。

3.2 层面解算的方法选择

GoCAD里层面解算的方法有好几种,最常用的有两个:Bezier插值和DSI离散光滑插值。这两个方法各有适用场景,我分别说下。

Bezier插值适合层面形态比较简单、控制点密度高的数据。它用贝塞尔曲线或曲面来拟合散点,生成的层面比较光滑,计算速度快。缺点是控制点不足时会出现局部过拟合或震荡,不适合断层多、构造复杂的情况。

DSI是GoCAD的招牌算法,由Jean-Laurent Mallet提出,全称是Discrete Smooth Interpolation(离散光滑插值)。它的核心思想是:在满足约束点(散点)的同时,让解算面尽量光滑。这是通过迭代计算实现的,每一步迭代都在尝试减少层面的粗糙度,同时不偏离约束点太远。

DSI参数里有几个关键项:迭代次数、初始光滑度、约束权重。第一次做的时候,迭代次数从100次起步,如果层面对比强烈,就增加到300次。初始光滑度从0.2到0.5之间尝试,取值越大,生成的层面越光滑,但可能丢失细节。约束权重一般设成1,表示散点严格约束;如果你发现层面在某处穿过了约束点之间的空白区域出现明显褶皱,可以把约束权重调到0.8,让算法更灵活一些。

实际项目中,我经常先跑一版默认参数,看层面形态,再根据形态微调参数。但有一点要注意,DSI计算是迭代过程,参数变了以后必须重新解算,不要指望旧结果上叠加参数调整。

3.3 多界面组合与地层层序约束

构造模型里不可能只有一个层面。一个完整的地质模型通常包含地表、多个目的层顶底面、若干断层面,搞不好还有不整合面。这些面之间的关系必须符合地层层序,否则就会产生“下层穿到上层上面去”的问题。

处理不整合面是这里面的难点。不整合面上下地层可能是平行不整合,也可能是角度不整合。对于角度不整合,上下界面的倾向倾角差异很大。在GoCAD中,我们要把不整合面作为独立的界面参与建模,并且在层面组合时显式指定它与上下层的接触关系。实操中经常要手动编辑不整合面边缘的散点,让它与上覆或下伏层面相交位置的接触关系符合地质认识。

把顶面、底面、断层面组合成一个三维地质体的操作,GoCAD里叫“闭合地质体”或“生成地质单元”。选中所有相关层面,指定每个面的上下方向,选择断层作为侧边界,GoCAD就会自动生成一个闭合的壳。这个壳就是后续SGrid网格的边界基础。

4. 生成SGrid网格与属性模型

4.1 为什么要从面模型转到体网格

虽然面模型在三维显示和剖面出图上表现很好,但它只能描述地质界面,没法存储内部的属性。到了储量计算、数值模拟这一步,我们需要的是一个填充了属性值(孔隙度、渗透率、饱和度)的三维体网格。

SGrid(Stratigraphic Grid)是GoCAD中专用的地层网格结构。它不同于普通矩形网格,SGrid的网格线可以跟随地层层面弯曲,也可以沿断层边界错断。这样生成的网格与地质构造高度吻合,不会因为强制使用矩形网格而产生大量的锯齿状阶梯。

SGrid沿三个方向定义:I方向通常对应地质体的走向方向,J方向对应倾向方向,K方向对应垂向(地层厚度方向)。在使用SGrid生成的时候,难点在于K方向网格的划分要兼顾地层的厚度变化和计算效率。

4.2 SGrid生成流程与关键参数

SGrid生成从前面的闭合地质体出发。第一步是选择边界,即选择之前生成的地质体壳。第二步是设置三个方向的网格单元数。

关于I、J方向单元数,一般是根据构造尺度来确定。比如我的工区沿走向长度是12公里,如果想让网格单元大致在250米左右,I方向就设48个单元。J方向同理。K方向需要单独考虑:目的层附近应该加密,顶底板附近可以适当放宽。GoCAD支持在指定深度范围内设置加密,比如我在目标油层上下各50米范围内K方向细分成2米一个单元,这样网格总数可控,目的层又能保证精度。

某一次实际建模中,我算了一笔账:整个地质体大约2000米高,K方向如果统一按5米划分,需要400层;但其中1000米是盖层,不需要那么密,于是我把盖层部分调整为15米一层,目的层部分保持2米一层。这样K方向总层数从400降到了220,网格总数减少了接近一半,而目的层精度反而更高了。这就是SGrid参数设置的思维方式:不追求均匀,而是把网格资源用到关键位置。

4.3 属性模型的建立与粗化

SGrid建好之后,就可以往里填属性了。这个过程叫属性建模。首要是把井上的离散属性值(孔隙度、含水率这些)重采样(Resampling)到SGrid的网格节点上。

重采样时需要注意井曲线数据的分辨率。测井曲线通常有0.125米或0.5米的分层数据,而SGrid在K方向的厚度可能是2米甚至更粗。重采样算法内部会做加权平均,实测下来算法的选择对最终结果有影响。在数据波动较大的层段,普通平均会抹掉尖峰,影响后续精度,这时候最好选择“保持峰值”模式的重采样。

完成重采样后,用插值算法把井点属性扩展到整个网格空间。常见的算法有克里金、最近邻、DSI和距离反比加权。克里金在数据点比较多、变差函数拟合较好的情况下,插值效果最好,但它需要一定的地质统计基础。DSI在构造模型里用得比较多,因为它和别人一样,能利用层序界面做约束。

属性模型建好后,很多时候还需要粗化(Upscaling)。比如储层建模常用细网格(百万级),而数值模拟只能用粗网格(十万级以下)。粗化的本质是体积守恒的属性聚合:把细网格单元中的属性按体积加权汇总到粗网格单元中。这里最重要的原则是:检查粗化后属性分布的直方图与细网格是否一致,如果出现明显的“拖尾”或“截断”,说明粗化算法或者粗网格层位的对齐方式有问题,需要回头检查。

5. 模型质量检查与成果输出

5.1 三维模型的视觉化检查

模型建完不是终点,质量检查才是。我见过太多项目在建模阶段就停滞不前,就是因为匆匆忙忙出图后被审查方一眼看出低级错误。

第一个检查动作是沿剖面切任意切片。在三维窗口中任意生成一个剖面,观察层面在这个任意方向上的连接关系是否合理。如果发现在某些角度上层面出现不自然的“V”形尖角,通常意味着层面散点在那个区域有交叉或者层面边界约束存在问题。

第二个检查动作是透明化显示断层。把整个模型半透明化,单独把断层面高亮显示,沿着断层的延伸方向转一圈,观察断层面和层面的相交关系。标准的构造模型,断层面应该像一把刀一样干净地把层面的切割出来,如果发现某个层面在跨过断层面时仍然连续穿过,那说明断层与层面的拓扑关系定义出了问题。

第三个检查动作是看层面颜色渲染。GoCAD支持按高程给层面着色,颜色变化应该平滑连续,如果一块区域内颜色出现明显跳变,多半是该区域层面有褶皱或者存在未处理的异常点。

5.2 数值化检查指标

视觉检查可以发现大部分问题,但有些细微的问题肉眼看不出来,必须用数值指标来量化。

网格畸变检查是必须做的。SGrid生成后,每个单元体都有体积值。正常情况下,相邻单元之间的体积变化应该是连续的。如果某个单元的体积明显大于或小于周围单元,甚至出现负体积,那这个网格在计算时绝对会出问题。负体积网格是GoCAD里常见的计算报错根源,排查时逐一走查所有负体积单元的位置,通常是该处的层面翻转了方向,导致网格折叠。

断距一致性检查也很重要。在断层两侧的对应层位上,断距应该与断层属性表里设置的断距值接近。如果模型中断距显示与输入值差距过大,很可能是断层段或层面解算时选错了参数,导致断层在模型中的等效断距被错误放大或缩小。

5.3 常见问题与排查技巧实录

这个表格是我整理项目中经常遇到的问题,基本都遇到过,放这里方便大家对照排查。

问题现象常见原因处理方式
断面生成后边缘破碎断层多边形未闭合或点密度不均检查多边形闭合性,加密断层边缘点
断层相交线无法生成两条断层段无真实交点手动延伸/移动断层段端点至交切位置
层面解算后穿断层层面约束点的控制范围设得过大缩小约束半径,增加断层附近约束点
网格出现负体积层面局部翻转或叠置检查该处层面方向,重新生成局部层面
SGrid生成失败地质体壳未闭合或边界定义错误检查闭合地质体,确认所有边界由层面/断层围合
属性插值结果定向条纹数据点空间分布方向性过强增加各方向变差函数分析,或改用DSI方法

还有一个独家技巧:每完成一个关键步骤,就用GoCAD里的“版本标记”功能存一个快照。我在项目中会给每个版本加注释,比如“F1断层段创建完成”“SGrid v2 加密目的层”。这样一旦后面的操作把模型搞坏了,可以直接回退到上一个正常版本,不用从头再来。这个习惯让我在好几次紧张的项目周期里保住了头发。

另外,如果发现层面模型与输入的井分层数据系统性不匹配(比如所有井的某一层位都偏离了层面模型20米以上),先不要急着改模型参数,而是检查当初输入的井分层数据本身是否准确。这种做法能帮你快速定位数据链路中真正出问题的环节,避免在错误的模型上反复调试浪费时间。


最后再分享一个我个人的体会:GoCAD建模这件事,三分靠建模,七分靠检查。不要以为模型生成出来就万事大吉,我在实际项目里经常要做三轮甚至更多轮的迭代检查。每做一次三维浏览检查,都能发现那些肉眼没注意到的细节问题,比如某个区域的断层落差突变、某个层面的细微穿层,这些都会在后续的属性建模和储量计算里被无限放大。花在检查上的时间,永远比花在重新建模上的时间少得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询