库朗数,DPMFoam

1.在设置边界条件的时候,已经满足条件:

Co=\frac{\delta t |U|}{\delta x }<1

使得库朗数小于1,然而随着计算的进行,经过了多次的迭代后,我发现库朗数也越来越大,最终导致计算终止。但是如果你的end time设置的足够早,就可能避免这种情况。

所以我想问一下,有什么好的设置 \delta t 的方法吗,或者是设置速度模量?

2.最近在算一个算例时出现:

#0  Foam::error::printStack(Foam::Ostream&) at ??:?
#1  Foam::sigFpe::sigHandler(int) at ??:?
#2  ? in "/lib/x86_64-linux-gnu/libc.so.6"
#3  double Foam::sumProd<double>(Foam::UList<double> const&, Foam::UList<double> const&) at ??:?
#4  Foam::PBiCGStab::solve(Foam::Field<double>&, Foam::Field<double> const&, unsigned char) const at ??:?
#5  Foam::fvMatrix<double>::solveSegregated(Foam::dictionary const&) at ??:?
#6  Foam::fvMatrix<double>::solve(Foam::dictionary const&) at ??:?
#7  Foam::fvMatrix<double>::solve() at ??:?
#8  Foam::SolverPerformance<double> Foam::solve<double>(Foam::tmp<Foam::fvMatrix<double> > const&) at ??:?
#9  Foam::RASModels::kEpsilon<Foam::PhaseIncompressibleTurbulenceModel<Foam::singlePhaseTransportModel> >::correct() at ??:?
#10  ? at ??:?
#11  __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6"
#12  ? at ??:?

请问该如何解决?

3.在计算DPMFoam的算例中的kinematicCloudProperties文件里

sizeDistribution
            {
                type        fixedValue;
                fixedValueDistribution
                {
		    	value	0.000025;
                }
            }

此处的value值是面积还是长度?这个范围到底是指的什么?

  1. Co 数只是一个作为计算的参考值,实际上根据网格的大小差异, Co 数一般会在 0.3 左右,如果是完全规则的网格, Co 数可以尽可能靠近 1。

  2. 可能需要调整以下参数:
    (1) k, \varepsilon 的边界条件
    (2) 使用 uncorrected 方法对 k, \varepsilon 进行离散
    (3) 设置 divSchemes 为 upwind
    (4) 减小 k, e 的松弛因子

  3. kinematicCloudProperties

sizeDistribution                        // particle 大小
            {
                type        fixedValue; // 类型:fixedValue 指固定值,
                fixedValueDistribution  // fixedValueDistribution 指 particles 的大小分布,
                {                       // 可指定一个定值或多个值;也可指定分布函数,如 type normal;
		    	value	0.000025;    
                }
            }

sizeDistribution 的 type 可以有以下几种:

RosinRammler
exponential
fixedValue
general
massRosinRammler
multiNormal
normal
uniform

可以参考

  1. CFD-online: kinematicCloudProperties details
  2. Chalmers report: Description and implementation of particle injection in OpenFOAM

Perhaps you can the function “adjusttimestep” in Openfoam to make the Co-Number is allways smaller than you defined.
Link:

如 @qq861120 所言,你可以在 system/controlDict 中控制使每时刻的 Co_t<Co_\max{}.

system/controlDict 可以这样写

application     pisoFoam;

startFrom       latestTime;

startTime       0;

stopAt          endTime;

endTime         8e-3;

deltaT          1e-10;

writeControl    adjustableRunTime; // 写数据控制:实时调整

writeInterval   1e-5;              // 写数据的时间间隔: 1e-5 s

purgeWrite      0;

writeFormat     ascii;

writePrecision  10;

writeCompression uncompressed;

timeFormat      general;

timePrecision   10;

runTimeModifiable yes;       // 实时可调

adjustTimeStep  yes;         // 调整时间步长

maxCo           0.01;        // 最大 Co 数

maxDeltaT       1e-7;        // 最大时间步长