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

    还是一开始初始时间步从time文件中读取的值。

    你是不是controlDict里面读取的是0文件夹的

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

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

    @李东岳 李老师,controlDict读取的也是latestTime (比如是t1), 然后他读取了t1时间步的场,比如一个force source term ‘f’。现在我在solver里想定义,每运行ndeltaT的时间步时,从新的(t1+ndeltaT)time文件中读取新的 ‘f’场, ‘f’场的值事先准备好了,放在(t1+ndeltaT,t1+2ndeltaT,t1+3n*deltaT,.......)里面。问题是,读了t1时间步的场后,后面的怎么都读不进去,仍然保持t1时候的值不变,不管是设置了“MUST_READ_IF_MODIFIED”,或者强制‘f.read()’。

    volScalarField f
    (
        IOobject
        (
            "f",
            runTime.timeName(),
            mesh,
            IOobject::MUST_READ_IF_MODIFIED,
            IOobject::NO_WRITE
        ),
        mesh
    );
    
    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #4

    你的意思是,求解器还没有求解的时候,自己定义了一系列的时间序列文件夹0 1 2 3 4,求解器运行到4的时候,去读4文件夹下的文件?

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

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

    @李东岳 嗯嗯对的,是这个意思。李老师您看看有什么解决办法

    1 条回复 最后回复
  • C 离线
    C 离线
    coolhhh 神
    写于 最后由 编辑
    #6

    参考这个帖子新手小白求教,有没有能够通过读取向量文件数据获取动边界速度的功能,看看读取之前先把p的值删掉,再执行 p.read()效果咋样

    V 1 条回复 最后回复
  • V 离线
    V 离线
    VamosZhi
    在 中回复了 coolhhh 最后由 编辑
    #7

    @coolhhh 谢谢!这确实是一个可行的办法,我看了那个帖子,可以通过删除后重新赋值来解决。我试了一下,直接敲代码“delete p”,“delete U”啥的是不行的,不知道其对应的对象是怎么表示的(像那条帖子一样)。我上网搜了一下,还没搜到。不知道您有什么想法

    C 1 条回复 最后回复
  • C 离线
    C 离线
    coolhhh 神
    在 中回复了 VamosZhi 最后由 编辑
    #8

    @VamosZhi 试下下面这种方式,看看能不能更新读取数值?

            // 清空 p 的值
            p = dimensionedScalar("zero", p.dimensions(), 0.0);
    
            // 重新读取 p 
            p.read();
    
    V 1 条回复 最后回复
  • V 离线
    V 离线
    VamosZhi
    在 中回复了 coolhhh 最后由 李东岳 编辑
    #9

    @coolhhh 嗯嗯,刚刚试了,不行。这样子的话,p的值就为0了,再read()一下还是0,读不进来。
    我在想,能不能借鉴从constant/transportProperties中读取nu的方法:

    dimensionedScalar nu
    (
        "nu",
        dimViscosity,
        transportProperties.lookup("nu")
    );
    

    这样子是可以实时更新的。但是不知道如何在runTime.timeName()中lookup场的值,这个代码怎么写还没搞明白,一直报错。
    这样写是报错的:

    p = dimensionedScalar("p", p.dimensions(), runTime.timeName().lookup("p"));
    log文件:
    interPhaseChangeFoam_justPp.C:120:72: error: ‘class Foam::word’ has no member named ‘lookup’
           p = dimensionedScalar("p", p.dimensions(), runTime.timeName().lookup("p")
    
    C 1 条回复 最后回复
  • C 离线
    C 离线
    coolhhh 神
    在 中回复了 VamosZhi 最后由 编辑
    #10

    @VamosZhi 我是在icoFoam尝试的,没有复现出你的问题,不知道为啥你的代码p.read()不生效

    V 1 条回复 最后回复
  • V 离线
    V 离线
    VamosZhi
    在 中回复了 coolhhh 最后由 编辑
    #11

    @coolhhh 嗯嗯,确实奇怪,我这边是控制每迭代特定时间步读入一次:
    9c707845-bada-4b72-9515-9c39ac819d02-image.png
    各种方法都尝试过了。输出log文件:
    233b4d0c-e406-4d6d-affd-ff8d5719536d-image.png
    比如我自定义的ddtp还是0,我试了p,也是一样的。

    C 1 条回复 最后回复
  • C 离线
    C 离线
    coolhhh 神
    在 中回复了 VamosZhi 最后由 编辑
    #12

    @VamosZhi 还真不知道怎么解决,有没有一个最小的测试算例复现这个问题的,试试看怎么处理

    V 1 条回复 最后回复
  • V 离线
    V 离线
    VamosZhi
    在 中回复了 coolhhh 最后由 编辑
    #13

    @coolhhh 好的,谢谢!我再试试看

    1 条回复 最后回复

  • 登录

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