MoochoPack : Framework for Large-Scale Optimization Algorithms  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
MoochoPack_EvalNewPointTailoredApproachCoordinate_Step.cpp
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
5 // Copyright (2003) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 #include "MoochoPack_EvalNewPointTailoredApproachCoordinate_Step.hpp"
43 #include "ConstrainedOptPack_MatrixIdentConcatStd.hpp"
44 #include "NLPInterfacePack_NLPDirect.hpp"
45 #include "AbstractLinAlgPack_MatrixOp.hpp"
46 #include "AbstractLinAlgPack_MatrixZero.hpp"
47 #include "AbstractLinAlgPack_VectorMutable.hpp"
48 #include "Teuchos_dyn_cast.hpp"
49 
50 namespace MoochoPack {
51 
52 EvalNewPointTailoredApproachCoordinate_Step::EvalNewPointTailoredApproachCoordinate_Step(
53  const deriv_tester_ptr_t& deriv_tester
54  ,const bounds_tester_ptr_t& bounds_tester
55  ,EFDDerivTesting fd_deriv_testing
56  )
57  :EvalNewPointTailoredApproach_Step(deriv_tester,bounds_tester,fd_deriv_testing)
58 {}
59 
60 // protected
61 
63  MatrixOp *Y
64  ,MatrixOp *Uy
65  )
66 {
67  // Nothing to free
68 }
69 
71  const NLPDirect &nlp
72  ,const D_ptr_t &D
73  ,VectorMutable *py
74  ,MatrixOp *Y
75  ,MatrixOp *Uy
76  ,EJournalOutputLevel olevel
77  ,std::ostream &out
78  )
79 {
80  namespace rcp = MemMngPack;
81  using Teuchos::dyn_cast;
82 
83  MatrixIdentConcatStd
84  &cY = dyn_cast<MatrixIdentConcatStd>(*Y);
85  //
86  // Y = [ I ] space_xD
87  // [ Zero ] space_xI
88  // space_xD
89  //
90  VectorSpace::space_ptr_t
91  space_x = nlp.space_x(),
92  space_xD = space_x->sub_space(nlp.var_dep())->clone(),
93  space_xI = space_x->sub_space(nlp.var_indep())->clone();
94  cY.initialize(
95  space_x // space_cols
96  ,space_xD // space_rows
97  ,MatrixIdentConcatStd::BOTTOM // top_or_bottom
98  ,1.0 // alpha
99  ,Teuchos::rcp(
100  new MatrixZero(
101  space_xI // space_cols
102  ,space_xD // space_rows
103  ) ) // D_ptr
104  ,BLAS_Cpp::no_trans // D_trans
105  );
106  // py is not altered here!
107 }
108 
110  const MatrixOp &D
111  ,VectorMutable *py
112  ,EJournalOutputLevel olevel
113  ,std::ostream &out
114  )
115 {
116  // py is not altered here!
117 }
118 
120  std::ostream& out, const std::string& L
121  ) const
122 {
123  out
124  << L << "*** Coordinate decomposition\n"
125  << L << "py_k = py_k\n"
126  << L << "Y = [ I ; 0 ] <: R^(n x m) [0 represented using MatrixZero]\n"
127  << L << "Uy = Gc(var_dep,con_undecomp)\'\n"
128  ;
129 }
130 
131 } // end namespace MoochoPack
void recalc_py(const MatrixOp &D, VectorMutable *py, EJournalOutputLevel olevel, std::ostream &out)
void calc_py_Y_Uy(const NLPDirect &nlp, const D_ptr_t &D, VectorMutable *py, MatrixOp *Y, MatrixOp *Uy, EJournalOutputLevel olevel, std::ostream &out)
T_To & dyn_cast(T_From &from)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
void print_calc_py_Y_Uy(std::ostream &out, const std::string &leading_str) const
Base class for evaluating a new point for the "Tailored Approach".