时间步进
有几种方法可以使用输入来确定仅粒子、仅流体和耦合流体-粒子系统的时间步长。
仅流体模拟
在仅流体模拟中,设置 mfix.fixed_dt
会使流体以固定(常量)时间步长前进。如果未定义 mfix.fixed_dt
,则会根据对流 CFL 条件计算适当的时间步长。
小心
始终会计算基于对流 CFL 条件的自适应时间步长,并且强烈建议在大多数情况下使用。
对于固定时间步长的模拟,如果计算出的步长小于
mfix.fixed_dt
,则模拟会中止并显示以下消息:amrex::Abort::0::"Fixed dt is too large for fluid solve !!!
对于使用自适应时间步长的模拟:
如果计算出的时间步长大于
mfix.dt_max
,则时间步长设置为dt_max
如果计算出的时间步长小于
mfix.dt_min
,则模拟会中止并显示以下消息:amrex::Abort::0::"Current dt is smaller than dt_min !!!
仅粒子 DEM 模拟
在仅粒子 DEM 模拟中,用于推进粒子的时间步长 dtsolid
是通过从粒子属性计算碰撞时间 tcoll
并将结果除以每次碰撞的步数 tcoll_ratio
来确定的:
dtsolid = tcoll / tcoll_ratio;
备注
mfix.fixed_dt
必须在仅粒子 DEM 模拟中定义,但它仅用于确定输出的频率,对粒子推进没有影响。如果未为 mfix.fixed_dt
指定正值,则代码会中止并显示以下消息:
amrex::abort::0::if running particle-only must specify fixed_dt in the inputs file !!!
耦合流体-DEM 模拟
在耦合流体-DEM 模拟中,流体时间步 dt
和粒子时间步 dtsolid
分别与仅流体和仅 DEM 模拟中计算相同。如果 dt < dtsolid
,则粒子子时间步 subdt
设置为流体时间步,并进行一次粒子推进。但是,如果 dt > dtsolid``(通常是这种情况),则通过将 ``dt
除以 dtsolid
计算出 DEM 粒子与流体前进相同总时间所需的子步数 nsubsteps
,并通过将 dt
除以 nsubsteps
计算出粒子子时间步。
int nsubsteps = 1;
amrex::Real subdt = dt;
if (dt > dtsolid) {
nsubsteps = amrex::Math::ceil(dt / dtsolid);
subdt = dt / nsubsteps;
}
以下输入使用 mfix
前缀定义。
Key |
Description |
Type |
Default |
---|---|---|---|
max_step |
最大时间步数 |
Int |
-1 |
stop_time |
到达的最大时间(秒) |
Real |
-1.0 |
fixed_dt |
使用固定时间步长的标志 |
Int |
0 |
cfl |
CFL 约束(dt < cfl * dx / u)
|
Real |
见注释 |
dt_min |
如果 |
Real |
1.e-6 |
dt_max |
如果 |
Real |
1.e14 |
tcoll_ratio |
DEM 时间步长等于最小碰撞时间除以此值 |
Real |
50.0 |
walltime_limit |
以格式 HH:MM:SS 指定的运行时间限制。当运行时间几乎达到限制时(接近 是通过考虑每步所需的平均运行时间来计算的),则模拟结束并进行干净退出 |
String |
“” |
clean_exit |
此输入表示一个文件的名称,如果在运行文件夹中找到该文件,则使代码停止 并进行干净退出 |
String |
“” |
在非稳态流动的情况下,当步数达到 max_step
或时间达到 stop_time
时,模拟将停止。
以下输入使用 mfix
前缀定义,仅在运行稳态模拟时相关。
Key |
Description |
Type |
Default |
---|---|---|---|
steady_state |
我们是否在运行稳态计算? |
Int |
0 |
steady_state_tol |
检查是否达到稳态的容差 (如果 steady_state = 1,必须设置) |
Real |
None |
steady_state_maxiter |
收敛到稳态所允许的最大迭代次数 |
Int |
100000000 |