gpt4 book ai didi

python - FiPy - 域拉伸(stretch)/框架增长

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:24 32 4
gpt4 key购买 nike

我正在尝试在深度 ( 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 是要求解的变量,hh_old 在每次扫描或时间步长时使用 setValue< 显式更新 基于一些公式。此外,最后一项可以分为显式源和隐式源

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

取决于h_t的评估方式。隐式源应该使解决方案非常稳定。

关于python - FiPy - 域拉伸(stretch)/框架增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40310806/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com