/** \brief . */ ResponseAndFwdSensPoint( const Scalar &t, const RCP<const Thyra::VectorBase<Scalar> > &g, const RCP<const Thyra::MultiVectorBase<Scalar> > &DgDp ) :t_(t), g_(g), DgDp_(DgDp) { #ifdef HAVE_RYTHMOS_DEBUG TEUCHOS_TEST_FOR_EXCEPT(is_null(g)); TEUCHOS_TEST_FOR_EXCEPT(is_null(DgDp)); THYRA_ASSERT_VEC_SPACES("Rythmos::ResponseAndFwdSensPoint()", *g->space(), * DgDp->range() ); #endif }
void doExplicitMultiVectorAdjoint( const MultiVectorBase<Scalar>& mvIn, MultiVectorBase<Scalar>* mvTransOut ) { typedef Teuchos::ScalarTraits<Scalar> ST; #ifdef TEUCHOS_DEBUG TEST_FOR_EXCEPT(0==mvTransOut); THYRA_ASSERT_VEC_SPACES("doExplicitMultiVectorAdjoint(...)", *mvIn.domain(), *mvTransOut->range() ); THYRA_ASSERT_VEC_SPACES("doExplicitMultiVectorAdjoint(...)", *mvIn.range(), *mvTransOut->domain() ); #endif ConstDetachedMultiVectorView<Scalar> dMvIn(mvIn); DetachedMultiVectorView<Scalar> dMvTransOut(*mvTransOut); const int m = dMvIn.subDim(); const int n = dMvIn.numSubCols(); for ( int j = 0; j < n; ++j ) { for ( int i = 0; i < m; ++i ) { dMvTransOut(j,i) = ST::conjugate(dMvIn(i,j)); } } }