MOOCHO (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MoochoPack_LineSearch2ndOrderCorrect_StepSetOptions.cpp
Go to the documentation of this file.
1 #if 0
2 
3 // @HEADER
4 // ***********************************************************************
5 //
6 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
7 // Copyright (2003) Sandia Corporation
8 //
9 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
10 // license for use of this work by or on behalf of the U.S. Government.
11 //
12 // Redistribution and use in source and binary forms, with or without
13 // modification, are permitted provided that the following conditions are
14 // met:
15 //
16 // 1. Redistributions of source code must retain the above copyright
17 // notice, this list of conditions and the following disclaimer.
18 //
19 // 2. Redistributions in binary form must reproduce the above copyright
20 // notice, this list of conditions and the following disclaimer in the
21 // documentation and/or other materials provided with the distribution.
22 //
23 // 3. Neither the name of the Corporation nor the names of the
24 // contributors may be used to endorse or promote products derived from
25 // this software without specific prior written permission.
26 //
27 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
28 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
31 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
33 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 //
39 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
40 //
41 // ***********************************************************************
42 // @HEADER
43 
44 #include <assert.h>
45 #include <math.h>
46 
49 
50 // Define the options
51 namespace {
52 
53  const int local_num_options = 8;
54 
55  enum local_EOptions {
56  NEWTON_OLEVEL,
57  CONSTR_NORM_THRESHOLD,
58  CONSTR_INCR_RATIO,
59  AFTER_K_ITER,
60  FORCED_CONSTR_REDUCTION,
61  FORCED_REDUCT_RATIO,
62  MAX_STEP_RATIO,
63  MAX_NEWTON_ITER
64  };
65 
66  const char* local_SOptions[local_num_options] = {
67  "newton_olevel",
68  "constr_norm_threshold",
69  "constr_incr_ratio",
70  "after_k_iter",
71  "forced_constr_reduction",
72  "forced_reduct_ratio",
73  "max_step_ratio",
74  "max_newton_iter"
75  };
76 
77 }
78 
79 namespace MoochoPack {
80 
82  LineSearch2ndOrderCorrect_Step* target
83  , const char opt_grp_name[] )
84  : OptionsFromStreamPack::SetOptionsFromStreamNode(
85  opt_grp_name, local_num_options, local_SOptions )
86  , OptionsFromStreamPack::SetOptionsToTargetBase<
87  LineSearch2ndOrderCorrect_Step >( target )
88 {}
89 
91  int option_num, const std::string& option_value )
92 {
93  typedef LineSearch2ndOrderCorrect_Step target_t;
94  switch( (local_EOptions)option_num ) {
95  case NEWTON_OLEVEL:
96  {
97  const std::string &option = option_value.c_str();
98  if( option == "PRINT_USE_DEFAULT" )
99  target().newton_olevel( target_t::PRINT_USE_DEFAULT );
100  else if( option == "PRINT_NOTHING" )
101  target().newton_olevel( target_t::PRINT_NEWTON_NOTHING );
102  else if( option == "PRINT_SUMMARY_INFO" )
103  target().newton_olevel( target_t::PRINT_NEWTON_SUMMARY_INFO );
104  else if( option == "PRINT_STEPS" )
105  target().newton_olevel( target_t::PRINT_NEWTON_STEPS );
106  else if( option == "PRINT_VECTORS" )
107  target().newton_olevel( target_t::PRINT_NEWTON_VECTORS );
108  else
109  throw std::invalid_argument( "Error, incorrect value for "
110  "\"newton_olevel\"." );
111  break;
112  }
113  case CONSTR_NORM_THRESHOLD:
114  target().constr_norm_threshold(::fabs(::atof(option_value.c_str())));
115  break;
116  case CONSTR_INCR_RATIO:
117  target().constr_incr_ratio(::fabs(::atof(option_value.c_str())));
118  break;
119  case AFTER_K_ITER:
120  target().after_k_iter(::abs(::atoi(option_value.c_str())));
121  break;
122  case FORCED_CONSTR_REDUCTION:
123  {
124  const std::string &option = option_value.c_str();
125  if( option == "LESS_X_D" )
126  target().forced_constr_reduction(target_t::CONSTR_LESS_X_D );
127  else if( option == "LESS_X" )
128  target().forced_constr_reduction( target_t::CONSTR_LESS_X );
129  else
130  throw std::invalid_argument( "Error, incorrect value for "
131  "\"forced_constr_reduction\"." );
132  break;
133  }
134  case FORCED_REDUCT_RATIO:
135  target().forced_reduct_ratio(::fabs(::atof(option_value.c_str())));
136  break;
137  case MAX_STEP_RATIO:
138  target().max_step_ratio(::fabs(::atof(option_value.c_str())));
139  break;
140  case MAX_NEWTON_ITER:
141  target().max_newton_iter(::abs(::atoi(option_value.c_str())));
142  break;
143  default:
144  TEUCHOS_TEST_FOR_EXCEPT(true); // Local error only?
145  }
146 }
147 
148 } // end namespace MoochoPack
149 
150 #endif // 0
void abs(DVectorSlice *vs_lhs, const DVectorSlice &vs_rhs)
vs_lhs = abs(vs_rhs)
LineSearch2ndOrderCorrect_StepSetOptions(LineSearch2ndOrderCorrect_Step *target=0, const char opt_grp_name[]="LineSearch2ndOrderCorrect")
void setOption(int option_num, const std::string &option_value)
Overridden from SetOptionsFromStreamNode.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
const std::string & option_value(OptionsGroup::const_iterator &itr)