当枝晶在代码里野蛮生长
Comsol仿真模型。 锂枝晶生长过程的枝晶形貌,温度场耦合,应力场,浓度场,电势场。 C++程序,基于元胞自动机法模拟枝晶生长,能实现任意角度(偏心正方算法),同时采用LBM考虑了对流作用对枝晶生长的影响。
锂枝晶的仿真就像在微观世界架设多台高速摄像机。COMSOL的多物理场耦合能力让温度场带着浓度场跳探戈,应力场和电势场时不时来个即兴solo。看这个电解质温度梯度引发的浓度漩涡,像极了咖啡拉花时奶泡的流动轨迹。
玩过像素游戏的应该知道元胞自动机的套路——每个格子根据邻居状态决定生死。但传统的四邻域判断(上、下、左、右)会让枝晶长得像俄罗斯方块。咱们的偏心正方算法给每个方向加了"重力加速度":
vector<pair<int, int>> EccentricSquare(int range) {
vector<pair<int, int>> neighborhoods;
for (int dx = -range; dx <= range; ++dx) {
for (int dy = -range; dy <= range; ++dy) {
// 斜对角线方向权重加倍
double weight = (dx * dy != 0) ? 2.0 : 1.0;
if (rand()/(RAND_MAX+1.0) < weight*ANGLE_FACTOR) {
neighborhoods.emplace_back(dx, dy);
}
}
}
return neighborhoods;
}
这个二维数组遍历暗藏玄机:斜对角方向的探测概率是正方向的2倍,让枝晶可以45度角突进。就像用圆规在网格上戳洞,每次扩展都带着概率性的叛逆。

Comsol仿真模型。 锂枝晶生长过程的枝晶形貌,温度场耦合,应力场,浓度场,电势场。 C++程序,基于元胞自动机法模拟枝晶生长,能实现任意角度(偏心正方算法),同时采用LBM考虑了对流作用对枝晶生长的影响。
当LBM(格子玻尔兹曼方法)加入战场,流体开始教枝晶做人。下面这段D2Q9模型的速度场计算,活脱脱是流体力学版的贪吃蛇:
void Stream(vector<double>& f) {
vector<double> tmp(f.size());
for (int q = 0; q < 9; ++q) {
int nx = (i + cx[q] + NX) % NX;
int ny = (j + cy[q] + NY) % NY;
tmp[INDEX(nx, ny, q)] = f[INDEX(i, j, q)];
}
swap(f, tmp);
}
每个格子的粒子分布函数沿着9个方向迁移,带着动量撞击枝晶表面。我在边界处理函数里偷偷加了湍流因子,让枝晶尖端时不时被涡流扇个耳光,生长方向变得难以预测。
仿真结果总让人想起珊瑚礁的延时摄影——当流场强度超过阈值,枝晶突然集体跳起机械舞,分叉角度从60度锐减到30度。某个实验参数下甚至出现了莫比乌斯环状的畸形枝晶,活像微观世界的交通事故现场。

这种跨尺度仿真最魔幻的时刻,是看着COMSOL导出的应力云图与C++生成的分形图在Python里完成击掌。某次对比实验里,流场涡旋导致枝晶生长速度出现13%的偏差,这误差刚好等于楼下咖啡店拉花失败的概率。
更多推荐
所有评论(0)