Thyra Version of the Day
Thyra_ModelEvaluator.hpp
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 //    Thyra: Interfaces and Support for Abstract Numerical Algorithms
00005 //                 Copyright (2004) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Roscoe A. Bartlett (bartlettra@ornl.gov) 
00038 // 
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 
00043 #ifndef THYRA_MODEL_EVALUATOR_HPP
00044 #define THYRA_MODEL_EVALUATOR_HPP
00045 
00046 
00047 #include "Thyra_ModelEvaluatorBase.hpp"
00048 #include "Thyra_LinearOpWithSolveFactoryBase.hpp"
00049 
00050 
00051 namespace Thyra {
00052 
00053 
00644 template<class Scalar>
00645 class ModelEvaluator : public ModelEvaluatorBase {
00646 public:
00647 
00649   typedef typename Teuchos::ScalarTraits<Scalar>::magnitudeType ScalarMag;
00650 
00653 
00658   virtual int Np() const = 0;
00659 
00665   virtual int Ng() const = 0;
00666 
00668 
00671 
00673   virtual RCP<const VectorSpaceBase<Scalar> > get_x_space() const = 0;
00674 
00676   virtual RCP<const VectorSpaceBase<Scalar> > get_f_space() const = 0;
00677 
00690   virtual RCP<const VectorSpaceBase<Scalar> > get_p_space(int l) const = 0;
00691 
00705   virtual RCP<const Teuchos::Array<std::string> > get_p_names(int l) const = 0;
00706 
00719   virtual RCP<const VectorSpaceBase<Scalar> > get_g_space(int j) const = 0;
00720 
00722 
00725   
00745   virtual ModelEvaluatorBase::InArgs<Scalar> getNominalValues() const = 0;
00746   
00760   virtual ModelEvaluatorBase::InArgs<Scalar> getLowerBounds() const = 0;
00761   
00775   virtual ModelEvaluatorBase::InArgs<Scalar> getUpperBounds() const = 0;
00776 
00778 
00781 
00798   virtual RCP<LinearOpWithSolveBase<Scalar> > create_W() const = 0;
00799 
00824   virtual RCP<LinearOpBase<Scalar> > create_W_op() const = 0;
00825 
00836   virtual RCP<LinearOpBase<Scalar> > create_DfDp_op(int l) const = 0;
00837 
00848   virtual RCP<LinearOpBase<Scalar> > create_DgDx_dot_op(int j) const = 0;
00849 
00860   virtual RCP<LinearOpBase<Scalar> > create_DgDx_op(int j) const = 0;
00861 
00874   virtual RCP<LinearOpBase<Scalar> > create_DgDp_op( int j, int l ) const = 0;
00875   
00877 
00880 
00901   virtual RCP<const LinearOpWithSolveFactoryBase<Scalar> > get_W_factory() const = 0;
00902 
00904 
00907 
00919   virtual ModelEvaluatorBase::InArgs<Scalar> createInArgs() const = 0;
00920 
00932   virtual ModelEvaluatorBase::OutArgs<Scalar> createOutArgs() const = 0;
00933 
00995   virtual void evalModel(
00996     const ModelEvaluatorBase::InArgs<Scalar> &inArgs,
00997     const ModelEvaluatorBase::OutArgs<Scalar> &outArgs
00998     ) const = 0;
00999 
01001 
01004 
01011   virtual void reportFinalPoint(
01012     const ModelEvaluatorBase::InArgs<Scalar> &finalPoint,
01013     const bool wasSolved
01014     ) = 0;
01015 
01017 
01018 private:
01019   
01020   // Not defined and not to be called
01021   ModelEvaluator<Scalar>&
01022   operator=(const ModelEvaluator<Scalar>&);
01023 
01024 };
01025 
01026 } // namespace Thyra
01027 
01028 
01029 #endif // THYRA_MODEL_EVALUATOR_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines