jumpCyclic边界条件的问题


  • OpenFOAM讲师

    94 of file jumpCyclicFvPatchField.C

    template<class Type>
    Foam::tmp<Foam::Field<Type>>
    Foam::jumpCyclicFvPatchField<Type>::patchNeighbourField() const
    {
        const Field<Type>& iField = this->primitiveField();
        const labelUList& nbrFaceCells =
            this->cyclicPatch().neighbFvPatch().faceCells();
    
        tmp<Field<Type>> tpnf(new Field<Type>(this->size()));
        Field<Type>& pnf = tpnf.ref();
    
        Field<Type> jf(this->jump());
        if (!this->cyclicPatch().owner())
        {
            jf *= -1.0;
        }
    
        if (this->doTransform())
        {
            forAll(*this, facei)
            {
                pnf[facei] = transform
                (
                    this->forwardT()[0], iField[nbrFaceCells[facei]]
                ) - jf[facei];
            }
        }
        else
        {
            forAll(*this, facei)
            {
                pnf[facei] = iField[nbrFaceCells[facei]] - jf[facei];
            }
        }
    
        return tpnf;
    }
    

    感觉数学上jump应该是界面两侧物理量的jump,实际被搞成了界面两侧单元物理量的jump。

    这个大家怎么看?



  • 界面两侧物理量和界面两侧单元物理量 有什么差别?我发现jump的值过大,会造成发散,与fluent里面的porous jump 可能不一样


  • OpenFOAM讲师

    @liuyf
    截面jump是 p(x=0) == p(x=1) + dp
    截面两侧单位jump 是 p(x=0+dx/2) == p(x=1-dx/2) + dp

    边界网格越粗,这个差异应该会越大吧。