virtual Thyra::ModelEvaluatorBase::OutArgs<double> createOutArgsImpl() const { // TODO this entire method Thyra::ModelEvaluatorBase::OutArgsSetup<double> out_args; out_args.setModelEvalDescription("Nosh problem"); out_args.set_Np_Ng(1, 0); // one parameter vector, no objective function out_args.setSupports(Thyra::ModelEvaluatorBase::OUT_ARG_f); // support derivatives with respect to all parameters; out_args.setSupports( Thyra::ModelEvaluatorBase::OUT_ARG_DfDp, 0, DerivativeSupport(DERIV_MV_BY_COL) ); out_args.setSupports(Thyra::ModelEvaluatorBase::OUT_ARG_W_op); // TODO // out_args.setSupports(Thyra::ModelEvaluatorBase::OUT_ARG_W_prec); return out_args; }
EpetraExt::ModelEvaluator::OutArgs Simple_ModelEval::createOutArgs() const { EpetraExt::ModelEvaluator::OutArgsSetup outArgs; outArgs.setModelEvalDescription(this->description()); outArgs.set_Np_Ng(1, 1); outArgs.setSupports(OUT_ARG_DgDp, 0, 0, DerivativeSupport(DERIV_MV_BY_COL)); return outArgs; }
virtual Thyra::ModelEvaluatorBase::OutArgs<double> createOutArgsImpl() const { Thyra::ModelEvaluatorBase::OutArgsSetup<double> out_args; out_args.setModelEvalDescription("sqrt(alpha)"); out_args.set_Np_Ng(1, 0); out_args.setSupports(Thyra::ModelEvaluatorBase::OUT_ARG_f); out_args.setSupports( Thyra::ModelEvaluatorBase::OUT_ARG_DfDp, 0, DerivativeSupport(DERIV_MV_BY_COL) ); out_args.setSupports(Thyra::ModelEvaluatorBase::OUT_ARG_W_op); return out_args; }
EpetraExt::ModelEvaluator::OutArgs Albany::ModelEvaluator::createOutArgs() const { OutArgsSetup outArgs; outArgs.setModelEvalDescription(this->description()); int n_g = app->getNumResponses(); // Deterministic outArgs.setSupports(OUT_ARG_f,true); outArgs.setSupports(OUT_ARG_W,true); outArgs.set_W_properties( DerivativeProperties(DERIV_LINEARITY_UNKNOWN, DERIV_RANK_FULL, true)); if (supplies_prec) outArgs.setSupports(OUT_ARG_WPrec, true); outArgs.set_Np_Ng(num_param_vecs+num_dist_param_vecs, n_g); for (int i=0; i<num_param_vecs; i++) outArgs.setSupports(OUT_ARG_DfDp, i, DerivativeSupport(DERIV_MV_BY_COL)); for (int i=0; i<num_dist_param_vecs; i++) outArgs.setSupports(OUT_ARG_DfDp, i+num_param_vecs, DerivativeSupport(DERIV_LINEAR_OP)); for (int i=0; i<n_g; i++) { if (app->getResponse(i)->isScalarResponse()) { outArgs.setSupports(OUT_ARG_DgDx, i, DerivativeSupport(DERIV_TRANS_MV_BY_ROW)); outArgs.setSupports(OUT_ARG_DgDx_dot, i, DerivativeSupport(DERIV_TRANS_MV_BY_ROW)); outArgs.setSupports(OUT_ARG_DgDx_dotdot, i, DerivativeSupport(DERIV_TRANS_MV_BY_ROW)); } else { outArgs.setSupports(OUT_ARG_DgDx, i, DerivativeSupport(DERIV_LINEAR_OP)); outArgs.setSupports(OUT_ARG_DgDx_dot, i, DerivativeSupport(DERIV_LINEAR_OP)); outArgs.setSupports(OUT_ARG_DgDx_dotdot, i, DerivativeSupport(DERIV_LINEAR_OP)); } for (int j=0; j<num_param_vecs; j++) outArgs.setSupports(OUT_ARG_DgDp, i, j, DerivativeSupport(DERIV_MV_BY_COL)); if (app->getResponse(i)->isScalarResponse()) { for (int j=0; j<num_dist_param_vecs; j++) outArgs.setSupports(OUT_ARG_DgDp, i, j+num_param_vecs, DerivativeSupport(DERIV_TRANS_MV_BY_ROW)); } else { for (int j=0; j<num_dist_param_vecs; j++) outArgs.setSupports(OUT_ARG_DgDp, i, j+num_param_vecs, DerivativeSupport(DERIV_LINEAR_OP)); } } #ifdef ALBANY_SG_MP // Stochastic outArgs.setSupports(OUT_ARG_f_sg,true); outArgs.setSupports(OUT_ARG_W_sg,true); for (int i=0; i<num_param_vecs; i++) outArgs.setSupports(OUT_ARG_DfDp_sg, i, DerivativeSupport(DERIV_MV_BY_COL)); for (int i=0; i<n_g; i++) outArgs.setSupports(OUT_ARG_g_sg, i, true); for (int i=0; i<n_g; i++) { if (app->getResponse(i)->isScalarResponse()) { outArgs.setSupports(OUT_ARG_DgDx_sg, i, DerivativeSupport(DERIV_TRANS_MV_BY_ROW)); outArgs.setSupports(OUT_ARG_DgDx_dot_sg, i, DerivativeSupport(DERIV_TRANS_MV_BY_ROW)); outArgs.setSupports(OUT_ARG_DgDx_dotdot_sg, i, DerivativeSupport(DERIV_TRANS_MV_BY_ROW)); } else { outArgs.setSupports(OUT_ARG_DgDx_sg, i, DerivativeSupport(DERIV_LINEAR_OP)); outArgs.setSupports(OUT_ARG_DgDx_dot_sg, i, DerivativeSupport(DERIV_LINEAR_OP)); outArgs.setSupports(OUT_ARG_DgDx_dotdot_sg, i, DerivativeSupport(DERIV_LINEAR_OP)); } for (int j=0; j<num_param_vecs; j++) outArgs.setSupports(OUT_ARG_DgDp_sg, i, j, DerivativeSupport(DERIV_MV_BY_COL)); } // Multi-point outArgs.setSupports(OUT_ARG_f_mp,true); outArgs.setSupports(OUT_ARG_W_mp,true); for (int i=0; i<num_param_vecs; i++) outArgs.setSupports(OUT_ARG_DfDp_mp, i, DerivativeSupport(DERIV_MV_BY_COL)); for (int i=0; i<n_g; i++) outArgs.setSupports(OUT_ARG_g_mp, i, true); for (int i=0; i<n_g; i++) { outArgs.setSupports(OUT_ARG_g_mp, i, true); if (app->getResponse(i)->isScalarResponse()) { outArgs.setSupports(OUT_ARG_DgDx_mp, i, DerivativeSupport(DERIV_TRANS_MV_BY_ROW)); outArgs.setSupports(OUT_ARG_DgDx_dot_mp, i, DerivativeSupport(DERIV_TRANS_MV_BY_ROW)); outArgs.setSupports(OUT_ARG_DgDx_dotdot_mp, i, DerivativeSupport(DERIV_TRANS_MV_BY_ROW)); } else { outArgs.setSupports(OUT_ARG_DgDx_mp, i, DerivativeSupport(DERIV_LINEAR_OP)); outArgs.setSupports(OUT_ARG_DgDx_dot_mp, i, DerivativeSupport(DERIV_LINEAR_OP)); outArgs.setSupports(OUT_ARG_DgDx_dotdot_mp, i, DerivativeSupport(DERIV_LINEAR_OP)); } for (int j=0; j<num_param_vecs; j++) outArgs.setSupports(OUT_ARG_DgDp_mp, i, j, DerivativeSupport(DERIV_MV_BY_COL)); } #endif return outArgs; }