【问题标题】:Derivative terms in FipyFipy 中的导数
【发布时间】:2018-03-30 21:48:35
【问题描述】:

对于包含在 FiPy 中不能表示为(至少以任何明显方式)对流或扩散的导数的术语,正确的方法是什么?例如,在一个 PDE 系统中,在坐标为 x,y 的二维区域上求解函数 u_i,其中一个方程包含项

u_2 * \partial_x u_1

鉴于 x 和 u_i 是单元变量,我可以将其表示为源:

eq = ... + fipy.tools.numerix.dot(x.grad,u_1.grad) * u_2

但是,由于在 FiPy 中计算梯度的方式,x.grad 是一个向量,除了与 x 边界直接相邻的单元格之外,x.grad 是一个值为 (1,0) 的向量,在该处它变为 (2,0)。这意味着我必须从一开始就使用向量 (1,0) 而不是 x.grad 。但是在这一点上,我不确定 u_1.grad 是否会在边界处具有正确的值来代表我的术语,而且很可能,我的整个方法是不正确的。我应该怎么做才能表示这样一个术语?

【问题讨论】:

  • 获得\partial_x u_1 的方法本身是fipy.tools.numerix.dot([[1],[0]], u_1.grad),但请参阅my answer 了解获得半隐式项的正确方法

标签: fipy


【解决方案1】:

[编辑答案以反映所提出的问题]

等价于,在 FiPy 中呈现为:

eq = ... + fp.ImplicitSourceTerm(coeff=fp.tools.numerix.dot([[1], [0]], u1.grad), var=u2)

【讨论】:

  • 谢谢!但是从fipy文档中,我认为 DiffusionTerm 总是对应于二阶导数,因此 fp.DiffusionTerm(coeff=u2*(((1., 0.), (0., 0.)),), var =u1) 将代表 \partial_x (u_2 \partial_x u_1) 。不是这样吗?
  • 绝对!我很抱歉。我已经更正了我的回答,以反映您的实际要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 2021-07-27
  • 2021-10-03
相关资源
最近更新 更多