可压缩浸没边界法的实现



  • 我准备在foam-extend-4.0中的immersedBoundary代码的基础上,修改可压缩求解器rhoPisoFoam以实现对可压缩浸没边界法的实现,对于浸没边界的设置如下所示:

        ibCylinder
        {
            type immersedBoundary;
            refValue uniform (0 0 0);
            refGradient  uniform (0 0 0);
            fixesValue yes;
    
            setDeadCellValue   yes;
            deadCellValue      (0 0 0);
        }
    

    目前在原不可压缩浸没边界法的求解器上加入温度方程成功运行,但是在修改可压缩求解器的过程中,在温度方程的求解时程序会提示浮点数溢出
    针对出现的问题,我猜测可能的问题出现在

    1. 焓方程没有能够识别浸没边界条件
      因为源代码部分是这样的:
    Foam::wordList Foam::basicThermo::hBoundaryTypes()
    {
        const volScalarField::GeometricBoundaryField& tbf = T_.boundaryField();
    
        wordList hbt = tbf.types();
    
        forAll(tbf, patchi)
        {
            if (isA<fixedValueFvPatchScalarField>(tbf[patchi]))
            {
                hbt[patchi] = fixedEnthalpyFvPatchScalarField::typeName;
            }
            else if
            (
                isA<zeroGradientFvPatchScalarField>(tbf[patchi])
             || isA<fixedGradientFvPatchScalarField>(tbf[patchi])
            )
            {
                hbt[patchi] = gradientEnthalpyFvPatchScalarField::typeName;
            }
            else if (isA<mixedFvPatchScalarField>(tbf[patchi]))
            {
                hbt[patchi] = mixedEnthalpyFvPatchScalarField::typeName;
            }
        }
    
        return hbt;
    }
    

    那如果上述假设成立,那我是否能够在代码中添加

            else if (isA<immersedBoundaryFvPatchScalarField>(tbf[patchi]))
            {
                hbt[patchi] = immersedBoundaryFvPatchScalarField::typeName;
            }
    

    来实现在焓方程中施加浸没边界条件呢?可是这样做的话也没有办法在0文件夹中设定h的浸没边界的固定焓值……
    2. 可能需要直接求解温度方程。但是我看basicThermo中温度的读取是const

    const Foam::volScalarField& Foam::basicThermo::T() const
    {
        return T_;
    }
    

    如果我使用 const volScalarField& T = thermo.T();,这样求解器编译时会报错。感觉在OpenFOAM中的T场更新是通过焓值进行的。

    目前也不知道该如何解决,所以想咨询一下各位老师,我上面提到的解决方法能否实现,或者有没有其他的解决这个问题的方法和建议,万分感谢:xinxin:



  • 这个浸没边界能用,piso或者pimple算雷诺数比较高的情况吗



  • @Samuel-Tu 按照给出的ppt,是可以添加湍流模型的,具体到多高的雷诺数,我也不是很清楚

    http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2015/HrvojeJasak/ImmersedBoundary.pdf



  • 手头没有fe41的源代码, 你的思路是对的,但是可能你还需要看一下这个边界条件怎么update的,hbt[patchi] = immersedBoundaryFvPatchScalarField::typeName;这个只是赋值



  • @东岳 非常感谢东岳老师!按照您的指导,我设置了新的边界条件immersedboundaryEnthalpyFvPatchField,其他部分的设置目前都正常,但是想要使用浸没温度边界上的函数来更新焓值时会报错,我的程序部分如下所示:

        const label patchi = patch().index();
        
        wordList type = thermo.T().boundaryField().types();
    
        if(isA<immersedBoundaryFvPatchScalarField>(type[patchi]))
        {
        immersedBoundaryFvPatchScalarField& TIb =
            thermo.T().boundaryField()[patchi];
    
    	scalarField & Tref = TIb.refValue();
        }  
    

    之后程序就会报错,

    error: invalid initialization of reference of type ‘Foam::immersedBoundaryFvPatchScalarField& {aka Foam::immersedBoundaryFvPatchField<double>&}’ from expression of type ‘const Foam::fvPatchField<double>’
             thermo.T().boundaryField()[patchi];
    

    应该是无法将基类转换为派生类,想和老师请教一下遇到这个问题要怎么解决呢,麻烦老师了!!!:xiexie:


Log in to reply
 

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