openfoam新版本湍流模型编译
-
openfoam湍流模型的架构貌似和老版本很不一样?最近需要对openFOAM中的湍流模型做一些修改,于是先拿网上的一个修改kEpsilon模型的例子来练手。。将openFOAM4.1版本中的kEpsilon文件夹拷出,目前只对kEpsilon.H和kEpsilon.C文件的文件名和类名进行了修改,得到了DurbinV2F.H和DurbinV2F.C文件。编译的files文件和options文件如下:
filesV2F/DurbinV2F.C LIB = $(FOAM_USER_LIBBIN)/libaddedRASModels
options
EXE_INC = \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ LIB_LIBS = \ -lfiniteVolume \ -lmeshTools
但是,编译器却返回:
g++ -std=c++0x -m64 -Dlinux64 -DWM_ARCH_OPTION=64 -DWM_DP -DWM_LABEL_SIZE=32 -Wall -Wextra -Wold-style-cast -Wnon-virtual-dtor -Wno-unused-parameter -Wno-invalid-offsetof -O3 -DNoRepository -ftemplate-depth-100 -I/opt/openfoam4/src/TurbulenceModels/turbulenceModels/lnInclude -I/opt/openfoam4/src/finiteVolume/lnInclude -I/opt/openfoam4/src/meshTools/lnInclude -IlnInclude -I. -I/opt/openfoam4/src/OpenFOAM/lnInclude -I/opt/openfoam4/src/OSspecific/POSIX/lnInclude -fPIC -c V2F/DurbinV2F.C -o Make/linux64GccDPInt32Opt/V2F/DurbinV2F.o V2F/DurbinV2F.C:40:6: error: redefinition of ‘void Foam::RASModels::DurbinV2F<BasicTurbulenceModel>::correctNut()’ void DurbinV2F<BasicTurbulenceModel>::correctNut() ^ In file included from V2F/DurbinV2F.H:212:0, from V2F/DurbinV2F.C:26: V2F/DurbinV2F.C:40:6: error: ‘virtual void Foam::RASModels::DurbinV2F<BasicTurbulenceModel>::correctNut()’ previously declared here void DurbinV2F<BasicTurbulenceModel>::correctNut()
等等 告诉我 redefinition 了。
失败后我想看看kEpsilon原本对应的Make文件夹。。但是奇怪的是发现turbulenceModels这个文件夹下面的files文件里并没有kEpsilon.C,包括常见的RNG、SSTkOmega等也没有,翻了其他文件夹下的files也没发现,老版本的openfoam里turbulenceModels文件夹下面的files是指定了kEpsilon.C的。这就非常疑惑了,新版本openfoam究竟是在哪里编译了这些湍流模型
另外,新版本openfoam中添加湍流模型应该怎么做呢
求各位大神解惑。。 -
已解决。。在GitHub上找到了例子,照着做就ok..GitHub大法好
-
继续求救 最近试图对SST k-w模型做一些修改。。其中有几行代码是试图读入场中的一些变量以及transportProperties文件中设置的一些常量。这几行代码如下:
const volScalarField& alpha1= this->mesh_.lookupObject<volScalarField>("alpha.water"); const volScalarField& alpha2= this->mesh_.lookupObject<volScalarField>("alpha.vapour"); const dictionary& transportProperties= this->mesh_.lookupObject<IOdictionary>("transportProperties"); const dictionary& phase1= transportProperties.subDict("water"); const dictionary& phase2= transportProperties.subDict("vapour"); const dimensionedScalar& rho1 = phase1.lookup("rho"); const dimensionedScalar& rho2 = phase2.lookup("rho");
但是编译的时候却报了这个错误:
lnInclude/modkOmegaSSTBase.C:42:69: error: expected primary-expression before ‘>’ token const volScalarField alpha1= this->mesh_.lookupObject<volScalarField>("alpha.water"); ^ lnInclude/modkOmegaSSTBase.C:43:69: error: expected primary-expression before ‘>’ token const volScalarField alpha2= this->mesh_.lookupObject<volScalarField>("alpha.vapour"); ^ lnInclude/modkOmegaSSTBase.C:59:78: error: expected primary-expression before ‘>’ token const dictionary& transportProperties= this->mesh_.lookupObject<IOdictionary>("transportProperties"); ^ make: *** [Make/linux64GccDPInt32Opt/makeTurbModel.o] 错误 1
error: expected primary-expression before ‘>’ token
这些错误都发生在lookupObject函数上,是否是我这个函数的写法有问题?在网上搜也未得到解释方法,请问各位有碰到类似情况的吗?望各位大神不吝赐教 -
参照@wwzhao 前辈的做法·,果然编译通过了,目前正在测试中,开心^-^。非常感谢!
其实还有问题想问两位前辈,对于一个刚接触openfoam代码改写的人,应该如何去慢慢掌握of中的代码结构、风格,以及各种类的用法?目前的我一打开Of中的某.C文件就有些懵逼。。 -
@东岳 前辈,貌似我改写的那几行在3.0之前的版本这么用可以编译成功T-T,看到别人在2.4.0这么用过
const volScalarField& alpha2= mesh_.lookupObject<volScalarField>("alpha.vapour");
-
改写的那几行在3.0之前的版本这么用可以编译成功
3.0版本之前没有这个问题。3.0版本的湍流模型框架重写了,所有的湍流模型都变成了类模板,所以在类中调用函数模板时需要加
template
或typename
。 -
-
@wwzhao 非常感谢前辈的指点^-^
-
今天早上按照楼主的回复,正好是我要的湍流模型呀!我正在看这篇JFM文章。
-
@lllwonderliquid 能加个朋友嘛?也遇到添加湍流模型编译问题,交流交流