求问:OpenFOAM如何读取脉谱数据呢?
-
@strive_dut 你问的第一个问题是怎么把外部数据导入OpenFOAM参与计算:
利用 C++程序语言将正庚烷-氮气混合物气液平衡数据库转化为 OpenFoam 可以调用和读取的脉谱数据
我说的可以解决这个问题。
你的第二个问题是求解过程中如何使用脉谱数据:
每执行一个时间步,我都需要调用这个脉谱数据来对比计算域的每个单元的数据,然后对于需要部分单元的数据采用两相参数进行重新求解
这个是关于如何 选用求解器 或者 修改求解器 的问题了。选用求解器得看需求。
另外,我又看了看你的图,大概想象到,你想要在计算过程中随时根据当前点的温度和压力得到那个质量分数?
如果是这样,可以把那个面拟合成个函数写到求解器里需要用的位置。
或者把散点数据输入OpenFOAM,使用时再插值,得到任意一点的值。不知道哪个更快
-
@bestucan 老师,您好,求解器是已经编译好的了,只是需要加入这个热力学状态判定过程。您分析的是对的,您说的将散点数据输入到OpenFOAM进行插值,可以具体一点吗?
我的具体问题是:在数值模拟计算过程中,根据压力从混合物临界温度脉谱中读取混合物临界温度;根据压力和温度在饱和液相正庚烷质量分数脉谱中读取液相中正庚烷质量分数;根据压力和温度在饱和气相正庚烷质量分数脉谱中读取气相中正庚烷质量分数,然后在OpenFoam 中实现正庚烷-氮气混合物热力学状态的判定过程。最后,根据判定结果可获得混合物中气相、液相和超临界相的质量分数,用于进一步混合物热力参数的计算。
判定流程如下:
-
@strive_dut 关于那两张图,如果没有原始数据,只有数据点。那得选差值方法,可以看看这个 。
这样插值了之后再读入OpenFOAM(按我第一回帖说的方法),就是查表法获得数值了。如果是在OpenFOAM里插值,没做过,估计是C++手动实现那些插值算法。比较麻烦。
那两张图可能就是用实验测得的数据点拟合出来的(因为比较光滑)。
也可以用现有的数据点,把那两张图拟合成函数表达式。可以看看这个。
这样把求解器里的 $X_c$出现的位置换成拟合出的函数就行了:
FX_c(temperature, pressure)
-
@strive_dut 不是识别呀,就是,你给出的流程图中,读取完$X_c$之后就开始$Z_c$与$X_c$做比较了。哪里用到$X_c$,就把$X_c$替换成其拟合出的函数。
if (Zc >= Xc) { ... } else { ... }
换成
if (Zc >= FXc(temperature, pressure)) { ... } else { ... }
温度和压力要取该网格的?还是该区域的?看具体情况。
至于这个
FXc()
函数怎么定义float FXc(float temperature, pressure) { result = ...// matlab拟合出来的函数,如何用温度和压力计算质量分数 return result; }
-
通过将我的求解器求出的压力和温度传递给函数FXc(float temperature, pressure),然后在函数中可以得到具体的Xc或者Yc值
是的。
因为求解过程中每个网格单元的温度和压力都是在不断变化的,那我的拟合函数应该是一个曲面的数据吧?
是的,就是你第一个帖子里的那两个曲面(其实就是用函数表达那两个曲面图)