Exemplo n.º 1
0
Foam::Vandermonde::Vandermonde
(
    const scalarDiagonalMatrix& A
)
    :
    scalarDiagonalMatrix(A),
    m_(A.size())
{}
Exemplo n.º 2
0
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];
        }
    }

}
Exemplo n.º 3
0
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];
        }
    }

}