时间步进

有几种方法可以使用输入来确定仅粒子、仅流体和耦合流体-粒子系统的时间步长。

仅流体模拟

在仅流体模拟中,设置 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)

  • 如果 mfix.advection_type = MOL,则默认为 0.5

  • 如果 mfix.advection_type = Godunov,则默认为 0.9

  • 如果 mfix.fixed_dt = 1,则忽略

Real

见注释

dt_min

如果 dt 小于此值则中止

Real

1.e-6

dt_max

如果 fixed_dt 不为 1,则 dt 的最大值

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