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

    @李东岳 多谢李老师对我目前所做的项目有个极高的评价,由于我已经是研三了,这是我课题的最后一部分,“联合培养”项目开展时间有点晚了,多谢李老师的好意。对于我目前所做的东西,感觉李老师理解稍有偏差。g(i),也就是g1到g10是一个有关gardU,k,epsilon的函数,目前无法写出其显式表达,因此打算用神经网络结构来表示,所以按之前步骤只放到0文件夹下面就是一个不变量,迭代一次就应该更新了,每一次OF求解迭代出来的g(i)应该是不一样的。之前我是想跟python耦合的,即求出一步就用学习完成的神经网络更新一次g(i),但是对于高网络数量的模型计算就十分缓慢,因此我才打算将在python的神经网络结构转换为c++能识别的神经网络结构,并重新编写linearViscousStrees和IncompressibleTurbulenceModel来进行OF耦合。目前,修改的代码写的差不多了,就是不知linearViscousStrees和IncompressibleTurbulenceModel的有效编译步骤该如何进行,还需请教一下李老师。

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

    也就是g1到g10是一个有关gardU,k,epsilon的函数,目前无法写出其显式表达,因此打算用神经网络结构来表示

    你可以让求解器每次都去constant文件夹里面去读取。不需要动linearViscousStrees和IncompressibleTurbulenceModel。代码动的越多越麻烦。

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

    S 1 条回复 最后回复
  • S 离线
    S 离线
    SHUKK
    在 中回复了 李东岳 最后由 编辑
    #7

    @李东岳 李老师,是说可以模仿在constant/turbulenceProperties中修改湍流模型的Cmu这类常数数值的步骤一样吗?把g(i)的c++神经网络写到turbulenceProperties进去,让求解器读取,不用修改linearViscousStrees和IncompressibleTurbulenceModel。

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

    是的 :-)

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

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

    @李东岳 好的,李老师。我先按您的方法试试。:ok2:

    1 条回复 最后回复
  • X 离线
    X 离线
    xpqiu 超神
    在 中回复了 SHUKK 最后由 编辑
    #10

    @SHUKK
    你可以参考一下这个项目:https://github.com/furstj/myTurbulenceModels

    里面有非线性湍流模型的例子,比如这个 EARSM 模型,https://github.com/furstj/myTurbulenceModels/tree/main/turbulenceModels/RAS/EARSM

    你可以在这个 EARSM 模型的基础上来修改,基本上只需要其中的 correctNonlinearStress 函数就可以了。

    S 1 条回复 最后回复
  • S 离线
    S 离线
    SHUKK
    在 中回复了 xpqiu 最后由 编辑
    #11

    @xpqiu 非常感谢,您的建议。我之前也是修改kepsilon湍流模型的,跟EARSM 模型一样,加了correctNonlinearStress函数。之前算发散的时候,我从g1到g10一个一个添加进去计算,发现只带入g1时候才能计算,并且得出来的效果与kOmegaSST的结果相似的,但是只要带入g2就开始发散了。后来,看之前做的过程时候发现,g(i),也就是g1到g10是一个有关gardU,k,epsilon的函数,目前无法写出其显式表达,应该用外接神经网络结构来计算更新。那为什么只带g1能算呢,因为g1*T1是等于OF的原有线性项假设,相当于没有改变其假设,只是修改了Cmu的值而已。
    EARSM 模型的非线性项中,我看它的非线性项写法与我的类似,但是它的bate(i)是有明确的显式公式的,是能随着求解器迭代来计算更新的,而我的是隐式公式,目前没有明确公式。

        volScalarField beta1 = -N*(2.0*sqr(N) - 7.0*IIW) / Q;
        volScalarField beta3 = -12.0 * IV / (N * Q);
        volScalarField beta4 = -2.0 * (sqr(N)  - 2.0*IIW) / Q;
        volScalarField beta6 = -6.0 * N / Q;
        volScalarField beta9 =  6.0 / Q;
        volScalarField Cmu = - 0.5 * (beta1 + IIW * beta6);
    
        this->nut_ = Cmu * this->k_ * tau;
        this->nut_.correctBoundaryConditions();
    
        this->nonlinearStress_ = this->k_ * symm(
            beta3 * ( (W & W) - (1.0/3.0) * IIW * I )
            + beta4 * ( (S & W) - (W & S) )
            + beta6 * ( (S & W & W) + (W & W & S) - IIW * S - (2.0/3.0) * IV * I)
            + beta9 * ( (W & S & W & W) - (W & W & S & W) )
    

    现在我要做的内容就让我的g(i)跟它bate(i)一样跟随迭代,为了达到我这个效果,不能单修改湍流模型,还要外加上我的c++神经网络来更新g(i)。目前就是编译的一些内容和步骤有点疑惑,需要请教。

    X 1 条回复 最后回复
  • X 离线
    X 离线
    xpqiu 超神
    在 中回复了 SHUKK 最后由 编辑
    #12

    @SHUKK
    你的 g(i) 是用训练好的模型来计算对吧,那么其实你只需要用C++把你计算g(i)相关的代码写出来,写成湍流模型的成员函数,然后再在correctNonLinearStress里面调用这些函数就可以了。虽然g(i)不能写出显式的公式,但是也是代入一些流场变量,然后输出g(i)的数值吧,这样肯定也是可以写出可以调用的函数的。

    S 1 条回复 最后回复
  • S 离线
    S 离线
    SHUKK
    在 中回复了 xpqiu 最后由 编辑
    #13

    @xpqiu 是的,应该是这个样的。但是有个问题,就是C++神经网络需要使用类似pytorch这样的环境,单加一个网络结构没办法识别计算,有那些类似pytorch这种的c++的神经网络编程语言吗?或者有什么神经网络语言是跟OF耦合的较好的呢?

    X 1 条回复 最后回复
  • X 离线
    X 离线
    xpqiu 超神
    在 中回复了 SHUKK 最后由 编辑
    #14

    @SHUKK
    你需要 libtorch,这个是C++库,提供了跟 pytorch 一样的功能。也就是说,用pytorch训练的模型,可以做到利用 libtorch 提供的 API 读入到任何 C++ 程序中来用。
    针对Open FOAM,这个项目 https://gitlab.com/tmaric/openfoam-ml 可以作为入门参考。

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

    是的,应该是这个样的。但是有个问题,就是C++神经网络需要使用类似pytorch这样的环境,单加一个网络结构没办法识别计算,有那些类似pytorch这种的c++的神经网络编程语言吗?或者有什么神经网络语言是跟OF耦合的较好的呢?

    一楼不是都已经开始计算,并且发散了,最后怎么回归到如何进行计算的问题了?看起来好像还没跑起来。

    你现在不是已经可以在每个时间步获取到g(i)的值了?目前仅仅需要把每个时间步的g(i)灌输到openfoam湍流模型里面就可以了?

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

    S 1 条回复 最后回复
  • S 离线
    S 离线
    SHUKK
    在 中回复了 李东岳 最后由 SHUKK 编辑
    #16

    @李东岳 李老师,现在是可以在pytorch中每一步更新得到g(i),目前的问题是如何将pytorch中的神经网络能被OF读取识别,实现与OF耦合的过程。发散的是之前只在0文件下提供一个不变的标量场的方法。目前打算是将pytorch转变成c++的能识别神经网络库,g(i)的值可以通过这个库直接灌输到OF的每一个迭代步中。

    1 条回复 最后回复
  • S 离线
    S 离线
    SHUKK
    在 中回复了 xpqiu 最后由 编辑
    #17

    @xpqiu 好的,多谢老师提供的资料。我之前打算是用caffe2来做为耦合的库,但是发现过于久远,可能有一些问题。我先了解一下libtorch的具体情况。

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

    我没深入到机器学习。从你这还学习了不少东西。按照我的理解,你通过机器学习+CFD的方法大体的路子就是:

    1. 每个步长首先通过pytorch获取g(i),g(i)是一些列的标量
    2. 把g(i)的数值传输到OpenFOAM的非线性湍流模型里
    3. 每个时间步封闭,速度压力耦合求解
    4. 进入到下一个时间步,回归到第一步

    是不是这个路子?如果是这样的话,为什么要将pytorch中的神经网络能被OF读取识别?

    另外,机器学习是每个时间步都要更新g(i)么??这是不是会特别慢。我之前浅显的看过一点,以为是一套计算域一套g(i)

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

    S 李东岳李 2 条回复 最后回复
  • S 离线
    S 离线
    SHUKK
    在 中回复了 李东岳 最后由 SHUKK 编辑
    #19

    @李东岳 李老师理解的没问题。为什么要将pytorch中的神经网络能被OF读取识别?主要是为了解决计算速度过慢的问题。可以理解为通过机器学习,获得训练完成的神经网络,也就是一个有关g(i)隐式的公式,若能被OF识别并有效输出,那我就不用每次迭代计算调用pytorch来进行计算,在两个程序中来回计算,可以直接在OF求解中同步计算,相当于直接提供显式公式的效果。对于速度慢的问题,其实不用担心,我只需调用训练完成的神经网络结构即可,相当于用一个已知的公式获得我所需要的g(i)数据。

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

    @李东岳 在 原有的湍流模型加上非线性项雷诺应力的问题 中说:

    每个步长首先通过pytorch获取g(i),g(i)是一些列的标量
    把g(i)的数值传输到OpenFOAM的非线性湍流模型里
    每个时间步封闭,速度压力耦合求解
    进入到下一个时间步,回归到第一步

    所以这是机器学习+CFD的一种方法。但是因为每一步都要训练出来一个g(i),所以速度慢。

    一个有关g(i)隐式的公式,若能被OF识别并有效输出,那我就不用每次迭代计算调用pytorch来进行计算

    你们打算找出来g(i)的一个公式,写成$g(i)=f(\bfU)$类似的函数,然后流程就变成了:

    1. 最开始训练出$g(i)=f(\bfU)$函数表达式
    2. 进行CFD求解(在这一步里面,不需要花时间训练找参数)

    我这样理解对么?:chouchou:

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

    S 1 条回复 最后回复
  • S 离线
    S 离线
    SHUKK
    在 中回复了 李东岳 最后由 SHUKK 编辑
    #21

    @李东岳 李老师,差不多是个意思,但是我们不打算找出g(i)=f(u)这个公式,我们是打算用神经网络结构来代替这个公式,也就是所谓的隐式公式,使用的神经网络是已经训练完成的,OF只需使用,不用再训练一次。现有的OF湍流模型的线性假设的公式是显式公式,也就是有明确的公式。目前的工作是要让OF程序能识别并使用神经网络来更新g(i),只用调用OF这一个程序。

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

    感觉我入点门了,多谢大佬 :-)

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

    S 3 条回复 最后回复
  • S 离线
    S 离线
    SHUKK
    在 中回复了 李东岳 最后由 SHUKK 编辑
    #23

    @李东岳 :wocao: 是要像李老师学习才对,对OF的代码和耦合还在学习中

    1 条回复 最后回复
  • S 离线
    S 离线
    SHUKK
    在 中回复了 李东岳 最后由 编辑
    #24

    @李东岳 李老师,我遇到一个wmake的问题。我把我训练完成的神经网络写成一个reynoldsNet库,打算在linearViscousStrees中调用,但是显示了无法识别的问题这是什么导致的?

    wmakeLnIncludeAll: running wmakeLnInclude on dependent libraries:
        unknown option: '-I/home/user3/OpenFOAM/user3-9/reynoldsNet/lnInclude'
    
    Usage: wmakeLnInclude [OPTION] [dir]
    
    options:
      -update | -u      update
      -silent | -s      use 'silent' mode (do not echo command)
      -help   | -h      print the usage
    
        Link all the source files in the <dir> into <dir>/lnInclude
    
    Note
        The '-u' option forces an update when the lnInclude directory already exists
        and changes the default linking from 'ln -s' to 'ln -sf'.
    
    1 条回复 最后回复

  • 登录

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