📄 wmlintpakimauniform3.cpp
字号:
- ((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 + -