MOOCHO (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
NLPInterfacePack_CalcFiniteDiffProdSetOptions.cpp
Go to the documentation of this file.
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 <assert.h>
43 #include <math.h>
44 
46 #include "Teuchos_Assert.hpp"
47 
48 // Define the options
49 namespace {
50 
51  const int local_num_options = 6;
52 
54  FD_METHOD_ORDER
55  ,FD_STEP_SELECT
56  ,FD_STEP_SIZE
57  ,FD_STEP_SIZE_MIN
58  ,FD_STEP_SIZE_F
59  ,FD_STEP_SIZE_C
60  };
61 
62  const char* local_SOptions[local_num_options] = {
63  "fd_method_order"
64  ,"fd_step_select"
65  ,"fd_step_size"
66  ,"fd_step_size_min"
67  ,"fd_step_size_f"
68  ,"fd_step_size_c"
69  };
70 
71 }
72 
73 namespace NLPInterfacePack {
74 
76  CalcFiniteDiffProd* target
77  ,const char opt_grp_name[]
78  )
79  :OptionsFromStreamPack::SetOptionsFromStreamNode(opt_grp_name,local_num_options,local_SOptions)
80  ,OptionsFromStreamPack::SetOptionsToTargetBase<CalcFiniteDiffProd>(target)
81 {}
82 
84  int option_num, const std::string& option_value )
85 {
86  typedef CalcFiniteDiffProd target_t;
87  switch( (local_EOptions)option_num ) {
88  case FD_METHOD_ORDER:
89  {
90  const std::string &option = option_value.c_str();
91  if( option == "FD_ORDER_ONE" )
92  target().fd_method_order( target_t::FD_ORDER_ONE );
93  else if( option == "FD_ORDER_TWO" )
94  target().fd_method_order( target_t::FD_ORDER_TWO );
95  else if( option == "FD_ORDER_TWO_CENTRAL" )
96  target().fd_method_order( target_t::FD_ORDER_TWO_CENTRAL );
97  else if( option == "FD_ORDER_TWO_AUTO" )
98  target().fd_method_order( target_t::FD_ORDER_TWO_AUTO );
99  else if( option == "FD_ORDER_FOUR" )
100  target().fd_method_order( target_t::FD_ORDER_FOUR );
101  else if( option == "FD_ORDER_FOUR_CENTRAL" )
102  target().fd_method_order( target_t::FD_ORDER_FOUR_CENTRAL );
103  else if( option == "FD_ORDER_FOUR_AUTO" )
104  target().fd_method_order( target_t::FD_ORDER_FOUR_AUTO );
105  else
107  true, std::invalid_argument
108  ,"CalcFiniteDiffProdSetOptions::setOption(...) : Error, incorrect value for "
109  "\"fd_method_order\". Only the options FD_ORDER_ONE, FD_ORDER_TWO, "
110  "FD_ORDER_TWO_CENTRAL, FD_ORDER_TWO_AUTO, FD_ORDER_FOUR, FD_ORDER_FOUR_CENTRAL "
111  "and FD_ORDER_FOUR_AUTO are available" );
112  break;
113  }
114  case FD_STEP_SELECT:
115  {
116  const std::string &option = option_value.c_str();
117  if( option == "FD_STEP_ABSOLUTE" )
118  target().fd_step_select( target_t::FD_STEP_ABSOLUTE );
119  else if( option == "FD_STEP_RELATIVE" )
120  target().fd_step_select( target_t::FD_STEP_RELATIVE );
121  else
123  true, std::invalid_argument
124  ,"CalcFiniteDiffProdSetOptions::setOption(...) : Error, incorrect value for "
125  "\"fd_step_select\". Only the options are available" );
126  break;
127  }
128  case FD_STEP_SIZE:
129  target().fd_step_size(std::atof(option_value.c_str()));
130  break;
131  case FD_STEP_SIZE_MIN:
132  target().fd_step_size_min(std::atof(option_value.c_str()));
133  break;
134  case FD_STEP_SIZE_F:
135  target().fd_step_size_f(std::atof(option_value.c_str()));
136  break;
137  case FD_STEP_SIZE_C:
138  target().fd_step_size_c(std::atof(option_value.c_str()));
139  break;
140  default:
141  TEUCHOS_TEST_FOR_EXCEPT(true); // Local error only?
142  }
143 }
144 
145 } // end namespace NLPInterfacePack
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Strategy interface for computing the product of the derivatives of the functions of an NLP along give...
CalcFiniteDiffProdSetOptions(CalcFiniteDiffProd *target=0, const char opt_grp_name[]="CalcFiniteDiffProd")
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
void setOption(int option_num, const std::string &option_value)
Overridden from SetOptionsFromStreamNode.
const std::string & option_value(OptionsGroup::const_iterator &itr)