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

    @李东岳 上面的步骤是在编译MomentumTransportModels文件夹时候的。同时,我在simpleNNFoam中修改了我的需要连接的linearViscousStrees中的divDevTau(U, S, R),S跟R都已经在 createFields.H中创建了。

        // Momentum predictor
    
        MRF.correctBoundaryVelocity(U);
    
        tmp<fvVectorMatrix> tUEqn
        (
            fvm::div(phi, U)
          + MRF.DDt(U)
          + turbulence->divDevTau(U, S, R) // Data driven R-S + viscous component
         ==
          fvModels.source(U)
        );
        fvVectorMatrix& UEqn = tUEqn.ref();
    
        UEqn.relax();
    
        fvConstraints.constrain(UEqn);
    
        if (simple.momentumPredictor())
        {
            solve(UEqn == -fvc::grad(p));
    
            fvConstraints.constrain(U);
        }
    

    但是我在wmake我的simpleNNFoam中出现了,数据类型不对的问题。

    In file included from /home/user3/libtorch/include/c10/util/Exception.h:7,
                     from /home/user3/libtorch/include/ATen/core/Generator.h:11,
                     from /home/user3/libtorch/include/ATen/CPUGeneratorImpl.h:3,
                     from /home/user3/libtorch/include/ATen/Context.h:3,
                     from /home/user3/libtorch/include/ATen/ATen.h:7,
                     from /home/user3/libtorch/include/torch/csrc/api/include/torch/types.h:3,
                     from /home/user3/libtorch/include/torch/script.h:3,
                     from /home/user3/OpenFOAM/user3-9/reynoldsNet/lnInclude/reynoldsNet.H:42,
                     from /home/user3/OpenFOAM/user3-9/src/MomentumTransportModels/momentumTransportModels/lnInclude/linearViscousStress.H:38,
                     from /home/user3/OpenFOAM/user3-9/src/MomentumTransportModels/momentumTransportModels/lnInclude/Stokes.H:39,
                     from /home/user3/OpenFOAM/user3-9/src/MomentumTransportModels/momentumTransportModels/lnInclude/laminarModel.C:27,
                     from /home/user3/OpenFOAM/user3-9/src/MomentumTransportModels/momentumTransportModels/lnInclude/laminarModel.H:193,
                     from /home/user3/OpenFOAM/user3-9/src/MomentumTransportModels/incompressible/lnInclude/kinematicMomentumTransportModel.H:47,
                     from simpleNNFoam.C:66:
    /home/user3/libtorch/include/c10/util/variant.h:1204:11: error: no matching function for call to 'Foam::data::data(const c10::detail_::impl<c10::SmallVector<c10::SymInt, 5>, at::Tensor>&)'
     1204 |           data(lib::forward<V>(v)),
          |           ^~~~~~~~~~~~~~~~~~~~~~~~
    
    

    我查看了 Foam::data::data(const objectRegistry& obr),要的是objectRegistry类,但是在我的reynoldsNet库中已经将libtorch输出的torch::Tensor转换成std::vector<float>然后带入输出,没有将是torch的数据直接带入OF中。这是有数据没按要求来转换吗?:135:

    J 1 条回复 最后回复
  • S 离线
    S 离线
    SHUKK
    写于 最后由 编辑
    #26

    libtorch跟OF耦合的问题已解决,纯粹是一个.so文件的名字大小写打错了:136: 。目前1w步跑完结果与LES相似

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

    那面CFD+pytorch的全部时间,跟纯LES跑,二者时间差的大么。这个是不是主要取决于硬件。

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

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

    @李东岳 并行16线程,CFD+pytorch一共花了1个半小时左右,LES的并行36线程大概要10小时左右。CFD+pytorch的本质还是用RANS去跑,pytorch就是提供一个隐式方程,与原RANS湍流方程的时间差不多。当然硬件越好跑的越快。我们组的服务器还是从李老师你那里买的:146:

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

    就是说CFD+pytorch跑出来的是最终的稳态结果?

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

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

    @李东岳 目前跑出来的结果,有个小范围的浮动。也有可能是我在雷诺应力修正时候做了类似于DES那种,RANS跟LES的混合。

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

    屌爆了,文章发出来之后我学习学习

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

    1 条回复 最后回复
  • 李东岳李 李东岳 被引用 于这个主题
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 SHUKK 最后由 李东岳 编辑
    #32

    @SHUKK 老铁这个工作做的怎么样了

    另外我这段时间也关注这些东西。初步有个这个结论,这个是我自己想的:

    目前都是openfoam+pytorch而不是openfoam+libtorch,但是我测试openfoam+libtorch完全可以混编,并且编译起来很简单。如果openfoam+pytorch,这里面等于添加了个python的API。我就没太理解大家为什么用的都是openfoam+pytorch而不是openfoam+libtorch。后来我捉摸应该是机器学习那面好多人都是python程序员,然后就专门写了个python版本的pytorch,对于他们那一圈人,pytorch比较好用... 只有这一个原因。

    因为我最近要试一下PINN求解PDE。对于那面来说,用纯粹的pytorch就可以。但是pytorch写起来比较麻烦。好多人就用了个接口交deepxde。

    那对于为什么用的都是openfoam+pytorch而不是openfoam+libtorch,纯粹是用户习惯的原因,不知道我理解的对不对。

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

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

    If you would prefer to write Python, and can afford to write Python, we recommend using the Python interface to PyTorch. However, if you would prefer to write C++, or need to write C++ (because of multithreading, latency or deployment requirements), the C++ frontend to PyTorch provides an API that is approximately as convenient, flexible, friendly and intuitive as its Python counterpart. The two frontends serve different use cases, work hand in hand, and neither is meant to unconditionally replace the other.

    我理解的应该是对的。pytorch,libtorch看个人爱好

    https://pytorch.org/cppdocs/frontend.html

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

    1 条回复 最后回复
  • B 离线
    B 离线
    biaowai
    写于 最后由 编辑
    #34

    看完大佬们讨论,对OpenFOAM+神经网络模型有初步了解了,还有些疑问,想请教下各位老师:
    用神经网络来确定非线性模型中的一些参数,并在每一步计算都调用神经网络,对初场的敏感性高吗?如果初场不同,神经网络更新的参数有很大区别,感觉可能导致收敛到不同结果?

    感谢感谢!

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

    对初场的敏感性高吗?

    什么初场?

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

    B 1 条回复 最后回复
  • B 离线
    B 离线
    biaowai
    在 中回复了 李东岳 最后由 编辑
    #36

    @李东岳 李老师,就是初始流场,比如均匀初始化或者用一个RANS收敛的流场初始化

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

    @biaowai 不会,跟那个没关系

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

    1 条回复 最后回复

  • 登录

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