|
NLPInterfacePack: C++ Interfaces and Implementation for Non-Linear Programs Version of the Day
|
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 // This library is free software; you can redistribute it and/or modify 00011 // it under the terms of the GNU Lesser General Public License as 00012 // published by the Free Software Foundation; either version 2.1 of the 00013 // License, or (at your option) any later version. 00014 // 00015 // This library is distributed in the hope that it will be useful, but 00016 // WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 // Lesser General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU Lesser General Public 00021 // License along with this library; if not, write to the Free Software 00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00023 // USA 00024 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 00025 // 00026 // *********************************************************************** 00027 // @HEADER 00028 00029 #include "NLPInterfacePack_test_basis_system.hpp" 00030 #include "NLPInterfacePack_NLPFirstOrder.hpp" 00031 #include "AbstractLinAlgPack_BasisSystem.hpp" 00032 #include "AbstractLinAlgPack_BasisSystemTester.hpp" 00033 #include "AbstractLinAlgPack_BasisSystemTesterSetOptions.hpp" 00034 #include "AbstractLinAlgPack_MatrixOpNonsing.hpp" 00035 00036 bool NLPInterfacePack::test_basis_system( 00037 NLPFirstOrder *nlp 00038 ,BasisSystem *basis_sys 00039 ,OptionsFromStreamPack::OptionsFromStream *options 00040 ,std::ostream *out 00041 ) 00042 { 00043 namespace mmp = MemMngPack; 00044 00045 const index_type 00046 n = nlp->n(), 00047 m = nlp->m(); 00048 00049 // Create the matrices Gc and Gh 00050 NLPFirstOrder::mat_fcty_ptr_t::element_type::obj_ptr_t 00051 Gc = ( m ? nlp->factory_Gc()->create() : Teuchos::null ); 00052 00053 // Compute the matrices at xinit 00054 const Vector 00055 &xo = nlp->xinit(); 00056 if(m) 00057 nlp->set_Gc(Gc.get()); 00058 if(m) 00059 nlp->calc_Gc(xo); 00060 00061 // Create the matrices C and D 00062 BasisSystem::mat_nonsing_fcty_ptr_t::element_type::obj_ptr_t 00063 C = ( m ? basis_sys->factory_C()->create() : Teuchos::null); 00064 BasisSystem::mat_fcty_ptr_t::element_type::obj_ptr_t 00065 D = ( m && n > m && basis_sys->factory_C().get() ? basis_sys->factory_C()->create() : Teuchos::null); 00066 BasisSystem::mat_fcty_ptr_t::element_type::obj_ptr_t 00067 GcUP = ( m && n > m && basis_sys->factory_GcUP().get() ? basis_sys->factory_GcUP()->create() : Teuchos::null); 00068 00069 // Initialize C and D with basis_sys 00070 basis_sys->update_basis( 00071 *Gc 00072 ,C.get() 00073 ,D.get() 00074 ,GcUP.get() 00075 ); 00076 00077 // Test the basis and basis system objects. 00078 BasisSystemTester 00079 basis_sys_tester; 00080 if(options) { 00081 BasisSystemTesterSetOptions 00082 opt_setter(&basis_sys_tester); 00083 opt_setter.set_options(*options); 00084 } 00085 const bool result = basis_sys_tester.test_basis_system( 00086 *basis_sys 00087 ,Gc.get() 00088 ,C.get() 00089 ,NULL // Create the N matrix internally 00090 ,D.get() 00091 ,GcUP.get() 00092 ,out 00093 ); 00094 00095 return result; 00096 }
1.7.4