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_; }