int MonolithicBlockComposedDN::solveSystem ( const vector_Type& rhs, vector_Type& step, solverPtr_Type& linearSolver )
{
    assert (M_blockPrecs.get() );

    if (!set() )
    {
        for (UInt k = 0; k < M_blocks.size(); ++k)
        {
            push_back_precs (M_blocks[ (*M_blockReordering) [k]]);
        }
    }
    else
    {
        for (UInt k = 0; k < M_blocks.size(); ++k)
        {
            if (M_recompute[ (*M_blockReordering) [k]])
            {
                linearSolver->displayer()->leaderPrint ("  M-  Computing preconditioner factor:         ", k, "\n");
                replace_precs (M_blocks[ (*M_blockReordering) [k]], k);
            }
            else
            {
                linearSolver->displayer()->leaderPrint ("  M-  Reusing preconditioner factor:           ", k, "\n");
            }
        }
    }
    return linearSolver->solveSystem (rhs, step, boost::static_pointer_cast<Preconditioner> (M_blockPrecs) );
}
예제 #2
0
int MonolithicBlockMatrix::solveSystem( const vector_Type& rhs, vector_Type& step, solverPtr_Type& linearSolver)
{
    return linearSolver->solveSystem(rhs, step, M_globalMatrix);
}