资讯动态

元胞自动机模拟动态再结晶与CA法模拟程序:可自定义材料参数与添加第二相

发布时间:2026/8/5 22:06:36 来源:尧图企业网站定制
元胞自动机模拟动态再结晶CA法模拟程序 可自己调整材料参数可添加第二相 全程序很多注释解释很清楚 模型是可修改如位错模型形核模型包括形核机制等。 代码有注释最近在折腾材料动态再结晶的模拟发现元胞自动机这玩意儿真挺有意思。今天给大伙儿看看我折腾的这个CA模拟程序支持自定义材料参数不说还能往里头加第二相颗粒核心算法全用Python写的重点是好改——位错模型、形核机制这些都能按需求魔改。先看个初始化场景的代码片段grid np.zeros((500, 500), dtype[(state, i4), (dislocation, f4), (phase, i4)]) # 设置第二相分布10%体积分数 second_phase_mask np.random.choice([0,1], size(500,500), p[0.9, 0.1]) grid[phase] second_phase_mask * 2 # 0-基体 1-已再结晶 2-第二相这段搞了个三合一的网格每个元胞记录状态、位错密度和相类型。第二相用随机撒点的方式生成调整p参数就能改变体积分数。有意思的是第二相会直接影响后续的晶界迁移后面咱们会看到处理逻辑。位错密度的计算是动态再结晶的核心这里用了简化版应变速率模型def update_dislocation(cell, strain_rate): if cell[phase] 2: # 第二相不积累位错 return cell[dislocation] # 位错增量 应变速率 * 时间步长 - 动态回复 delta strain_rate * dt - 0.05 * cell[dislocation] return max(cell[dislocation] delta, 0)注意这里给第二相开了个后门——遇到第二相直接跳过位错累积。这个设计让第二相既能阻碍晶界迁移又不参与变形过程符合实际材料行为。想改回复速率的话把0.05那个系数调大调小就行。形核机制这块目前实现了两种模式随机形核和基于位错密度形核def nucleation(grid, threshold2.5): candidates np.argwhere((grid[dislocation] threshold) (grid[state] 0)) if len(candidates) 0: # 随机选择5%的候选点形核 selected candidates[np.random.choice(len(candidates), sizeint(0.05*len(candidates)), replaceFalse)] grid[state][selected[:,0], selected[:,1]] 1 # 标记为再结晶晶核 grid[dislocation][selected[:,0], selected[:,1]] 0这个threshold参数控制形核所需的临界位错密度。有意思的是形核后会重置位错密度相当于模拟再结晶后的软化过程。想改形核率的话调整那个5%的比例值或者换成按概率分布选择也行。元胞自动机模拟动态再结晶CA法模拟程序 可自己调整材料参数可添加第二相 全程序很多注释解释很清楚 模型是可修改如位错模型形核模型包括形核机制等。 代码有注释晶界迁移的处理最带劲用了个类似细胞生长的玩法for _ in range(10): # 迭代次数控制晶界迁移速度 front_cells get_frontier(grid) # 获取所有晶界前沿 for x, y in front_cells: neighbors get_neighbors(x, y) for nx, ny in neighbors: if grid[phase][nx, ny] 2: # 遇到第二相停止迁移 continue # 迁移概率与位错密度差相关 prob (grid[dislocation][x,y] - grid[dislocation][nx,ny]) * 0.2 if np.random.rand() prob: grid[nx, ny][state] grid[x, y][state]这里有两个关键点一是遇到第二相直接刹车二是迁移概率和位错密度梯度挂钩。晶界朝着高位错密度区域推进这个设计让再结晶过程能自发进行。想要调整晶界迁移速度的话可以修改迭代次数或者概率系数0.2。跑完模拟后做个可视化用matplotlib画个动态图plt.figure(figsize(10,8)) plt.imshow(grid[state], cmaptab20, interpolationnearest) plt.colorbar(labelGrain ID) plt.scatter(second_phase[:,1], second_phase[:,0], cblack, s1, markers) # 标出第二相位置这个可视化方案用离散色块表示晶粒黑色方块是第二相颗粒。跑起来能看到再结晶晶核在变形区域萌发然后晶界像波浪一样扫过材料遇到第二相时明显会被挡住或者绕行和文献里的实验现象基本对得上。整个代码里埋了不少可调参数比如形核阈值 dislocation_threshold晶界迁移系数 boundary_mobility第二相体积分数 secondphaseratio应变速率 strain_rate改这些参数能看到不同的再结晶组织。有次我把应变速率调高了三倍结果晶粒尺寸直接小了一半说明参数灵敏度还挺高。另外试着把第二相体积分数调到30%发现材料直接变成蜂窝状结构——高密度第二相确实会显著阻碍再结晶进程。位错模型现在用的是线性硬化动态回复想搞点高阶玩法的话可以替换update_dislocation函数。比如加个位错湮灭项或者引入几何必需位错的计算。再比如形核机制现在只是简单阈值触发完全可以改成基于局部应变能密度的概率模型。总的来说这代码像个乐高套装基础功能搭好了但留足了魔改空间。下次打算试试把各向异性加进去看看晶粒会不会沿着特定方向生长。有同好想一起折腾的话代码扔在Github上了地址假装这里有记得star一下啊

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价