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

    是的,可参考楼上,

    另外,可以参考下面的代码

    
    dT 100;
    
    application     icoFoam;
    
    startFrom       startTime;
    
    startTime       0;
    
    stopAt          endTime;
    
    endTime         0.5;
    
    deltaT          0.005;
    
    writeControl    timeStep;
    
    writeInterval   #calc "$T";//你需要写一些数学运算
    
    

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

    千 2 条回复 最后回复
  • 千 离线
    千 离线
    千里之行
    在 中回复了 sungda 最后由 编辑
    #4

    @sungda 谢谢,这个方法非常好,我现在就准备这么干啦!

    1 条回复 最后回复
  • 千 离线
    千 离线
    千里之行
    在 中回复了 李东岳 最后由 编辑
    #5

    @李东岳 谢谢,没想到还有这种操作啊,能嵌入数学计算表达式,得好好设计一个表达式。

    1 条回复 最后回复
  • 千 离线
    千 离线
    千里之行
    在 中回复了 sungda 最后由 编辑
    #6

    @sungda 今天我还意识到一个问题,我用到了整体运动动网格,当我从新的时刻继续算的时候,fvSolution 字典里的压力参考点 pRefPoint 其实也需要改,因为这个位置变了。OpenFOAM 用的是大地坐标描述运动的计算域。如果运动复杂,这个位置还不好确定呢。

    1 条回复 最后回复
  • 千 离线
    千 离线
    千里之行
    在 中回复了 李东岳 最后由 编辑
    #7

    @李东岳 还有一个问题请教一下,表达式里可以包含分支 if else 这种结构吗?

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

    不可以。

    可以试试这个,codeStream比calc更强大,类似的:

    startTime 0;
    endTime 100;
    ...
    writeInterval #codeStream
    {
    code
    #{
        scalar start = readScalar(dict.lookup("startTime"));
        scalar end = readScalar(dict.lookup("endTime"));
        label nDumps = 5;
        os << ((end - start)/nDumps);
    #};
    };
    
    

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

    1 条回复 最后回复
  • 浪 离线
    浪 离线
    浪迹天大
    写于 最后由 编辑
    #9

    可以参考 tut 中的这个case: Github链接
    在controlDict中设置一个functions,就可以在deltaTvalues文件中分段设置timeStep了。

    functions
    {
        timeStepping
        {
            type            setTimeStep;
            functionObjectLibs ("libutilityFunctionObjects.so");
            enabled         yes;
            deltaT          tableFile;
            file            "system/deltaTvalues";
        }
    }
    

    但是经过简单测试,发现设置这个之后,controlDict中的deltaT就失效了,就是说没法只对某段时间加密,必须完整地设置好从startTime到endTime所有的时间步长。另外maxCo也失效了。
    时间有限,可能我的回答也有漏洞,欢迎补充或指出错误。

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

    1 条回复 最后回复
  • 浪 离线
    浪 离线
    浪迹天大
    写于 最后由 编辑
    #10

    此外,除了从文件中读取timeStep之外,这里的deltaT还提供以下设置:

    constant
    csvFile
    halfCosineRamp
    linearRamp
    one
    polynomial
    quadraticRamp
    quarterCosineRamp
    quarterSineRamp
    scale
    sine
    square
    table
    tableFile
    uniform
    zero
    

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

    1 条回复 最后回复
  • 浪 离线
    浪 离线
    浪迹天大
    写于 最后由 编辑
    #11

    刚刚又发现另一个方法,可能更加适合你的需求:quwan:

    functions
    {
        timeStep
        {
            type coded;
            libs            ("libutilityFunctionObjects.so");
            name setDeltaT;
    
            code
            #{
            #};
    
            codeExecute
            #{
                const Time& runTime = mesh().time();
                if (runTime.timeToUserTime(runTime.value()) >= -15.0)
                {
                    const_cast<Time&>(runTime).setDeltaT
                    (
                        runTime.userTimeToTime(0.025)
                    );
                }
            #};
        }
    }
    

    这个算例来自一个发动机算例Github链接,(发动机中的时间是曲轴转角),所以你可能需要相应修改一下。

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

    Prometheus10P 1 条回复 最后回复
  • 浪 离线
    浪 离线
    浪迹天大
    写于 最后由 编辑
    #12

    额,发现理解错出题人的意思了,尴尬。。。

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

    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #13
    functions
    {
        xxx
        {
            type coded;
            libs ("libutilityFunctionObjects.so");
            name setDeltaT;
    
            code
            #{
            #};
    
            codeExecute
            #{
            #};
        }
    }
    

    controlDict里面类似的这个代码段确实有时候比较好玩 :quwan:

    fvSolution 字典里的压力参考点 pRefPoint 其实也需要改,因为这个位置变了。OpenFOAM 用的是大地坐标描述运动的计算域。

    这个是怎么回事? @千里之行

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

    1 条回复 最后回复
  • 浪 离线
    浪 离线
    浪迹天大
    在 中回复了 sungda 最后由 李东岳 编辑
    #14

    @sungda 按照这位兄台的回答,然后结合题主的问题(续算时参考点变了?)
    还有一个方法:

    functions
    {
        fileUpdate1
        {
            type              timeActivatedFileUpdate;
            libs              ("libutilityFunctionObjects.so");
            writeControl      timeStep;
            writeInterval     1;
            fileToUpdate      "$FOAM_CASE/system/controlDict";
            timeVsFile
            (
                (-1 "$FOAM_CASE/system/controlDict.0")
                (0.10 "$FOAM_CASE/system/controlDict.10")
                (0.20 "$FOAM_CASE/system/controlDict.20")
                (0.35 "$FOAM_CASE/system/controlDict.35")
            );
        }
    }    
    

    这个不需要续算,在运行时就可以更改controlDict文件,在不同时刻设置你需要的 writeInterval 就行了。 @千里之行

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

    S 1 条回复 最后回复
  • S 离线
    S 离线
    sungda
    在 中回复了 浪迹天大 最后由 编辑
    #15

    @浪迹天大 functions好强大:surprised: ,赞一个,不过题主貌似还想要复杂的表达式改其它文件,这个就麻烦到我宁可手动调了。:mihu:

    1 条回复 最后回复
  • Prometheus10P 离线
    Prometheus10P 离线
    Prometheus10
    在 中回复了 浪迹天大 最后由 编辑
    #16

    @浪迹天大 老师您好,按照这个方法,我需要更改controlDict中的maxDeltaT。但是会发现文件更新不起作用。

    /*--------------------------------*- C++ -*----------------------------------*\
    | =========                 |                                                 |
    | \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
    |  \\    /   O peration     | Version:  v2012                                 |
    |   \\  /    A nd           | Website:  www.openfoam.com                      |
    |    \\/     M anipulation  |                                                 |
    \*---------------------------------------------------------------------------*/
    FoamFile
    {
        version         2.0;
        format          ascii;
        class           dictionary;
        location        "system";
        object          controlDict;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    application     interFlowVb1;
    
    startFrom       latestTime;
    
    startTime       0;
    
    stopAt          endTime;
    
    endTime         0.3;
    
    deltaT          0.00005;
    
    writeControl    adjustableRunTime;
    
    writeInterval   0.05;
    
    purgeWrite      0;
    
    writeFormat     binary;
    
    writePrecision  8;
    
    writeCompression off;
    
    timeFormat      general;
    
    timePrecision   8;
    
    runTimeModifiable yes;
    
    adjustTimeStep  yes;
    
    maxCo           0.5;
    maxAlphaCo      0.5;
    maxCapillaryNum 10; // stability criteria is 1
    
     maxDeltaT       2e-5;//controlDict.a;
    // maxDeltaT       1e-5;//controlDict.b;
    // maxDeltaT       5e-6;//controlDict.c;
    
    
    functions
    {
        fileUpdate1
        {
            type              timeActivatedFileUpdate;
            libs              ("libutilityFunctionObjects.so");
            writeControl      timeStep;
            writeInterval     1;
            fileToUpdate      "$FOAM_CASE/system/controlDict";
            timeVsFile
            (
                (-1 "$FOAM_CASE/system/controlDict.a")
                (1e-4 "$FOAM_CASE/system/controlDict.b")
                (2e-4 "$FOAM_CASE/system/controlDict.c")
            );
        }
    }
    
    
    

    三个文件只有maxDeltaT有差别,请老师捞捞@李东岳 @浪迹天大

    运行后结果提示:

    timeActivatedFileUpdate: copying file
    "~/orifice3Da/system/controlDict.c"
    to:
    "~/orifice3Da/system/controlDict"
    
    Courant Number mean: 2.0171174e-08 max: 0.3369988
    Interface Courant Number mean: 2.978204e-10 max: 0.22052861
    Capillary Number: 2.4526254
    deltaT = 2e-05
    Time = 0.00022
    

    文件有更新,并且maxDeltaT也更新为了1e-5; 但是它没有发挥作用,可以看到文件更新后的deltaT 依然是 2e-05,如果是我自己运行过程中手动改小maxDeltaT,它会马上从deltaT = 2e-05,便为deltaT = 1e-05。

    1 条回复 最后回复

  • 登录

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