首页/文章/ 详情

AI 在后台跑 PFC,你在页面上看模型

9分钟前浏览1

现在的算例,基本是 AI 在命令行里无头跑 PFC——人并不打开 PFC 界面。模型跑完之后,怎么在不进 PFC 的情况下看清里面发生了什么,并且把结果整理成报告?

二维好办:一张平面图就能把剪切带、裂纹分布讲清楚。三维不行——同一个模型,换个角度就是另一个故事。所以我给 PFC3D 做了一个离线交互查看器:把颗粒、接触、裂纹、碎块放进同一个可以转、切、筛的单文件页面,双击就能开,导出的图可以直接进报告。

这是一篇工具介绍,也是一次关于"为什么三维后处理不能靠多画几张图"的复盘。

1. 一、二维的"一张图"为什么够

二维模型里所有东西都在一个平面内。颗粒位置、裂纹、力链、剪切带,一张图加颜色和大小就能表达。图1 是单轴压缩的二维裂纹分布:蓝色剪切、橙色拉伸,哪儿密哪儿疏一目了然。

alt  

图1 二维单轴压缩的裂纹空间分布。一张平面图就能看出损伤集中在哪。

三维不是这个逻辑。

第一,遮挡。用 matplotlib 画三维,底层通常是画家算法:按图元质心排序,远的先画、近的后画。遇到大而平的面,比如与试样底面同高的压板,排序会错——压板盖在试样下半部上,看起来像穿模。这不是参数没调好,是算法本身没有逐像素深度。

第二,视角。三维结构没有"唯一正视图"。同一个裂纹网络,正面看是一片点,侧面看是一条带,俯视看是一个环。只给一张固定角度的图,读者很难建立空间关系。

第三,内部。颗粒在外层,力链和裂纹在里面。不剖开,看不到;剖开,又只看到一个切面。

第四,多个场。同一个模型要同时看颗粒着色、接触力、裂纹、碎块。二维可以叠图层,三维叠起来会互相遮挡,必须能分别开关、换颜色、筛选。

所以三维后处理的正确形态不是"多画几张图",而是一个可以转、切、筛、换色标的查看器。

2. 二、把它做成一个技能

现在的分工是两层:


  • 数据层 pfc-result-probe:从 .sav 里把颗粒场、接触、墙体、裂纹、碎块导出成 CSV / geom;
  • 渲染层 pfc-scene3d:读这些 CSV,生成一个单文件 HTML。

这样探针只跑一次,视图可以反复重建;换一个显示方式不用重新进 PFC。

页面是离线的:Three.js 直接内联进 HTML,双击就能开,断网也能用。发给别人不用装 Python、不用连 CDN。这次示例模型有 12789 个球、39416 条接触、16891 条裂纹、226 个碎块,生成的 HTML 大约 5.6 MB。

alt  

图2 查看器界面(裂纹页)。左边是五个页签,视口左侧是三条竖排色卡,右下是损伤剖面。

左栏按 场景 / 颗粒 / 接触 / 裂纹 / 色标 分成五页,不再是一条很长的控件列表。视口左边固定三条竖排色卡,分别对应颗粒、接触、裂纹当前的着色依据;哪个图层关掉,对应色卡就消失。右下角的分析面板可以在"损伤剖面"和"法向产状"之间切换。

3. 三、几个最有用的功能

3.1 1. 色标必须能自己定范围

图3 是同一个试样的速度场。速度从 0.0017 到 6982 mm/s,跨了六个数量级。线性色标按全范围映射,99% 的颗粒都挤在最低一档,整根试样看起来是同一个颜色——很容易误判成"速度显示坏了"。

alt  

图3 速度场。对数色标 + 1–99% 分位 + 越界灰,场内的差异才显出来。

页面对每个字段单独保存色标:手填 min/max、分位预设(全范围 / 0.5–99.5% / 1–99% / 5–95%)、log 开关、越界值显示为灰色、三种颜色自定义。速度默认 log + p1–p99;碎块体积反过来用全范围 log,因为最大块往往正是要看的对象。

3.2 2. 力链:粗细按力,筛选分强弱

力链的半径按 |fn| 的秩映射,不是按 |fn|/fn_max。后者会被一个离群接触压平,其余力链看起来一样细。现在最弱到最强大约 40 倍的半径差,弱链细、强链粗。

另外可以按分位把接触分成强/弱两套网络:只看强链(主承力骨架)、只看弱链(背景网络),或者强+弱对照(橙/蓝)。图4 是只显示最强 15% 的强链,颜色按 |fn|。

alt  

图4 仅强力链(最强 15%)。半径随 |fn| 增大,颜色仍是 |fn|。

3.3 3. 裂纹:不要只画圆盘

三维裂纹是圆盘,按真实产状定向。但一个单轴试样有一万多条裂纹,直接全画出来是一团,看不出优势破坏位置。

我先做了统计:这个试样的裂纹 z<0 占 70%,法向中位数 68°、方位接近各向同性,全点 PCA 的平面性比只有 3.17,最佳 单 平面残差标准差 11 mm。也就是说它没有一条单一主裂面,是弥散损伤。强行拟合一个平面没有意义。

页面的做法是:损伤密度场(2.5 mm 体素 + 高斯平滑)、正交切片/体素体、沿高度的损伤剖面、法向等面积投影,以及按连通性过滤(本算例最大连通簇 7582 条,占 45%)。图5 是纵剖面切片,橙黄色是中下部的高密度损伤带。

alt  

图5 损伤密度纵剖面切片。颗粒半透明,切片按当前切面内相对密度着色。

3.4 4. 碎块:看块度,也看块间关系

胶结材料破坏后,颗粒会连成大小不一的碎块。页面支持按碎块图着色(相邻块不同色)、按体积着色、按块内球数着色,还能过滤最小块、隐藏孤立球、只看最大块。图6 是图着色。

alt  

图6 碎块图着色。最大块、小块、孤立球用颜色 区分。

3.5 5. 剖切和透明球

真正的 clippingPlanes 剖切,沿 PFC 的 x/y/z 任选位置切开,配合颗粒透明度(25% 左右)能看到内部。图7 是把上半部剖掉后的样子。

alt  

图7 剖切后的内部视图。球体半透明,避免了"外层挡住一切"。

3.6 6. 导出

导出的是当前视口:相机角度、图层、着色、剖切、切片都保留。像素尺寸可以自己填(320–6000),也可以锁定当前视口宽高比。导出图自带标题、三条竖排色卡和比例尺,适合直接放进报告或 PPT。

4. 四、怎么用

bashpython ~/.claude/skills/pfc-scene3d/code/build_scene3d.py \
  --dir . --save 6result --run --shot 1500x950

--run 会串行调用数据层的探针(没有现成 CSV 时),产物统一放在 <工况>/post3d/:


  • scene3d.html:离线交互视图;
  • scene3d.png:可选预览;
  • build_scene3d.json:每层行数、字节数和命令清单。

已有 CSV 时去掉 --run 就只重建视图。

5. 五、一点取舍

不做"万能后处理器"。这个技能只负责把三维模型显示出来、让人能看;裂纹玫瑰、矩张量 AE、分形维数这些统计,仍然交给对应的专门技能。数据契约固定,渲染层就稳定,后面加功能不用动探针。

另一个取舍是三维裂纹不强行提取"主裂面"。有贯通剪切带的算例可以拟合;像这次这种各向同性弥散损伤,密度场和连通性比单 平面更诚实。

技能位置:~/.claude/skills/pfc-scene3d/。数据层探针在 pfc-result-probe,渲染层只读 CSV,不碰 PFC。



来源:超级大的lobby
ACTpython裂纹PFC材料渲染
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-11-14
最近编辑:9分钟前
lobby
硕士 | 无 擅长颗粒流PFC
获赞 963粉丝 5964文章 120课程 23
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈