61 template <
typename Scalar,
typename LocalOrdinal,
typename GlobalOrdinal=LocalOrdinal,
typename Node=KokkosClassic::DefaultNode::DefaultNodeType>
94 typedef Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> TO;
95 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> TCM;
96 typedef Tpetra::RowMatrixTransposer<Scalar,LocalOrdinal,GlobalOrdinal,Node> TRMT;
101 RCP<TO> tpetra_fwd_op = thyra_tpetra_fwd_op->getTpetraOperator();
104 TRMT transposer(tpetra_fwd_mat);
105 RCP<TCM> tpetra_trans_mat = transposer.createTranspose();
106 return tpetraLinearOp(thyra_op->range(), thyra_op->domain(),
117 MEB::OutArgs<Scalar> model_outArgs =
119 MEB::OutArgsSetup<Scalar> outArgs;
120 outArgs.setModelEvalDescription(this->
description());
121 outArgs.setSupports(MEB::OUT_ARG_f);
122 outArgs.setSupports(MEB::OUT_ARG_W_op);
128 const ModelEvaluatorBase::InArgs<Scalar> &inArgs,
129 const ModelEvaluatorBase::OutArgs<Scalar> &outArgs)
const
132 typedef TpetraLinearOp<Scalar,LocalOrdinal,GlobalOrdinal,Node> TLO;
133 typedef Tpetra::Operator<Scalar,LocalOrdinal,GlobalOrdinal,Node> TO;
134 typedef Tpetra::CrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> TCM;
135 typedef Tpetra::RowMatrixTransposer<Scalar,LocalOrdinal,GlobalOrdinal,Node> TRMT;
137 MEB::OutArgs<Scalar> model_outArgs =
140 if (model_outArgs.supports(MEB::OUT_ARG_W_op) &&
145 model_outArgs->set_W_op(thyra_fwd_op);
151 RCP<TLO> thyra_tpetra_fwd_op =
153 RCP<TO> tpetra_fwd_op = thyra_tpetra_fwd_op->getTpetraOperator();
154 RCP<TCM> tpetra_fwd_mat =
156 TRMT transposer(tpetra_fwd_mat);
157 RCP<TCM> tpetra_trans_mat = transposer.createTranspose();
160 RCP<LOB> thyra_adj_op = outArgs.get_W_op();
161 RCP<TLO> thyra_tpetra_adj_op =
163 RCP<TO> tpetra_adj_op = thyra_tpetra_adj_op->getTpetraOperator();
164 RCP<TCM> tpetra_adj_mat =
166 *tpetra_adj_mat = *tpetra_trans_mat;