动态再结晶CA法模拟基础之元胞机的邻居类型及边界条件

动态再结晶CA法模拟基础之元胞机的邻居类型及边界条件

元胞自动机的邻居类型:由于元胞的转变规则只作用于元胞空间的局部范围内,即元胞下一时刻的状态取决于其邻居元胞的状态。因此,在定义元胞转变规则之前,必须定义元胞的邻居类型。在晶粒模拟的过程中常常使用二维元胞自动机邻居定义规则(可扩展至三维),常使用的有4邻居类型和8邻居类型。即中心元胞下一时刻的状态取决于(下图1){C2、C4、C6、C8}(4邻居),(下图2)中心元胞下一时刻的状态取决于{C1、C2、C3、C4、C6、C7、C8、C9}
在这里插入图片描述 图1
在这里插入图片描述图2
元胞自动机的边界类型:考虑到元胞空间在各个维度方向上的无限伸展,而任何模拟都无法做到对无限延展这一特性进行模拟。因此,需要引入适当的边界条件来近似表达元胞的这一特性。常用的有:

  1. 周期性边界条件:边界两边的元胞状态呈现周期性连接,在一维空间内表现为首尾相连,二维空间内表现为上下相接,左右相连构成封闭空间。(晶粒模拟常用的是这一种,如下图3)

  2. 反射型边界条件:边界两边的元胞状态以边界为轴呈镜像反射。

  3. 定值型边界条件:边界以外元胞状态取某一确定的值,而与边界内元胞状态无关。

在这里插入图片描述图3 4邻居型边界条件设置

(对应视频讲解可在B站同名查询)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
由于动态再结晶过程比较复杂,我将为你提供一个简化版本的晶粒长大的元胞自动机模型,代码如下: ```python import numpy as np import matplotlib.pyplot as plt # 设置模型参数 n = 100 # 空间尺寸 m = 10 # 晶粒数量 k = 4 # 晶粒长大速率 steps = 50 # 模拟步数 # 初始化晶粒分布 grain_map = np.zeros((n, n)) for i in range(m): x, y = np.random.randint(0, n), np.random.randint(0, n) grain_map[x, y] = i + 1 # 定义元胞自动机模型 def evolve(grain_map, k): new_grain_map = np.zeros_like(grain_map) for i in range(n): for j in range(n): if grain_map[i, j] == 0: neighbors = [] for ii in range(i-1, i+2): for jj in range(j-1, j+2): if ii == i and jj == j: continue if ii < 0 or jj < 0 or ii >= n or jj >= n: continue if grain_map[ii, jj] != 0: neighbors.append(grain_map[ii, jj]) if len(neighbors) > 0: counts = np.bincount(neighbors) max_count = np.max(counts) max_grains = np.where(counts == max_count)[0] new_grain_map[i, j] = np.random.choice(max_grains) else: new_grain_map[i, j] = grain_map[i, j] if np.random.rand() < k: neighbors = [] for ii in range(i-1, i+2): for jj in range(j-1, j+2): if ii == i and jj == j: continue if ii < 0 or jj < 0 or ii >= n or jj >= n: continue if grain_map[ii, jj] != 0: neighbors.append(grain_map[ii, jj]) if len(neighbors) > 0: counts = np.bincount(neighbors) max_count = np.max(counts) max_grains = np.where(counts == max_count)[0] new_grain_map[i, j] = np.random.choice(max_grains) return new_grain_map # 运行模拟 for i in range(steps): grain_map = evolve(grain_map, k) # 可视化结果 plt.figure(figsize=(8, 8)) plt.imshow(grain_map, cmap='jet') plt.axis('off') plt.show() ``` 这个模型中,我们假设晶粒在周围的高温区域中长大。在每个时间步长中,我们首先计算出每个空白细胞周围的晶粒数量,然后将其赋值为周围晶粒数量最多的晶粒之一。然后,对于每个已存在的晶粒,我们以速率$k$使其长大,并在周围的空白细胞中随机选择一个晶粒进行复制。 这个模型只是一个简单的例子,如果你想要更加真实的动态再结晶过程模拟,你需要更多的实验数据和更复杂的模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H222222222255

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值