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
15 帖子 2 发布者 9.6k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • F 离线
    F 离线
    fangyuanaza
    在 中回复了 李东岳 最后由 编辑
    #3

    @李东岳 谢谢李老师一早就回复学生! 改成k_()还是报一样的错误:
    9fb78b75-9a1d-4dde-9776-a9b5876eeede-image.png

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

    @fangyuanaza 去掉fvc::Susp试试?

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

    F 1 条回复 最后回复
  • F 离线
    F 离线
    fangyuanaza
    在 中回复了 李东岳 最后由 编辑
    #5

    @李东岳 李老师好~ 这样的话((2.0/3.0)*alpha()*rho()*divU, k_()) + (alpha()*rho()*epsilonByk(F1, F23), k_) 不报错啦,但是后面的ddt(alphat, rho, k_) 去掉fvc::,就不能用ddt来进行对时间的求导了,后面的div(alphaRhoPhi, k_)也会报错:
    b16c6725-4e6e-44c6-ba6e-a70aeb7ed814-image.png
    3d3acb26-93ad-4d8f-96c3-327ecfc3001f-image.png

    F 1 条回复 最后回复
  • F 离线
    F 离线
    fangyuanaza
    在 中回复了 fangyuanaza 最后由 编辑
    #6

    @fangyuanaza 后面保留fvc也会出现跟前面一样的错误 no matching function for call .....
    还测试过仿照李老师之前的建议改成k_(), 也是不行

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 fangyuanaza 最后由 编辑
    #7

    @fangyuanaza 你索性把::Internal去掉就不会有问题了 然后你在Internal出来内部场

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

    F 2 条回复 最后回复
  • F 离线
    F 离线
    fangyuanaza
    在 中回复了 李东岳 最后由 编辑
    #8

    @李东岳 李老师,不好意思,是我没有说清楚。我之前没有用internal,直接定义velScalarField residual = ..., 计算完之后我再update boundary的值。我在V 2.4.0也是这么做的,这里加Internal我也是测试看是不是加了能成功,但是没有,后来也没去掉了,上传图片上保留了。刚刚我也去掉测试了,还是同上面一样的错误。

    1 条回复 最后回复
  • F 离线
    F 离线
    fangyuanaza
    在 中回复了 李东岳 最后由 编辑
    #9

    @李东岳 这是我在V 2.4.0上的做法,思路是一样的,就是方程变显示,左右相减,只是V7中湍动能方程更复杂一点,以下是V2.4.0编译成功的写法:
    b1b3cc58-df3e-401b-9354-2a1a93a19610-image.png

    F 1 条回复 最后回复
  • F 离线
    F 离线
    fangyuanaza
    在 中回复了 fangyuanaza 最后由 李东岳 编辑
    #10

    @fangyuanaza 我知道什么原因了,以tke方程第一项为例,在OpenFOAM V240版本中,fvc::SuSp(2.0/3.0*rho_*divU, k_) 这里面的量都是volScalarField, 定义rho_与divU的时候也是这样,但是在新版本V7中fvc::SuSp(2.0/3.0*alpha()*rho()*divU, k_) 中,这些量都是内部场的量,没有包含边界数据,改成fvc::SuSp(2.0/3.0*alpha*rho*divU, k_) ,并且divU的定义也从volScalarField::Internel 改成volScalarField, 就可以编译成功。但是这样太麻烦了吧,比如epsilonByk的传入变量也都是volScalarField::Internel形式的,要全部重新定义一边,这样感觉改起来太笨了,请教大家有什么好的改进方式么?从volScalarField::Internal的量,除了重新定义的方法,怎么能改成volScalarField,让显式离散fvc重新能用上,求tke方程残差呢?

    F 1 条回复 最后回复
  • F 离线
    F 离线
    fangyuanaza
    在 中回复了 fangyuanaza 最后由 编辑
    #11

    后续的故事一直在这里自问自答:mihu: 把里面的量重新定义成带边界的量之后就可以用fvc了(除kSource()与fvOpetions(alpha, rho, k_)以外),现在还有一项没有搞定,请教下各位CFDer, 就是fvc::ddt(alpha, rho, k_)这一项,报错是

    error: no matching function for call to ‘ddt(const alphaField&, const rhoField&, Foam::volScalarField&)’
                    + fvc::ddt(alpha, rho, k_)
                      ~~~~~~~~^~~~~~~~~~~~~~~~
    

    问题是fvc与fvm中此项定义是一样的,都是:

    ddt
    (
        const volScalarField& alpha,
        const volScalarField& rho,
        const GeometricField<Type, fvPatchField, volMesh>& vf
    )
    {
        return fv::ddtScheme<Type>::New
        (
            vf.mesh(),
            vf.mesh().ddtScheme
            (
                "ddt("
              + alpha.name() + ','
              + rho.name() + ','
              + vf.name() + ')'
            )
        ).ref().fvmDdt(alpha, rho, vf);
    }
    

    虽然说alphg的类型是const alphaField&, rho的类型是rhoField&, 它们俩是geometricOneField 不是 volScalarField,但是为什么fvm可以进行运算但是fvc不可以呢?

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 fangyuanaza 最后由 编辑
    #12

    @fangyuanaza 在 新旧版本编程差异问题 中说:

    error: no matching function for call to ‘ddt(const alphaField&, const rhoField&, Foam::volScalarField&)’
    + fvc::ddt(alpha, rho, k_)

    ddt
    (
        const volScalarField& alpha,
        const volScalarField& rho,
        const GeometricField<Type, fvPatchField, volMesh>& vf
    )
    

    单独从这一段错误来看,你的k_应该不是const GeometricField<Type, fvPatchField, volMesh>& vf

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

    F 1 条回复 最后回复
  • F 离线
    F 离线
    fangyuanaza
    在 中回复了 李东岳 最后由 编辑
    #13

    @李东岳 谢谢李老师的回复~ 但是学生不太理解,volScalarField是继承于GeometricField的类型,k_是volScalarField类型,应该不冲突把?而且为什么fvm中也是这样定义的,也是传入这三个变量就可以用呢?

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 fangyuanaza 最后由 编辑
    #14

    @fangyuanaza 主要是那个k_不是const

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

    F 1 条回复 最后回复
  • F 离线
    F 离线
    fangyuanaza
    在 中回复了 李东岳 最后由 编辑
    #15

    @李东岳 我重新定义了k_, 将其强制变成const,但是还是报错,错误如下:

    error: no matching function for call to ‘ddt(const alphaField&, const rhoField&, const volScalarField&)’
                    + fvc::ddt(alpha, rho, k_)
                      ~~~~~~~~^~~~~~~~~~~~~~~~
    

    可见k_前面已经有const,但是还是不行,可见应该还是要修改alpha与rho的类型?但是我重新赋值定义alpha, rho为volScalarField, 会报初始化错误,不能直接这样改,修改方式如下:
    const volScalarField alphat = this->alpha_; 再在fvc中调用fvc::ddt(alphat, rhot, k_)

    1 条回复 最后回复

  • 登录

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