首页/文章/ 详情

Abaqus钢纤维混凝土(FRC)高效建模Python程序v1.0使用指南

20小时前浏览8

本项目是将 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                 # 主配置文件

所需环境依赖

使用 Python 3.8+,并安装以下库:

pip install numpy pyvista

如使用旧版本 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
  • 自动添加:
*EMBEDDED ELEMENT, HOST ELSET=MATLAB_MESH-1.MATRIX
MATLAB_MESH-1.<FIBER_GROUP>

6. 导入进Abaqus

File -> Import -> Abaqus Input File -> 选择生成的 .inp 文件,导入进Abaqus中将显示不同分组下的纤维集 合。

理论实现细节:随机纤维生成原理

在本程序中,每根纤维被表示为三维空间中一条具有固定长度    的线段,形式为:

Fiber_i = [x1, y1, z1, x2, y2, z2]

其构造包括起点    和终点    ,构造过程如下:

Step 1:随机选取纤维起点    

在立方体域中均匀采样:

x1 = np.random.uniform(*x_range)
y1 = np.random.uniform(*y_range)
z1 = np.random.uniform(*z_range)

即    

Step 2:随机生成球面方向向量    

为了让纤维方向在三维空间中均匀分布,可以使用 球面对称采样

theta = np.random.uniform(02 *np.pi)
v = np.random.uniform(-11)  # 方向余弦,相当于 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])
  •      :极角
  •      :方向余弦
  •      :单位向量,均匀分布在球面上
 

这种方法比直接采样    更均匀,避免极点密集问题。

Step 3:构造终点    

构造长度为    的向量,并叠加在起点上得到终点:

sign = np.sign(np.random.uniform(-11)) # 随机正负方向
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[1and y_range[0] <= p2[1] <= y_range[1and z_range[0] <= p2[2] <= z_range[1]):
    continue

Step 5:存储结果

最终每条纤维为:

fibers[i] = [x1, y1, z1, x2, y2, z2]

生成      条纤维,即得到      的 numpy.ndarray

其中,关键采样公式

 

纤维方向设置说明

程序中的 orientation 参数用于控制纤维的空间走向,支持灵活配置,适用于多种建模场景。

1. 单一方向模式

使用一个三维向量 [l, m, n] 表示固定方向,程序将自动单位化:

orientation = [
  [{type = "vector", value = [1, 0, 0]}, 1.0]
]

orientation = [
  {type = "vector", value = [1, 0, 0]}
]
  • 示例:沿 X 轴生成所有纤维;

  • [1, 1, 0] 表示 XY 平面 45°;

       
  • [1, 1, 1] 表示 XYZ 对角线方向;

       
  • 支持 ± 随机反向;

  • 不要求是单位向量,程序内部会归一化。

2. 随机方向模式

orientation = [
  [{type = "random"}, 1.0]
]
  • 每根纤维的方向在单位球面上均匀分布;
  • 适用于无特定铺设方向的增强体模拟;
  • 也可与定向模式组合使用。

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]
]

程序会自动根据比例分配纤维数量。例如:

count = 1000

将生成 [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°、面内铺层;
  • 可通过配色和分组在可视化中查看铺设效果;
  • 后续将支持不同组的材料属性与行为。

几何区域筛选器设置说明

在默认模式下,程序只保证纤维的两个端点落入全局立方体盒 [x0,x1] × [y0,y1] × [z0,z1]。但可以通过 "geometry" 字段进一步设定 纤维必须落入的几何内域,如椭球体、球体、盒体、柱体等。

可选类型与配置示例

类型      
type      
 值      
描述      
示例参数字段      
无筛选      
""      
 或缺省      
所有合法纤维均保留      
type = ""
椭球体      
"ellipsoid"
椭球体中心 + 三轴长度      
center      
axes      
球体      
"sphere"
球体中心 + 半径      
center      
radius      
立方体内盒      
"box"
内盒最小最大点      
min      
max      
圆柱体      
"cylinder"
底面中心、轴向、半径、高度      
base      
axisradiusheight      

配置文件中写法示例(TOML)

无筛选(默认)

[geometry]
type = ""

椭球体筛选

[geometry]
type = "ellipsoid"
center = [50, 50, 50]
axes = [30, 20, 10]

球体筛选

[geometry]
type = "sphere"
center = [50, 50, 50]
radius = 25

长方体内盒

[geometry]
type = "box"
min = [20, 20, 20]
max = [80, 80, 80]

圆柱体(任意方向)

[geometry]
type = "cylinder"
base = [50, 50, 0]
axis = [0, 0, 1]
radius = 15
height = 100

程序内部原理(简述)

程序会调用一个 inside_fn(p1, p2) 判断纤维两端点是否都在指定几何内域内,若不满足则放弃该纤维并重新采样。

例如椭球判断:

rel = p - center
value = (x/a)^2 + (y/b)^2 + (z/c)^2
if value > 1: reject

每种几何体都有对应的 inside_<type>() 函数,并由 build_inside_fn() 自动构造过滤器。

适用场景

  • 模拟局部增强区(如椭球形芯区);
  • 控制纤维只出现在特定空间;
  • 分析特定路径上的纤维沉积或成型区域。


来源:易木木响叮当
Abaqus复合材料通用MATLABpythonUM理论材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-08-15
最近编辑:20小时前
易木木响叮当
硕士 有限元爱好者
获赞 263粉丝 375文章 403课程 2
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈