MOOCHO/Thyra Adapter Software Version of the Day
NLPInterfacePack_NLPDirectThyraModelEvaluator.hpp
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
00005 //                  Copyright (2003) 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 (rabartl@sandia.gov) 
00038 // 
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #ifndef NLPIP_NLP_DIRECT_THYRA_MODEL_EVALUATOR_HPP
00043 #define NLPIP_NLP_DIRECT_THYRA_MODEL_EVALUATOR_HPP
00044 
00045 #include "NLPInterfacePack_NLPThyraModelEvaluatorBase.hpp"
00046 #include "NLPInterfacePack_NLPDirect.hpp"
00047 #include "Thyra_DirectionalFiniteDiffCalculator.hpp"
00048 #include "Teuchos_StandardCompositionMacros.hpp"
00049 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00050 
00051 namespace NLPInterfacePack {
00052 
00058 class NLPDirectThyraModelEvaluator
00059   : virtual public NLPDirect
00060   , virtual public NLPThyraModelEvaluatorBase
00061 {
00062 public:
00063 
00065   STANDARD_COMPOSITION_MEMBERS( Thyra::DirectionalFiniteDiffCalculator<value_type>, objDirecFiniteDiffCalculator );
00066 
00068   STANDARD_COMPOSITION_MEMBERS( Thyra::DirectionalFiniteDiffCalculator<value_type>, conDirecFiniteDiffCalculator );
00069 
00071   STANDARD_MEMBER_COMPOSITION_MEMBERS( bool, DfDp_is_const );
00072 
00074   NLPDirectThyraModelEvaluator();
00075 
00077   NLPDirectThyraModelEvaluator(
00078     const Teuchos::RCP<Thyra::ModelEvaluator<value_type> >  &model
00079     ,const int                                                      p_idx
00080     ,const int                                                      g_idx
00081     ,const objDirecFiniteDiffCalculator_ptr_t                       objDirecFiniteDiffCalculator = Teuchos::null
00082     ,const conDirecFiniteDiffCalculator_ptr_t                       conDirecFiniteDiffCalculator = Teuchos::null
00083     );
00084 
00090   void initialize(
00091     const Teuchos::RCP<Thyra::ModelEvaluator<value_type> >  &model
00092     ,const int                                                      p_idx
00093     ,const int                                                      g_idx
00094     ,const objDirecFiniteDiffCalculator_ptr_t                       objDirecFiniteDiffCalculator = Teuchos::null
00095     ,const conDirecFiniteDiffCalculator_ptr_t                       conDirecFiniteDiffCalculator = Teuchos::null
00096     );
00097 
00100 
00102   void initialize(bool test_setup);
00104   void unset_quantities();
00105 
00107 
00110 
00112   bool supports_Gf() const;
00114   bool supports_Gf_prod() const;
00116   value_type calc_Gf_prod(const Vector& x, const Vector& d, bool newx) const;
00117 
00119 
00122 
00124   Range1D var_dep() const;
00126   Range1D var_indep() const;
00128   const mat_fcty_ptr_t factory_D() const;
00130   const mat_sym_nonsing_fcty_ptr_t factory_S() const;
00132   void calc_point(
00133     const Vector     &x
00134     ,value_type      *f
00135     ,VectorMutable   *c
00136     ,bool            recalc_c
00137     ,VectorMutable   *Gf
00138     ,VectorMutable   *py
00139     ,VectorMutable   *rGf
00140     ,MatrixOp        *GcU
00141     ,MatrixOp        *D
00142     ,MatrixOp        *Uz
00143     ) const;
00145   void calc_semi_newton_step(
00146     const Vector    &x
00147     ,VectorMutable  *c
00148     ,bool           recalc_c
00149     ,VectorMutable  *py
00150     ) const;
00151 
00153 
00154 private:
00155 
00156   mutable Teuchos::RCP<Thyra::LinearOpWithSolveBase<value_type> >  thyra_C_;
00157   mutable Teuchos::RCP<Thyra::MultiVectorBase<value_type> >        thyra_N_;
00158   
00159 };  // end class NLPDirectThyraModelEvaluator
00160 
00161 } // end namespace NLPInterfacePack
00162 
00163 #endif  // NLPIP_NLP_DIRECT_THYRA_MODEL_EVALUATOR_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends