1253template<
class Scalar>
 
 1262template<
class Scalar>
 
 1272template<
class Scalar>
 
 1281template<
class Scalar>
 
 1286  return W_properties_;
 
 
 1290template<
class Scalar>
 
 1300template<
class Scalar>
 
 1309template<
class Scalar>
 
 1314  return DfDp_properties_[l];
 
 
 1318template<
class Scalar>
 
 1324  DfDp_mp_[l] = DfDp_mp_l;
 
 1328template<
class Scalar>
 
 1337template<
class Scalar>
 
 1338ModelEvaluatorBase::DerivativeProperties
 
 1339ModelEvaluatorBase::OutArgs<Scalar>::get_DfDp_mp_properties(
int l)
 const 
 1342  return DfDp_mp_properties_[l];
 
 1346template<
class Scalar>
 
 1352  DgDx_dot_[j] = DgDx_dot_j;
 
 
 1356template<
class Scalar>
 
 1361  return DgDx_dot_[j];
 
 
 1365template<
class Scalar>
 
 1370  return DgDx_dot_properties_[j];
 
 
 1374template<
class Scalar>
 
 1380  DgDx_dot_mp_[j] = DgDx_dot_mp_j;
 
 1384template<
class Scalar>
 
 1389  return DgDx_dot_mp_[j];
 
 1393template<
class Scalar>
 
 1394ModelEvaluatorBase::DerivativeProperties
 
 1395ModelEvaluatorBase::OutArgs<Scalar>::get_DgDx_dot_mp_properties(
int j)
 const 
 1398  return DgDx_dot_mp_properties_[j];
 
 1402template<
class Scalar>
 
 1412template<
class Scalar>
 
 1421template<
class Scalar>
 
 1426  return DgDx_properties_[j];
 
 
 1430template<
class Scalar>
 
 1436  DgDx_mp_[j] = DgDx_mp_j;
 
 1440template<
class Scalar>
 
 1449template<
class Scalar>
 
 1450ModelEvaluatorBase::DerivativeProperties
 
 1451ModelEvaluatorBase::OutArgs<Scalar>::get_DgDx_mp_properties(
int j)
 const 
 1454  return DgDx_mp_properties_[j];
 
 1458template<
class Scalar>
 
 1464  DgDp_[ j*Np() + l ] = DgDp_j_l;
 
 
 1468template<
class Scalar>
 
 1473  return DgDp_[ j*Np() + l ];
 
 
 1477template<
class Scalar>
 
 1482  return DgDp_properties_[ j*Np() + l ];
 
 
 1486template<
class Scalar>
 
 1492  DgDp_mp_[ j*Np() + l ] = DgDp_mp_j_l;
 
 1496template<
class Scalar>
 
 1501  return DgDp_mp_[ j*Np() + l ];
 
 1505template<
class Scalar>
 
 1506ModelEvaluatorBase::DerivativeProperties
 
 1507ModelEvaluatorBase::OutArgs<Scalar>::get_DgDp_mp_properties(
int j, 
int l)
 const 
 1510  return DgDp_mp_properties_[ j*Np() + l ];
 
 1514#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 1516template<
class Scalar>
 
 1517void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_vec_prod_f_xx(
 
 1518  const RCP<MultiVectorBase<Scalar> > &hess_vec_prod_f_xx
 
 1521  assert_supports(OUT_ARG_hess_vec_prod_f_xx);
 
 1522  hess_vec_prod_f_xx_ = hess_vec_prod_f_xx;
 
 1525template<
class Scalar>
 
 1526void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_vec_prod_f_xp(
 
 1527  int l, 
const RCP<MultiVectorBase<Scalar> > &hess_vec_prod_f_xp_l
 
 1530  assert_supports(OUT_ARG_hess_vec_prod_f_xp,l);
 
 1531  hess_vec_prod_f_xp_[l] = hess_vec_prod_f_xp_l;
 
 1534template<
class Scalar>
 
 1535void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_vec_prod_f_px(
 
 1536  int l, 
const RCP<MultiVectorBase<Scalar> > &hess_vec_prod_f_px_l
 
 1539  assert_supports(OUT_ARG_hess_vec_prod_f_px,l);
 
 1540  hess_vec_prod_f_px_[l] = hess_vec_prod_f_px_l;
 
 1543template<
class Scalar>
 
 1544void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_vec_prod_f_pp(
 
 1545  int l1, 
int l2, 
const RCP<MultiVectorBase<Scalar> > &hess_vec_prod_f_pp_l1_l2
 
 1548  assert_supports(OUT_ARG_hess_vec_prod_f_pp,l1,l2);
 
 1549  hess_vec_prod_f_pp_[ l1*Np() + l2 ] = hess_vec_prod_f_pp_l1_l2;
 
 1552template<
class Scalar>
 
 1553RCP<MultiVectorBase<Scalar> >
 
 1554ModelEvaluatorBase::OutArgs<Scalar>::get_hess_vec_prod_f_xx()
 const 
 1556  assert_supports(OUT_ARG_hess_vec_prod_f_xx);
 
 1557  return hess_vec_prod_f_xx_;
 
 1560template<
class Scalar>
 
 1561RCP<MultiVectorBase<Scalar> >
 
 1562ModelEvaluatorBase::OutArgs<Scalar>::get_hess_vec_prod_f_xp(
int l)
 const 
 1564  assert_supports(OUT_ARG_hess_vec_prod_f_xp,l);
 
 1565  return hess_vec_prod_f_xp_[l];
 
 1568template<
class Scalar>
 
 1569RCP<MultiVectorBase<Scalar> >
 
 1570ModelEvaluatorBase::OutArgs<Scalar>::get_hess_vec_prod_f_px(
int l)
 const 
 1572  assert_supports(OUT_ARG_hess_vec_prod_f_px,l);
 
 1573  return hess_vec_prod_f_px_[l];
 
 1576template<
class Scalar>
 
 1577RCP<MultiVectorBase<Scalar> >
 
 1578ModelEvaluatorBase::OutArgs<Scalar>::get_hess_vec_prod_f_pp(
int l1, 
int l2)
 const 
 1580  assert_supports(OUT_ARG_hess_vec_prod_f_pp,l1,l2);
 
 1581  return hess_vec_prod_f_pp_[ l1*Np() + l2 ];
 
 1585template<
class Scalar>
 
 1586void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_vec_prod_g_xx(
 
 1587  int j, 
const RCP<MultiVectorBase<Scalar> > &hess_vec_prod_g_xx_j
 
 1590  assert_supports(OUT_ARG_hess_vec_prod_g_xx,j);
 
 1591  hess_vec_prod_g_xx_[j] = hess_vec_prod_g_xx_j;
 
 1594template<
class Scalar>
 
 1595void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_vec_prod_g_xp(
 
 1596  int j, 
int l, 
const RCP<MultiVectorBase<Scalar> > &hess_vec_prod_g_xp_j_l
 
 1599  assert_supports(OUT_ARG_hess_vec_prod_g_xp,j,l);
 
 1600  hess_vec_prod_g_xp_[ j*Np() + l ] = hess_vec_prod_g_xp_j_l;
 
 1603template<
class Scalar>
 
 1604void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_vec_prod_g_px(
 
 1605  int j, 
int l, 
const RCP<MultiVectorBase<Scalar> > &hess_vec_prod_g_px_j_l
 
 1608  assert_supports(OUT_ARG_hess_vec_prod_g_px,j,l);
 
 1609  hess_vec_prod_g_px_[ j*Np() + l ] = hess_vec_prod_g_px_j_l;
 
 1612template<
class Scalar>
 
 1613void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_vec_prod_g_pp(
 
 1614  int j, 
int l1, 
int l2, 
const RCP<MultiVectorBase<Scalar> > &hess_vec_prod_g_pp_j_l1_l2
 
 1617  assert_supports(OUT_ARG_hess_vec_prod_g_pp,j,l1,l2);
 
 1618  hess_vec_prod_g_pp_[ j*Np()*Np() + l1*Np() + l2 ] = hess_vec_prod_g_pp_j_l1_l2;
 
 1621template<
class Scalar>
 
 1622RCP<MultiVectorBase<Scalar> >
 
 1623ModelEvaluatorBase::OutArgs<Scalar>::get_hess_vec_prod_g_xx(
int j)
 const 
 1625  assert_supports(OUT_ARG_hess_vec_prod_g_xx,j);
 
 1626  return hess_vec_prod_g_xx_[j];
 
 1629template<
class Scalar>
 
 1630RCP<MultiVectorBase<Scalar> >
 
 1631ModelEvaluatorBase::OutArgs<Scalar>::get_hess_vec_prod_g_xp(
int j, 
int l)
 const 
 1633  assert_supports(OUT_ARG_hess_vec_prod_g_xp,j,l);
 
 1634  return hess_vec_prod_g_xp_[ j*Np() + l ];
 
 1637template<
class Scalar>
 
 1638RCP<MultiVectorBase<Scalar> >
 
 1639ModelEvaluatorBase::OutArgs<Scalar>::get_hess_vec_prod_g_px(
int j, 
int l)
 const 
 1641  assert_supports(OUT_ARG_hess_vec_prod_g_px,j,l);
 
 1642  return hess_vec_prod_g_px_[ j*Np() + l ];
 
 1645template<
class Scalar>
 
 1646RCP<MultiVectorBase<Scalar> >
 
 1647ModelEvaluatorBase::OutArgs<Scalar>::get_hess_vec_prod_g_pp(
int j, 
int l1, 
int l2)
 const 
 1649  assert_supports(OUT_ARG_hess_vec_prod_g_pp,j,l1,l2);
 
 1650  return hess_vec_prod_g_pp_[ j*Np()*Np() + l1*Np() + l2 ];
 
 1653template<
class Scalar>
 
 1654void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_f_xx(
 
 1655  const RCP<LinearOpBase<Scalar> > &hess_f_xx
 
 1658  assert_supports(OUT_ARG_hess_f_xx);
 
 1659  hess_f_xx_ = hess_f_xx;
 
 1662template<
class Scalar>
 
 1663void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_f_xp(
 
 1664  int l, 
const RCP<LinearOpBase<Scalar> > &hess_f_xp_l
 
 1667  assert_supports(OUT_ARG_hess_f_xp,l);
 
 1668  hess_f_xp_[l] = hess_f_xp_l;
 
 1671template<
class Scalar>
 
 1672void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_f_pp(
 
 1673  int l1, 
int l2, 
const RCP<LinearOpBase<Scalar> > &hess_f_pp_l1_l2
 
 1676  assert_supports(OUT_ARG_hess_f_pp,l1,l2);
 
 1677  hess_f_pp_[ l1*Np() + l2 ] = hess_f_pp_l1_l2;
 
 1680template<
class Scalar>
 
 1681RCP<LinearOpBase<Scalar> >
 
 1682ModelEvaluatorBase::OutArgs<Scalar>::get_hess_f_xx()
 const 
 1684  assert_supports(OUT_ARG_hess_f_xx);
 
 1688template<
class Scalar>
 
 1689RCP<LinearOpBase<Scalar> >
 
 1690ModelEvaluatorBase::OutArgs<Scalar>::get_hess_f_xp(
int l)
 const 
 1692  assert_supports(OUT_ARG_hess_f_xp,l);
 
 1693  return hess_f_xp_[l];
 
 1696template<
class Scalar>
 
 1697RCP<LinearOpBase<Scalar> >
 
 1698ModelEvaluatorBase::OutArgs<Scalar>::get_hess_f_pp(
int l1, 
int l2)
 const 
 1700  assert_supports(OUT_ARG_hess_f_pp,l1,l2);
 
 1701  return hess_f_pp_[ l1*Np() + l2 ];
 
 1704template<
class Scalar>
 
 1705void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_g_xx(
 
 1706  int j, 
const RCP<LinearOpBase<Scalar> > &hess_g_xx_j
 
 1709  assert_supports(OUT_ARG_hess_g_xx,j);
 
 1710  hess_g_xx_[j] = hess_g_xx_j;
 
 1713template<
class Scalar>
 
 1714void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_g_xp(
 
 1715  int j, 
int l, 
const RCP<LinearOpBase<Scalar> > &hess_g_xp_j_l
 
 1718  assert_supports(OUT_ARG_hess_g_xp,j,l);
 
 1719  hess_g_xp_[ j*Np() + l ] = hess_g_xp_j_l;
 
 1722template<
class Scalar>
 
 1723void ModelEvaluatorBase::OutArgs<Scalar>::set_hess_g_pp(
 
 1724  int j, 
int l1, 
int l2, 
const RCP<LinearOpBase<Scalar> > &hess_g_pp_j_l1_l2
 
 1727  assert_supports(OUT_ARG_hess_g_pp,j,l1,l2);
 
 1728  hess_g_pp_[ j*Np()*Np() + l1*Np() + l2 ] = hess_g_pp_j_l1_l2;
 
 1731template<
class Scalar>
 
 1732RCP<LinearOpBase<Scalar> >
 
 1733ModelEvaluatorBase::OutArgs<Scalar>::get_hess_g_xx(
int j)
 const 
 1735  assert_supports(OUT_ARG_hess_g_xx,j);
 
 1736  return hess_g_xx_[j];
 
 1739template<
class Scalar>
 
 1740RCP<LinearOpBase<Scalar> >
 
 1741ModelEvaluatorBase::OutArgs<Scalar>::get_hess_g_xp(
int j, 
int l)
 const 
 1743  assert_supports(OUT_ARG_hess_g_xp,j,l);
 
 1744  return hess_g_xp_[ j*Np() + l ];
 
 1747template<
class Scalar>
 
 1748RCP<LinearOpBase<Scalar> >
 
 1749ModelEvaluatorBase::OutArgs<Scalar>::get_hess_g_pp(
int j, 
int l1, 
int l2)
 const 
 1751  assert_supports(OUT_ARG_hess_g_pp,j,l1,l2);
 
 1752  return hess_g_pp_[ j*Np()*Np() + l1*Np() + l2 ];
 
 1755template<
class Scalar>
 
 1756void ModelEvaluatorBase::OutArgs<Scalar>::set_H_xx(
 
 1757  const RCP<LinearOpBase<Scalar> > &H_xx
 
 1760  assert_supports(OUT_ARG_H_xx);
 
 1764template<
class Scalar>
 
 1765void ModelEvaluatorBase::OutArgs<Scalar>::set_H_xp(
 
 1766  int l, 
const RCP<LinearOpBase<Scalar> > &H_xp_l
 
 1769  assert_supports(OUT_ARG_H_xp,l);
 
 1773template<
class Scalar>
 
 1774void ModelEvaluatorBase::OutArgs<Scalar>::set_H_pp(
 
 1775  int l1, 
int l2, 
const RCP<LinearOpBase<Scalar> > &H_pp_l1_l2
 
 1778  assert_supports(OUT_ARG_H_pp,l1,l2);
 
 1779  H_pp_[ l1*Np() + l2 ] = H_pp_l1_l2;
 
 1782template<
class Scalar>
 
 1783RCP<LinearOpBase<Scalar> >
 
 1784ModelEvaluatorBase::OutArgs<Scalar>::get_H_xx()
 const 
 1786  assert_supports(OUT_ARG_H_xx);
 
 1790template<
class Scalar>
 
 1791RCP<LinearOpBase<Scalar> >
 
 1792ModelEvaluatorBase::OutArgs<Scalar>::get_H_xp(
int l)
 const 
 1794  assert_supports(OUT_ARG_H_xp,l);
 
 1798template<
class Scalar>
 
 1799RCP<LinearOpBase<Scalar> >
 
 1800ModelEvaluatorBase::OutArgs<Scalar>::get_H_pp(
int l1, 
int l2)
 const 
 1802  assert_supports(OUT_ARG_H_pp,l1,l2);
 
 1803  return H_pp_[ l1*Np() + l2 ];
 
 1809#ifdef HAVE_THYRA_ME_POLYNOMIAL 
 1812template<
class Scalar>
 
 1813void ModelEvaluatorBase::OutArgs<Scalar>::set_f_poly(
 
 1821template<
class Scalar>
 
 1822RCP<Teuchos::Polynomial< VectorBase<Scalar> > >
 
 1823ModelEvaluatorBase::OutArgs<Scalar>::get_f_poly()
 const 
 1832template<
class Scalar>
 
 1838  const int min_Np = TEUCHOS_MIN(this->Np(),inputOutArgs.
Np());
 
 1839  const int min_Ng = TEUCHOS_MIN(this->Ng(),inputOutArgs.
Ng());
 
 1842    if ( supports(
OUT_ARG_f) || !ignoreUnsupported )
 
 1843      set_f(inputOutArgs.
get_f());
 
 1849#ifdef HAVE_THYRA_ME_POLYNOMIAL 
 1853      set_f_poly(inputOutArgs.get_f_poly());
 
 1857  for ( 
int j = 0; j < min_Ng; ++j ) {
 
 1858    if ( nonnull(inputOutArgs.
get_g(j)) )
 
 1859      set_g(j,inputOutArgs.
get_g(j));
 
 1861  for ( 
int j = 0; j < min_Ng; ++j ) {
 
 1864      set_g_mp(j,inputOutArgs.
get_g_mp(j));
 
 1869    if ( supports(
OUT_ARG_W) || !ignoreUnsupported )
 
 1870      set_W(inputOutArgs.
get_W());
 
 1887  for ( 
int l = 0; l < min_Np; ++l ) {
 
 1888    MEB::Derivative<Scalar> DfDp_l;
 
 1890      && !(DfDp_l=inputOutArgs.
get_DfDp(l)).isEmpty() )
 
 1892      if ( DfDp_l.isSupportedBy(supports(
OUT_ARG_DfDp,l)) || !ignoreUnsupported )
 
 1896  for ( 
int l = 0; l < min_Np; ++l ) {
 
 1897    MEB::MPDerivative DfDp_mp_l;
 
 1899      && !(DfDp_mp_l=inputOutArgs.get_DfDp_mp(l)).isEmpty() )
 
 1901      if ( DfDp_mp_l.isSupportedBy(supports(
OUT_ARG_DfDp_mp,l)) || !ignoreUnsupported )
 
 1902        set_DfDp_mp(l,DfDp_mp_l);
 
 1906  for ( 
int j = 0; j < min_Ng; ++j ) {
 
 1908    MEB::Derivative<Scalar> DgDx_dot_j;
 
 1910      && !(DgDx_dot_j=inputOutArgs.
get_DgDx_dot(j)).isEmpty() )
 
 1912      if( DgDx_dot_j.isSupportedBy(supports(
OUT_ARG_DgDx_dot,j)) || !ignoreUnsupported )
 
 1913        set_DgDx_dot(j,DgDx_dot_j);
 
 1916    MEB::Derivative<Scalar> DgDx_j;
 
 1918      && !(DgDx_j=inputOutArgs.
get_DgDx(j)).isEmpty() ) {
 
 1919      if ( DgDx_j.isSupportedBy(supports(
OUT_ARG_DgDx,j)) || !ignoreUnsupported )
 
 1923  for ( 
int j = 0; j < min_Ng; ++j ) {
 
 1925    MEB::MPDerivative DgDx_dot_mp_j;
 
 1927      && !(DgDx_dot_mp_j=inputOutArgs.get_DgDx_dot_mp(j)).isEmpty() )
 
 1930        set_DgDx_dot_mp(j,DgDx_dot_mp_j);
 
 1933    MEB::MPDerivative DgDx_mp_j;
 
 1935      && !(DgDx_mp_j=inputOutArgs.get_DgDx_mp(j)).isEmpty() ) {
 
 1936      if ( DgDx_mp_j.isSupportedBy(supports(
OUT_ARG_DgDx_mp,j)) || !ignoreUnsupported )
 
 1937        set_DgDx_mp(j,DgDx_mp_j);
 
 1941  for ( 
int l = 0; l < min_Np; ++l ) {
 
 1942    for ( 
int j = 0; j < min_Ng; ++j ) {
 
 1943      MEB::Derivative<Scalar> DgDp_j_l;
 
 1945        && !(DgDp_j_l=inputOutArgs.
get_DgDp(j,l)).isEmpty() )
 
 1947        if ( DgDp_j_l.isSupportedBy(supports(
OUT_ARG_DgDp,j,l)) || !ignoreUnsupported )
 
 1948          set_DgDp(j,l,DgDp_j_l);
 
 1952  for ( 
int l = 0; l < min_Np; ++l ) {
 
 1953    for ( 
int j = 0; j < min_Ng; ++j ) {
 
 1954      MEB::MPDerivative DgDp_mp_j_l;
 
 1956        && !(DgDp_mp_j_l=inputOutArgs.get_DgDp_mp(j,l)).isEmpty() )
 
 1958        if ( DgDp_mp_j_l.isSupportedBy(supports(
OUT_ARG_DgDp_mp,j,l)) || !ignoreUnsupported )
 
 1959          set_DgDp_mp(j,l,DgDp_mp_j_l);
 
 1964#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 1967  if( inputOutArgs.
supports(OUT_ARG_hess_vec_prod_f_xx) && nonnull(inputOutArgs.get_hess_vec_prod_f_xx()) ) {
 
 1968    if ( supports(OUT_ARG_hess_vec_prod_f_xx) || !ignoreUnsupported )
 
 1969      set_hess_vec_prod_f_xx(inputOutArgs.get_hess_vec_prod_f_xx());
 
 1971  for ( 
int l1 = 0; l1 < min_Np; ++l1 ) {
 
 1972    if( inputOutArgs.
supports(OUT_ARG_hess_vec_prod_f_xp,l1) && nonnull(inputOutArgs.get_hess_vec_prod_f_xp(l1)) ) {
 
 1973      if ( supports(OUT_ARG_hess_vec_prod_f_xp,l1) || !ignoreUnsupported )
 
 1974        set_hess_vec_prod_f_xp(l1,inputOutArgs.get_hess_vec_prod_f_xp(l1));
 
 1976    if( inputOutArgs.
supports(OUT_ARG_hess_vec_prod_f_px,l1) && nonnull(inputOutArgs.get_hess_vec_prod_f_px(l1)) ) {
 
 1977      if ( supports(OUT_ARG_hess_vec_prod_f_px,l1) || !ignoreUnsupported )
 
 1978        set_hess_vec_prod_f_px(l1,inputOutArgs.get_hess_vec_prod_f_px(l1));
 
 1980    for ( 
int l2 = 0; l2 < min_Np; ++l2 ) {
 
 1981      if( inputOutArgs.
supports(OUT_ARG_hess_vec_prod_f_pp,l1,l2) && nonnull(inputOutArgs.get_hess_vec_prod_f_pp(l1,l2)) ) {
 
 1982        if ( supports(OUT_ARG_hess_vec_prod_f_pp,l1,l2) || !ignoreUnsupported )
 
 1983          set_hess_vec_prod_f_pp(l1,l2,inputOutArgs.get_hess_vec_prod_f_pp(l1,l2));
 
 1989  for ( 
int j = 0; j < min_Ng; ++j ) {
 
 1990    if( inputOutArgs.
supports(OUT_ARG_hess_vec_prod_g_xx,j) && nonnull(inputOutArgs.get_hess_vec_prod_g_xx(j)) ) {
 
 1991      if ( supports(OUT_ARG_hess_vec_prod_g_xx,j) || !ignoreUnsupported )
 
 1992        set_hess_vec_prod_g_xx(j,inputOutArgs.get_hess_vec_prod_g_xx(j));
 
 1994    for ( 
int l1 = 0; l1 < min_Np; ++l1 ) {
 
 1995      if( inputOutArgs.
supports(OUT_ARG_hess_vec_prod_g_xp,j,l1) && nonnull(inputOutArgs.get_hess_vec_prod_g_xp(j,l1)) ) {
 
 1996        if ( supports(OUT_ARG_hess_vec_prod_g_xp,j,l1) || !ignoreUnsupported )
 
 1997          set_hess_vec_prod_g_xp(j,l1,inputOutArgs.get_hess_vec_prod_g_xp(j,l1));
 
 1999      if( inputOutArgs.
supports(OUT_ARG_hess_vec_prod_g_px,j,l1) && nonnull(inputOutArgs.get_hess_vec_prod_g_px(j,l1)) ) {
 
 2000        if ( supports(OUT_ARG_hess_vec_prod_g_px,j,l1) || !ignoreUnsupported )
 
 2001          set_hess_vec_prod_g_px(j,l1,inputOutArgs.get_hess_vec_prod_g_px(j,l1));
 
 2003      for ( 
int l2 = 0; l2 < min_Np; ++l2 ) {
 
 2004        if( inputOutArgs.
supports(OUT_ARG_hess_vec_prod_g_pp,j,l1,l2) && nonnull(inputOutArgs.get_hess_vec_prod_g_pp(j,l1,l2)) ) {
 
 2005          if ( supports(OUT_ARG_hess_vec_prod_g_pp,j,l1,l2) || !ignoreUnsupported )
 
 2006            set_hess_vec_prod_g_pp(j,l1,l2,inputOutArgs.get_hess_vec_prod_g_pp(j,l1,l2));
 
 2013  if( inputOutArgs.
supports(OUT_ARG_hess_f_xx) && nonnull(inputOutArgs.get_hess_f_xx()) ) {
 
 2014    if ( supports(OUT_ARG_hess_f_xx) || !ignoreUnsupported )
 
 2015      set_hess_f_xx(inputOutArgs.get_hess_f_xx());
 
 2017  for ( 
int l1 = 0; l1 < min_Np; ++l1 ) {
 
 2018    if( inputOutArgs.
supports(OUT_ARG_hess_f_xp,l1) && nonnull(inputOutArgs.get_hess_f_xp(l1)) ) {
 
 2019      if ( supports(OUT_ARG_hess_f_xp,l1) || !ignoreUnsupported )
 
 2020        set_hess_f_xp(l1,inputOutArgs.get_hess_f_xp(l1));
 
 2022    for ( 
int l2 = 0; l2 < min_Np; ++l2 ) {
 
 2023      if( inputOutArgs.
supports(OUT_ARG_hess_f_pp,l1,l2) && nonnull(inputOutArgs.get_hess_f_pp(l1,l2)) ) {
 
 2024        if ( supports(OUT_ARG_hess_f_pp,l1,l2) || !ignoreUnsupported )
 
 2025          set_hess_f_pp(l1,l2,inputOutArgs.get_hess_f_pp(l1,l2));
 
 2031  for ( 
int j = 0; j < min_Ng; ++j ) {
 
 2032    if( inputOutArgs.
supports(OUT_ARG_hess_g_xx,j) && nonnull(inputOutArgs.get_hess_g_xx(j)) ) {
 
 2033      if ( supports(OUT_ARG_hess_g_xx,j) || !ignoreUnsupported )
 
 2034        set_hess_g_xx(j,inputOutArgs.get_hess_g_xx(j));
 
 2036    for ( 
int l1 = 0; l1 < min_Np; ++l1 ) {
 
 2037      if( inputOutArgs.
supports(OUT_ARG_hess_g_xp,j,l1) && nonnull(inputOutArgs.get_hess_g_xp(j,l1)) ) {
 
 2038        if ( supports(OUT_ARG_hess_g_xp,j,l1) || !ignoreUnsupported )
 
 2039          set_hess_g_xp(j,l1,inputOutArgs.get_hess_g_xp(j,l1));
 
 2041      for ( 
int l2 = 0; l2 < min_Np; ++l2 ) {
 
 2042        if( inputOutArgs.
supports(OUT_ARG_hess_g_pp,j,l1,l2) && nonnull(inputOutArgs.get_hess_g_pp(j,l1,l2)) ) {
 
 2043          if ( supports(OUT_ARG_hess_g_pp,j,l1,l2) || !ignoreUnsupported )
 
 2044            set_hess_g_pp(j,l1,l2,inputOutArgs.get_hess_g_pp(j,l1,l2));
 
 2051  if( inputOutArgs.
supports(OUT_ARG_H_xx) && nonnull(inputOutArgs.get_H_xx()) ) {
 
 2052    if ( supports(OUT_ARG_H_xx) || !ignoreUnsupported )
 
 2053      set_H_xx(inputOutArgs.get_H_xx());
 
 2055  for ( 
int l1 = 0; l1 < min_Np; ++l1 ) {
 
 2056    if( inputOutArgs.
supports(OUT_ARG_H_xp,l1) && nonnull(inputOutArgs.get_H_xp(l1)) ) {
 
 2057      if ( supports(OUT_ARG_H_xp,l1) || !ignoreUnsupported )
 
 2058        set_H_xp(l1,inputOutArgs.get_H_xp(l1));
 
 2060    for ( 
int l2 = 0; l2 < min_Np; ++l2 ) {
 
 2061      if( inputOutArgs.
supports(OUT_ARG_H_pp,l1,l2) && nonnull(inputOutArgs.get_H_pp(l1,l2)) ) {
 
 2062        if ( supports(OUT_ARG_H_pp,l1,l2) || !ignoreUnsupported )
 
 2063          set_H_pp(l1,l2,inputOutArgs.get_H_pp(l1,l2));
 
 2071  this->extended_outargs_ = inputOutArgs.extended_outargs_;
 
 
 2077template<
class Scalar>
 
 2082  if( this->supports(
OUT_ARG_f) && nonnull(this->get_f()) ) {
 
 2083    assign(this->get_f().ptr(),ST::nan());
 
 2085  for( 
int j = 0; j < this->Ng(); ++j ) {
 
 2086    if (nonnull(this->get_g(j)))
 
 2087      assign(this->get_g(j).ptr(),ST::nan());
 
 
 2093template<
class Scalar>
 
 2100template<
class Scalar>
 
 2107  if (!is_null(W_op_))
 
 2109  for ( 
int l = 0; l < Np(); ++l ) {
 
 2110    if (!DfDp_[l].isEmpty())
 
 2113#ifdef HAVE_THYRA_ME_POLYNOMIAL 
 2114  if (!is_null(f_poly_))
 
 2117  for ( 
int j = 0; j < Ng(); ++j ) {
 
 2118    if (!is_null(g_[j]))
 
 2120    if (!DgDx_dot_[j].isEmpty())
 
 2122    if (!DgDx_[j].isEmpty())
 
 2124    for ( 
int l = 0; l < Np(); ++l ) {
 
 2125      if (!DgDp_[j*Np()+l].isEmpty())
 
 
 2133template<
class Scalar>
 
 2141    const std::string outArg_name = toString(outArg_arg);
 
 2143      supports(outArg_arg) != outArgs.
supports(outArg_arg), std::logic_error,
 
 2144      "Error, the output argument "<<outArg_name<<
" with support "<<outArgs.
supports(outArg_arg)<<
"\n" 
 2145      "in the OutArgs object for the model:\n\n" 
 2147      "is not the same the argument "<<outArg_name<<
" with support "<<supports(outArg_arg)<<
"\n" 
 2148      "in the OutArgs object for the model:\n\n" 
 2149      "  "<<modelEvalDescription()<<
"\n\n" 
 2150      "and these two OutArgs objects are not compatible!" 
 2154  const int l_Np = this->Np();
 
 2155  const int l_Ng = this->Ng();
 
 2160    for ( 
int l = 0; l < l_Np; ++l ) {
 
 2164        "Error, the support for DfDp("<<l<<
") is not the same for the models\n\n" 
 2167        "  "<<modelEvalDescription()<<
"\n\n" 
 2168        "and these two OutArgs objects are not compatible!" 
 2173  for ( 
int j = 0; j < l_Ng; ++j ) {
 
 2177      "Error, the support for DgDx_dot("<<j<<
") is not the same for the models\n\n" 
 2180      "  "<<modelEvalDescription()<<
"\n\n" 
 2181      "and these two OutArgs objects are not compatible!" 
 2186      "Error, the support for DgDx("<<j<<
") is not the same for the models\n\n" 
 2189      "  "<<modelEvalDescription()<<
"\n\n" 
 2190      "and these two OutArgs objects are not compatible!" 
 2192    for ( 
int l = 0; l < l_Np; ++l ) {
 
 2196        "Error, the support for DgDp("<<j<<
","<<l<<
") is not the same for the models\n\n" 
 2199        "  "<<modelEvalDescription()<<
"\n\n" 
 2200        "and these two OutArgs objects are not compatible!" 
 
 2207template<
class Scalar>
 
 2210  return modelEvalDescription_;
 
 
 2214template<
class Scalar>
 
 2218  std::ostringstream oss;
 
 2220    << 
"Thyra::ModelEvaluatorBase::OutArgs<"<<ST::name()<<
">" 
 2222    << 
"model="<<modelEvalDescription_
 
 
 2230template<
class Scalar>
 
 2237  using Teuchos::describe;
 
 2243  typedef MEB::Derivative<Scalar> Deriv;
 
 2252  *out <<
"Thyra::ModelEvaluatorBase::OutArgs<"<<ST::name()<<
">:\n";
 
 2255  *out <<
"model = " << modelEvalDescription_ << 
"\n";
 
 2256  *out <<
"Np = " << Np() << 
"\n";
 
 2257  *out <<
"Ng = " << Ng() << 
"\n";
 
 2260  if (this->supports(
OUT_ARG_f) && !is_null(f=get_f()) ) {
 
 2261    *out << 
"f = " << Teuchos::describe(*f,verbLevel);
 
 2264  for( 
int j = 0; j < Ng(); ++j ) {
 
 2266    if (!is_null(g_j=this->get_g(j)))
 
 2267      *out << 
"g("<<j<<
") = " << Teuchos::describe(*g_j,verbLevel);
 
 2271  if ( this->supports(
OUT_ARG_W) && !is_null(W=get_W()) ) {
 
 2272    *out << 
"W = " << Teuchos::describe(*W,verbLevel);
 
 2276  if ( this->supports(
OUT_ARG_W_op) && !is_null(W_op=get_W_op()) ) {
 
 2277    *out << 
"W_op = " << Teuchos::describe(*W_op,verbLevel);
 
 2280  for( 
int l = 0; l < Np(); ++l ) {
 
 2284      && !(DfDp_l=get_DfDp(l)).isEmpty()
 
 2287      *out << 
"DfDp("<<l<<
") = ";
 
 2288      DfDp_l.describe(*out,verbLevel);
 
 2292  for( 
int j = 0; j < Ng(); ++j ) {
 
 2297      && !(DgDx_dot_j=get_DgDx_dot(j)).isEmpty()
 
 2300      *out << 
"DgDx_dot("<<j<<
") = ";
 
 2301      DgDx_dot_j.describe(*out,verbLevel);
 
 2307      && !(DgDx_j=get_DgDx(j)).isEmpty()
 
 2310      *out << 
"DgDx("<<j<<
") = ";
 
 2311      DgDx_j.describe(*out,verbLevel);
 
 2314    for( 
int l = 0; l < Np(); ++l ) {
 
 2319        && !(DgDp_j_l=get_DgDp(j,l)).isEmpty()
 
 2322        *out << 
"DgDp("<<j<<
","<<l<<
") = ";
 
 2323        DgDp_j_l.describe(*out,verbLevel);
 
 
 2337template<
class Scalar>
 
 2339  const std::string &modelEvalDescription_in
 
 2342  modelEvalDescription_ = modelEvalDescription_in;
 
 
 2345template<
class Scalar>
 
 2349    supports_DfDp_.resize(Np_in);
 
 2351    DfDp_properties_.resize(Np_in); std::fill_n(DfDp_properties_.begin(),Np_in,
DerivativeProperties());
 
 2353    supports_DfDp_mp_.resize(Np_in);
 
 2354    DfDp_mp_.resize(Np_in); std::fill_n(DfDp_mp_.begin(),Np_in,
MPDerivative());
 
 2355    DfDp_mp_properties_.resize(Np_in); std::fill_n(DfDp_mp_properties_.begin(),Np_in,
DerivativeProperties());
 
 2358    g_.resize(Ng_in); std::fill_n(g_.begin(),Ng_in,
Teuchos::null);
 
 2359    supports_DgDx_dot_.resize(Ng_in);
 
 2361    DgDx_dot_properties_.resize(Ng_in); std::fill_n(DgDx_dot_properties_.begin(),Ng_in,
DerivativeProperties());
 
 2362    supports_DgDx_.resize(Ng_in);
 
 2364    DgDx_properties_.resize(Ng_in); std::fill_n(DgDx_properties_.begin(),Ng_in,
DerivativeProperties());
 
 2366#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 2367    supports_hess_vec_prod_g_xx_.resize(Ng_in);
 
 2370    supports_hess_g_xx_.resize(Ng_in);
 
 2374    g_mp_.resize(Ng_in); std::fill_n(g_mp_.begin(),Ng_in,
Teuchos::null);
 
 2375    supports_g_mp_.resize(Ng_in);
 
 2376    supports_DgDx_dot_mp_.resize(Ng_in);
 
 2377    DgDx_dot_mp_.resize(Ng_in); std::fill_n(DgDx_dot_mp_.begin(),Ng_in,
MPDerivative());
 
 2378    DgDx_dot_mp_properties_.resize(Ng_in); std::fill_n(DgDx_dot_mp_properties_.begin(),Ng_in,
DerivativeProperties());
 
 2379    supports_DgDx_mp_.resize(Ng_in);
 
 2380    DgDx_mp_.resize(Ng_in); std::fill_n(DgDx_mp_.begin(),Ng_in,
MPDerivative());
 
 2381    DgDx_mp_properties_.resize(Ng_in); std::fill_n(DgDx_mp_properties_.begin(),Ng_in,
DerivativeProperties());
 
 2383#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 2385    const int Np = Np_in;
 
 2386    const int NpNp = Np_in*Np_in;
 
 2388    supports_hess_vec_prod_f_xp_.resize(Np);
 
 2391    supports_hess_vec_prod_f_px_.resize(Np);
 
 2394    supports_hess_vec_prod_f_pp_.resize(NpNp);
 
 2397    supports_hess_f_xp_.resize(Np);
 
 2400    supports_hess_f_pp_.resize(NpNp);
 
 2403    supports_H_xp_.resize(Np);
 
 2406    supports_H_pp_.resize(NpNp);
 
 2410  if(Np_in && Ng_in) {
 
 2411    const int NpNg = Np_in*Ng_in;
 
 2412    const int NpNpNg = Np_in*Np_in*Ng_in;
 
 2413    supports_DgDp_.resize(NpNg);
 
 2415    DgDp_properties_.resize(NpNg); std::fill_n(DgDp_properties_.begin(),NpNg,
DerivativeProperties());
 
 2417#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 2418    supports_hess_vec_prod_g_xp_.resize(NpNg);
 
 2421    supports_hess_vec_prod_g_px_.resize(NpNg);
 
 2424    supports_hess_vec_prod_g_pp_.resize(NpNpNg);
 
 2427    supports_hess_g_xp_.resize(NpNg);
 
 2430    supports_hess_g_pp_.resize(NpNpNg);
 
 2434    supports_DgDp_mp_.resize(NpNg);
 
 2435    DgDp_mp_.resize(NpNg); std::fill_n(DgDp_mp_.begin(),NpNg,
MPDerivative());
 
 2436    DgDp_mp_properties_.resize(NpNg); std::fill_n(DgDp_mp_properties_.begin(),NpNg,
DerivativeProperties());
 
 
 2441template<
class Scalar>
 
 2447    ,
"model = \'"<<modelEvalDescription_
 
 2448    <<
"\': Error, arg="<<toString(arg)<<
" is invalid!" 
 2450  supports_[arg] = supports_in;
 
 
 2454template<
class Scalar>
 
 2461  supports_DfDp_[l] = supports_in;
 
 
 2465template<
class Scalar>
 
 2471  supports_DgDx_dot_[j] = supports_in;
 
 
 2475template<
class Scalar>
 
 2481  supports_DgDx_[j] = supports_in;
 
 
 2485#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 2487template<
class Scalar>
 
 2489  EOutArgs_hess_vec_prod_f_xx , 
bool supports_in
 
 2492  supports_hess_vec_prod_f_xx_ = supports_in;
 
 2495template<
class Scalar>
 
 2497  EOutArgs_hess_vec_prod_f_xp , 
int l, 
bool supports_in
 
 2501  supports_hess_vec_prod_f_xp_[l] = supports_in;
 
 2504template<
class Scalar>
 
 2506  EOutArgs_hess_vec_prod_f_px , 
int l, 
bool supports_in
 
 2510  supports_hess_vec_prod_f_px_[l] = supports_in;
 
 2513template<
class Scalar>
 
 2515  EOutArgs_hess_vec_prod_f_pp , 
int l1, 
int l2, 
bool supports_in
 
 2520  supports_hess_vec_prod_f_pp_[ l1*Np()+ l2 ] = supports_in;
 
 2526template<
class Scalar>
 
 2533  supports_DgDp_[ j*Np()+ l ] = supports_in;
 
 
 2537#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 2539template<
class Scalar>
 
 2541  EOutArgs_hess_vec_prod_g_xx , 
int j, 
bool supports_in
 
 2545  supports_hess_vec_prod_g_xx_[j] = supports_in;
 
 2548template<
class Scalar>
 
 2550  EOutArgs_hess_vec_prod_g_xp , 
int j, 
int l, 
bool supports_in
 
 2555  supports_hess_vec_prod_g_xp_[ j*Np()+ l ] = supports_in;
 
 2558template<
class Scalar>
 
 2560  EOutArgs_hess_vec_prod_g_px , 
int j, 
int l, 
bool supports_in
 
 2565  supports_hess_vec_prod_g_px_[ j*Np()+ l ] = supports_in;
 
 2568template<
class Scalar>
 
 2570  EOutArgs_hess_vec_prod_g_pp , 
int j, 
int l1, 
int l2, 
bool supports_in
 
 2576  supports_hess_vec_prod_g_pp_[ j*Np()*Np()+ l1*Np() + l2 ] = supports_in;
 
 2580template<
class Scalar>
 
 2582  EOutArgs_hess_f_xx , 
bool supports_in
 
 2585  supports_hess_f_xx_ = supports_in;
 
 2588template<
class Scalar>
 
 2590  EOutArgs_hess_f_xp , 
int l, 
bool supports_in
 
 2594  supports_hess_f_xp_[l] = supports_in;
 
 2597template<
class Scalar>
 
 2599  EOutArgs_hess_f_pp , 
int l1, 
int l2, 
bool supports_in
 
 2604  supports_hess_f_pp_[ l1*Np()+ l2 ] = supports_in;
 
 2607template<
class Scalar>
 
 2609  EOutArgs_hess_g_xx , 
int j, 
bool supports_in
 
 2613  supports_hess_g_xx_[j] = supports_in;
 
 2616template<
class Scalar>
 
 2618  EOutArgs_hess_g_xp , 
int j, 
int l, 
bool supports_in
 
 2623  supports_hess_g_xp_[ j*Np()+ l ] = supports_in;
 
 2626template<
class Scalar>
 
 2628  EOutArgs_hess_g_pp , 
int j, 
int l1, 
int l2, 
bool supports_in
 
 2634  supports_hess_g_pp_[ j*Np()*Np()+ l1*Np() + l2 ] = supports_in;
 
 2637template<
class Scalar>
 
 2639  EOutArgs_H_xx , 
bool supports_in
 
 2642  supports_H_xx_ = supports_in;
 
 2645template<
class Scalar>
 
 2647  EOutArgs_H_xp , 
int l, 
bool supports_in
 
 2651  supports_H_xp_[l] = supports_in;
 
 2654template<
class Scalar>
 
 2656  EOutArgs_H_pp , 
int l1, 
int l2, 
bool supports_in
 
 2661  supports_H_pp_[ l1*Np()+ l2 ] = supports_in;
 
 2667template<
class Scalar>
 
 2674  supports_g_mp_[j] = supports_in;
 
 2678template<
class Scalar>
 
 2685  supports_DfDp_mp_[l] = supports_in;
 
 2689template<
class Scalar>
 
 2695  supports_DgDx_dot_mp_[j] = supports_in;
 
 2699template<
class Scalar>
 
 2705  supports_DgDx_mp_[j] = supports_in;
 
 2709template<
class Scalar>
 
 2716  supports_DgDp_mp_[ j*Np()+ l ] = supports_in;
 
 2720template<
class Scalar>
 
 2725  W_properties_ = properties;
 
 
 2729template<
class Scalar>
 
 2735  DfDp_properties_[l] = properties;
 
 
 2739template<
class Scalar>
 
 2745  DgDx_dot_properties_[j] = properties;
 
 
 2749template<
class Scalar>
 
 2755  DgDx_properties_[j] = properties;
 
 
 2759template<
class Scalar>
 
 2765  DgDp_properties_[ j*Np()+ l ] = properties;
 
 
 2769template<
class Scalar>
 
 2775  DfDp_mp_properties_[l] = properties;
 
 2779template<
class Scalar>
 
 2781  int j, 
const DerivativeProperties &properties
 
 2785  DgDx_dot_mp_properties_[j] = properties;
 
 2789template<
class Scalar>
 
 2790void ModelEvaluatorBase::OutArgs<Scalar>::_set_DgDx_mp_properties(
 
 2791  int j, 
const DerivativeProperties &properties
 
 2795  DgDx_mp_properties_[j] = properties;
 
 2799template<
class Scalar>
 
 2800void ModelEvaluatorBase::OutArgs<Scalar>::_set_DgDp_mp_properties(
 
 2801  int j, 
int l, 
const DerivativeProperties &properties
 
 2805  DgDp_mp_properties_[ j*Np()+ l ] = properties;
 
 2809template<
class Scalar>
 
 2815  const int l_Np = TEUCHOS_MIN(this->Np(),inputOutArgs.
Np());
 
 2816  const int l_Ng = TEUCHOS_MIN(this->Ng(),inputOutArgs.
Ng());
 
 2818    &inputOutArgs.supports_[0],
 
 2820  for( 
int l = 0; l < l_Np; ++l ) {
 
 2823      this->_setSupports(MEB::OUT_ARG_DfDp,l,ds);
 
 2827  for( 
int l = 0; l < l_Np; ++l ) {
 
 2830      this->_setSupports(MEB::OUT_ARG_DfDp_mp,l,ds);
 
 2831      this->_set_DfDp_mp_properties(l,inputOutArgs.get_DfDp_mp_properties(l));
 
 2834  for( 
int j = 0; j < l_Ng; ++j ) {
 
 2836    this->_setSupports(MEB::OUT_ARG_DgDx_dot,j,ds);
 
 2839  for( 
int j = 0; j < l_Ng; ++j ) {
 
 2841    this->_setSupports(MEB::OUT_ARG_DgDx_dot_mp,j,ds);
 
 2842    if(!ds.
none()) this->_set_DgDx_dot_mp_properties(j,inputOutArgs.get_DgDx_dot_mp_properties(j));
 
 2844  for( 
int j = 0; j < l_Ng; ++j ) {
 
 2846    this->_setSupports(MEB::OUT_ARG_DgDx,j,ds);
 
 2849  for( 
int j = 0; j < l_Ng; ++j ) {
 
 2851    this->_setSupports(MEB::OUT_ARG_DgDx_mp,j,ds);
 
 2852    if(!ds.
none()) this->_set_DgDx_mp_properties(j,inputOutArgs.get_DgDx_mp_properties(j));
 
 2854  for( 
int j = 0; j < l_Ng; ++j ) 
for( 
int l = 0; l < l_Np; ++l ) {
 
 2856    this->_setSupports(MEB::OUT_ARG_DgDp,j,l,ds);
 
 2859  for( 
int j = 0; j < l_Ng; ++j ) 
for( 
int l = 0; l < l_Np; ++l ) {
 
 2861    this->_setSupports(MEB::OUT_ARG_DgDp_mp,j,l,ds);
 
 2862    if(!ds.
none()) this->_set_DgDp_mp_properties(j,l,inputOutArgs.get_DgDp_mp_properties(j,l));
 
 2869#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 2870  this->_setSupports(MEB::OUT_ARG_hess_vec_prod_f_xx,inputOutArgs.
supports(OUT_ARG_hess_vec_prod_f_xx));
 
 2871  for( 
int l1 = 0; l1 < l_Np; ++l1 ) {
 
 2872    this->_setSupports(MEB::OUT_ARG_hess_vec_prod_f_xp,l1,inputOutArgs.
supports(MEB::OUT_ARG_hess_vec_prod_f_xp,l1));
 
 2873    this->_setSupports(MEB::OUT_ARG_hess_vec_prod_f_px,l1,inputOutArgs.
supports(MEB::OUT_ARG_hess_vec_prod_f_px,l1));
 
 2874    for( 
int l2 = 0; l2 < l_Np; ++l2 ) {
 
 2875      this->_setSupports(MEB::OUT_ARG_hess_vec_prod_f_pp,l1,l2,inputOutArgs.
supports(MEB::OUT_ARG_hess_vec_prod_f_pp,l1,l2));
 
 2878  for( 
int j = 0; j < l_Ng; ++j ) {
 
 2879    this->_setSupports(MEB::OUT_ARG_hess_vec_prod_g_xx,j,inputOutArgs.
supports(MEB::OUT_ARG_hess_vec_prod_g_xx,j));
 
 2880    for( 
int l1 = 0; l1 < l_Np; ++l1 ) {
 
 2881      this->_setSupports(MEB::OUT_ARG_hess_vec_prod_g_xp,j,l1,inputOutArgs.
supports(MEB::OUT_ARG_hess_vec_prod_g_xp,j,l1));
 
 2882      this->_setSupports(MEB::OUT_ARG_hess_vec_prod_g_px,j,l1,inputOutArgs.
supports(MEB::OUT_ARG_hess_vec_prod_g_px,j,l1));
 
 2883      for( 
int l2 = 0; l2 < l_Np; ++l2 ) {
 
 2884        this->_setSupports(MEB::OUT_ARG_hess_vec_prod_g_pp,j,l1,l2,inputOutArgs.
supports(MEB::OUT_ARG_hess_vec_prod_g_pp,j,l1,l2));
 
 2888  this->_setSupports(MEB::OUT_ARG_hess_f_xx,inputOutArgs.
supports(OUT_ARG_hess_f_xx));
 
 2889  for( 
int l1 = 0; l1 < l_Np; ++l1 ) {
 
 2890    this->_setSupports(MEB::OUT_ARG_hess_f_xp,l1,inputOutArgs.
supports(MEB::OUT_ARG_hess_f_xp,l1));
 
 2891    for( 
int l2 = 0; l2 < l_Np; ++l2 ) {
 
 2892      this->_setSupports(MEB::OUT_ARG_hess_f_pp,l1,l2,inputOutArgs.
supports(MEB::OUT_ARG_hess_f_pp,l1,l2));
 
 2895  for( 
int j = 0; j < l_Ng; ++j ) {
 
 2896    this->_setSupports(MEB::OUT_ARG_hess_g_xx,j,inputOutArgs.
supports(MEB::OUT_ARG_hess_g_xx,j));
 
 2897    for( 
int l1 = 0; l1 < l_Np; ++l1 ) {
 
 2898      this->_setSupports(MEB::OUT_ARG_hess_g_xp,j,l1,inputOutArgs.
supports(MEB::OUT_ARG_hess_g_xp,j,l1));
 
 2899      for( 
int l2 = 0; l2 < l_Np; ++l2 ) {
 
 2900        this->_setSupports(MEB::OUT_ARG_hess_g_pp,j,l1,l2,inputOutArgs.
supports(MEB::OUT_ARG_hess_g_pp,j,l1,l2));
 
 2904  this->_setSupports(MEB::OUT_ARG_H_xx,inputOutArgs.
supports(OUT_ARG_H_xx));
 
 2905  for( 
int l1 = 0; l1 < l_Np; ++l1 ) {
 
 2906    this->_setSupports(MEB::OUT_ARG_H_xp,l1,inputOutArgs.
supports(MEB::OUT_ARG_H_xp,l1));
 
 2907    for( 
int l2 = 0; l2 < l_Np; ++l2 ) {
 
 2908      this->_setSupports(MEB::OUT_ARG_H_pp,l1,l2,inputOutArgs.
supports(MEB::OUT_ARG_H_pp,l1,l2));
 
 2913  extended_outargs_ = inputOutArgs.extended_outargs_;
 
 
 2917template<
class Scalar>
 
 2924      const int l_Ng = this->Ng();
 
 2925      for( 
int j = 0; j < l_Ng; ++j ) {
 
 2932      const int l_Ng = this->Ng();
 
 2933      for( 
int j = 0; j < l_Ng; ++j ) {
 
 2941        true ,std::logic_error,
 
 2942        "Error, can not handle args other than IN_ARG_x yet!" 
 
 2948template<
class Scalar>
 
 2958      const int l_Np = this->Np();
 
 2959      for( 
int l = 0; l < l_Np; ++l )
 
 2967      const int l_Np = this->Np();
 
 2968      for( 
int l = 0; l < l_Np; ++l )
 
 2974        true ,std::logic_error,
 
 2975        "Error, can not handle args other than OUT_ARG_f yet!" 
 2978  this->_setSupports(arg,
false);
 
 
 
 2981#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 2982template<
class Scalar>
 
 2988  this->_setSupports(MEB::OUT_ARG_hess_vec_prod_f_xx,supports);
 
 2989  this->_setSupports(MEB::OUT_ARG_hess_f_xx,supports);
 
 2990  this->_setSupports(MEB::OUT_ARG_H_xx,supports);
 
 2991  for (
int l1=0; l1<this->Np(); ++l1)
 
 2993    this->_setSupports(MEB::OUT_ARG_hess_vec_prod_f_xp,l1,supports);
 
 2994    this->_setSupports(MEB::OUT_ARG_hess_vec_prod_f_px,l1,supports);
 
 2995    this->_setSupports(MEB::OUT_ARG_hess_f_xp,l1,supports);
 
 2996    this->_setSupports(MEB::OUT_ARG_H_xp,l1,supports);
 
 2997    for (
int l2=0; l2<this->Np(); ++l2)
 
 2999      this->_setSupports(MEB::OUT_ARG_hess_vec_prod_f_pp,l1,l2,supports);
 
 3000      this->_setSupports(MEB::OUT_ARG_hess_f_pp,l1,l2,supports);
 
 3001      this->_setSupports(MEB::OUT_ARG_H_pp,l1,l2,supports);
 
 3005  for (
int j=0; j<this->Ng(); ++j)
 
 3007    this->_setSupports(MEB::OUT_ARG_hess_g_xx,j,supports);
 
 3008    this->_setSupports(MEB::OUT_ARG_hess_vec_prod_g_xx,j,supports);
 
 3009    for (
int l1=0; l1<this->Np(); ++l1)
 
 3011      this->_setSupports(MEB::OUT_ARG_hess_vec_prod_g_xp,j,l1,supports);
 
 3012      this->_setSupports(MEB::OUT_ARG_hess_vec_prod_g_px,j,l1,supports);
 
 3013      this->_setSupports(MEB::OUT_ARG_hess_g_xp,j,l1,supports);
 
 3014      for (
int l2=0; l2<this->Np(); ++l2)
 
 3016        this->_setSupports(MEB::OUT_ARG_hess_vec_prod_g_pp,j,l1,l2,supports);
 
 3017        this->_setSupports(MEB::OUT_ARG_hess_g_pp,j,l1,l2,supports);
 
 3027template<
class Scalar>
 
 3028void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
EOutArgsMembers arg)
 const 
 3031    !this->supports(arg), std::logic_error
 
 3032    ,
"Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(arg):\n\n" 
 3033    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3034    "Error, The argument arg = " << toString(arg) << 
" is not supported!" 
 3039template<
class Scalar>
 
 3040void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3041  EOutArgsDfDp arg, 
int l, 
const Derivative<Scalar> &deriv
 
 3044  const DerivativeSupport derivSupport = this->supports(arg,l);
 
 3046    !deriv.isSupportedBy(derivSupport), std::logic_error,
 
 3047    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_DfDp,l):\n\n" 
 3048    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3049    "Error, The argument DfDp("<<l<<
") = " << deriv.description() << 
"\n" 
 3050    "is not supported!\n\n" 
 3051    "The supported types include " << derivSupport.description() << 
"!" 
 3056template<
class Scalar>
 
 3057void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3061  const DerivativeSupport derivSupport = this->supports(arg,j);
 
 3063    !deriv.isSupportedBy(derivSupport), std::logic_error,
 
 3064    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_DgDx_dot,j):\n\n" 
 3065    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3066    "Error, The argument DgDx_dot("<<j<<
") = " << deriv.description() << 
"\n" 
 3067    "is not supported!\n\n" 
 3068    "The supported types include " << derivSupport.description() << 
"!" 
 3073template<
class Scalar>
 
 3074void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3075  EOutArgsDgDx arg, 
int j, 
const Derivative<Scalar> &deriv
 
 3078  const DerivativeSupport derivSupport = this->supports(arg,j);
 
 3080    !deriv.isSupportedBy(derivSupport), std::logic_error,
 
 3081    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_DgDx,j):\n\n" 
 3082    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3083    "Error, The argument DgDx("<<j<<
") = " << deriv.description() << 
"\n" 
 3084    "is not supported!\n\n" 
 3085    "The supported types include " << derivSupport.description() << 
"!" 
 3090template<
class Scalar>
 
 3091void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3092  EOutArgsDgDp arg, 
int j, 
int l, 
const Derivative<Scalar> &deriv
 
 3095  const DerivativeSupport derivSupport = this->supports(arg,j,l);
 
 3097    !deriv.isSupportedBy(derivSupport), std::logic_error,
 
 3098    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_DgDp,j,l):\n\n" 
 3099    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3100    "Error, The argument DgDp("<<j<<
","<<l<<
") = " << deriv.description() << 
"\n" 
 3101    "is not supported!\n\n" 
 3102    "The supported types include " << derivSupport.description() << 
"!" 
 3107#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 3109template<
class Scalar>
 
 3110void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3111  EOutArgs_hess_vec_prod_f_xx arg
 
 3114  const bool support = this->supports(arg);
 
 3116    !support, std::logic_error,
 
 3117    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_vec_prod_f_xx):\n\n" 
 3118    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3119    "Error, The argument hess_vec_prod_f_xx() is not supported!" 
 3123template<
class Scalar>
 
 3124void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3125  EOutArgs_hess_vec_prod_f_xp arg, 
int l
 
 3128  const bool support = this->supports(arg,l);
 
 3130    !support, std::logic_error,
 
 3131    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_vec_prod_f_xp,l):\n\n" 
 3132    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3133    "Error, The argument hess_vec_prod_f_xp("<<l<<
") is not supported!" 
 3137template<
class Scalar>
 
 3138void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3139  EOutArgs_hess_vec_prod_f_px arg, 
int l
 
 3142  const bool support = this->supports(arg,l);
 
 3144    !support, std::logic_error,
 
 3145    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_vec_prod_f_px,l):\n\n" 
 3146    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3147    "Error, The argument hess_vec_prod_f_px("<<l<<
") is not supported!" 
 3151template<
class Scalar>
 
 3152void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3153  EOutArgs_hess_vec_prod_f_pp arg, 
int l1, 
int l2
 
 3156  const bool support = this->supports(arg,l1,l2);
 
 3158    !support, std::logic_error,
 
 3159    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_vec_prod_f_pp,l1,l2):\n\n" 
 3160    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3161    "Error, The argument hess_vec_prod_f_pp("<<l1<<
","<<l2<<
") is not supported!" 
 3165template<
class Scalar>
 
 3166void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3167  EOutArgs_hess_vec_prod_g_xx arg, 
int j
 
 3170  const bool support = this->supports(arg,j);
 
 3172    !support, std::logic_error,
 
 3173    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_vec_prod_g_xx,j):\n\n" 
 3174    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3175    "Error, The argument hess_vec_prod_g_xx("<<j<<
") is not supported!" 
 3179template<
class Scalar>
 
 3180void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3181  EOutArgs_hess_vec_prod_g_xp arg, 
int j, 
int l
 
 3184  const bool support = this->supports(arg,j,l);
 
 3186    !support, std::logic_error,
 
 3187    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_vec_prod_g_xp,j,l):\n\n" 
 3188    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3189    "Error, The argument hess_vec_prod_g_xp("<<j<<
","<<l<<
") is not supported!" 
 3193template<
class Scalar>
 
 3194void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3195  EOutArgs_hess_vec_prod_g_px arg, 
int j, 
int l
 
 3198  const bool support = this->supports(arg,j,l);
 
 3200    !support, std::logic_error,
 
 3201    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_vec_prod_g_px,j,l):\n\n" 
 3202    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3203    "Error, The argument hess_vec_prod_g_px("<<j<<
","<<l<<
") is not supported!" 
 3207template<
class Scalar>
 
 3208void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3209  EOutArgs_hess_vec_prod_g_pp arg, 
int j, 
int l1, 
int l2
 
 3212  const bool support = this->supports(arg,j,l1,l2);
 
 3214    !support, std::logic_error,
 
 3215    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_vec_prod_g_pp,j,l1,l2):\n\n" 
 3216    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3217    "Error, The argument hess_vec_prod_g_pp("<<j<<
","<<l1<<
","<<l2<<
") is not supported!" 
 3221template<
class Scalar>
 
 3222void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3223  EOutArgs_hess_f_xx arg
 
 3226  const bool support = this->supports(arg);
 
 3228    !support, std::logic_error,
 
 3229    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_f_xx):\n\n" 
 3230    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3231    "Error, The argument hess_f_xx() is not supported!" 
 3235template<
class Scalar>
 
 3236void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3237  EOutArgs_hess_f_xp arg, 
int l
 
 3240  const bool support = this->supports(arg,l);
 
 3242    !support, std::logic_error,
 
 3243    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_f_xp,l):\n\n" 
 3244    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3245    "Error, The argument hess_f_xp() is not supported!" 
 3249template<
class Scalar>
 
 3250void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3251  EOutArgs_hess_f_pp arg, 
int l1, 
int l2
 
 3254  const bool support = this->supports(arg,l1,l2);
 
 3256    !support, std::logic_error,
 
 3257    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_f_pp,l1,l2):\n\n" 
 3258    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3259    "Error, The argument hess_f_pp() is not supported!" 
 3263template<
class Scalar>
 
 3264void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3265  EOutArgs_hess_g_xx arg, 
int j
 
 3268  const bool support = this->supports(arg,j);
 
 3270    !support, std::logic_error,
 
 3271    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_g_xx,j):\n\n" 
 3272    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3273    "Error, The argument hess_g_xx() is not supported!" 
 3277template<
class Scalar>
 
 3278void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3279  EOutArgs_hess_g_xp arg, 
int j, 
int l
 
 3282  const bool support = this->supports(arg,j,l);
 
 3284    !support, std::logic_error,
 
 3285    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_g_xp,j,l):\n\n" 
 3286    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3287    "Error, The argument hess_g_xp() is not supported!" 
 3291template<
class Scalar>
 
 3292void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3293  EOutArgs_hess_g_pp arg, 
int j, 
int l1, 
int l2
 
 3296  const bool support = this->supports(arg,j,l1,l2);
 
 3298    !support, std::logic_error,
 
 3299    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_hess_g_pp,j,l1,l2):\n\n" 
 3300    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3301    "Error, The argument hess_g_pp() is not supported!" 
 3305template<
class Scalar>
 
 3306void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3310  const bool support = this->supports(arg);
 
 3312    !support, std::logic_error,
 
 3313    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_H_xx):\n\n" 
 3314    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3315    "Error, The argument H_xx() is not supported!" 
 3319template<
class Scalar>
 
 3320void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3321  EOutArgs_H_xp arg, 
int l
 
 3324  const bool support = this->supports(arg,l);
 
 3326    !support, std::logic_error,
 
 3327    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_H_xp,l):\n\n" 
 3328    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3329    "Error, The argument H_xp() is not supported!" 
 3333template<
class Scalar>
 
 3334void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3335  EOutArgs_H_pp arg, 
int l1, 
int l2
 
 3338  const bool support = this->supports(arg,l1,l2);
 
 3340    !support, std::logic_error,
 
 3341    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_H_pp,l1,l2):\n\n" 
 3342    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3343    "Error, The argument H_pp() is not supported!" 
 3350template<
class Scalar>
 
 3351void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3357    !supports_g_mp_[j], std::logic_error,
 
 3358    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_g_mp,j):\n\n" 
 3359    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3360    "Error, The argument g_mp("<<j<<
") \n" 
 3361    "is not supported!\n\n" 
 3366template<
class Scalar>
 
 3367void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3371  const DerivativeSupport derivSupport = this->supports(arg,l);
 
 3373    !deriv.isSupportedBy(derivSupport), std::logic_error,
 
 3374    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_DfDp_mp,l):\n\n" 
 3375    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3376    "Error, The argument DfDp_mp("<<l<<
") = " << deriv.description() << 
"\n" 
 3377    "is not supported!\n\n" 
 3378    "The supported types include " << derivSupport.description() << 
"!" 
 3383template<
class Scalar>
 
 3384void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3388  const DerivativeSupport derivSupport = this->supports(arg,j);
 
 3390    !deriv.isSupportedBy(derivSupport), std::logic_error,
 
 3391    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_DgDx_dot_mp,j):\n\n" 
 3392    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3393    "Error, The argument DgDx_dot_mp("<<j<<
") = " << deriv.description() << 
"\n" 
 3394    "is not supported!\n\n" 
 3395    "The supported types include " << derivSupport.description() << 
"!" 
 3400template<
class Scalar>
 
 3401void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3405  const DerivativeSupport derivSupport = this->supports(arg,j);
 
 3407    !deriv.isSupportedBy(derivSupport), std::logic_error,
 
 3408    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_DgDx_mp,j):\n\n" 
 3409    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3410    "Error, The argument DgDx_mp("<<j<<
") = " << deriv.description() << 
"\n" 
 3411    "is not supported!\n\n" 
 3412    "The supported types include " << derivSupport.description() << 
"!" 
 3417template<
class Scalar>
 
 3418void ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(
 
 3422  const DerivativeSupport derivSupport = this->supports(arg,j,l);
 
 3424    !deriv.isSupportedBy(derivSupport), std::logic_error,
 
 3425    "Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_supports(OUT_ARG_DgDp_mp,j,l):\n\n" 
 3426    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3427    "Error, The argument DgDp_mp("<<j<<
","<<l<<
") = " << deriv.description() << 
"\n" 
 3428    "is not supported!\n\n" 
 3429    "The supported types include " << derivSupport.description() << 
"!" 
 3434template<
class Scalar>
 
 3435void ModelEvaluatorBase::OutArgs<Scalar>::assert_l(
int l)
 const 
 3438    !( 0 <= l && l < Np() ), std::logic_error
 
 3439    ,
"Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_l(l):\n\n" 
 3440    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3441    "Error,  The parameter subvector p("<<l<<
")" 
 3442    " is not in the range [0,"<<Np()<<
")!" 
 3447template<
class Scalar>
 
 3448void ModelEvaluatorBase::OutArgs<Scalar>::assert_j(
int j)
 const 
 3451    !( 0 <= j && j < Ng() ), std::logic_error
 
 3452    ,
"Thyra::ModelEvaluatorBase::OutArgs<Scalar>::assert_j(j):\n\n" 
 3453    "model = \'"<<modelEvalDescription_<<
"\':\n\n" 
 3454    "Error, The auxiliary function g("<<j<<
")" 
 3455    " is not in the range [0,"<<Ng()<<
")!" 
 3465template<
class Scalar>
 
 3470template<
class Scalar>
 
 3476template<
class Scalar>
 
 3478  const std::string &modelEvalDescription_in )
 
 3480  this->_setModelEvalDescription(modelEvalDescription_in);
 
 
 3484template<
class Scalar>
 
 3486{ this->_set_Np_Ng(Np_in, 0); }
 
 
 3488template<
class Scalar>
 
 3490{ this->_set_Np_Ng(Np_in, Ng_in); }
 
 
 3492template<
class Scalar>
 
 3494{ this->_setSupports(arg,supports_in); }
 
 
 3497template<
class Scalar>
 
 3499{ this->_setSupports(arg,l,supports_in); }
 
 3502template<
class Scalar>
 
 3507  this->_setSupports(inArgs, Np_in);
 
 
 3511template<
class Scalar>
 
 3516  this->_setUnsupportsAndRelated(arg);
 
 
 3525template<
class Scalar>
 
 3530template<
class Scalar>
 
 3534  :
OutArgs<Scalar>(inputOutArgs)
 
 
 3538template<
class Scalar>
 
 3540  const std::string &modelEvalDescription_in
 
 3542{ this->_setModelEvalDescription(modelEvalDescription_in); }
 
 
 3545template<
class Scalar>
 
 3547{ this->_set_Np_Ng(Np_in, Ng_in); }
 
 
 3550template<
class Scalar>
 
 3554{ this->_setSupports(arg,supports_in); }
 
 
 3557template<
class Scalar>
 
 3561{ this->_setSupports(arg,l,supports_in); }
 
 
 3564template<
class Scalar>
 
 3568{ this->_setSupports(arg,j,supports_in); }
 
 
 3571template<
class Scalar>
 
 3575{ this->_setSupports(arg,j,supports_in); }
 
 
 3578#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 3580template<
class Scalar>
 
 3582  EOutArgs_hess_vec_prod_f_xx arg, 
bool supports_in
 
 3584{ this->_setSupports(arg,supports_in); }
 
 3586template<
class Scalar>
 
 3588  EOutArgs_hess_vec_prod_f_xp arg, 
int l, 
bool supports_in
 
 3590{ this->_setSupports(arg,l,supports_in); }
 
 3592template<
class Scalar>
 
 3594  EOutArgs_hess_vec_prod_f_px arg, 
int l, 
bool supports_in
 
 3596{ this->_setSupports(arg,l,supports_in); }
 
 3598template<
class Scalar>
 
 3600  EOutArgs_hess_vec_prod_f_pp arg, 
int l1, 
int l2, 
bool supports_in
 
 3602{ this->_setSupports(arg,l1,l2,supports_in); }
 
 3607template<
class Scalar>
 
 3611{ this->_setSupports(arg,j,l,supports_in); }
 
 
 3614#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 3616template<
class Scalar>
 
 3618  EOutArgs_hess_vec_prod_g_xx arg, 
int j, 
bool supports_in
 
 3620{ this->_setSupports(arg,j,supports_in); }
 
 3622template<
class Scalar>
 
 3624  EOutArgs_hess_vec_prod_g_xp arg, 
int j, 
int l, 
bool supports_in
 
 3626{ this->_setSupports(arg,j,l,supports_in); }
 
 3628template<
class Scalar>
 
 3630  EOutArgs_hess_vec_prod_g_px arg, 
int j, 
int l, 
bool supports_in
 
 3632{ this->_setSupports(arg,j,l,supports_in); }
 
 3634template<
class Scalar>
 
 3636  EOutArgs_hess_vec_prod_g_pp arg, 
int j, 
int l1, 
int l2, 
bool supports_in
 
 3638{ this->_setSupports(arg,j,l1,l2,supports_in); }
 
 3640template<
class Scalar>
 
 3642  EOutArgs_hess_f_xx arg, 
bool supports_in
 
 3644{ this->_setSupports(arg,supports_in); }
 
 3646template<
class Scalar>
 
 3648  EOutArgs_hess_f_xp arg, 
int l, 
bool supports_in
 
 3650{ this->_setSupports(arg,l,supports_in); }
 
 3652template<
class Scalar>
 
 3654  EOutArgs_hess_f_pp arg, 
int l1, 
int l2, 
bool supports_in
 
 3656{ this->_setSupports(arg,l1,l2,supports_in); }
 
 3658template<
class Scalar>
 
 3660  EOutArgs_hess_g_xx arg, 
int j, 
bool supports_in
 
 3662{ this->_setSupports(arg,j,supports_in); }
 
 3664template<
class Scalar>
 
 3666  EOutArgs_hess_g_xp arg, 
int j, 
int l, 
bool supports_in
 
 3668{ this->_setSupports(arg,j,l,supports_in); }
 
 3670template<
class Scalar>
 
 3672  EOutArgs_hess_g_pp arg, 
int j, 
int l1, 
int l2, 
bool supports_in
 
 3674{ this->_setSupports(arg,j,l1,l2,supports_in); }
 
 3676template<
class Scalar>
 
 3678  EOutArgs_H_xx arg, 
bool supports_in
 
 3680{ this->_setSupports(arg,supports_in); }
 
 3682template<
class Scalar>
 
 3684  EOutArgs_H_xp arg, 
int l, 
bool supports_in
 
 3686{ this->_setSupports(arg,l,supports_in); }
 
 3688template<
class Scalar>
 
 3690  EOutArgs_H_pp arg, 
int l1, 
int l2, 
bool supports_in
 
 3692{ this->_setSupports(arg,l1,l2,supports_in); }
 
 3697template<
class Scalar>
 
 3701{ this->_setSupports(arg,j,supports_in); }
 
 3704template<
class Scalar>
 
 3708{ this->_setSupports(arg,l,supports_in); }
 
 3711template<
class Scalar>
 
 3715{ this->_setSupports(arg,j,supports_in); }
 
 3718template<
class Scalar>
 
 3722{ this->_setSupports(arg,j,supports_in); }
 
 3725template<
class Scalar>
 
 3727  EOutArgsDgDp_mp arg, 
int j, 
int l, 
const DerivativeSupport& supports_in
 
 3729{ this->_setSupports(arg,j,l,supports_in); }
 
 3732template<
class Scalar>
 
 3736{ this->_set_W_properties(properties); }
 
 
 3739template<
class Scalar>
 
 3743{ this->_set_DfDp_properties(l,properties); }
 
 
 3746template<
class Scalar>
 
 3750{ this->_set_DgDx_dot_properties(j,properties); }
 
 
 3753template<
class Scalar>
 
 3757{ this->_set_DgDx_properties(j,properties); }
 
 
 3760template<
class Scalar>
 
 3764{ this->_set_DgDp_properties(j,l,properties); }
 
 
 3767template<
class Scalar>
 
 3771{ this->_set_DfDp_mp_properties(l,properties); }
 
 3774template<
class Scalar>
 
 3776  int j, 
const DerivativeProperties &properties
 
 3778{ this->_set_DgDx_dot_mp_properties(j,properties); }
 
 3781template<
class Scalar>
 
 3782void ModelEvaluatorBase::OutArgsSetup<Scalar>::set_DgDx_mp_properties(
 
 3783  int j, 
const DerivativeProperties &properties
 
 3785{ this->_set_DgDx_mp_properties(j,properties); }
 
 3788template<
class Scalar>
 
 3789void ModelEvaluatorBase::OutArgsSetup<Scalar>::set_DgDp_mp_properties(
 
 3790  int j, 
int l, 
const DerivativeProperties &properties
 
 3792{ this->_set_DgDp_mp_properties(j,l,properties); }
 
 3795template<
class Scalar>
 
 3799{ this->_setSupports(inputOutArgs); }
 
 
 3802template<
class Scalar>
 
 3806{ this->_setUnsupportsAndRelated(arg); }
 
 
 3809template<
class Scalar>
 
 3813{ this->_setUnsupportsAndRelated(arg); }
 
 
 3816#ifdef Thyra_BUILD_HESSIAN_SUPPORT 
 3817template<
class Scalar>
 
 3821{ this->_setHessianSupports(supports); }
 
 3835#define THYRA_MODEL_EVALUATOR_BASE_INSTANT(SCALAR) \ 
 3837  template class ModelEvaluatorBase::InArgs<SCALAR >; \ 
 3839  template std::string \ 
 3840  ModelEvaluatorBase::Derivative<SCALAR >::description() const; \ 
 3843  void ModelEvaluatorBase::Derivative<SCALAR >::describe( \ 
 3844    Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel \ 
 3847  template class ModelEvaluatorBase::OutArgs<SCALAR >; \ 
 3849  template class ModelEvaluatorBase::InArgsSetup<SCALAR >; \ 
 3851  template class ModelEvaluatorBase::OutArgsSetup<SCALAR >;