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
13 帖子 4 发布者 11.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • C 离线
    C 离线
    chengan.wang
    写于2018年9月19日 02:38 最后由 编辑
    #1

    大家好,目前我正在使用interfoam,上层是空气,下层是水,对于水体,如何在边界和初始场文件设置密度随深度连续变化?已知其分布规律

    1 条回复 最后回复
  • 李 离线
    李 离线
    李东岳 管理员
    写于2018年9月19日 03:09 最后由 编辑
    #2

    interFoam是不可压缩的,如果是水和空气,只有2个密度不具备梯度变化。你那个需要compressibleInterFoam。密度随深度连续变化需要做硬植入或者写个utility,比如这种:https://coding.net/u/dyfluid/p/Solvers_DYFLUID/git/blob/master/pipeU/pipeU.C

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

    C 2 条回复 最后回复 2018年9月19日 06:49
  • C 离线
    C 离线
    chengan.wang
    在 2018年9月19日 06:49 中回复了 李东岳 最后由 编辑
    #3

    @东岳 谢谢版主。您给我的例子中是速度随深度变化U[cell].y() = 0.7 - mag(x - 0.075);,这个我用groovybc实现过。我的问题是一个水池,左侧入口速度恒定,但是密度需要连续分层,并且初始流场密度也要分层,与入口一致。研究流场中的障碍物影响,这个是否有相似的例子可以参考?

    1 条回复 最后回复
  • 浪 离线
    浪 离线
    浪迹天大
    写于2018年9月19日 10:18 最后由 编辑
    #4

    设置初始场可以用东岳大哥的方法(自己写一个 utility),边界条件则可以使用 codedFixedValue。
    举个例子:

    wall
    {
        type            codedFixedValue;
        value           uniform 550;
        name            suibian;
        code            #{
            scalarField x = this->patch().Cf().component(0); 
            // Cf 表示此 patch 的所有面心坐标,是一个 vectoeField,component(0) 表示取其第 0 个分量,即 x 坐标。
            scalarField T = 550*x;
            operator==(T);
        #};
    }    
    

    OpenFOAM 学习交流:https://openfoam.top

    C 2 条回复 最后回复 2018年9月26日 07:54
  • C 离线
    C 离线
    chengan.wang
    在 2018年9月26日 07:54 中回复了 浪迹天大 最后由 编辑
    #5

    @浪迹天大 在 请教密度随深度连续变化设置问题 中说:

    codedFixedValue

    谢谢您,这几天一直没有看

    1 条回复 最后回复
  • C 离线
    C 离线
    chengan.wang
    在 2019年1月25日 12:15 中回复了 浪迹天大 最后由 李东岳 编辑 2019年1月28日 21:46
    #6

    @浪迹天大 您好,我有些疑惑。
    初始场密度分布的unity是写在compressibleInterFoam求解器中的‘createFields.H’文件中吗?在

        Info<< "Reading thermophysical properties\n" << endl;
    
        volScalarField& p = mixture.p();
        volScalarField& T = mixture.T();
        volScalarField& rho1 = mixture.thermo1().rho();
        const volScalarField& psi1 = mixture.thermo1().psi();
        volScalarField& rho2 = mixture.thermo2().rho();
        const volScalarField& psi2 = mixture.thermo2().psi();
    
        volScalarField rho
        (
            IOobject
            (
                "rho",
                runTime.timeName(),
                mesh,
                IOobject::READ_IF_PRESENT,
                IOobject::AUTO_WRITE
            ),
            alpha1*rho1 + alpha2*rho2
        );
    

    代码中,我只需要把rho1重新定义成随函数变化就行吗?

    边界条件部分,使用codedFixedValue可以按照您的给的例子把T换成密度吗?“0.org”文件夹中就没有rho这个文件呀?

    1 条回复 最后回复
  • C 离线
    C 离线
    chengan.wang
    在 2019年1月25日 12:51 中回复了 李东岳 最后由 编辑
    #7

    @东岳 李老师,compressibleInterFoam求解器该如何设置边界密度随空间变化呢

    1 条回复 最后回复
  • J 离线
    J 离线
    Jacobian
    写于2019年1月26日 05:01 最后由 编辑
    #8

    compressibleInterFoam读入rho的方式是READ_IF_PRESENT,也就是说存在rho文件的话,就会被读进去。所以可以在0文件夹下自己添加一个rho,然后用funkySetField 设置你要的初始场。
    至于“如何设置边界密度随空间变化”,compressibleInterFoam是基于压力的求解器,也就是密度由压力决定。所以只要把p_rgh设置对了就可以吧?

    C 1 条回复 最后回复 2019年1月26日 11:36
  • C 离线
    C 离线
    chengan.wang
    在 2019年1月26日 11:36 中回复了 Jacobian 最后由 编辑
    #9

    @Jacobian 您好,谢谢您的回复。在我的算例里面,水和空气的密度可在constant文件夹中的thermalphysicalProperties设置成多项式形式,即随温度变化。我现在遇到的问题是希望能够设置水体(rho1)部分的数值按照一个特定的函数随空间变化,初始时刻满足、入口边界满足即可,我不是很清楚用压力是否合适

    1 条回复 最后回复
  • J 离线
    J 离线
    Jacobian
    写于2019年1月27日 09:35 最后由 编辑
    #10

    抱歉说漏了,rho、rho.water、rho.air这三个文件都要放进0文件夹。funkySetFields是能够使用函数表达式的,用来设置场内分布;边界上的值可以用funkySetBoundaryField来设置。在system下添加funkySetFieldsDict和funkySetBoundaryDict来使用。里面的内容,随便举个例子:

    //funkySetFields
    expressions
    (
    pressureWater
    {
    field p_rgh; //需要设置的物理量
    expression "100000 - 99800*pos().y"; //这行写你要的函数
    condition "(pos().x <= 5) && (pos().x >= 0)"; //起作用的范围、可以注释掉,不影响使用
    keepPatches 1; //填1就好,要不然可能把边界条件改成zeroGradient
    }
    );
    //funkySetBoundaryField
    pressureWater
    {
    field p_rgh;
    expressions
    (
    {
    target value;
    patchName INLET; //选择边界面
    //variables "maxY=max(pts().y);"; //可以注释掉,不影响使用
    expression "100000 - 99800*pos().y"; //这行写你要的函数
    }
    //可以再expression下同时写多个边界的设置
    {
    target value;
    patchName OUTLET;
    //variables "maxY=max(pts().y);";
    expression "100000 - 99800*pos().y";
    }
    );
    }

    更多细节参考这里链接文本,以及swak4foam的tutorials
    另外,你的这个算例里面压力也应当要设置,需要和密度相匹配。

    C 2 条回复 最后回复 2019年1月29日 07:55
  • 李 离线
    李 离线
    李东岳 管理员
    写于2019年1月29日 00:31 最后由 李东岳 编辑 2019年1月29日 08:32
    #11

    @Jacobian Not all heroes wear capes, thanks for sharing

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

    1 条回复 最后回复
  • C 离线
    C 离线
    chengan.wang
    在 2019年1月29日 07:55 中回复了 Jacobian 最后由 编辑
    #12

    @Jacobian 谢谢您的帮助。如果我把rho、rho.water、rho.air这三个文件放进0文件夹,此时thermalphysicalProperties设置的密度就没有用了吧

    1 条回复 最后回复
  • C 离线
    C 离线
    chengan.wang
    在 2019年1月30日 01:39 中回复了 Jacobian 最后由 编辑
    #13

    @Jacobian 我尝试了您的方法,其实不需要设置rho.water、rho.air。我设置了水的密度随高度按照双曲函数变化,初始时刻以及边界密度是没有问题的。但是运算开始后出现问题,密度分布立即按照thermalphysicalProperties设置变化,也就是说按照目前的方法无法控制密度与其他物理场的联系。实际上我的密度场是可以随着流场变化的,因此我觉得应该添加一个浓度输运方程,然后重新定义热物性,使密度随之变化。

    1 条回复 最后回复
2018年9月19日 02:38

10/13

2019年1月27日 09:35

未读 3
2019年1月30日 01:39
  • 登录

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