⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmlintpakimauniform3.cpp

📁 3D Game Engine Design Source Code非常棒
💻 CPP
📖 第 1 页 / 共 4 页
字号:
          - ((Real)4.0)*aaafF[iZ1][iY][iX2]
          + ((Real)3.0)*aaafF[iZ2][iY][iX0]
          - ((Real)4.0)*aaafF[iZ2][iY][iX1]
          +      aaafF[iZ2][iY][iX2]);

        // x-edges of y-slice
        for (iX = 1; iX < iXBoundM1; iX++)
        {
            aaafFXZ[0][iY][iX] = ((Real)0.25)*fInvDXDZ*(
                ((Real)3.0)*(aaafF[0][iY][iX-1] - aaafF[0][iY][iX+1]) -
                ((Real)4.0)*(aaafF[1][iY][iX-1] - aaafF[1][iY][iX+1]) +
                (aaafF[2][iY][iX-1] - aaafF[2][iY][iX+1]));

            aaafFXZ[iZBoundM1][iY][iX] = ((Real)0.25)*fInvDXDZ*(
                ((Real)3.0)*(aaafF[iZ0][iY][iX-1] - aaafF[iZ0][iY][iX+1]) -
                ((Real)4.0)*(aaafF[iZ1][iY][iX-1] - aaafF[iZ1][iY][iX+1]) +
                (aaafF[iZ2][iY][iX-1] - aaafF[iZ2][iY][iX+1]));
        }

        // z-edges of y-slice
        for (iZ = 1; iZ < iZBoundM1; iZ++)
        {
            aaafFXZ[iZ][iY][0] = ((Real)0.25)*fInvDXDZ*(
                ((Real)3.0)*(aaafF[iZ-1][iY][0] - aaafF[iZ+1][iY][0]) -
                ((Real)4.0)*(aaafF[iZ-1][iY][1] - aaafF[iZ+1][iY][1]) +
                (aaafF[iZ-1][iY][2] - aaafF[iZ+1][iY][2]));

            aaafFXZ[iZ][iY][iXBoundM1] = ((Real)0.25)*fInvDXDZ*(
                ((Real)3.0)*(aaafF[iZ-1][iY][iX0] - aaafF[iZ+1][iY][iX0]) -
                ((Real)4.0)*(aaafF[iZ-1][iY][iX1] - aaafF[iZ+1][iY][iX1]) +
                (aaafF[iZ-1][iY][iX2] - aaafF[iZ+1][iY][iX2]));
        }

        // interior of y-slice
        for (iZ = 1; iZ < iZBoundM1; iZ++)
        {
            for (iX = 1; iX < iXBoundM1; iX++)
            {
                aaafFXZ[iZ][iY][iX] = ((Real)0.25)*fInvDXDZ*(
                    aaafF[iZ-1][iY][iX-1] - aaafF[iZ-1][iY][iX+1] -
                    aaafF[iZ+1][iY][iX-1] + aaafF[iZ+1][iY][iX+1]);
            }
        }
    }

    for (iX = 0; iX < iXBound; iX++)
    {
        // corners of x-slice
        aaafFYZ[0][0][iX] = ((Real)0.25)*fInvDYDZ*(
              ((Real)9.0)*aaafF[0][0][iX]
            -((Real)12.0)*aaafF[0][1][iX]
            + ((Real)3.0)*aaafF[0][2][iX]
            -((Real)12.0)*aaafF[1][0][iX]
            +((Real)16.0)*aaafF[1][1][iX]
            - ((Real)4.0)*aaafF[1][2][iX]
            + ((Real)3.0)*aaafF[2][0][iX]
            - ((Real)4.0)*aaafF[2][1][iX]
            +             aaafF[2][2][iX]);

        aaafFYZ[0][iYBoundM1][iX] = ((Real)0.25)*fInvDYDZ*(
              ((Real)9.0)*aaafF[0][iY0][iX]
            -((Real)12.0)*aaafF[0][iY1][iX]
            + ((Real)3.0)*aaafF[0][iY2][iX]
            -((Real)12.0)*aaafF[1][iY0][iX]
            +((Real)16.0)*aaafF[1][iY1][iX]
            - ((Real)4.0)*aaafF[1][iY2][iX]
            + ((Real)3.0)*aaafF[2][iY0][iX]
            - ((Real)4.0)*aaafF[2][iY1][iX]
            +             aaafF[2][iY2][iX]);

        aaafFYZ[iZBoundM1][0][iX] = ((Real)0.25)*fInvDYDZ*(
              ((Real)9.0)*aaafF[iZ0][0][iX]
            -((Real)12.0)*aaafF[iZ0][1][iX]
            + ((Real)3.0)*aaafF[iZ0][2][iX]
            -((Real)12.0)*aaafF[iZ1][0][iX]
            +((Real)16.0)*aaafF[iZ1][1][iX]
            - ((Real)4.0)*aaafF[iZ1][2][iX]
            + ((Real)3.0)*aaafF[iZ2][0][iX]
            - ((Real)4.0)*aaafF[iZ2][1][iX]
            +             aaafF[iZ2][2][iX]);

        aaafFYZ[iZBoundM1][iYBoundM1][iX] = ((Real)0.25)*fInvDYDZ*(
            ((Real)9.0)*aaafF[iZ0][iY0][iX]
          -((Real)12.0)*aaafF[iZ0][iY1][iX]
          + ((Real)3.0)*aaafF[iZ0][iY2][iX]
          -((Real)12.0)*aaafF[iZ1][iY0][iX]
          +((Real)16.0)*aaafF[iZ1][iY1][iX]
          - ((Real)4.0)*aaafF[iZ1][iY2][iX]
          + ((Real)3.0)*aaafF[iZ2][iY0][iX]
          - ((Real)4.0)*aaafF[iZ2][iY1][iX]
          +             aaafF[iZ2][iY2][iX]);

        // y-edges of x-slice
        for (iY = 1; iY < iYBoundM1; iY++)
        {
            aaafFYZ[0][iY][iX] = ((Real)0.25)*fInvDYDZ*(
                ((Real)3.0)*(aaafF[0][iY-1][iX] - aaafF[0][iY+1][iX]) -
                ((Real)4.0)*(aaafF[1][iY-1][iX] - aaafF[1][iY+1][iX]) +
                (aaafF[2][iY-1][iX] - aaafF[2][iY+1][iX]));

            aaafFYZ[iZBoundM1][iY][iX] = ((Real)0.25)*fInvDYDZ*(
                ((Real)3.0)*(aaafF[iZ0][iY-1][iX] - aaafF[iZ0][iY+1][iX]) -
                ((Real)4.0)*(aaafF[iZ1][iY-1][iX] - aaafF[iZ1][iY+1][iX]) +
                (aaafF[iZ2][iY-1][iX] - aaafF[iZ2][iY+1][iX]));
        }

        // z-edges of x-slice
        for (iZ = 1; iZ < iZBoundM1; iZ++)
        {
            aaafFYZ[iZ][0][iX] = ((Real)0.25)*fInvDYDZ*(
                ((Real)3.0)*(aaafF[iZ-1][0][iX] - aaafF[iZ+1][0][iX]) -
                ((Real)4.0)*(aaafF[iZ-1][1][iX] - aaafF[iZ+1][1][iX]) +
                (aaafF[iZ-1][2][iX] - aaafF[iZ+1][2][iX]));

            aaafFYZ[iZ][iYBoundM1][iX] = ((Real)0.25)*fInvDYDZ*(
                ((Real)3.0)*(aaafF[iZ-1][iY0][iX] - aaafF[iZ+1][iY0][iX]) -
                ((Real)4.0)*(aaafF[iZ-1][iY1][iX] - aaafF[iZ+1][iY1][iX]) +
                (aaafF[iZ-1][iY2][iX] - aaafF[iZ+1][iY2][iX]));
        }

        // interior of x-slice
        for (iZ = 1; iZ < iZBoundM1; iZ++)
        {
            for (iY = 1; iY < iYBoundM1; iY++)
            {
                aaafFYZ[iZ][iY][iX] = ((Real)0.25)*fInvDYDZ*(
                    aaafF[iZ-1][iY-1][iX] - aaafF[iZ-1][iY+1][iX] -
                    aaafF[iZ+1][iY-1][iX] + aaafF[iZ+1][iY+1][iX]);
            }
        }
    }

    // construct third-order derivatives
    Real*** aaafFXYZ;
    Allocate3D(iXBound,iYBound,iZBound,aaafFXYZ);

    // convolution masks
    //   centered difference, O(h^2)
    Real afCDer[3] = { -(Real)0.5, (Real)0.0, (Real)0.5f };
    //   one-sided difference, O(h^2)
    Real afODer[3] = { -(Real)1.5, (Real)2.0, -(Real)0.5 };
    Real fMask;

    // corners
    aaafFXYZ[0][0][0] = (Real)0.0;
    aaafFXYZ[0][0][iXBoundM1] = (Real)0.0;
    aaafFXYZ[0][iYBoundM1][0] = (Real)0.0;
    aaafFXYZ[0][iYBoundM1][iXBoundM1] = (Real)0.0;
    aaafFXYZ[iZBoundM1][0][0] = (Real)0.0;
    aaafFXYZ[iZBoundM1][0][iXBoundM1] = (Real)0.0;
    aaafFXYZ[iZBoundM1][iYBoundM1][0] = (Real)0.0;
    aaafFXYZ[iZBoundM1][iYBoundM1][iXBoundM1] = (Real)0.0;
    for (iZ = 0; iZ <= 2; iZ++)
    {
        for (iY = 0; iY <= 2; iY++)
        {
            for (iX = 0; iX <= 2; iX++)
            {
                fMask = fInvDXDYDZ*afODer[iX]*afODer[iY]*afODer[iZ];

                aaafFXYZ[0][0][0] += fMask*
                    aaafF[iZ][iY][iX];

                aaafFXYZ[0][0][iXBoundM1] += fMask*
                    aaafF[iZ][iY][iXBoundM1-iX];

                aaafFXYZ[0][iYBoundM1][0] += fMask*
                    aaafF[iZ][iYBoundM1-iY][iX];

                aaafFXYZ[0][iYBoundM1][iXBoundM1] += fMask*
                    aaafF[iZ][iYBoundM1-iY][iXBoundM1-iX];

                aaafFXYZ[iZBoundM1][0][0] += fMask*
                    aaafF[iZBoundM1-iZ][iY][iX];

                aaafFXYZ[iZBoundM1][0][iXBoundM1] += fMask*
                    aaafF[iZBoundM1-iZ][iY][iXBoundM1-iX];

                aaafFXYZ[iZBoundM1][iYBoundM1][0] += fMask*
                    aaafF[iZBoundM1-iZ][iYBoundM1-iY][iX];

                aaafFXYZ[iZBoundM1][iYBoundM1][iXBoundM1] += fMask*
                    aaafF[iZBoundM1-iZ][iYBoundM1-iY][iXBoundM1-iX];
            }
        }
    }

    // x-edges
    for (iX0 = 1; iX0 < iXBoundM1; iX0++)
    {
        aaafFXYZ[0][0][iX0] = (Real)0.0;
        aaafFXYZ[0][iYBoundM1][iX0] = (Real)0.0;
        aaafFXYZ[iZBoundM1][0][iX0] = (Real)0.0;
        aaafFXYZ[iZBoundM1][iYBoundM1][iX0] = (Real)0.0;
        for (iZ = 0; iZ <= 2; iZ++)
        {
            for (iY = 0; iY <= 2; iY++)
            {
                for (iX = 0; iX <= 2; iX++)
                {
                    fMask = fInvDXDYDZ*afCDer[iX]*afODer[iY]*afODer[iZ];

                    aaafFXYZ[0][0][iX0] += fMask*
                        aaafF[iZ][iY][iX0+iX-1];

                    aaafFXYZ[0][iYBoundM1][iX0] += fMask*
                        aaafF[iZ][iYBoundM1-iY][iX0+iX-1];

                    aaafFXYZ[iZBoundM1][0][iX0] += fMask*
                        aaafF[iZBoundM1-iZ][iY][iX0+iX-1];

                    aaafFXYZ[iZBoundM1][iYBoundM1][iX0] += fMask*
                        aaafF[iZBoundM1-iZ][iYBoundM1-iY][iX0+iX-1];
                }
            }
        }
    }

    // y-edges
    for (iY0 = 1; iY0 < iYBoundM1; iY0++)
    {
        aaafFXYZ[0][iY0][0] = (Real)0.0;
        aaafFXYZ[0][iY0][iXBoundM1] = (Real)0.0;
        aaafFXYZ[iZBoundM1][iY0][0] = (Real)0.0;
        aaafFXYZ[iZBoundM1][iY0][iXBoundM1] = (Real)0.0;
        for (iZ = 0; iZ <= 2; iZ++)
        {
            for (iY = 0; iY <= 2; iY++)
            {
                for (iX = 0; iX <= 2; iX++)
                {
                    fMask = fInvDXDYDZ*afODer[iX]*afCDer[iY]*afODer[iZ];

                    aaafFXYZ[0][iY0][0] += fMask*
                        aaafF[iZ][iY0+iY-1][iX];

                    aaafFXYZ[0][iY0][iXBoundM1] += fMask*
                        aaafF[iZ][iY0+iY-1][iXBoundM1-iX];

                    aaafFXYZ[iZBoundM1][iY0][0] += fMask*
                        aaafF[iZBoundM1-iZ][iY0+iY-1][iX];

                    aaafFXYZ[iZBoundM1][iY0][iXBoundM1] += fMask*
                        aaafF[iZBoundM1-iZ][iY0+iY-1][iXBoundM1-iX];
                }
            }
        }
    }

    // z-edges
    for (iZ0 = 1; iZ0 < iZBoundM1; iZ0++)
    {
        aaafFXYZ[iZ0][0][0] = (Real)0.0;
        aaafFXYZ[iZ0][0][iXBoundM1] = (Real)0.0;
        aaafFXYZ[iZ0][iYBoundM1][0] = (Real)0.0;
        aaafFXYZ[iZ0][iYBoundM1][iXBoundM1] = (Real)0.0;
        for (iZ = 0; iZ <= 2; iZ++)
        {
            for (iY = 0; iY <= 2; iY++)
            {
                for (iX = 0; iX <= 2; iX++)
                {
                    fMask = fInvDXDYDZ*afODer[iX]*afODer[iY]*afCDer[iZ];

                    aaafFXYZ[iZ0][0][0] += fMask*
                        aaafF[iZ0+iZ-1][iY][iX];

                    aaafFXYZ[iZ0][0][iXBoundM1] += fMask*
                        aaafF[iZ0+iZ-1][iY][iXBoundM1-iX];

                    aaafFXYZ[iZ0][iYBoundM1][0] += fMask*
                        aaafF[iZ0+iZ-1][iYBoundM1-iY][iX];

                    aaafFXYZ[iZ0][iYBoundM1][iXBoundM1] += fMask*
                        aaafF[iZ0+iZ-1][iYBoundM1-iY][iXBoundM1-iX];
                }
            }
        }
    }

    // xy-faces
    for (iY0 = 1; iY0 < iYBoundM1; iY0++)
    {
        for (iX0 = 1; iX0 < iXBoundM1; iX0++)
        {
            aaafFXYZ[0][iY0][iX0] = (Real)0.0;
            aaafFXYZ[iZBoundM1][iY0][iX0] = (Real)0.0;
            for (iZ = 0; iZ <= 2; iZ++)
            {
                for (iY = 0; iY <= 2; iY++)
                {
                    for (iX = 0; iX <= 2; iX++)
                    {
                        fMask = fInvDXDYDZ*afCDer[iX]*afCDer[iY]*afODer[iZ];

                        aaafFXYZ[0][iY0][iX0] += fMask*
                            aaafF[iZ][iY0+iY-1][iX0+iX-1];

                        aaafFXYZ[iZBoundM1][iY0][iX0] += fMask*
                            aaafF[iZBoundM1-iZ][iY0+iY-1][iX0+iX-1];
                    }
                }
            }
        }
    }

    // xz-faces
    for (iZ0 = 1; iZ0 < iZBoundM1; iZ0++)
    {
        for (iX0 = 1; iX0 < iXBoundM1; iX0++)
        {
            aaafFXYZ[iZ0][0][iX0] = (Real)0.0;
            aaafFXYZ[iZ0][iYBoundM1][iX0] = (Real)0.0;
            for (iZ = 0; iZ <= 2; iZ++)
            {
                for (iY = 0; iY <= 2; iY++)
                {
                    for (iX = 0; iX <= 2; iX++)
                    {
                        fMask = fInvDXDYDZ*afCDer[iX]*afODer[iY]*afCDer[iZ];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -