python实现BSM1仿真中运行代码的详解(2)
本文介绍了活性污泥法废水处理模拟中的关键概念和计算方法,重点讲解了氧转移系数KLa及其影响因素。文章首先阐述了KLa的定义及其在溶解氧传递中的重要性,分析了曝气器类型、曝气强度、水深和搅拌强度等因素对KLa的影响。接着详细说明了KLa的计算方法,包括基于溶解氧浓度变化的监测方法。在技术实现层面,文章展示了异养菌好氧生长速率的计算过程、各组分转化速率的推导方法,以及如何构建包含流入、流出和反应项的微
🌞欢迎来到人工智能的世界
🌈博客主页:卿云阁💌欢迎关注🎉点赞👍收藏⭐️留言📝
🌟本文由卿云阁原创!
🌠本阶段属于练气阶段,希望各位仙友顺利完成突破
📆首发时间:🌹2025年9月6日🌹
✉️希望可以和大家一起完成进阶之路!
🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!
目录

asm.py
整体结构


asm1equations
一个基于ASM1 (Activated Sludge Model No.1) 的常微分方程组求解函数,是活性污泥法废
水处理模拟的核心。它的主要任务是计算反应器中21个关键组分的瞬时浓度变化率,这些变化率由
流入流出、生物反应和曝气过程共同决定。
在正式的学习之前我们先掌握一个概念叫做Kla:
它描述了在单位体积的液体中,单位时间内的氧气传递速率与液相中氧气浓度亏欠(即饱和浓
度与实际浓度之差)之间的关系
氧转移系数KLa是一个综合参数,它反映了气液界面上氧气从气相传递到液相的速率。具体来
说,KLa是氧气传质速率与气液界面处氧气浓度差之间的比例关系,其单位为时间负一次方。在数
学表达式中,KLa通常表示为:

在这种情况下,曝气开始的瞬时,水中溶解氧的浓度将以 每小时 70 mg/L 的速率增加。那就是说
kla越大,说明溶解氧的增加效率越高。
影响kla的主要因素是什么啊?
曝气器的类型:不同的曝气器,如微孔曝气头、射流曝气器或机械搅拌曝气机,产生气泡的方
式和大小不同,会极大地影响氧气传递效率。一般来说,气泡越小,总表面积越大,KLa 越高。曝
气强度(或供气量):单位时间内向水中通入的空气量越多,产生的气泡数量越多,气液接触面积
就越大,因此 KLa 会随之增大。
反应器操作条件
反应器的操作方式也会影响 KLa。
水深:水越深,气泡在上升过程中停留的时间越长,传递效率越高,因此 KLa 通常会随水深增
加。搅拌强度:在机械曝气系统中,搅拌速率会影响气泡的分散和水体的湍流程度。适当的搅拌可
以增加传质速率,提高 KLa。
这个值是我们可以人为控制的吗?
调整搅拌速度: 在机械曝气或搅拌曝气池中,提高搅拌速度能增强水体湍流,使气泡更均匀地分
散,从而提高传质效率和KLa。
控制液位深度: 在一定范围内,增加曝气池的水深会延长气泡在水中停留的时间,使其有更多机
会传递氧气,通常能提高KLa。
Kla如何计算?
这种方法基于这样一个事实:当向水中通入气体时,溶解氧(DO)的浓度会从一个较低的初
始值逐渐升高,并最终接近饱和溶解氧浓度。我们可以通过监测这段时间内DO的变化来计算。

如何控制?

手算模拟:
计算反应速率:
# proc1:异养菌好氧生长速率(利用SS,以氧为电子受体)
proc1 = mu_H * (ytemp[SS] / (K_S + ytemp[SS])) * (ytemp[SO] / (K_OH + ytemp[SO])) * ytemp[XBH]

我们上面已经输入和当前容器中各个反应物的浓度,所以这里的话是直接可以算出来的。
各组分转化速率
# 溶解氧(SO):被异养菌好氧生长和自养菌生长消耗
reac[SO] = -(1.0 - Y_H) / Y_H * proc1 - (4.57 - Y_A) / Y_A * proc3

这里的转换速率的话,也是可以算出来的。
构建微分方程(物质平衡:流入-流出 + 反应项)
假设kla大于0的话:
if kla >= 0.0:
dy[SO] = (1.0 / volume) * (y_in[Q] * (y_in[SO] - y[SO])) + reac[SO] + KLa_temp * (SO_sat_temp - y[SO])

这里的物质平衡的话,也是可以算出来的。

carbonaddition
SS 是一个特殊情况,因为投加的碳源本身就含有SS。因此,其新浓度不仅受到稀释的影
响,还增加了碳源带来的SS量。

ASM1reactor类:

odeint 的作用是数值求解常微分方程组。
常微分方程(Ordinary Differential Equation, ODE)描述的是一个变量关于另一个变量的瞬时
变化率。比如在 ASM1 模型中,我们用 dy/dt 来表示每个组分浓度随时间的变化率。
最简单的例子:匀速直线运动
假设我们有一个小球,以恒定的速度 v 沿着直线运动。它的位置 x 随时间 t 的变化率(即速
度)是一个常数。

import numpy as np
from scipy.integrate import odeint
def linear_motion(x, t, v):
"""返回位置x随时间t的变化率 (dx/dt)"""
dxdt = v
return dxdt
# 定义参数
v = 2.0 # 速度 2.0 m/s
x0 = 0.0 # 初始位置 0.0 m
t = np.linspace(0, 10, 11) # 时间从0到10秒,共11个点
# 调用 odeint 求解
# func: linear_motion 函数
# y0: 初始位置 x0
# t: 时间数组 t
# args: 额外参数 (v,)
x_solution = odeint(linear_motion, x0, t, args=(v,))
print("时间点 (t):", t)
print("位置 (x):", x_solution.flatten())
aerationcontrol.py


更多推荐
所有评论(0)