是否可以解决表格上的问题
除了边界外,网格上的源项在任何地方都为零,这在 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 是速率常数。假设除了两相相交的边界外没有相变。在我的示例代码中,我只是设置了一个常量值,因为我主要想知道如何只在边界上获取源项,我知道如果它在我认为的整个网格上如何表示这个源。第二相的浓度是在另一个网格上用类似的方程单独计算的。这也应该在其右边界具有相同类型的源项,符号相反,以确保质量守恒。