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新版本湍流模型编译

openfoam新版本湍流模型编译

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

    openfoam湍流模型的架构貌似和老版本很不一样?最近需要对openFOAM中的湍流模型做一些修改,于是先拿网上的一个修改kEpsilon模型的例子来练手。。将openFOAM4.1版本中的kEpsilon文件夹拷出,目前只对kEpsilon.H和kEpsilon.C文件的文件名和类名进行了修改,得到了DurbinV2F.H和DurbinV2F.C文件。编译的files文件和options文件如下:
    files

    V2F/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究竟是在哪里编译了这些湍流模型:zoule:
    另外,新版本openfoam中添加湍流模型应该怎么做呢:zoule:
    求各位大神解惑。。

    1 条回复 最后回复
  • L 离线
    L 离线
    lllwonderliquid
    写于 最后由 编辑
    #2

    已解决。。在GitHub上找到了例子,照着做就ok..GitHub大法好

    https://github.com/BjarkeEltardLarsen/RANS_stableOF50

    一 S 2 条回复 最后回复
  • L 离线
    L 离线
    lllwonderliquid
    写于 最后由 编辑
    #3

    继续求救:zoule: 最近试图对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函数上,是否是我这个函数的写法有问题?在网上搜也未得到解释方法,请问各位有碰到类似情况的吗?望各位大神不吝赐教:zoule:

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

    const volScalarField& alpha2= this->mesh_.lookupObject<volScalarField>("alpha.vapour");

    看了几遍,确实没问题啊

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

    1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    写于 最后由 编辑
    #5
    const volScalarField& alpha1 = 
    (
        this->mesh_.objectRegistry::template
        lookupObject<volScalarField>("alpha.water")
    );
    const volScalarField& alpha2 = 
    (
        this->mesh_.objectRegistry::template
        lookupObject<volScalarField>("alpha.vapour")
    );
    
    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #6

    嗯,第一次见楼上这么用 :zoule:

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

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

    我试了一下,确实可行。 @lllwonderliquid 你试试?
    研究研究,还没这么用过。

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

    1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 李东岳 最后由 编辑
    #8

    @东岳

    C++编译器在编译类模板时采用的是 two-phase lookup 的策略, 对于 lookupObject 这种带模板参数的函数,调用时必须在前面加 template 或 typename 。

    参考:
    https://stackoverflow.com/questions/610245/where-and-why-do-i-have-to-put-the-template-and-typename-keywords

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

    我一直都是这么用的:?const volScalarField& alpha2= mesh_.lookupObject<volScalarField>("alpha.vapour");

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

    1 条回复 最后回复
  • L 离线
    L 离线
    lllwonderliquid
    写于 最后由 编辑
    #10

    参照@wwzhao 前辈的做法·,果然编译通过了,目前正在测试中,开心^-^。非常感谢!
    其实还有问题想问两位前辈,对于一个刚接触openfoam代码改写的人,应该如何去慢慢掌握of中的代码结构、风格,以及各种类的用法?目前的我一打开Of中的某.C文件就有些懵逼。。

    1 条回复 最后回复
  • L 离线
    L 离线
    lllwonderliquid
    写于 最后由 编辑
    #11

    @东岳 前辈,貌似我改写的那几行在3.0之前的版本这么用可以编译成功T-T,看到别人在2.4.0这么用过
    const volScalarField& alpha2= mesh_.lookupObject<volScalarField>("alpha.vapour");

    W 1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 lllwonderliquid 最后由 编辑
    #12

    @lllwonderliquid

    改写的那几行在3.0之前的版本这么用可以编译成功

    3.0版本之前没有这个问题。3.0版本的湍流模型框架重写了,所有的湍流模型都变成了类模板,所以在类中调用函数模板时需要加 template 或 typename。

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

    我在OpenFOAM-5.x中也是这么写的 const volScalarField& alpha2= mesh_.lookupObject<volScalarField>("alpha.vapour");

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

    W 1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 李东岳 最后由 编辑
    #14

    @东岳

    我在OpenFOAM-5.x中也是这么写的

    你是在类模板中这么用的么?

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

    我测试了下。原来类模板中都要写成这种形式:

    const volScalarField& alpha1 = 
    (
        this->mesh_.objectRegistry::template
        lookupObject<volScalarField>("alpha.water")
    );
    

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

    1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    写于 最后由 编辑
    #16

    对于一个刚接触openfoam代码改写的人,应该如何去慢慢掌握of中的代码结构、风格,以及各种类的用法?

    OpenFOAM 用了大量的 OO 和 GP 编程思想,如果没有这方面的基础,代码阅读起来会比较吃力。并且读代码之前也需要一定的 CFD 理论基础。

    • 代码结构:Google "Five Basic Classes in OpenFOAM",这个是比较入门的,理解了这个文档中提及到的几个类就可以算的上是入门了。

    • 代码风格:OpenFOAM Foundation 推出过一个编码风格,见这里。

    • 类的用法:多读源码,cpp-guide。

    1 条回复 最后回复
  • L 离线
    L 离线
    lllwonderliquid
    写于 最后由 编辑
    #17

    @wwzhao 非常感谢前辈的指点^-^

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

    确实是个新知识!
    const volScalarField& alpha2= mesh_.objectRegistry::template lookupObject<volScalarField>("alpha.vapour");

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

    1 条回复 最后回复
  • H 离线
    H 离线
    Hungryandfool
    写于 最后由 编辑
    #19

    今天早上按照楼主的回复,正好是我要的湍流模型呀!我正在看这篇JFM文章。

    1 条回复 最后回复
  • 一 离线
    一 离线
    一颗鸭蛋
    在 中回复了 lllwonderliquid 最后由 编辑
    #20

    @lllwonderliquid 能加个朋友嘛?也遇到添加湍流模型编译问题,交流交流

    L 1 条回复 最后回复

  • 登录

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