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 每隔一段时间更新流场

Openfoam 每隔一段时间更新流场

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

    大家好,最近遇到了一个关于按固定时间间隔更新场变量的问题,比如在每隔一段时间在特定位置直接生成一个液滴或气泡(类似与Fluent中patch功能)。

    经过一些研究,发现有两种可能的解决方法:
    1. 列表使用 system/controlDict 中的 coded function object。
    2. 使用 systemCall function object 调用包含 setFields 命令的脚本。
    然而,两种方法都遇到了相应的问题

    对于方法1:coded function object 方法,问题在于虽然我可以通过 lookupObject 函数访问场变量(例如 alpha.water),但无法修改这些场变量的值。好像流场变量在 coded function 中是只读,无法改变的。

    对于方法2:对于 systemCall 方法,问题在于正在运行的计算与 setFields 命令的执行之间存在冲突。由于作业在 systemCall 触发时计算仍在运行,在计算过程中修改场变量可能会导致冲突并导致崩溃。

    目前两条路都遇到问题了,非常迷茫。感谢各位的帮助!

    1 条回复 最后回复
  • bestucanB 离线
    bestucanB 离线
    bestucan 版主 大神
    写于 最后由 编辑
    #2

    你可以先探索一条“手动”实现你想要的功能的方法。

    然后用bash脚本替代“手动”过程。

    写bash脚本的时候直接用gpt,把你想要实现的功能描述清楚,让他生成,你再调

    大概是这么个循环:

    计算一小时间
    然后setfields
    然后修改cotroldic里的计算开始和结束时间

    要修改的时间可以用循环变量乘以周期时间之类的。

    滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

    异步沟通方式(《posting style》from wiki)(下载后打开):
    https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
    提问的智慧(github在gitee的镜像):
    https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way

    F 1 条回复 最后回复
  • F 离线
    F 离线
    foolfishzju1990
    在 中回复了 bestucan 最后由 编辑
    #3

    @bestucan 执行思路是:case先完成0-0.1s的并行计算,然后让计算任务停止(或者hold)+运行setFields,之后再重提提交任务计算0.1-0.2s...如此往复一直下去?
    这个方法确实可行,每次重新提交任务(比如第一次计算0-0.1s,第二次计算0.1-0.2s...都需要修改controlDict中的内容,这是个比较麻烦的点。

    我先试一下这个方法,谢谢建议

    尚 1 条回复 最后回复
  • 尚 离线
    尚 离线
    尚善若水
    在 中回复了 foolfishzju1990 最后由 编辑
    #4

    @foolfishzju1990 controlDict设置timeActivatedFileUpdate

    F 1 条回复 最后回复
  • F 离线
    F 离线
    foolfishzju1990
    在 中回复了 尚善若水 最后由 编辑
    #5

    @尚善若水 多谢多谢~

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

    感谢版主和若水提供的建议,通过在bash脚本中加入循环执行语句,配合controlDict中timeActivatedFileUpdate函数实现需求的效果。其中bash脚本如下,供有需求的人参考。

    while (( (echo "$time_start < $time_end" | bc -l) ))
    do
    
        # Step 1: Run setFields in parallel mode
        mpirun -np $TOTAL_TASKS setFields -parallel > log.setFields_$time_start 2>&1
    
        # Step 2: Run the case from time_start to time_start + time_step
        # ControlDict will be updated using timeActivatedFileUpdate function
        mpirun -np $TOTAL_TASKS icoFoam -parallel > log.icoFoam_$time_start 2>&1
    
        # Increment time_start for the next interval
        time_start=$(echo "$time_start + $time_step" | bc)
    
    done
    
    李东岳李 1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    在 中回复了 foolfishzju1990 最后由 编辑
    #7

    @foolfishzju1990 :146: :146: :146:

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

    1 条回复 最后回复

  • 登录

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