MOOCHO (Single Doxygen Collection) Version of the Day
NLPInterfacePack_NLPFirstOrder.hpp
Go to the documentation of this file.
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 NLP_FIRST_ORDER_INFO_H
00043 #define NLP_FIRST_ORDER_INFO_H
00044 
00045 #include "NLPInterfacePack_NLPObjGrad.hpp"
00046 #include "Teuchos_AbstractFactory.hpp"
00047 
00048 namespace NLPInterfacePack {
00089 class NLPFirstOrder : virtual public NLPObjGrad {
00090 public:
00091 
00093   typedef Teuchos::RCP<
00094     const Teuchos::AbstractFactory<MatrixOp> >        mat_fcty_ptr_t;
00096   typedef Teuchos::RCP<BasisSystem>           basis_sys_ptr_t;
00097 
00100 
00102   NLPFirstOrder();
00103 
00105 
00108 
00122   void initialize(bool test_setup);
00123 
00125 
00128   
00134   virtual const mat_fcty_ptr_t factory_Gc() const = 0;
00135 
00137 
00140 
00148   virtual const basis_sys_ptr_t basis_sys() const;
00149 
00151 
00154 
00169   virtual void set_Gc(MatrixOp* Gc);
00176   virtual MatrixOp* get_Gc();
00184   virtual MatrixOp& Gc();
00192   virtual const MatrixOp& Gc() const;
00193 
00195 
00198   
00212   void unset_quantities();
00213 
00215 
00218 
00242   virtual void calc_Gc(const Vector& x, bool newx = true) const;
00243 
00245 
00248 
00254   virtual size_type num_Gc_evals() const;
00255 
00257 
00260   struct FirstOrderInfo {
00262     FirstOrderInfo()
00263       : Gc(NULL), Gf(NULL), f(NULL), c(NULL)
00264     {}
00266     FirstOrderInfo( MatrixOp* Gc_in, const ObjGradInfo& obj_grad )
00267       : Gc(Gc_in), Gf(obj_grad.Gf), f(obj_grad.f), c(obj_grad.c)
00268     {}
00270     MatrixOp*           Gc;
00272     VectorMutable*      Gf;
00274     value_type*         f;
00276     VectorMutable*      c;
00277   }; // end struct FirstOrderInfo
00278 
00279 protected:
00280 
00282   const FirstOrderInfo first_order_info() const;
00283 
00286 
00309   virtual void imp_calc_Gc(const Vector& x, bool newx, const FirstOrderInfo& first_order_info) const = 0;
00310 
00312 
00313 private:
00314 
00315 #ifdef DOXYGEN_COMPILE
00316   AbstractLinAlgPack::BasisSystem                            *basis_sys;
00317   Teuchos::AbstractFactory<AbstractLinAlgPack::MatrixOp>  *factory_Gc;
00318 #endif
00319   mutable MatrixOp      *Gc_;
00320   mutable size_type     num_Gc_evals_;
00321 
00322 };  // end class NLPFirstOrder
00323 
00324 // /////////////////////
00325 // Inline members
00326 
00327 inline
00328 const NLPFirstOrder::FirstOrderInfo NLPFirstOrder::first_order_info() const
00329 {
00330   return FirstOrderInfo(Gc_,obj_grad_info());
00331 }
00332 
00333 } // end namespace NLPInterfacePack 
00334 
00335 #endif // NLP_FIRST_ORDER_INFO_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines