共计 2088 个字符,预计需要花费 6 分钟才能阅读完成。
背景与痛点
在复合材料数值模拟中,骨料的几何形态直接影响力学性能分析的准确性。传统建模方式通常面临两大挑战:

- 人工建模效率低下 :手动创建复杂骨料结构耗时且难以保证随机性,尤其当模型包含数百个骨料时
- 形态失真 :简单几何体(如球体、椭球)无法还原真实材料中不规则多边形骨料的拓扑特征
技术选型对比
目前主流骨料生成算法可分为三类:
- 随机投放法
- 优点:实现简单,计算速度快
-
缺点:难以控制间距,容易产生重叠
-
MCMC 采样法
- 优点:可精确控制体积分数
-
缺点:收敛速度慢,不适合大尺寸模型
-
Voronoi 图法 (本文方案)
- 优点:天然生成凸多边形,形态接近真实材料
- 缺点:需要后处理消除过小特征
核心实现步骤
1. Voronoi 图生成
利用 SciPy 库生成三维 Voronoi 图的关键代码段:
from scipy.spatial import Voronoi
import numpy as np
# 在单位立方体内生成随机种子点
num_seeds = 50
points = np.random.rand(num_seeds, 3)
# 生成 Voronoi 图
vor = Voronoi(points)
2. Abaqus 几何创建
通过 Python 脚本将 Voronoi 单元转换为 Abaqus 几何体:
from abaqus import *
from abaqusConstants import *
modelName = 'RandomAggregate'
mdb.Model(name=modelName, modelType=STANDARD_EXPLICIT)
for i, region in enumerate(vor.regions):
if not region: continue # 跳过空区域
# 获取当前 Voronoi 单元顶点坐标
vertices = [vor.vertices[j] for j in region if j != -1]
# 创建 Part
partName = f'Aggregate_{i}'
mdb.models[modelName].ConstrainedSketch(name='__temp__', sheetSize=10.0)
# 通过顶点创建多边形
for j in range(len(vertices)-1):
mdb.models[modelName].sketches['__temp__'].Line(point1=vertices[j],
point2=vertices[j+1])
mdb.models[modelName].sketches['__temp__'].Line(point1=vertices[-1],
point2=vertices[0])
# 拉伸成三维实体
mdb.models[modelName].Part(
name=partName,
dimensionality=THREE_D,
type=DEFORMABLE_BODY)
mdb.models[modelName].parts[partName].BaseSolidExtrude(sketch=mdb.models[modelName].sketches['__temp__'],
depth=1.0)
3. 随机参数控制
关键控制参数及优化建议:
-
粒径分布 :通过调整种子点生成范围实现
# 控制粒径在 0.1-0.3mm 范围内 points = np.random.uniform(low=0.1, high=0.3, size=(num_seeds, 3)) -
长径比 :对顶点坐标进行线性变换
# 设置 1.5:1 的长径比 vertices[:, 2] *= 1.5 # Z 方向拉伸
完整代码示例
# 完整实现代码见 GitHub 仓库(示例链接)# 包含以下功能模块:# 1. 参数化种子点生成
# 2. 边界条件处理
# 3. 无效几何过滤
# 4. 体积分数控制
性能优化建议
- 并行计算 :
- 使用 Python 的 multiprocessing 模块并行处理 Voronoi 单元
-
每个进程处理不同骨料,最后合并模型
-
内存管理 :
- 分块生成骨料(如每次处理 20 个)
- 及时清理临时草图对象
常见问题解决方案
网格划分失败
- 现象 :出现高曲率边导致网格畸变
- 对策 :
# 添加边线分割 mdb.models[modelName].parts[partName].partitionFaceByShortestPath(point1=vertex1, point2=vertex2)
骨料重叠
- 检测方法 :
# 使用 Abaqus 几何查询接口 interference = mdb.models[modelName].rootAssembly.getGeometryContacts() - 解决方法 :
- 增加种子点最小间距约束
- 后处理进行微调平移
扩展应用
对于多相材料建模,可通过以下方式扩展:
- 分层生成不同粒径的 Voronoi 图
- 为不同相材料赋予不同材料属性
- 添加过渡层(interface)的几何处理
结语
本文方法已成功应用于混凝土细观模拟项目,相比传统建模方式效率提升约 15 倍。实际应用时建议先进行参数敏感性分析,推荐初始参数设置为:
- 种子点数:50-100 个 /cm³
- 粒径变异系数:0.3-0.5
- 长径比范围:1.2-2.0
下一步可研究非凸多边形骨料的生成算法,使模型更接近真实材料形貌。
正文完
