Plaxis代理封装框架——完整的基坑仿真解析(二)
本文接上:Plaxis代理封装框架——完整的基坑仿真解析(一)
写在前面
为了更好地介绍这个代理框架,以降低使用同学的操作门槛。
由于这个框架是原来笔者的科研过程中流式代码转换过来的,且在完整的框架开发时由于对Plaxis机理和机制理解有限,因此难免存在疏漏和错误,还请各位同学及时提出,辅助修正。当前笔者的相关工作也已经从之前的流式代码切换到当前框架,优化的频率较高,因此代码库更新的速度较快,同学们使用这个框架时,应当首先运行以下命令检查当前的代码库是否有更新,然后再运行业务代码。
1 | |
testmapper.py结构解析
什么是testmapper.py
testmapper.py基于开挖工程对象,完整的定义了一个基坑工程一键建模、网格划分,施工阶段划分和计算结果提取完整阶段。首先创建了一个函数来实例化一个基坑工程对象,而后通过调用Builder对象在Plaxis软件中完成建模。Builder中内置了数据提取接口,使其能够从计算结果中提取任意的数据。因此本例演示了提取所有基坑围护墙三个方向变形,并将结果使用pandas和openpyxl写入Excel表格中的完整代码。
我将通过在原始代码中补充更加详细的注释,以详细地分析当前部分的关键算法和实现细节:
以下涉及详细的代码解析,为了精简篇幅部分代码会有些许省略,可以下载对照源码阅读解析。
第一部分详细分析:导入和基础设置
1.1 库导入架构解析
这个脚本构建了一个完整的 PLAXIS 3D 基坑分析系统,采用模块化架构:
核心运行层:
PlaxisRunner- PLAXIS 计算引擎连接器,负责与 PLAXIS 服务器通信ExcavationBuilder- 基坑模型构建器,将抽象模型转换为 PLAXIS 具体对象FoundationPit- 基坑数据容器,存储所有几何、材料和结构信息PlaxisOutput- Plaxis 结果查询引擎连接器,负责打开结果查看面板以及提取计算结果
数据模型层:
ProjectInformation- 项目元数据(单位制、模型范围等)Phase- 施工阶段管理,支持继承关系BoreholeSet- 钻孔数据集合,包含分层土体信息
材料系统:
SoilMaterialFactory- 土体材料工厂,使用SoilMaterialsType.MC创建摩尔-库仑材料ElasticPlate- 弹性板材料(用于地下连续墙)ElasticBeam- 弹性梁材料(用于水平支撑)
几何系统:
Point,PointSet,Line3D,Polygon3D- 三维几何基元- 采用面向对象几何表示,便于后续的网格生成和结果提取
1.2 几何辅助函数详细说明
1 | |
几何生成原理:
- 地下连续墙被建模为垂直的平面多边形
- 每个墙由4个角点+1个重复起点构成5点多边形
- 这种表示方法便于 PLAXIS 进行板单元网格划分
- Z方向表示墙的埋深,从地表(z_top)到墙底(z_bot)
1 | |
第二部分详细分析:降水井布局算法
这里根据一定的规则设计了一套自动生成降水井的代码,不感兴趣或阅读吃力的同学可直接跳过,不影响直接通过流水线生成降水井。
2.1 几何计算核心算法
1 | |
1 | |
1 | |
2.2 降水井布置策略详解
1 | |
1 | |
2.3 智能井数控制算法深度解析
1 | |
算法关键点:
- 多级降级策略:间距调整 → 抽样 → 去重,逐步满足井数限制
- 工程优先级:边界井优先于内部井,符合降水工程实践
- 自适应参数:根据多边形尺寸自动计算合适的网格划分
- 容错机制:防止无限循环,处理退化情况
- 完整统计:提供详细的布置过程统计,便于调试优化
第三部分:几何去重算法和土体材料系统
3.1 几何去重算法深度解析
1 | |
1 | |
3.2 土体材料系统详细分析
1 | |
第四部分:基坑组装核心算法
4.1 项目信息配置
1 | |
模型范围设计原理:
- X方向690米:确保边界效应不影响基坑区域
- Y方向100米:提供足够的侧向约束距离
- 10节点单元:比6节点单元精度更高,适合复杂应力分析
4.2 智能土体分层发现算法
1 | |
土体分区自动化:
prefer_volume=True:优先基于体积计算进行土体分类- 开挖区土体:在基坑范围内的土体
- 保留区土体:在基坑范围外的土体
- 这种自动化减少了手动配置错误
4.3 土体材料库构建
1 | |
土体参数设计原理:
- 刚度梯度:从填土15MPa到岩石250MPa,符合地层变化规律
- 强度参数:粘聚力从5kPa到40kPa,内摩擦角从20°到40°
- 重度变化:从18kN/m³到21kN/m³,反映地层压实程度
- 孔隙比:从0.95到0.35,体现土体密实度变化
4.4 钻孔系统构建算法
1 | |
钻孔布置策略:
- 控制点分布:12个钻孔在基坑周边和内部形成控制网络
- 分层变化:不同钻孔的层厚略有变化,模拟真实地层波动
- 水位统一:所有钻孔共享同一水位面(-3.5米)
4.5 支护结构材料系统
1 | |
结构材料设计:
- 地下连续墙:C30混凝土,0.8米厚,提供主要挡土功能
- 水平支撑:钢材,提供水平约束,控制墙体位移
第五部分:支护结构布置算法
5.1 地下连续墙布置系统
1 | |
墙段布置算法解析:
- 分段原则:将复杂基坑轮廓分解为简单的直线段
- 坐标系统:使用(x,y)方向交替,形成连续支护体系
- 命名规则:
wall_[位置]_[序号]便于识别和管理 - 几何闭合:确保所有墙段首尾相连形成闭合支护体系
1 | |
5.2 水平支撑系统布置算法
1 | |
支撑系统设计原理:
- 三道支撑:符合深基坑支护的常规做法
- 深度配置:0m, 3.1m, 6.1m 形成合理支撑间距
- 对撑布置:从基坑一侧到另一侧的对角支撑
- 命名系统:清晰的层级和序号标识(全打包到一个数据里了,实际使用的时候可以一个一个生成,不建议像这样直接做两个端点数组)
第六部分:施工阶段管理系统
6.1 施工阶段配置算法
1 | |
施工阶段设计原理:
- 分阶段施工:模拟真实基坑施工顺序
- 继承关系:每个阶段基于前一阶段的结果继续计算
- 参数差异化:不同阶段采用不同的计算步长和时间间隔
6.2 土体状态动态管理
1 | |
土体状态控制逻辑:
- 初始阶段:所有土体激活且可变形
- 降水阶段:开挖区土体冻结,模拟降水影响
- 开挖阶段:保留区土体刚性化,控制位移
- 最终阶段:恢复真实土体特性
6.3 结构激活时序控制
1 | |
结构激活策略:
- 地下连续墙:初始即激活,全程参与
- 水平支撑:随开挖深度逐道安装
- 降水井:在降水阶段集中激活
6.4 动态水位控制算法
1 | |
水位控制设计:
- 控制点布局:角点+中心点,形成水位控制网络
- 水位目标:从-3.5m降至-6.0m,降水2.5米
- 阶段应用:在开挖阶段体现降水效果
第七部分:模型执行和结果输出系统
7.1 模型构建和执行流程
1 | |
7.2 计算结果提取(提取所有地连墙X、Y、Z三个方向变形)
Plaxis Output中所有ResultTypes中的类型已经全部枚举到了plaxishelper/resulttypes.py中,建议查阅。以下的结果提取代码直接传入枚举类型同时兼容两种传入方式:
- 直接传入枚举类型,如
Plate.Ux; - 直接传入字符串,如
"Plate.Ux"(前面的ResultTypes可以省略)
1 | |
这段代码实现了自动计算结果提取,能够:
- 快速评估:无需查看全量数据即可了解支护效果
- 安全监控:重点关注位移极值,判断是否超限
- 比较分析:不同相位、不同墙体的位移对比
- 报告生成:适合工程报告和监控报表使用
7.3 结果输出执行流程
1 | |
示例小结
这个PLAXIS基坑分析示例体现了完整的岩土工程数值模拟流程:
- 前处理:几何建模、材料定义、支护设计
- 计算控制:施工阶段管理、边界条件设置
- 求解计算:有限元分析、非线性迭代
- 后处理:结果提取、数据导出、成果展示(后面会陆续补充VTK可视化相关模块的介绍)
第八部分:系统架构深度解析
8.1 面向对象的工程建模架构
1 | |
8.2 计算引擎集成架构
1 | |
8.3 材料本构模型系统
1 | |
8.4 施工阶段有限元分析原理
1 | |
写在后面
前处理阶段关键要点
几何建模准确性
1 | |
几何建模要点:
坐标精度: 使用足够精度(通常0.001m),避免累积误差
方向一致性: 统一采用右手坐标系,确保法线方向正确
高程基准: 明确绝对高程和相对高程的基准面
边界范围: 模型边界应足够大,避免边界效应影响(通常5-10倍基坑尺寸)
材料参数合理性
1 | |
材料参数要点:
试验数据支撑:优先使用现场试验和室内试验数据
经验公式验证:与地区经验公式对比验证合理性
参数相关性:注意E与c、φ之间的经验关系
本构模型选择:根据工程问题选择合适的本构模型
土层冻结与激活
由于Plaxis软件中任意一个集合形状都会影响完整土体的完整性(把土体分割成好些个小块),因此在完成了所有的结构建模、网格和阶段创建后,进一步控制开挖土体的状态。不知道是我的软件盗版还是什么原因,相同的代码创建土层和结构之后,每次Plaxis软件划分成的土层编号和名字都不相同,因此很难直接预定义好需要冻结或激活的土层。
我建议在Notebook中来完成建模和阶段创建,而后通过Builder中给出的get_all_child_soils_dict()函数,获取当前所有被划分好的土层,这个土层将会返回一个土层名-土层操作句柄的字典,然后根据GUI反馈的土层名,参考示例代码,在不同的阶段中添加需要冻结的土层(默认所有的土层都是激活状态),来实现不同阶段的自动化开挖。
结果提取
结果提取现已经支持文档中的两种调用方式:
getresults Phase_1 ResultTypes.Soil.Ux "node" True,获取土体所有节点的位移,返回的是一个巨大的数组,可用来代替曲线点的选取,"node"参数可不传,默认返回"node"节点的数据,如果没有就返回"stressnode"的数据,返回的结果可能巨大,包含了所有土体点;getresults Beam_1 Phase_3 ResultTypes.Beam.X "node" True,获取指定结构的计算结果,返回的是当前结构上所有有限元节点的值,"node"参数可不传,默认返回"node"节点的数据,如果没有就返回"stressnode"的数据。
所有可用的结果对象枚举请参阅:plaxishelper/resulttypes.py。