非线性涡粘性模型编译问题
-
问题描述
各位前辈和同学们大家好,我最近在尝试在基于k-epsilon的涡粘性模型中加入非线性项的影响,于是在OpenFoam中找到了一些非线性涡粘性模型如下
使用的OpenFoam版本为com版的OpenFOAM-v2012看到ShihQuadraticKE的方程和我想要的形式比较契合,于是乎便考虑对ShihQuadraticKE进行修改后尝试编译一个新的湍流模型,我准备的文件如下
files
、options
和maketurbulentTransportModels.C
代码如下
files:maketurbulentTransportModels.C LIB = $(FOAM_USER_LIBBIN)/NonlinearEVM/libNonlinearKE_TEST
options:
EXE_INC = \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/transportModels LIB_LIBS = \ -lturbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lincompressibleTransportModels
maketurbulentTransportModels.C:
#include "turbulentTransportModels.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // defineTurbulenceModelTypes ( geometricOneField, geometricOneField, incompressibleTurbulenceModel, IncompressibleTurbulenceModel, transportModel ); makeBaseTurbulenceModel ( geometricOneField, geometricOneField, incompressibleTurbulenceModel, IncompressibleTurbulenceModel, transportModel ); #include "nonlinearEVM_TEST.H" makeRASModel(nonlinearEVM_TEST);
nonlinearEVM_TEST.C
和nonlinearEVM_TEST.C
都和ShihQuadraticKE源码一样
但是wmake编译后出现了这样的错误:In file included from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/typeInfo.H:60:0, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/token.H:49, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/UILListIO.C:31, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/UILList.H:462, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/ILList.H:42, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/IDLList.H:37, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/entry.H:48, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/dictionary.H:92, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/baseIOdictionary.H:46, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/IOdictionary.H:44, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/TurbulenceModels/turbulenceModels/lnInclude/turbulenceModel.H:44, from /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/TurbulenceModels/turbulenceModels/lnInclude/TurbulenceModel.H:40, from IncompressibleTurbulenceModel.H:42, from turbulentTransportModels.H:28, from maketurbulentTransportModels.C:28: turbulentTransportModels.H:54:51: error: ‘Foam::RASModels’ has not been declared (transportModelIncompressibleTurbulenceModel, RAS, Type) ^ /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/className.H:93:24: note: in definition of macro ‘defineTypeNameWithName’ const ::Foam::word Type::typeName(Name) ^~~~ /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/className.H:114:5: note: in expansion of macro ‘defineTemplateTypeNameWithName’ defineTemplateTypeNameWithName(Type, Type::typeName_()) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/className.H:137:5: note: in expansion of macro ‘defineNamedTemplateTypeName’ defineNamedTemplateTypeName(Type); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/TurbulenceModels/turbulenceModels/lnInclude/makeTurbulenceModel.H:116:5: note: in expansion of macro ‘defineNamedTemplateTypeNameAndDebug’ defineNamedTemplateTypeNameAndDebug \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ turbulentTransportModels.H:53:5: note: in expansion of macro ‘makeTemplatedTurbulenceModel’ makeTemplatedTurbulenceModel \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ maketurbulentTransportModels.C:53:1: note: in expansion of macro ‘makeRASModel’ makeRASModel(nonlinearEVM_TEST); ^ /home/ezylinux/OpenFOAM/OpenFOAM-v2012/src/TurbulenceModels/turbulenceModels/lnInclude/makeTurbulenceModel.H:117:35: error: expected initializer before ‘<’ token (Foam::SType##Models::Type<Foam::BaseModel>, 0); ......
后面比较长,但都是差不多一样的,我感觉主要的问题出在这一句
turbulentTransportModels.H:54:51: error: ‘Foam::RASModels’ has not been declared
首先报错的地方在
turbulentTransportModels.H
的54行,说Foam::RASModels
没有被声明我的认识和思路
我对OF代码架构的了解十分有限,并不是很清楚这句话意味着什么,但循着这条线索走下去,我还是发现了一些可能相关的原因,在我这个版本的OF中,RANS湍流模型的架构是这样的
因为我之前对此版本的标准kEpsilon模型成功进行修改和编译过,说明我编译湍流模型的流程应该没啥结构性问题。因此从这点出发,我对比了kEpsilon和ShihQuadraticKE源码的差别,大致查看了
kEpsilon.H
可以发现,kEpsilon
类的位置在这里Foam::RASModels
namespace Foam { namespace RASModels { template<class BasicTurbulenceModel> class kEpsilon : public eddyViscosity<RASModel<BasicTurbulenceModel>> ......
kEpsilon
类通过makeRASModel(kEpsilon)
实现模板特化,这也与前面maketurbulentTransportModels.C
最后两行代码对应。而在
ShihQuadraticKE.H
中可以发现ShihQuadraticKE
的位置在这里Foam::incompressible::RASModels
namespace Foam { namespace incompressible { namespace RASModels { class ShihQuadraticKE : public nonlinearEddyViscosity<incompressible::RASModel> ......
这就和
kEpsilon
的声明不同了,根据OpenFOAM之道上的解释
再结合前面的error: ‘Foam::RASModels’ has not been declared
错误提示,我就在想是不是因为kEpsilon和ShihQuadraticKE继承关系的差别导致这个错误呢?
详见此图:RANSModel的继承关系
maketurbulentTransportModels.C
中的makeRASModel(Type)
是不是也不能这样用了呢?因为在turbulentTransportModels.C
源码中的RANS模型全都是src\TurbulenceModels\turbulenceModels\RAS
中的,没有ShihQuadraticKE这些非线性模型困惑与总结
可是我编译的文件
files
、options
和maketurbulentTransportModels.C
中也没有涉及到继承关系的代码,我不知道该从哪里改起了,这个问题困扰我好久了没有进度,在本站,cfd-online等网站上也没找到相关问题。
总之,此贴主要可以归结为一句话:
src\TurbulenceModels\incompressible\turbulentTransportModels\RAS
目录下的RANS模型(类的位置Foam::incompressible::RASModels
)应该如何编译,与src\TurbulenceModels\turbulenceModels\RAS
下的RANS模型(类的位置Foam::RASModels
)编译时有何区别? -
写的很详细,提供的信息很多。
于是乎便考虑对ShihQuadraticKE进行修改后尝试编译一个新的湍流模型
如果你只是简单这个想法的话:
-
把ShihQuadraticKE文件夹复制一边,重命名AAA;
-
把AAA文件夹里面的ShihQuadraticKE.C/H,改成AAA.C/H
-
把AAA.C/H里面的
ShihQuadraticKE
关键字替换成AAA
-
去src/MomentumTransportModels/incompressible/Make/files里面,把你的AAA模型加进去:
incompressibleMomentumTransportModel.C kinematicMomentumTransportModels/kinematicMomentumTransportModels.C kinematicMomentumTransportModels/RAS/qZeta/qZeta.C kinematicMomentumTransportModels/RAS/kkLOmega/kkLOmega.C kinematicMomentumTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.C kinematicMomentumTransportModels/RAS/LienLeschziner/LienLeschziner.C kinematicMomentumTransportModels/RAS/ShihQuadraticKE/ShihQuadraticKE.C kinematicMomentumTransportModels/RAS/AAA/AAA.C kinematicMomentumTransportModels/RAS/LienCubicKE/LienCubicKE.C LIB = $(FOAM_LIBBIN)/libincompressibleMomentumTransportModels
- 在
src/MomentumTransportModels
下编译Allwmake
-