在 FiPy 包中扫描中选择的 dt 更改解决方案的时域?
Chosen dt in sweep in FiPy package changes time domain of solution?
我目前正在尝试求解具有 18 个 PDE 和 ODE 的大型 PDE 系统(这就是我使用 FiPy 而不是 scipy 中的 odeint 的原因)。
其中一个方程式非常简单:dROS/dt = 0.06 我按如下方式实现:
eqn_ROS = ( TransientTerm(var=ROS) == 0.06 )
所需的时间范围是从 o 到 3650,所以我用这种方法求解,使用扫描(我在这里只写了一个方程的更新):
for t in range(3650):
ROS.updateOld()
res = 1e10
while res > 0.1:
res = eqn_ROS.sweep(var=ROS, dt=1e-5)
正如我期望得到 ROS = 0.06t 的图,当我绘制这张 ROS 与 t 的图时(从使用 TSVviewr 创建的 tsv 文件中产生正确的值之后),t 轴确实是从 0 到 3650,然而,ROS 值比预期小得多,与所需值 36500.06 不匹配。
我必须补充一点,我已经尝试用相同的扫描 dt 单独求解这个方程,但值是错误的。
会不会是我选择的sweep dt导致的?或者我完全误解了其他东西?
提前致谢!
[已回答 on GitHub。请在一个位置或另一个位置询问,但不能同时询问]
您正在执行 3650 步,大小为 1e-5,总持续时间为 3.65e-2,因此我预计 ROS 最后为 0.00219,结果就是这样。
这个方程在ROS中是线性的,所以不用扫
我目前正在尝试求解具有 18 个 PDE 和 ODE 的大型 PDE 系统(这就是我使用 FiPy 而不是 scipy 中的 odeint 的原因)。 其中一个方程式非常简单:dROS/dt = 0.06 我按如下方式实现:
eqn_ROS = ( TransientTerm(var=ROS) == 0.06 )
所需的时间范围是从 o 到 3650,所以我用这种方法求解,使用扫描(我在这里只写了一个方程的更新):
for t in range(3650):
ROS.updateOld()
res = 1e10
while res > 0.1:
res = eqn_ROS.sweep(var=ROS, dt=1e-5)
正如我期望得到 ROS = 0.06t 的图,当我绘制这张 ROS 与 t 的图时(从使用 TSVviewr 创建的 tsv 文件中产生正确的值之后),t 轴确实是从 0 到 3650,然而,ROS 值比预期小得多,与所需值 36500.06 不匹配。
我必须补充一点,我已经尝试用相同的扫描 dt 单独求解这个方程,但值是错误的。
会不会是我选择的sweep dt导致的?或者我完全误解了其他东西?
提前致谢!
[已回答 on GitHub。请在一个位置或另一个位置询问,但不能同时询问]
您正在执行 3650 步,大小为 1e-5,总持续时间为 3.65e-2,因此我预计 ROS 最后为 0.00219,结果就是这样。
这个方程在ROS中是线性的,所以不用扫