Abaqus_FRC_Mesh(Python版)¶
约 1503 个字 73 行代码 11 张图片 预计阅读时间 6 分钟
本项目是将 MATLAB 工具 “Abaqus Mesh for Fiber-reinforced Composites (Embedded)” 转换为 Python 实现的版本,主要用于在 Abaqus 中模拟纤维增强复合材料中纤维的嵌入式建模(Embedded Element)。
功能概述¶
- ✅ 支持生成规则立方体 C3D8 网格(基体)
- ✅ 支持多方向分组生成 T3D2 纤维(随机 + 定向组合)
- ✅ 支持通过配置文件设定椭球体、球体、长方体、圆柱体等几何区域筛选
- ✅ 自动构建嵌入式约束关系(*Embedded Element),与原有网格模型不共节点
- ✅ 可视化:PyVista 显示立体网格 + 不同颜色显示不同纤维组
- ✅ 输出标准 Abaqus
.inp
文件(按 group 写入多个 ELSET) - ✅ 配置集中管理:采用
TOML
格式配置文件(支持注释)
项目结构¶
FiberPy/
├── main.py # 主程序,读取 config.toml 并驱动流程
├── utils.py # 通用函数,如 load_config()
├── fiber_generator_grouped.py # 支持分组和编号的纤维生成器
├── geometry_filters.py # 几何筛选器构造函数(椭球、球体、柱体等)
├── mesh_generator.py # 规则立方体网格生成工具
├── plot_mesh_grouped.py # 可视化函数(按 group 上色)
├── write_inp_file_grouped.py # 写入 Abaqus .inp 文件(分组写入)
├── config.toml # 主配置文件
├── README.md # 使用说明
所需环境依赖¶
使用 Python 3.8+,并安装以下库:
如使用旧版本 pyvista(<0.42),建议使用兼容构造方式(代码已支持)。
整体实现流程¶
1. 网格生成(C3D8)
- 程序读取
x/y/z
区间与dx/dy/dz
步长; - 构造规则 hexahedral 网格(C3D8 单元);
- 所有网格单元统一归为
MATRIX
分组。
2. 纤维生成(T3D2)
- 读取
orientation
列表:支持任意多个方向组合 + 比例; - 可设为:
random
:球面均匀采样方向;vector
:固定方向[l, m, n]
;- 每组纤维将记录 group 名并被区分处理;
- 所有 T3D2 元素被分组写入多个
ELSET=FIBER_<group>
。
3. 几何区域筛选器(可选)
- 通过配置文件
geometry.type
选择约束区域; - 支持:
""
(空字符串)表示不筛选;"ellipsoid"
:椭球体;"sphere"
:球体;"box"
:立方体内部;"cylinder"
:垂直或任意方向的柱体;- 程序会自动过滤掉超出指定区域的纤维。
4. 可视化展示
- 使用 PyVista 绘制绿色网格 + 多组彩色纤维;
- 每个 group 使用独立颜色;
- 可用于模型结构完整性检查。
5. 输出 INP 文件
- 所有节点写入
*NODE
- C3D8 单元写入
*ELEMENT, ELSET=MATRIX, TYPE=C3D8
- T3D2 元素按 group 写入多个 ELSET
- 自动添加:
6. 导入进Abaqus
File -> Import -> Abaqus Input File -> 选择生成的 .inp 文件,导入进Abaqus中将显示不同分组下的纤维集合。
理论实现细节:随机纤维生成原理¶
在本程序中,每根纤维被表示为三维空间中一条具有固定长度\(L\)的线段,形式为:
其构造包括起点\(P_1\)和终点\(P_2\),构造过程如下:
Step 1:随机选取纤维起点\(P_1\)
在立方体域中均匀采样:
即\(P_1 = (x_1, y_1, z_1)\)
Step 2:随机生成球面方向向量$\hat{d} \in \mathbb{S}^2
为了让纤维方向在三维空间中均匀分布,我们使用 球面对称采样:
theta = np.random.uniform(0, 2 *np.pi)
v = np.random.uniform(-1, 1) # 方向余弦,相当于 cos(φ)
l = np.sqrt(1 - v**2) * np.cos(theta)
m = np.sqrt(1 - v**2)* np.sin(theta)
n = v
direction = np.array([l, m, n])
- \(theta \in [0, 2\pi]\):极角
- \(v = \cos(\phi) \in [-1, 1]\):方向余弦
- \(\hat{d} = (l, m, n)\):单位向量,均匀分布在球面上
这种方法比直接采样\(\phi\in[0,\pi]\)更均匀,避免极点密集问题。
Step 3:构造终点\(P_2\)
构造长度为\(L\)的向量,并叠加在起点上得到终点:
sign = np.sign(np.random.uniform(-1, 1)) # 随机正负方向
d_scaled = sign * L * direction
p1 = np.array([x1, y1, z1])
p2 = p1 + d_scaled
Step 4:边界判断
若终点落出边界,则放弃该纤维并重试,直到合法为止:
if not (x_range[0] <= p2[0] <= x_range[1] and y_range[0] <= p2[1] <= y_range[1] and z_range[0] <= p2[2] <= z_range[1]):
continue
Step 5:存储结果
最终每条纤维为:
生成 \(N\) 条纤维,即得到 \(N\times 6\) 的 numpy.ndarray
。
其中,关键采样公式
纤维方向设置说明¶
程序中的 orientation
参数用于控制纤维的空间走向,支持灵活配置,适用于多种建模场景。
1. 单一方向模式¶
使用一个三维向量 [l, m, n]
表示固定方向,程序将自动单位化:
或
2. 随机方向模式¶
- 每根纤维的方向在单位球面上均匀分布;
- 适用于无特定铺设方向的增强体模拟;
- 也可与定向模式组合使用。
3. 多方向组合模式(混合铺设)¶
通过设置多个方向 + 比例,模拟复杂铺层:
orientation = [
[{type = "vector", value = [1, 0, 0]}, 0.4],
[{type = "vector", value = [0, 1, 0]}, 0.3],
[{type = "vector", value = [1, 1, 0]}, 0.3]
]
程序会自动根据比例分配纤维数量。例如:
将生成 [400, 300, 300] 根对应方向的纤维。
4. 随机 + 定向混合模式¶
完全支持如下混合方式:
orientation = [
[{type = "random"}, 0.3],
[{type = "vector", value = [1, 0, 0]}, 0.4],
[{type = "vector", value = [0, 1, 0]}, 0.3]
]
生成:
- 30% 球面均匀分布的随机方向纤维;
- 40% 沿 X;
- 30% 沿 Y。
注意事项
- 所有方向自动归一化;
- 支持正反方向随机扰动;
- 若方向为
[0, 0, 0]
会被忽略; - 比例不需归一,总和自动标准化;
- 可通过 group 字段追踪每类纤维。
高级用法建议
- 使用
[1, 1, 0]
、[0, 1, 1]
等表示 ±45°、面内铺层; - 可通过配色和分组在可视化中查看铺设效果;
- 后续将支持不同组的材料属性与行为。
几何区域筛选器(geometry)设置说明¶
在默认模式下,程序只保证纤维的两个端点落入全局立方体盒 [x0,x1] × [y0,y1] × [z0,z1]
。但你可以通过 "geometry"
字段进一步设定 纤维必须落入的几何内域,如椭球体、球体、盒体、柱体等。
可选类型与配置示例¶
类型 | type 值 |
描述 | 示例参数字段 |
---|---|---|---|
无筛选 | "" 或缺省 |
所有合法纤维均保留 | type = "" |
椭球体 | "ellipsoid" |
椭球体中心 + 三轴长度 | center , axes |
球体 | "sphere" |
球体中心 + 半径 | center , radius |
立方体内盒 | "box" |
内盒最小最大点 | min , max |
圆柱体 | "cylinder" |
底面中心、轴向、半径、高度 | base , axis , radius , height |
配置文件中写法示例(TOML)¶
无筛选(默认)¶
椭球体筛选¶
球体筛选¶
长方体内盒¶
圆柱体(任意方向)¶
程序内部原理(简述)¶
程序会调用一个 inside_fn(p1, p2)
判断纤维两端点是否都在指定几何内域内,若不满足则放弃该纤维并重新采样。
例如椭球判断:
每种几何体都有对应的 inside_<type>()
函数,并由 build_inside_fn()
自动构造过滤器。
适用场景¶
- 模拟局部增强区(如椭球形芯区);
- 控制纤维只出现在特定空间;
- 分析特定路径上的纤维沉积或成型区域。
未来扩展建议¶
- 支持不同组纤维长度不同;
- 支持纤维弯折;
- 支持导入inp文件(六面体、四面体),随机生成纤维;