Foam::Vandermonde::Vandermonde ( const scalarDiagonalMatrix& A ) : scalarDiagonalMatrix(A), m_(A.size()) {}
void multiply ( scalarSquareMatrix& ans, // value changed in return const scalarDiagonalMatrix& A, const scalarSquareMatrix& B, const scalarDiagonalMatrix& C ) { if (A.size() != B.n()) { FatalErrorIn ( "multiply(" "scalarRectangularMatrix& answer)," "const DiagonalMatrix<scalar>& A, " "const scalarRectangularMatrix& B, " "const DiagonalMatrix<scalar>& C" ) << "A and B must have identical inner dimensions but A.m = " << A.size() << " and B.n = " << B.n() << abort(FatalError); } if (B.m() != C.size()) { FatalErrorIn ( "multiply(" "scalarRectangularMatrix& answer)," "const DiagonalMatrix<scalar>& A, " "const scalarRectangularMatrix& B, " "const DiagonalMatrix<scalar>& C" ) << "B and C must have identical inner dimensions but B.m = " << B.m() << " and C.n = " << C.size() << abort(FatalError); } ans = scalarSquareMatrix(B.n(), B.n(), scalar(0)); for (register label i = 0; i < A.size(); i++) { for (register label j = 0; j < C.size(); j++) { ans[i][j] = A[i] * B[i][j] * C[j]; } } }
void multiply ( scalarSquareMatrix& ans, // value changed in return const scalarRectangularMatrix& A, const scalarRectangularMatrix& B, const scalarRectangularMatrix& C, const scalarDiagonalMatrix& D ) { if (A.m() != B.n()) { FatalErrorIn ( "multiply(" "scalarRectangularMatrix& answer)," "const scalarRectangularMatrix& A, " "const scalarRectangularMatrix& B, " "const scalarRectangularMatrix& C, " "const DiagonalMatrix<scalar>& D" ) << "A and B must have identical inner dimensions but A.m = " << A.m() << " and B.n = " << B.n() << abort(FatalError); } if (B.m() != C.n()) { FatalErrorIn ( "multiply(" "scalarRectangularMatrix& answer)," "const scalarRectangularMatrix& A, " "const scalarRectangularMatrix& B, " "const scalarRectangularMatrix& C, " "const DiagonalMatrix<scalar>& D" ) << "B and C must have identical inner dimensions but B.m = " << B.m() << " and C.n = " << C.n() << abort(FatalError); } if (C.m() != D.size()) { FatalErrorIn ( "multiply(" "scalarRectangularMatrix& answer)," "const scalarRectangularMatrix& A, " "const scalarRectangularMatrix& B, " "const scalarRectangularMatrix& C, " "const DiagonalMatrix<scalar>& D" ) << "C and D must have identical inner dimensions but C.m = " << C.m() << " and D.n = " << D.size() << abort(FatalError); } ans = scalarSquareMatrix(D.size(), D.size(), scalar(0)); for (register label i = 0; i < A.n(); i++) { for (register label g = 0; g < C.m(); g++) { for (register label l = 0; l < C.n(); l++) { scalar ab = 0; for (register label j = 0; j < A.m(); j++) { ab += A[i][j]*B[j][l]; } ans[i][g] += C[l][g] * ab; } ans[i][g] = ans[i][g] * D[g]; } } }