是否可以仅在 FiPy 中在外边界上添加源术语?

问题描述 投票:0回答:0

是否可以解决表格上的问题

除了边界外,网格上的源项在任何地方都为零,这在 FiPy 中如何表示?

我有一个方程式,到目前为止我已经在一维中求解,源项在任何地方都设置为零。但是现在我想在网格的左侧 (x=0) 添加一个汇项 (

sink
)。但是,我无法让它完全按照我的意愿工作。

由于汇正好位于边界处,因此将面的值限制为

sink
是有意义的。然而,这仍然会导致全零解决方案,并且我认为面值实际上不应该以这种方式使用。如果我改为将第一个单元格中心的值设置为
sink
,那么我会在我期望的表格上得到一个解决方案。然而现在水槽实际上并不边界。

是否可以准确地在边界处获取source/sink?

这里是一个代码示例,其中通量N由一个简单的Fickian扩散方程定义:

  L = 20                            # thickness
  nx = 100                          # number of mesh points
  dx = L/nx                         # distance between mesh points
  mesh = Grid1D(nx = nx, dx = dx)   # 1D grid of length L

  sink = -10

  c = CellVariable(mesh = mesh, name = r'$c_i$')
  c.constrain(100, mesh.facesRight)

  diffusionCoefficient = CellVariable(mesh = mesh, value = 5, name = r'$D_i$')

  sourceTerm = CellVariable(mesh = mesh, name = r'$S_i$')
  #sourceTerm.constrain(sink, mesh.facesLeft)
  sourceTerm[0] = sink

  eq = DiffusionTerm(coeff = -diffusionCoefficient, var = c) == sourceTerm

  eq.solve()

  viewer = Matplotlib1DViewer(vars = c)
  viewer.plot()
  input('Press return to continue')

编辑:问题的数学表达式和边界条件

描述物种 i 扩散的 PDE 是

源项定义为

描述了边界上从 i 到 j 的相变,其中 cj 是第二相(例如液体/蒸气)中相同物质的浓度。 K 是速率常数。假设除了两相相交的边界外没有相变。在我的示例代码中,我只是设置了一个常量值,因为我主要想知道如何只在边界上获取源项,我知道如果它在我认为的整个网格上如何表示这个源。第二相的浓度是在另一个网格上用类似的方程单独计算的。这也应该在其右边界具有相同类型的源项,符号相反,以确保质量守恒。

differential-equations fipy
© www.soinside.com 2019 - 2024. All rights reserved.