首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FiPy -域扩展/帧增长

FiPy -域扩展/帧增长
EN

Stack Overflow用户
提问于 2016-10-28 18:03:51
回答 1查看 117关注 0票数 1

我试图在深度( h(t) )随时间变化的区域上求解一个简单的扩散方程(dT/dt =Kd2T/dx2)。因此,由此得出的方程式是:

代码语言:javascript
复制
dT/dt = K/h^2 d2T/dx2 + z/h dh/dt dT/dz

其中z现在是一个固定的0->1域。

新的术语是框架平流,我试着把它包括在内,但是我在努力地处理空间相关系数。

当我把它包含在对流项之外时:

代码语言:javascript
复制
mesh.cellCenters[0]*PowerLawConvectionTerm(...)

我知道这个错误:

代码语言:javascript
复制
TermMultiplyError: Must multiply terms by int or float

但是如果我重新组织方程,空间依赖在对流项内:

代码语言:javascript
复制
PowerLawConvectionTerm(coeff=(mesh.cellCenters[0]**2,),...)

在求解方程时,我得到了一个不同的错误:

代码语言:javascript
复制
AssertionError: assert( len(id1) == len(id2) == len(vector) )

包含这些术语的正确方法是什么?我在某处犯了一个愚蠢的错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-31 14:48:27

解决这一问题的最佳方法可能是将最后一个项分成两部分,以便编写FiPy中的方程。

代码语言:javascript
复制
fipy.TransientTerm() == fipy.DiffusionTerm(K / h**2) \
                        + fipy.ConvectionTerm(z * z_hat * h_t / h) \
                        - h_t / h * T

在FiPy中,在项的导数之外不可能有乘子,因此需要一个额外的源项。这里的假设是

代码语言:javascript
复制
K = 1. ## some constant
h = fipy.Variable(...) ## variable that is continuously updated
h_old = fipy.Variable(...) ## variable that is continuously updated
h_t = (h - h_old) / dt ## variable dependent on h and h_old
T = fipy.CellVariable(...)
z_hat = [0, 1] ## vector required for convection term coefficient

T是正在求解的变量,hh_old在每一次扫描或时间步骤中都根据一定的公式使用setValue进行说明性更新。此外,最后一个术语可以分为显式源和隐式源。

代码语言:javascript
复制
- h_t / h * T -> - fipy.ImplicitSourceTerm(1 / dt) + h_old / h / dt * T

取决于如何计算h_t。隐式源应该使解决方案非常稳定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40310806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档