Example #1
0
  void makeStokesMatrix (Ref<MatrixXd> stokesMatrix,
                         const int M,
                         const int N,
                         const double h,
                         const double * viscosityData) {
    #ifdef DEBUG
      cout << "<Creating " << 3 * M * N - M - N << "x" << 3 * M * N - M - N << " stokesMatrix>" << endl << endl;
    #endif
    stokesMatrix = MatrixXd::Zero (3 * M * N - M - N, 3 * M * N - M - N);

    makeLaplacianXBlock (stokesMatrix.block (0,                 0,                 M * (N - 1), M * (N - 1)), M, N, h, viscosityData);
    makeLaplacianYBlock (stokesMatrix.block (M * (N - 1),       M * (N - 1),       (M - 1) * N, (M - 1) * N), M, N, h, viscosityData);
    makeGradXBlock      (stokesMatrix.block (0,                 2 * M * N - M - N, M * (N - 1), M * N),       M, N, h);
    makeGradYBlock      (stokesMatrix.block (M * (N - 1),       2 * M * N - M - N, (M - 1) * N, M * N),       M, N, h);
    makeDivXBlock       (stokesMatrix.block (2 * M * N - M - N, 0,                  M * N,      M * (N - 1)), M, N, h);
    makeDivYBlock       (stokesMatrix.block (2 * M * N - M - N, M * (N - 1),        M * N,      (M - 1) * N), M, N, h);
  
    #ifdef DEBUG
      cout << endl;
    #endif
  }
Example #2
0
  void makeStokesMatrix (SparseMatrix<double>& stokesMatrix,
                         const int M,
                         const int N,
                         const double h,
                         const double * viscosityData) {
    #ifdef DEBUG
      cout << "<Creating " << 3 * M * N - M - N << "x" << 3 * M * N - M - N << " stokesMatrix>" << endl;
    #endif

    vector<Triplet<double> > tripletList;

    makeLaplacianXBlock (tripletList, 0,                 0,                 M, N, h, viscosityData);
    makeLaplacianYBlock (tripletList, M * (N - 1),       M * (N - 1),       M, N, h, viscosityData);
    makeGradXBlock      (tripletList, 0,                 2 * M * N - M - N, M, N, h);
    makeGradYBlock      (tripletList, M * (N - 1),       2 * M * N - M - N, M, N, h);
    makeDivXBlock       (tripletList, 2 * M * N - M - N, 0,                 M, N, h);
    makeDivYBlock       (tripletList, 2 * M * N - M - N, M * (N - 1),       M, N, h);

    stokesMatrix.setFromTriplets (tripletList.begin(), tripletList.end());
    #ifdef DEBUG
      cout << endl;
    #endif
  }