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. 想在程序中调用UMean这个值,应该如何实现?

想在程序中调用UMean这个值,应该如何实现?

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

    在做湍流模型相关的工作,需要在程序中实现调用“时间平均的速度”--UMean,这个应该如何实现呢?
    虽然在计算过程中会输出UMean这个值,但是不知应该如何调用这个值?还是需要重新写程序,自己计算UMean的值呢?

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

    你用的是哪个求解器?

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

    benqingB 1 条回复 最后回复
  • benqingB 离线
    benqingB 离线
    benqing
    在 中回复了 李东岳 最后由 编辑
    #3

    @李东岳 基于channelFoam修改的channelRotate,计算旋转槽道流的求解器,用的是piso算法。
    版本比较低,用的是OpenFOAM2.3.0.

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

    2.3.x里面没看到channelFoam,2.1.x里面没看到输出UMean: https://github.com/OpenFOAM/OpenFOAM-2.1.x/blob/master/applications/solvers/incompressible/channelFoam/channelFoam.C

    把你的log输出用代码的形式输出一下?

    虽然在计算过程中会输出UMean这个值,但是不知应该如何调用这个值?

    如果程序本身会输出UMean,应该是在程序内部定义了volVectorField的一个场,你直接用就可以了不用自己计算。

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

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

    @东岳 我没有说清楚,程序本身不会输出UMean的值,只是在controlDict中设定平均速度U,会在结果文件中保存UMean,但是求解器本身应该没有计算UMean值。
    所以要调用UMean就有点麻烦了?

    1 条回复 最后回复
  • L 离线
    L 离线
    lllwonderliquid
    写于 最后由 李东岳 编辑
    #6

    同有这个问题:crying: 困扰了好几天了都.

    大家好,我最近在计算一个翼型空化流动算例,用的是interphaseChangeFoam求解器,用fieldAverage函数计算得出了一个时均速度场 UMean 文件,可是当我试图用singleGraph工具提取一条线上的Umean, 却发现会出现以下错误?是不是因为 interPhaseChangeFoam中没有定义UMean场?如果是这样的话,那该怎样才能对UMean这个场进行操作呢:crying:

    这是我用singleGraph时输入的命令:
    0_1522660194850_c77c9248-6e48-4f41-9fbc-aa1467e95e75-图片.png

    这是错误提示:
    0_1522660270552_a097207b-8472-47ac-9226-c333fc248ea7-图片.png

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

    @lllwonderliquid

    你这个直接用postProcess,然后在singleGraph里面设置读取已经输出的UMean,

    @benqing
    你的意思是在你运行的程序中,调用UMean?

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

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

    @东岳 是在湍流模型中调用UMean的这个值,这个估计是要自己写程序,但是不知从何下手,没有直接编写程序的经验

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

    @东岳 东岳前辈,现在这个问题还未解决,我想实现在湍流模型中实现UMean的计算,类似于UMean=UMean+U这种形式,但是我不知如何在程序中实现。

    Z 1 条回复 最后回复
  • Z 离线
    Z 离线
    zhengshu930
    在 中回复了 benqing 最后由 编辑
    #10

    @benqing 请问您解决了吗?我最近也在进行这个工作,如果解决了,可不可以说一下方法?

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

    OpenFOAM里面有后处理程序可以提取mean值,核心的代码如下:

    template<class Type>
    void Foam::functionObjects::fieldAverage::calculateMeanFieldType
    (
        const label fieldi
    ) const
    {
        const word& fieldName = faItems_[fieldi].fieldName();
    
        if (obr_.foundObject<Type>(fieldName))
        {
            const Type& baseField = obr_.lookupObject<Type>(fieldName);
    
            Type& meanField =
                obr_.lookupObjectRef<Type>(faItems_[fieldi].meanFieldName());
    
            scalar dt = obr_.time().deltaTValue();
            scalar Dt = totalTime_[fieldi];
    
            if (faItems_[fieldi].iterBase())
            {
                dt = 1;
                Dt = scalar(totalIter_[fieldi]);
            }
    
            scalar beta = dt/Dt;
    
            if (faItems_[fieldi].window() > 0)
            {
                const scalar w = faItems_[fieldi].window();
    
                if (Dt - dt >= w)
                {
                    beta = dt/w;
                }
            }
    
            meanField = (1 - beta)*meanField + beta*baseField;
        }
    }
    

    其位于fieldAverageTemplates.C中.因此你需要把上面的代码转移到solver里面,类似:

    1. 创立一个UMean场;
    2. 在代码里面进行下面的计算:
      UMean = (1 - deltaT/currentT)*UMean + deltaT/currentT*U;
      

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

    Z 1 条回复 最后回复
  • benqingB 离线
    benqingB 离线
    benqing
    在 中回复了 zhengshu930 最后由 编辑
    #12

    @zhengshu930 解决了,不过我是在修改湍流模型的时候添加的,你是想在哪里添加吗?

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

    @东岳 谢谢老师 的回答,受益匪浅

    1 条回复 最后回复
  • Z 离线
    Z 离线
    zhengshu930
    在 中回复了 benqing 最后由 编辑
    #14

    @benqing 我想要直接使用umean进行其他计算,所以需要提取出来,如果复杂的话,可不可以把你邮箱给我,想看一下具体代码,372660640@qq.com,这是我的邮箱

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

    @zhengshu930 我是在湍流模型里实现的,以kepsilon模型为例的话,在C文件中存在correct函数,这个是一个每一步都会调用的函数,因此我直接在这里面添加了一下代码

     j_=j_+1.0;   
     Ui_=Ui_+U();  
     umean_=Ui_/j_;
    

    其中j是一个累加的过程,返回当前迭代步数;Ui是j个时间步前面的速度的总和,初值为0,U()是每个时间步计算的值,umean就是j个时间步的平均速度

    Z 1 条回复 最后回复
  • Z 离线
    Z 离线
    zhengshu930
    在 中回复了 benqing 最后由 编辑
    #16

    @benqing 谢谢,等我研究研究,不懂的再向您请教。

    1 条回复 最后回复

  • 登录

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