Openfoam 每隔一段时间更新流场
-
大家好,最近遇到了一个关于按固定时间间隔更新场变量的问题,比如在每隔一段时间在特定位置直接生成一个液滴或气泡(类似与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 触发时计算仍在运行,在计算过程中修改场变量可能会导致冲突并导致崩溃。
目前两条路都遇到问题了,非常迷茫。感谢各位的帮助!
-
@foolfishzju1990 controlDict设置timeActivatedFileUpdate
-
感谢版主和若水提供的建议,通过在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
-