FiPy域延伸/帧增长

2024-10-02 12:26:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

dT/dt = K/h^2 d2T/dx2 + z/h dh/dt dT/dz

其中z现在是一个固定的0->;1域。你知道吗

新的术语是框架平流,我试图把它也包括进来,但我在和空间相关的系数作斗争。你知道吗

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

mesh.cellCenters[0]*PowerLawConvectionTerm(...)

我得到这个错误:

TermMultiplyError: Must multiply terms by int or float

但如果我重新组织方程,使空间相关性在对流项内:

PowerLawConvectionTerm(coeff=(mesh.cellCenters[0]**2,),...)

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

AssertionError: assert( len(id1) == len(id2) == len(vector) )

如何正确地包含这些术语?我是不是犯了个愚蠢的错误?你知道吗


Tags: 区域len错误时间dt空间术语方程
1条回答
网友
1楼 · 发布于 2024-10-02 12:26:04

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

fipy.TransientTerm() == fipy.DiffusionTerm(K / h**2) \
                        + fipy.ConvectionTerm(z * z_hat * h_t / h) \
                        - h_t / h * T

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

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基于某些公式进行显式更新。此外,最后一项可以分为显式源和隐式源

- h_t / h * T -> - fipy.ImplicitSourceTerm(1 / dt) + h_old / h / dt * T

取决于h_t的计算方式。隐式源应该使解非常稳定。你知道吗

相关问题 更多 >

    热门问题