PharmaPy 干法制粒二次开发教程11粉碎模块③——选择函数 S_i 与破碎函数 B_ij 参数化与筛网内分级版本声明块工具/软件本项目二次开发的破碎参数化本系列二次开发示例非官方 API语言/环境Python 3.9 numpy/scipyscipy.special与np.interp筛网截断本文目标把篇 10 的骨架换成有物理血肉的S_i/B_ij并引入筛网孔径截断可破碎档。一句话结论选择函数S_i S_ref·(x_i/x_ref)^q·ω_scale(转子速)随粒径幂律上升、随叶轮转速放大操作依赖破碎函数B_ij用局部崩解 多重碎裂的分支子粒分布且其累积服从 GGS 型Y100(x/k)^α并令筛网孔径把x_i筛孔的档直接送破碎、≤筛孔档保留——三者合成后在篇 10 的solve_ivp里跑出粗粒右移、被筛上限封顶的合理 PSD。〇、本篇要解决的认知问题S_i多快碎与B_ij碎成什么样为什么该分开参数化各自的操作依赖是什么选择函数随粒径幂律上升直觉上对不对叶轮转速是怎么进来的破碎函数的分支子粒分布局部崩解与多重碎裂泛碎裂区别在哪GGS 子粒分布怎么写筛网在破碎 PBM 里到底怎么截断是挡住大档还是把大档强制变碎参数化完之后我怎么判断 PSD 输出是合理的右移 上限封顶而不是乱七八糟一、机制解析S_i与B_ij的分工速率 vs 形态前面两条铁律性事实底账 C2S_i受操作条件转速强烈影响B_ij相对不敏感。这是把两者分开建模的根本动机——也是篇 17 参数标定时把S_i各转速分别标、B_ij全转速共用一个的依据。分工一句话S_i告诉你哪些档、多快被碎B_ij告诉你碎了之后碎成什么尺度分布。选择函数S_i粒径幂律 操作放大物理直觉大的颗粒更脆、更容易被撞碎→S_i随x_i增大而增大普遍用幂律S_i S_ref·(x_i/x_ref)^qq0典型 0.6~1.2。这里的x_ref/S_ref是参考粒径处的比破碎速率是标定量。而操作依赖尤其叶轮尖端速度前述锥磨决定细粉的最大因素底账 C1用一个ω_scale乘子进来ω_scale (u_tip/u_ref)^p叶轮转越快单位时间穿透、撞击次数越多破碎速率同比放大。Dickson 把S_ref标成转速的函数即可。这样S_i就同时含粒径依赖幂律与操作依赖转速乘子两条轴与真实粉碎一致——同一配方转速越高碎得越多、细粉越多。破碎函数B_ij分支子粒分布局部崩解 vs 多重碎裂真实破碎不是只变成两颗而是多种碎裂模式并存。Reynolds2010底账 C5对制药锥磨提出通用碎片分布函数可看成两种极端模式的叠加局部崩解surface/edge chipping母粒只崩掉几个小碎片剩余核心仍接近母粒大小 → 产生细粉 保留粗核。多重碎裂 / 泛碎裂massive breakage母粒整体碎成较均匀的若干子粒 → 产生拉宽的中间峰。工程上常用一个分支系数把两者按比例混合母粒以β份额整体碎裂成人n个体积均分子粒多重碎裂以(1−β)份额只崩出少量小碎片局部崩解。子粒的累积分布尤其常用GGSGaudin-Schuhmann表述Y100(x/k)^α底账 C4k是粒度模数≈最大子粒尺寸/母粒尺寸的函数α是分布陡度。GGS 的好处是一条对数轴的直线、斜率即α标定非常直观测出子粒 PSD取对数线性回归就得k、α。序列提示GGS 的姊妹 RRB 形F(d)1−exp(−(d/λ)^k)在篇 14PSD 报告层与 lognormal 一起作为拟合家族的候选本篇先用 GGS 描述子粒分布因为它直接定义了母粒碎成多大的子粒这个破碎函数本体。筛网截断可破碎档而非滤掉大粒关键澄清在粉碎机本体里筛网是破碎几何约束——x_i大于筛孔的那几档不属于能直接通过的稳定粒它们会在转子撞击 过筛挤压下继续破碎或至少被判定为必碎而x_i不超过筛孔的档是可稳定存活的。所以模型里我们用筛网孔径mesh把S_i对x_imesh的档截断放大工程近似的做法是把这些档设为必碎、即S_i置大并把B_ij的子粒上限封在mesh附近。这样最终 PSD 的右上端被筛孔压住——这正是锥磨给出一致上限粒径、收窄 PSD底账 C1的数值体现。边界真实性铁律S_i幂律指数q、B_ij分支比β、GGS 的k/α都由物料与磨机标定篇 17 反演本篇用示意参数演示结构和趋势不宣称通用数值。二、完整代码与逐行剖析下面是真实可运行的参数化示例定义选择函数粒径幂律 转速放大 筛网截断与破碎函数分支 GGS 子粒分布再灌进篇 10 的solve_ivp求 PSD最后做合理右移 上限封顶行为断言。importnumpyasnpfromscipy.integrateimportsolve_ivp# ---- 网格同篇10铁律5----x_lo,x_hi,numbins10.0,2000.0,40ratio(x_hi/x_lo)**(1.0/(numbins-1))x_grx_lo*ratio**np.arange(numbins)x_cnp.sqrt(x_gr[:-1]*x_gr[1:])dxx_gr[1:]-x_gr[:-1]nbnumbins-1volx_c**3.0# ---- 1) 选择函数粒径幂律 叶轮转速放大 筛网截断 ----defselection(x_c,x_ref500.0,S_ref0.5,q1.0,rpm_tip2000.0,rpm_ref2000.0,p1.2,mesh1000.0):SS_ref*(x_c/x_ref)**q# 粒径幂律SS*(rpm_tip/rpm_ref)**p# 操作依赖(rpm)Snp.where(x_cmesh,10.0,S)# 筛网截断mesh 必碎(示意)returnS# ---- 2) 破碎函数分支(多重碎裂局部崩解) GGS 子粒分布 ----defbreakage_ggs(x_c,beta0.6,alpha0.7,mesh1000.0):nx_c.size Bnp.zeros((n,n))forjinrange(n):xmx_c[j]# GGS 累计子粒分布Y(x)100(x/k)^αk 与母粒尺寸成正比k0.5*xm# 多重碎裂子粒均匀撒在 [小端:k]用 GGS 累积求每档份额fracnp.zeros(n)foriinrange(j1):# 只到母粒档(ij)Y_i(x_c[i]/k)**alphaifk0else0.0upper(x_gr[i1]/k)**alpha frac[i]min(1.0,upper)-min(1.0,Y_i)# 档内 GGS 累计增量fracfrac/frac.sum()# 归一保证 ΣB_ij1# 有份额的档被筛网截断压到 meshallowedx_cmesh fracnp.where(allowed,frac,0.0)fracfrac/frac.sum()B[:j1,j]frac[:j1]returnB Sselection(x_c)Bbreakage_ggs(x_c)# ---- 3) PBM 积分复用篇10----defpbm_rhs(t,N):returnnp.dot(B,S*N)-S*N N0np.zeros(nb)N0[x_c600.0]1.0# 较宽的进料带≤600µmN0[x_c600.0]*0.0# (示意) 初值以中细档为主M0np.sum(N0*vol)solsolve_ivp(pbm_rhs,(0.0,20.0),N0,methodBDF,rtol1e-8,atol1e-10)Nfsol.y[:,-1]driftabs(np.sum(Nf*vol)-M0)/M0print(f守恒漂移 {drift:.2e})assertdrift1e-6# ---- 4) 行为断言合理右移 上限封顶 ----abovex_c1000.0belowx_c100.0print(f1000µm 质量份额初/末:{np.sum(N0[above]*vol[above])/M0:.3f}- f{np.sum(Nf[above]*vol[above])/np.sum(Nf*vol):.3f})print(f100µm 质量份额末:{np.sum(Nf[below]*vol[below])/np.sum(Nf*vol):.3f})assertnp.sum(Nf[above]*vol[above])/np.sum(Nf*vol)1e-9,筛网应把1000µm压没print(OK守恒 筛上限封顶 右移破碎参数化合理)逐行要点selection三段的顺序即两条轴先粒径幂律再转速乘子最后筛网截断把mesh档S_i置10.0必碎示意。mesh就是筛网孔径如 Comil 的 G043 或 1.0 mm 锉纹筛底账 C1 给G040 锉纹筛≈1.0mm等工程上把它当 PSD 右上限。breakage_ggs用 GGS 累积分布Y(x/k)^α求每档份额k0.5·x_m让最大子粒约为母粒一半示意frac归一保证Σ_i B_ij1守恒代数篇 10 铁律。筛网在破碎函数里的第二个作用allowed x_cmesh把B_ij中子粒仍筛孔的档清零再归一保证碎产物也被封在筛下。这是筛网同时管上限粒径与破碎程度的数值落地。行为断言分两半守恒1e-6上限封顶1000µm份额压到1e-9。至于右移看输出的100µm/粗档对比受初值影响练习 3 给平带的严格右移验收。这是参数化演示S_ref/q/p/β/α/k全为示意参数正文与注释反复标注以标定/文献为准真实性铁律。三、常见报错与排查筛网截断后守恒崩了。现象加Snp.where(x_cmesh,10,B)后drift变大。根因把S_i置10.0是快速破碎而非直接消失——S_i只影响速率不消灭质量但若你的B_ij没同步把子粒压到筛下母粒可能碎出的也是筛孔最终仍有粗粒存留导致守恒看着怪。解法确认breakage_ggs里allowed的frac清零再归一第 2 步让破碎产物也被封顶守恒应该仍1e-6。S_i幂律指数q给太大小档数字退化。现象q2.0时x_c50的S_i趋近 0几乎不碎把 PSD锁死在细端。根因幂律对细粒衰减过快比破碎速率被低估。解法把q控制在典型范围0.6~1.2或用带下限的S_iS_ref·max((x/x_ref)^q, S_floor)避免细档完全冻住。子粒全落在母粒所在档导致碎了个寂寞。现象B_ij对角近 1播完Nf≈N0行为断言不触发。根因breakage_ggs的k给太大/α给太小GGS 累计在母粒邻档就饱和子粒几乎留在母粒档。解法检查k0.5·x_m这类最大子粒≈母粒一半的设定并让frac覆盖到更小的档必要时k更小、α更大拉陡分布。mesh和x_c交错封顶判断失败。现象1000µm断言没压到1e-9。根因mesh用了筛网孔径的名义值但x_c是几何中心——x_c[-1]~1576µm与mesh1000之间还有档若allowed只处理恰好mesh会留尾巴。解法明确筛孔对应 bin 上界用x_gr节点而非x_c中心判断或在断言里留1e-3量级的合理残存工程余量。转速p乘子把S_i顶到指数爆炸、ODE 刚性加剧。现象rpm_tip很大时S_i有些档 1solve_ivp步长骤小变慢。根因操作放大无上限速率不在同一量级。解法给S_i设上限如clip到50.0或 mesh 区间的必碎值再收紧atol物理上无限快的破碎也无意义。四、动手练习守恒回归把mesh换800/1200 µm、β换0.3/0.9各跑一遍确认drift1e-6均成立。判定守恒与参数值无关只与B_ij归一的代数结构有关——证明你的破碎函数对任何参数都不偷质量。筛网敏感性固定其余参数扫描mesh[800,1000,1200]并打印 PSD 的右端质量份额。判定mesh越大右端越有余量、越小越压越紧三者单调——还原筛网孔径定上限粒径可作篇 16 工艺窗口的先验。转速敏感性右移验收用平带初值N0[x_c1200]11200为 0rpm_tip[1000,2000,4000]各跑一遍打印125µm细粉份额。判定转速越高细粉份额越大右移/细化增强且全工况drift1e-6——这正是锥磨叶轮尖端速度决定细粉的模型化体现也为篇 16 细粉 CQA 埋线。五、小结与下一篇预告本篇把破碎骨架填上物理血肉S_i粒径幂律×转速放大×筛网截断B_ij分支多重碎裂局部崩解×GGS 子粒分布×筛下限制并在守恒与上限封顶/右移断言下验证。你已掌握分离、“速率 vs 形态”、且筛网同时管上限粒径与破碎程度这两条主线——这套S_i/B_ij/mesh三件套就是今后参数标定篇 17的待估对象。下一篇篇 12《分级模块Tromp 分级效率与切割粒径》——破碎之后进入分级用 Tromp 曲线量化某个粒径进粗流/细流的比例算 d50 切割粒径并看清开路/闭路返料循环物流在 flowsheet 里怎么搭。本篇认知问题回显FAQQ1为什么 S_i 和 B_ij 要分开参数化各自依赖什么A1铁律性事实是S_i受操作条件转速强烈影响、B_ij相对不敏感底账 C2。所以S_i把粒径幂律q与操作叶轮转速乘子都放进去B_ij只需描述碎了之后的子粒尺度分布跨转速可共用。这直接决定篇 17 标定时转速分开标S_i、全转速共用B_ij。Q2选择函数随粒径幂律上升直觉对吗转速怎么进来A2对的——大颗粒更脆更易被撞碎S_i S_ref·(x_i/x_ref)^qq典型 0.6~1.2。转速通过乘子(u_tip/u_ref)^p进来叶轮尖端速度越高单位时间撞击/过筛挤压越多破碎速率同比放大。两轴合起来即同配方转速越高碎得越多、细粉越多锥磨叶轮尖端速度定细粉底账 C1。Q3局部崩解 vs 多重碎裂区别GGS 子粒分布怎么写A3局部崩解只崩掉少量小碎片、核仍近母粒产细粉保留粗核多重碎裂整体碎成多个较均匀子粒拉宽中间峰。用分支系数β混合两者。子粒累积分布用 GGSY100(x/k)^αk粒度模数≈最大子粒、α陡度取对数成直线、斜率即α标定直观。Q4筛网在破碎模型里怎么截断A4不是滤掉大粒而是几何约束——x_i筛孔的档判定为必碎把其S_i截断置大本篇置10.0同时把B_ij中子粒仍筛孔的档清零使碎产物也被封在筛下。两处共同作用让最终 PSD 右上端被筛孔压住 锥磨一致上限粒径、收窄 PSD。Q5怎么判断 PSD 输出合理右移 上限封顶A5两套断言①守恒drift1e-6恒成立只与B_ij归一结构有关与参数无关②上限封顶mesh质量份额1e-9筛网压头③右移/细化用平带初值扫rpm_tip转速越高125µm细粉份额越大。三者同时满足才算参数化合理。
阅读完成 · 觉得有帮助?