FiPy - 域拉伸/帧增长
FiPy - Domain stretches / Frame growth
我正在尝试在深度 ( h(t) ) 随时间变化的域上求解一个简单的扩散方程 (dT/dt = K d2T/dx2 )。因此,得到的等式是:
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.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
是要求解的变量,h
和 h_old
根据某些公式使用 setValue
在每次扫描或时间步长时明确更新。此外,最后一项可以分为显式和隐式来源
- h_t / h * T -> - fipy.ImplicitSourceTerm(1 / dt) + h_old / h / dt * T
取决于 h_t
的计算方式。隐式源应该使解决方案非常稳定。
我正在尝试在深度 ( h(t) ) 随时间变化的域上求解一个简单的扩散方程 (dT/dt = K d2T/dx2 )。因此,得到的等式是:
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.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
是要求解的变量,h
和 h_old
根据某些公式使用 setValue
在每次扫描或时间步长时明确更新。此外,最后一项可以分为显式和隐式来源
- h_t / h * T -> - fipy.ImplicitSourceTerm(1 / dt) + h_old / h / dt * T
取决于 h_t
的计算方式。隐式源应该使解决方案非常稳定。