Пример #1
0
void DiagonalROME<Scalar>::setDiagonalBarVector(
    const RCP<const Thyra::VectorBase<Scalar> > &diag_bar)
{

    typedef Teuchos::ScalarTraits<Scalar> ST;
    using Teuchos::rcp_dynamic_cast;
    using Thyra::createMember;
    using Thyra::ele_wise_divide;
    using Thyra::V_S;

    diag_bar_ = diag_bar.assert_not_null();

    // Reset the scalar product for p_space!

    RCP<Thyra::VectorBase<Scalar> > s_bar = createMember<Scalar>(p_space_);

    // s_bar[i] = diag[i] / diag_bar[i]
    V_S( s_bar.ptr(), ST::zero() );
    ele_wise_divide( ST::one(), *diag_, *diag_bar_, s_bar.ptr() );
    s_bar_ = s_bar;

    const RCP<Thyra::ScalarProdVectorSpaceBase<Scalar> > sp_p_space =
        rcp_dynamic_cast<Thyra::ScalarProdVectorSpaceBase<Scalar> >(p_space_, true);
    //sp_p_space->setScalarProd(diagonalScalarProd<Scalar>(s_bar_));

}
Пример #2
0
DiagonalROME<Scalar>::DiagonalROME(
    const int localDim,
    const RCP<const Teuchos::Comm<Thyra::Ordinal> > &comm
)
    :Np_(1), Ng_(1), comm_(comm), localDim_(localDim),
     nonlinearTermFactor_(0.0), g_offset_(0.0)
{

    typedef Teuchos::ScalarTraits<Scalar> ST;
    using Thyra::createMember;

    TEUCHOS_ASSERT( localDim > 0 );

    // Get the comm
    if (is_null(comm_)) {
        comm_ = Teuchos::DefaultComm<Thyra::Ordinal>::getComm();
    }

    // Locally replicated space for g
    g_space_ = Thyra::locallyReplicatedDefaultSpmdVectorSpace<Scalar>(comm_, 1);

    // Distributed space for p
    p_space_ = Thyra::defaultSpmdVectorSpace<Scalar>(comm_, localDim, -1);

    // Default solution
    const RCP<Thyra::VectorBase<Scalar> > ps = createMember<Scalar>(p_space_);
    V_S(ps.ptr(), ST::zero());
    ps_ = ps;

    // Default diagonal
    const RCP<Thyra::VectorBase<Scalar> > diag = createMember<Scalar>(p_space_);
    V_S(diag.ptr(), ST::one());
    diag_ = diag;
    diag_bar_ = diag;

    // Default inner product
    const RCP<Thyra::VectorBase<Scalar> > s_bar = createMember<Scalar>(p_space_);
    V_S(s_bar.ptr(), ST::one());
    s_bar_ = s_bar;

    // Default response offset
    g_offset_ = ST::zero();

}