如何设置运行期自动变化写数据的时间间隔?
-
可以参考
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
也失效了。
时间有限,可能我的回答也有漏洞,欢迎补充或指出错误。 -
刚刚又发现另一个方法,可能更加适合你的需求
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链接,(发动机中的时间是曲轴转角),所以你可能需要相应修改一下。
-
@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 就行了。 @千里之行