Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 非线性涡粘性模型编译问题

非线性涡粘性模型编译问题

已定时 已固定 已锁定 已移动 OpenFOAM
3 帖子 2 发布者 1.4k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • E 离线
    E 离线
    EZY
    写于 最后由 EZY 编辑
    #1

    问题描述

    各位前辈和同学们大家好,我最近在尝试在基于k-epsilon的涡粘性模型中加入非线性项的影响,于是在OpenFoam中找到了一些非线性涡粘性模型如下
    QQ图片20221120190601.png
    使用的OpenFoam版本为com版的OpenFOAM-v2012

    看到ShihQuadraticKE的方程和我想要的形式比较契合,于是乎便考虑对ShihQuadraticKE进行修改后尝试编译一个新的湍流模型,我准备的文件如下
    fa056ad4-7ba6-4605-a26f-ca0d3464b8c0-image.png
    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没有被声明17bf55ec-c8ac-4bfb-8879-d0955538a953-image.png

    我的认识和思路

    我对OF代码架构的了解十分有限,并不是很清楚这句话意味着什么,但循着这条线索走下去,我还是发现了一些可能相关的原因,在我这个版本的OF中,RANS湍流模型的架构是这样的
    f73beaa1-9e34-4b2c-bee4-fecfed2687a8-image.png

    因为我之前对此版本的标准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之道上的解释
    2377c30f-3699-4f95-8b45-d1597fcc219c-image.png
    再结合前面的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)编译时有何区别?

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #2

    写的很详细,提供的信息很多。

    于是乎便考虑对ShihQuadraticKE进行修改后尝试编译一个新的湍流模型

    如果你只是简单这个想法的话:

    1. 把ShihQuadraticKE文件夹复制一边,重命名AAA;

    2. 把AAA文件夹里面的ShihQuadraticKE.C/H,改成AAA.C/H

    3. 把AAA.C/H里面的ShihQuadraticKE关键字替换成AAA

    4. 去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
    
    1. 在src/MomentumTransportModels下编译Allwmake

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    E 1 条回复 最后回复
  • E 离线
    E 离线
    EZY
    在 中回复了 李东岳 最后由 编辑
    #3

    @李东岳 感谢东岳老师提供的思路,我在代码中把ShihQuadraticKE改了个名,目前在源文件中用Allwmake编译成功了。
    不过孩子还是很不明白怎么单独拿出来编译这类非线性湍流模型,看来暂时只能通过这种方式代替了。

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]