【MFix】用particle_input.dat自定义指定初始颗粒位置的要点

旧版particle_input.dat(MFiX-20.3以前,新版本也兼容)

particle_input.dat中的信息

根据官方指南描述
在这里插入图片描述从左到右每列的含义是(对于2D)
x坐标
y坐标
半径(注意是半径,GUI里给的是直径)
密度
速度u分量
速度v分量

单位都是SI

要点

要点:

1 particle_input.dat要和GUI solids里指定的密度和直径相对应

MFiX就是靠这个分辨颗粒的相的。

例如我给了两个颗粒:一个是生物质,一个是沙子。生物质密度562,沙子密度2640

在这里插入图片描述

在particle_input.dat文件中本身是没法区分哪个是生物质,哪个是沙子的。

但是根据GUI中给定的密度和直径,MFiX可以在particle_input.dat找到与其相对应的值

例如
在这里插入图片描述这样就可以分辨哪个是沙子,哪个是生物质了。

注意,如果没有完全对应密度直径,运行时会报错。

报错如下
在这里插入图片描述

PS:我想大概这也是为什么GUI里会在上面显示Diamter 和 Density两项。

2 要在solid中指定颗粒数目,这个数目可以小于particle_input中的数目。

GUI中指定颗粒数目
在这里插入图片描述或mfix.dat中关键字指定颗粒数目
在这里插入图片描述

3 要关闭自动颗粒生成

4 要在IC中指定组分分数

尤其注意,你的颗粒在哪个IC区域,它就会根据哪个IC区域的组分分数来指定。

5 注意颗粒位置 不能让在particle_input中指定的颗粒重叠

否则会运行时报错

报错如下
在这里插入图片描述

待续。。。。

新版particle_input.dat(MFiX-20.3以后)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段程序是用来初始化粒子群优化算法的粒子的位置、速度、成本等信息的函数。下面对每一行代码进行解释: 1. `function [GlobalBest, particle] = initialize(problems, params)`:定义了一个名为 `initialize` 的函数,输入参数为 `problems` 和 `params`,输出参数为 `GlobalBest` 和 `particle`。 2. `nVar = problems.nVar;`:获取问题的变量个数。 3. `VarMin = problems.VarMin;`:获取问题中每个变量的最小值。 4. `VarMax = problems.VarMax;`:获取问题中每个变量的最大值。 5. `nPop = params.nPop;`:获取粒子群的个体数量。 6. `VarSize = [1 nVar];`:定义一个大小为 1 行 nVar 列的矩阵 VarSize,用来表示每个粒子的位置和速度的大小。 7. `empty_particle.Position = [];`:定义一个空粒子,包含位置、速度和成本。 8. `empty_particle.Velocity = [];` 9. `empty_particle.Cost = [];` 10. `empty_particle.Best.Position = [];`:定义空粒子的历史最优位置和最优成本。 11. `empty_particle.Best.Cost = [];` 12. `particle = repmat(empty_particle, nPop, 1);`:使用 repmat 函数将空粒子复制 nPop 次,得到一个大小为 nPop 行 1 列的粒子矩阵。 13. `GlobalBest.Cost = inf;`:初始化全局最优成本为无穷大。 14. `for i=1:nPop`:对于每个粒子进行循环。 15. `particle(i).Position = unifrnd(VarMin, VarMax, VarSize);`:将第 i 个粒子的位置初始化为在 VarMin 和 VarMax 之间均匀分布的随机值。 16. `particle(i).Velocity = zeros(VarSize);`:将第 i 个粒子的速度初始化为大小为 VarSize 的零向量。 17. `particle(i).Cost = CostFunction(particle(i).Position);`:计算第 i 个粒子的成本,即将其位置传入成本函数中计算得到。 18. `particle(i).Best.Position = particle(i).Position;`:将第 i 个粒子的历史最优位置初始化为其当前位置。 19. `particle(i).Best.Cost = particle(i).Cost;`:将第 i 个粒子的历史最优成本初始化为其当前成本。 20. `if particle(i).Best.Cost < GlobalBest.Cost`:如果第 i 个粒子的历史最优成本小于全局最优成本。 21. `GlobalBest = particle(i).Best;`:将全局最优位置更新为第 i 个粒子的历史最优位置。 22. `end`:结束 for 循环。 23. `end`:结束函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值