我试图解一个简单的扩散方程(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) )
如何正确地包含这些术语?我是不是犯了个愚蠢的错误?你知道吗
解决这个问题的最佳方法可能是将最后一项分成两部分,这样就可以写出FiPy中的方程
在FiPy中,在项的导数之外不能有乘数,因此需要一个额外的源项。这里假设
T
是要求解的变量,h
和h_old
在每个扫描或时间步使用setValue
基于某些公式进行显式更新。此外,最后一项可以分为显式源和隐式源取决于
h_t
的计算方式。隐式源应该使解非常稳定。你知道吗相关问题 更多 >
编程相关推荐