void makeBoundaryMatrix (Ref<MatrixXd> boundaryMatrix, const int M, const int N, const double h, const double * viscosityData) { #ifdef DEBUG cout << "<Creating " << 3 * M * N - M - N << "x" << 2 * M + 2 * N << " BoundaryMatrix>" << endl; #endif boundaryMatrix = MatrixXd::Zero (3 * M * N - M - N, 2 * M + 2 * N); makeBCLaplacianXBlock (boundaryMatrix.block (0, 0, M * (N - 1), 2 * M), M, N, h, viscosityData); makeBCLaplacianYBlock (boundaryMatrix.block (M * (N - 1), 2 * M, (M - 1) * N, 2 * N), M, N, h, viscosityData); makeBCDivXBlock (boundaryMatrix.block (2 * M * N - M - N, 0, M * N, 2 * M), M, N, h); makeBCDivYBlock (boundaryMatrix.block (2 * M * N - M - N, 2 * M, M * N, 2 * N), M, N, h); }
void makeBoundaryMatrix (SparseMatrix<double>& boundaryMatrix, const int M, const int N, const double h, const double * viscosityData) { #ifdef DEBUG cout << "<Creating " << 3 * M * N - M - N << "x" << 2 * M + 2 * N << " BoundaryMatrix>" << endl; #endif vector<Triplet<double> > tripletList; makeBCLaplacianXBlock (tripletList, 0, 0, M, N, h, viscosityData); makeBCLaplacianYBlock (tripletList, M * (N - 1), 2 * M, M, N, h, viscosityData); makeBCDivXBlock (tripletList, 2 * M * N - M - N, 0, M, N, h); makeBCDivYBlock (tripletList, 2 * M * N - M - N, 2 * M, M, N, h); boundaryMatrix.setFromTriplets (tripletList.begin(), tripletList.end()); #ifdef DEBUG cout << endl; #endif }