模拟火箭发射问题



  • Foamers 大家好

    现在我再做一个有关模拟火箭发射的瞬态流场仿真,再研究了不同的方法后有以下几种网格方法可以使用

    1.动网格法
    2.overset grid(嵌套网格法)
    3.自适应网格

    之前做过圆柱上下运动绕流的案例,所以打算先选用动网格法进行模拟,但遇到了问题。之前圆柱动网格算例 0文件中 pointDisplacement 圆柱边界设置条件如下:

        cylinder
        {
            type            oscillatingDisplacement;
    	omega           0.5; //频率
    	amplitude       (0 1 0); //幅度
    	value           uniform (0 0 0);
        }
    

    但我对于动网格 0文件中 pointDisplacement 的网格运动类型参数设置不太熟悉,不知道如何去设置一个火箭以一定的加速度向上运动。目前OF提示我的pointDisplacement边界类型如下

    {angularOscillatingDisplacement
    angularOscillatingVelocity
    calculated
    codedFixedValue
    cyclic
    cyclicACMI
    cyclicAMI
    cyclicRepeatAMI
    cyclicSlip
    empty
    fixedNormalSlip
    fixedValue
    nonuniformTransformCyclic
    oscillatingDisplacement
    oscillatingVelocity
    processor
    processorCyclic
    slip
    solidBodyMotionDisplacement
    surfaceDisplacement
    surfaceSlipDisplacement
    symmetry
    symmetryPlane
    timeVaryingMappedFixedValue
    timeVaryingUniformFixedValue
    uniformFixedValue
    uniformInterpolatedDisplacement
    value
    waveDisplacement
    wedge
    zeroGradient}
    
    

    由于我对这些边界类型不太熟,目前我选择的是codedFixedValuesolidBodyMotionDisplacement边界条件。请问Foamers们我该如何去设置一个火箭以一定的加速度向上运动呢?(我在GitHub上查找了关于动网格的算例但大多为overset旋转案例,没有我这种以一定加速度直线运动的:zoule: )

    不胜感激,相关的资料讲解参数设置也可以!

    如果有 overset grid 和自适应网格的FOAM友也欢迎提出一些解决的办法,感谢!(我在youtube上看到了有用CONVERGENCE自适应网格模拟火箭发射的案例,网址https://www.youtube.com/watch?v=JYGJbhRHAzU)


  • Linux讲师 OpenFOAM讲师

    这三个并列有点怪怪的

    网格区域是否发生变化。变化就是动网格,不变化不是。
    即使网格区域不发生变化,也可以使用自适应网格,自适应网格适应的是疏密度。物理量变化越剧烈,就自适应成更密的网格,否则适应成更疏的网格。

    所以火箭发射,肯定是动网格,也肯定用自适应网格。全疏算崩,全密算不动。

    这两个方法不相排斥。这两个方法也都是理论层面的。落实到实现上。嵌套网格是动网格的一种实现方式,也有论文提出不同的实现方式。最近好像嵌套网格(也有叫重叠网格)比较火。相对于之前已有的方法有些优势,我并没有学习过。

    (好像动网格都默认带自适应了?但单拎出来说功能和目的还是不一样的。——来自一位半路出家的和尚的理解:chigua2:



  • 您好感谢您的指导,现在火箭的简单模型可以通过一定速度运动了 0/pointDisplacement 如下

    FoamFile
    {
    version 2.0;
    format ascii;
    class pointVectorField;
    location "0";
    object pointDisplacement;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

    dimensions [0 1 0 0 0 0 0];

    internalField uniform (0 0 0);

    boundaryField
    {
    WALL
    {
    type fixedValue;
    value uniform (0 0 0);
    }

    GROUND
    {
    type            fixedValue;
    value		uniform (0 0 0);
    }
    
    OUTLET
    {
    type            fixedValue;
    value		uniform (0 0 0);
    }
        
    frontAndBackPlanes
    {
        type            fixedValue;
        value		uniform (0 0 0);
    }
    
    ROCKET_WALL
    {
        type            solidBodyMotionDisplacement;
        solidBodyMotionFunction     linearMotion;
    velocity  (0 2 0);
    
    }
    
    INLET
    {
        type            solidBodyMotionDisplacement;
        solidBodyMotionFunction     linearMotion;
    velocity  (0 2 0);
    
    }
    

    }

    其中INLET(火箭喷管)和ROCKET_WALL(火箭壁面)设置为以2m/s运动的边界,但存在以下两个问题

    一.用算例运行到2s时提示以下信息

    Courant Number mean: 9.51488e+118 max: 1.54754e+123
    Time = 0.995

    DICPCG: Solving for cellDisplacementx, Initial residual = 0, Final residual = 0, No Iterations 0
    DICPCG: Solving for cellDisplacementy, Initial residual = 0.00667525, Final residual = 9.9838e-09, No Iterations 43
    smoothSolver: Solving for Ux, Initial residual = 0.749586, Final residual = 9.93052e-07, No Iterations 65
    smoothSolver: Solving for Uy, Initial residual = 0.78604, Final residual = 9.80661e-07, No Iterations 62
    #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::PCG::solve(Foam::Field<double>&, Foam::Field<double> const&, unsigned char) const at ??:?
    #5 Foam::GAMGSolver::solveCoarsestLevel(Foam::Field<double>&, Foam::Field<double> const&) const at ??:?
    #6 Foam::GAMGSolver::Vcycle(Foam::PtrListFoam::lduMatrix::smoother const&, Foam::Field<double>&, Foam::Field<double> const&, Foam::Field<double>&, Foam::Field<double>&, Foam::Field<double>&, Foam::Field<double>&, Foam::Field<double>&, Foam::PtrList<Foam::Field<double> >&, Foam::PtrList<Foam::Field<double> >&, unsigned char) const at ??:?
    #7 Foam::GAMGSolver::solve(Foam::Field<double>&, Foam::Field<double> const&, unsigned char) const at ??:?
    #8 Foam::fvMatrix<double>::solveSegregated(Foam::dictionary const&) at ??:?
    #9 Foam::fvMatrix<double>::solve(Foam::dictionary const&) in "/home/dyfluid/OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt/bin/pimpleFoam"
    #10 Foam::fvMatrix<double>::solve() in "/home/dyfluid/OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt/bin/pimpleFoam"
    #11 ? in "/home/dyfluid/OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt/bin/pimpleFoam"
    #12 __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6"
    #13 ? in "/home/dyfluid/OpenFOAM/OpenFOAM-7/platforms/linux64GccDPInt32Opt/bin/pimpleFoam"
    Floating point exception (core dumped)

    查看了下网格发现网格变形为负了
    61089fd6-7e7c-4f18-be22-32172f984375-image.png

    请问这种情况用动网格怎么解决?

    二 我同时想在INLET(火箭喷管口)设置燃气射流环境,目前改了 0/p 0/U 0/T 下的边界条件,并在constant/thermophysicalProperties 设置了燃气参数,但不知道如何指定在INLET上不断喷射燃气。
    请问该如何设置呢,十分感谢!


  • Linux讲师 OpenFOAM讲师

    看来还是有只用动网格而不用自适应的。这种状况应该用在变形的铁板、高层建筑随风摆之类的在一定范围内变形的。这样网格即使没有自适应也没关系。一般用来做应力分析之类的。

    查看了下网格发现网格变形为负了

    你的这个初始网格就不好。在圆形边界上没有用O形网格。畸变本就很严重,然后一变形,还不是震荡变形,是一直一个方向走,网格又没有自适应,然后就负网格了。

    我同时想在INLET(火箭喷管口)设置燃气射流环境,目前改了 0/p 0/U 0/T 下的边界条件,并在constant/thermophysicalProperties 设置了燃气参数,但不知道如何指定在INLET上不断喷射燃气。

    最简单的把边界设定成固定压力梯度。要是还要计算燃烧过程就不懂了:mihu:


Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2