OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之 kineticTheoryModel

OpenFOAM 中双流体模型的 kineticTheoryModel 是以 “ Derivation, implementation, and validation of computer simulation models for gas-solid fluidized beds, B.G.M. van Wachem, Ph.D. Thesis, Delft University of Technology, Amsterdam, 2000. “ 为蓝本来设计的,下面分析这个类的代码。需要注意的是,这个类需要调用一些别的类(如 viscosityModel 等,后面会一一分析)来完成其功能。

Read More

C++ 中派生类引用与基类引用的隐式转换

在读 OpenFOAM 代码过程中,有一类应用初看之下觉得很费解,比如 OpenFOAM-2.3.x 的 twoPhaseEulerFoam,createFields.H 有这么一段:

1
2
3
4
5
phaseModel& phase1 = fluid.phase1();
phaseModel& phase2 = fluid.phase2();

volScalarField& alpha1 = phase1;
volScalarField& alpha2 = phase2;

乍看之下,感觉有点奇怪:怎么能将 phaseModel 类的引用直接赋值给 volScalarField 类的引用呢?后来查看了一下 phaseModel 类的定义,发现原来 phaseModel 类是 volScalarField 类的派生,由此上面代码就好理解了,无非是将派生类引用赋值给基类引用而已。

Read More

在 CentOS 上安装 OpenFOAM

本篇记录我在 CentOS 上编译安装 OpenFOAM 的过程。我需要在不能联网且没有 root 权限的集群上使用OpenFOAM ,最早的时候,我使用的是 centFOAM project 提供的 64bit CentOS 安装包,这个很方便,把压缩包下载,解压,然后配置一下环境变量就可以了。但是后来 centFOAM 好像不再更新了,所以我只好尝试着自己编译。

由于集群上缺少一些 OpenFOAM 依赖的包,要是一个一个去下载源码编译以补齐那些依赖的包,实在很费劲,所以我采取了另一种尝试:在虚拟机里安装跟集群上一样的系统,然后在虚拟机里编译好 OpenFOAM ,再拷贝到集群上去用(据信 cenoFOAM project 提供的安装包也是在虚拟机编译好的,而且在 cfd-online 论坛上也见有人推荐这么做)。我尝试过在 CentOS 5.4 ,CentOS 6.3 以及 Scientific Linux 6.5 上安装过 OpenFOAM-2.3.x,都成功了,过程大同小异。下面是我的安装过程的一个简要记录。

Read More

OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之曳力模型的调用过程

前面有三篇博文对 OpenFOAM-2.1.x 中的 twoPhaseEulerFoam 求解器进行了解读,然而 OpenFOAM-2.3.x 中,这个求解器的代码有了很大的变化。本文将以一个曳力模型的调用过程为例,介绍 OpenFOAM-2.3.x 中 twoPhaseEulerFoam 是如何调用相间作用力模型的。后续还将对 OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 的其他方面进行解读。

Read More

vim Extension for OpenFOAM

本篇介绍一个vim 插件,该插件会自动检测某个文件是否是 OpenFOAM 的设置文件,然后根据预设的颜色显示方案来对大部分的 OpenFOAM 关键字进行高亮显示。单凭这一个特性,还不至让我专门写一篇博文来介绍它,真正让我觉得实用的是另外一个附带的特性:关键字补全。安装此插件以后,可以在用 vim 编辑 OpenFOAM 设置文件的时候对 OpenFOAM 的很多关键字,包括边界条件,湍流模型,离散格式等等进行自动补全,下面对这个插件和基本功能进行一个简单介绍。

Read More

在 Windows 7 下配置 OpenFOAM 运行环境

本篇介绍如何在 Windows 7 64 bit 下配置 OpenFOAM 的编译及运行环境。我并不打算在 windows 下进行 OpenFOAM 的开发,这里的折腾仅仅是作为一种测试,想看看目前的 OpenFOAM for windows 安装能做到什么程度。我使用的是Creative Fields提供的安装包,编译环境是基于 Mingw-64 来搭建的,linux模拟环境采用的是 MSYS,终端使用的是 mintty。经过一番折腾,我成功在 Windows 下安装了OpenFOAM-2.3.0,程序可以串行或并行运行,也可以用 wmake 编译新的代码。本篇博文不会一步一步详细介绍我的搭建过程,仅介绍一些基本的原则以及我遇到的坑。尤其注意的是,以下很多步骤其实对于安装 OpenFOAM for Windows 不是必需的,仅仅是因为我的特殊要求而徒增折腾而已。

Read More

foamTimeAverage

前面的一篇博文中,我介绍了fieldAverage这个functionObject的用法,其中提到, 可以用window这个参数来控制所计算的时均值的时间范围。如果 base = timewindow = 10,那从第10s以后,每个时刻 t 输出的时均值其实相当于从 t-10 到 t 这个时间段内的时均值。但是,根据分析可以发现,这个时均值并不严格等价于从 t-10 时刻到 t 时刻某个场的时均值。有时候,需要从某个时刻才开始计算时均值,而fieldAverage没有参数可以控制从某个时刻才开始计算时间平均。于是我参照OpenFOAMpatchAverage.C的代码写了一个后处理程序,用来计算指定时间段内的某个场的时均值。

Read More