29 template <
typename Scalar,
typename LocalOrdinal,
typename GlobalOrdinal=LocalOrdinal,
typename Node=Tpetra::KokkosClassic::DefaultNode::DefaultNodeType>
62 typedef Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> TO;
63 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> TCM;
64 typedef Tpetra::RowMatrixTransposer<Scalar,LocalOrdinal,GlobalOrdinal,Node> TRMT;
69 RCP<TO> tpetra_fwd_op = thyra_tpetra_fwd_op->getTpetraOperator();
72 TRMT transposer(tpetra_fwd_mat);
73 RCP<TCM> tpetra_trans_mat = transposer.createTranspose();
74 return tpetraLinearOp(thyra_op->range(), thyra_op->domain(),
85 MEB::OutArgs<Scalar> model_outArgs =
87 MEB::OutArgsSetup<Scalar> outArgs;
88 outArgs.setModelEvalDescription(this->
description());
89 outArgs.setSupports(MEB::OUT_ARG_f);
90 outArgs.setSupports(MEB::OUT_ARG_W_op);
96 const ModelEvaluatorBase::InArgs<Scalar> &inArgs,
97 const ModelEvaluatorBase::OutArgs<Scalar> &outArgs)
const
99 typedef ModelEvaluatorBase MEB;
100 typedef TpetraLinearOp<Scalar,LocalOrdinal,GlobalOrdinal,Node> TLO;
101 typedef Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> TO;
102 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> TCM;
103 typedef Tpetra::RowMatrixTransposer<Scalar,LocalOrdinal,GlobalOrdinal,Node> TRMT;
105 MEB::OutArgs<Scalar> model_outArgs =
108 if (model_outArgs.supports(MEB::OUT_ARG_W_op) &&
113 model_outArgs->set_W_op(thyra_fwd_op);
119 RCP<TLO> thyra_tpetra_fwd_op =
121 RCP<TO> tpetra_fwd_op = thyra_tpetra_fwd_op->getTpetraOperator();
122 RCP<TCM> tpetra_fwd_mat =
124 TRMT transposer(tpetra_fwd_mat);
125 RCP<TCM> tpetra_trans_mat = transposer.createTranspose();
128 RCP<LOB> thyra_adj_op = outArgs.get_W_op();
129 RCP<TLO> thyra_tpetra_adj_op =
131 RCP<TO> tpetra_adj_op = thyra_tpetra_adj_op->getTpetraOperator();
132 RCP<TCM> tpetra_adj_mat =
134 *tpetra_adj_mat = *tpetra_trans_mat;