示例#1
0
文件: cfd.cpp 项目: AtomAleks/PyProp
    void applyBCs(scalarField& P) const
    {
        // Apply the Neumann boundary condition that grad(P) dot surface = 0
        int xN = P.ubound(firstDim);
        int yN = P.ubound(secondDim);
        int zN = P.ubound(thirdDim);

        Range all = Range::all();

        // lower x
        P(0,all,all) = P(2,all,all);
        P(1,all,all) = P(2,all,all);

        // upper x
        P(xN,all,all) = P(xN-2,all,all);
        P(xN-1,all,all) = P(xN-2,all,all);

        // lower y
        P(all,0,all) = P(all,2,all);
        P(all,1,all) = P(all,2,all);

        // upper y
        P(all,yN,all) = P(all,yN-2,all);
        P(all,yN-1,all) = P(all,yN-2,all);

        // lower z
        P(all,all,0) = P(all,all,2) - 2*gravityPressureGradient_;
        P(all,all,1) = P(all,all,2) - gravityPressureGradient_;

        // upper z
        P(all,all,zN) = P(all,all,zN-2) + 2*gravityPressureGradient_;
        P(all,all,zN-1) = P(all,all,zN-2) + gravityPressureGradient_;
    }