FiPy 使用 FiPy 模拟抽水

问题描述

我正在尝试在我想模拟扩散和平流的域中使用 Fipy 模拟抽水。水从一个提取,并在另一个点排出。但是,我在边界条件的定义方面遇到了问题。

enter image description here

其中 q 是流量(常数),h 是深度(常数),C 是浓度(瞬态),Lx 和 dx 是经度(常数)。

首先,我定义方程 (2D Navier-Stokes) 来计算速度场。特别是,我在表面施加压力 = 零,在吸入/排放区施加垂直速度(与泵的标称流量相关),在底部施加速度 = 零。

enter image description here

关于域中的“质量”传输,我引入了质量通量作为边界条件(但是,我遇到的一个问题是我无法引入水通量,因此我无法考虑稀释)。

>

enter image description here

我有一些问题:

  • 在定义固定通量边界条件时,系数 (q/Lx) 是否可以大于 1?我认为 FiPy 从边界旁边的单元格中获取“质量”,因此,如果大于 1,它会导致负浓度(在我的情况下这是不可能的)。
  • 是否可以移动细胞以置换水量?
  • 是否可以考虑单元格的“体积”以在顶部边界应用稀释?

这是我的代码

coeff_in = (q / Lx_in)
coeff_out = (q / Lx_out)

eqC = (TransientTerm(var = C) == # Transient term
        DiffusionTerm(coeff = D,var = C) # Diffusion term
        - ConvectionTerm(coeff = Vf,var = C) # Convection term
        + (coeff_out * face_out * (C.faceValue)).divergence # Bottom Boundary Condition (fixed-flux); flow
        + (coeff_in * face_in * Cinput).divergence # Top Boundary Condition (fixed-flux); flow
        )

但这会产生(显然!)顶部的质量集中和底部提取。直观地说,如果所有网格中的浓度相同,则底部不应该改变(因为体积被提取然后质量被置换)并且顶部应该降低其浓度(因为引入了较低浓度的水并且是与最高浓度混合)。

解决方法

问:在定义固定通量边界条件时,系数 (q/Lx) 是否可以大于 1?我认为 FiPy 从边界旁边的细胞中获取“质量”,因此,如果大于 1,它会导致负浓度(在我的情况下这是不可能的)。

您需要调整时间步长以确保 CFL condition 保持小于 1(最好保持 CFL

问:是否可以移动细胞以置换水量?

我想您是在问是否可以使用拉格朗日(移动网格)方法?不,不容易。 FiPy 是欧拉代码。

问:是否可以考虑单元格的“体积”以在顶部边界应用稀释?

您不应该在放电处集中质量;这就是通量所表示的。我不太确定如何处理纯水的流入。这似乎相当于该边界处溶质的零通量。似乎您需要一个水浓度模型,即使您最终没有明确解决它。它可以像 一样简单。在这种情况下,底部流入的纯水通量应该等于 流出底部 的通量。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...