Thyra Version of the Day
Thyra_StateFuncModelEvaluatorBase.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 #ifndef THYRA_STATE_FUNC_MODEL_EVALUATOR_BASE_HPP
00043 #define THYRA_STATE_FUNC_MODEL_EVALUATOR_BASE_HPP
00044 
00045 #include "Thyra_ModelEvaluatorDefaultBase.hpp"
00046 
00047 
00048 namespace Thyra {
00049 
00050 
00061 template<class Scalar>
00062 class StateFuncModelEvaluatorBase : virtual public ModelEvaluatorDefaultBase<Scalar> {
00063 public:
00064 
00067 
00069   RCP<const VectorSpaceBase<Scalar> > get_p_space(int l) const;
00071   RCP<const Teuchos::Array<std::string> > get_p_names(int l) const;
00073   RCP<const VectorSpaceBase<Scalar> > get_g_space(int j) const;
00075   ModelEvaluatorBase::InArgs<Scalar> getNominalValues() const;
00077   ModelEvaluatorBase::InArgs<Scalar> getLowerBounds() const;
00079   ModelEvaluatorBase::InArgs<Scalar> getUpperBounds() const;
00081   RCP<LinearOpBase<Scalar> > create_W_op() const;
00083   RCP<const LinearOpWithSolveFactoryBase<Scalar> > get_W_factory() const;
00085   void reportFinalPoint(
00086     const ModelEvaluatorBase::InArgs<Scalar> &finalPoint,
00087     const bool wasSolved
00088     );
00089 
00091   
00092 };
00093 
00094 
00095 // /////////////////////////////////
00096 // Implementations
00097 
00098 
00099 // Public functions overridden from ModelEvaulator
00100 
00101 
00102 template<class Scalar>
00103 RCP<const VectorSpaceBase<Scalar> >
00104 StateFuncModelEvaluatorBase<Scalar>::get_p_space(int l) const
00105 {
00106   TEUCHOS_TEST_FOR_EXCEPTION(
00107     true,std::logic_error
00108     ,"ModelEvaluator<"<<Teuchos::ScalarTraits<Scalar>::name()<<">::get_p_space(l): "
00109     "Error, this function was not overridden in *this = \'"<<this->description()<<"\'!"
00110     );
00111   return Teuchos::null; // Should never be called!
00112 }
00113 
00114 
00115 template<class Scalar>
00116 RCP<const Teuchos::Array<std::string> >
00117 StateFuncModelEvaluatorBase<Scalar>::get_p_names(int l) const
00118 {
00119   TEUCHOS_TEST_FOR_EXCEPTION(
00120     true,std::logic_error
00121     ,"ModelEvaluator<"<<Teuchos::ScalarTraits<Scalar>::name()<<">::get_p_names(l): "
00122     "Error, this function was not overridden in *this = \'"<<this->description()<<"\'!"
00123     );
00124   return Teuchos::null; // Should never be called!
00125 }
00126 
00127 
00128 template<class Scalar>
00129 RCP<const VectorSpaceBase<Scalar> >
00130 StateFuncModelEvaluatorBase<Scalar>::get_g_space(int j) const
00131 {
00132   TEUCHOS_TEST_FOR_EXCEPTION(
00133     true,std::logic_error
00134     ,"ModelEvaluator<"<<Teuchos::ScalarTraits<Scalar>::name()<<">::get_g_space(j): "
00135     " Error, this function was not overridden in \'"
00136     <<this->description()<<"\'!"
00137     );
00138   return Teuchos::null; // Should never be called!
00139 }
00140 
00141 
00142 template<class Scalar>
00143 ModelEvaluatorBase::InArgs<Scalar>
00144 StateFuncModelEvaluatorBase<Scalar>::getNominalValues() const
00145 { return this->createInArgs(); }
00146 
00147 
00148 template<class Scalar>
00149 ModelEvaluatorBase::InArgs<Scalar>
00150 StateFuncModelEvaluatorBase<Scalar>::getLowerBounds() const
00151 { return this->createInArgs(); }
00152 
00153 
00154 template<class Scalar>
00155 ModelEvaluatorBase::InArgs<Scalar>
00156 StateFuncModelEvaluatorBase<Scalar>::getUpperBounds() const
00157 { return this->createInArgs(); }
00158 
00159 
00160 template<class Scalar>
00161 RCP<LinearOpBase<Scalar> >
00162 StateFuncModelEvaluatorBase<Scalar>::create_W_op() const
00163 {
00164   TEUCHOS_TEST_FOR_EXCEPTION(
00165     true, std::logic_error
00166     ,"Error, if \'W\' is supported by the ModelEvaluator subclass then"
00167     " this function create_W_op() must be overridden by the subclass "
00168     <<this->description()<<" to return a non-null object!"
00169     );
00170   return Teuchos::null; // Should never be called!
00171 }
00172 
00173 
00174 template<class Scalar>
00175 RCP<const LinearOpWithSolveFactoryBase<Scalar> >
00176 StateFuncModelEvaluatorBase<Scalar>::get_W_factory() const
00177 {
00178   return Teuchos::null;
00179 }
00180 
00181 
00182 template<class Scalar>
00183 void StateFuncModelEvaluatorBase<Scalar>::reportFinalPoint(
00184   const ModelEvaluatorBase::InArgs<Scalar> &finalPoint,
00185   const bool wasSolved
00186   )
00187 {
00188   // This final point is just ignored by default!
00189 }
00190 
00191 
00192 } // namespace Thyra
00193 
00194 
00195 #endif // THYRA_STATE_FUNC_MODEL_EVALUATOR_BASE_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines