MoochoPack : Framework for Large-Scale Optimization Algorithms Version of the Day
MoochoPack_ReducedHessianBFGSStd_StepSetOptions.cpp
00001 #if 0
00002 
00003 // @HEADER
00004 // ***********************************************************************
00005 // 
00006 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
00007 //                  Copyright (2003) Sandia Corporation
00008 // 
00009 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00010 // license for use of this work by or on behalf of the U.S. Government.
00011 // 
00012 // Redistribution and use in source and binary forms, with or without
00013 // modification, are permitted provided that the following conditions are
00014 // met:
00015 //
00016 // 1. Redistributions of source code must retain the above copyright
00017 // notice, this list of conditions and the following disclaimer.
00018 //
00019 // 2. Redistributions in binary form must reproduce the above copyright
00020 // notice, this list of conditions and the following disclaimer in the
00021 // documentation and/or other materials provided with the distribution.
00022 //
00023 // 3. Neither the name of the Corporation nor the names of the
00024 // contributors may be used to endorse or promote products derived from
00025 // this software without specific prior written permission.
00026 //
00027 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00028 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00029 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00030 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00031 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00032 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00033 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00034 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00035 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00036 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00037 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00038 //
00039 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
00040 // 
00041 // ***********************************************************************
00042 // @HEADER
00043 
00044 #include <assert.h>
00045 #include <math.h>
00046 
00047 #include "ReducedHessianBFGSStd_StepSetOptions.h"
00048 #include "OptionsFromStreamPack_StringToBool.hpp"
00049 
00050 // Define the options
00051 namespace {
00052 
00053   const int local_num_options = 5;
00054 
00055   enum local_EOptions {
00056     RESCALE_INIT_IDENTITY
00057     ,USE_DAMPENING
00058     ,SECANT_TESTING
00059     ,SECANT_WARNING_TOL
00060     ,SECANT_ERROR_TOL
00061   };
00062 
00063   const char* local_SOptions[local_num_options] = {
00064     "rescale_init_identity"
00065       ,"use_dampening"
00066     ,"secant_testing"
00067     ,"secant_warning_tol"
00068       ,"secant_error_tol"
00069   };
00070 
00071 }
00072 
00073 namespace MoochoPack {
00074 
00075 ReducedHessianBFGSStd_StepSetOptions::ReducedHessianBFGSStd_StepSetOptions(
00076         ReducedHessianBFGSStd_Step* target
00077       , const char opt_grp_name[] )
00078   : OptionsFromStreamPack::SetOptionsFromStreamNode(
00079         opt_grp_name, local_num_options, local_SOptions )
00080     , OptionsFromStreamPack::SetOptionsToTargetBase<
00081       ReducedHessianBFGSStd_Step >( target )
00082 {}
00083 
00084 void ReducedHessianBFGSStd_StepSetOptions::setOption(
00085   int option_num, const std::string& option_value )
00086 {
00087   using OptionsFromStreamPack::StringToBool;
00088   typedef ReducedHessianBFGSStd_Step target_t;
00089   switch( (local_EOptions)option_num ) {
00090       case RESCALE_INIT_IDENTITY:
00091       target().rescale_init_identity(
00092         StringToBool( "rescale_init_identity", option_value.c_str() ));
00093       break;
00094       case USE_DAMPENING:
00095       target().use_dampening(
00096         StringToBool( "use_dampening", option_value.c_str() ));
00097       break;
00098       case SECANT_TESTING:
00099     {
00100       const std::string &option = option_value.c_str();
00101       if( option == "DEFAULT" )
00102         target().secant_testing( target_t::SECANT_TEST_DEFAULT );
00103       else if( option == "TEST" )
00104         target().secant_testing( target_t::SECANT_TEST_ALWAYS );
00105       else if( option == "NO_TEST" )
00106         target().secant_testing( target_t::SECANT_NO_TEST );
00107       else
00108         throw std::invalid_argument( "Error, incorrect value for "
00109           "\"secant_testing\"." );
00110       break;
00111     }
00112       case SECANT_WARNING_TOL:
00113       target().secant_warning_tol(::fabs(::atof(option_value.c_str())));
00114       break;
00115       case SECANT_ERROR_TOL:
00116       target().secant_error_tol(::fabs(::atof(option_value.c_str())));
00117       break;
00118     default:
00119       TEUCHOS_TEST_FOR_EXCEPT(true);  // Local error only?
00120   }
00121 }
00122 
00123 } // end namespace MoochoPack 
00124 
00125 #endif // 0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends