/** \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));
    }
  }
}