1 // @HEADER 2 // ************************************************************************ 3 // 4 // Rapid Optimization Library (ROL) Package 5 // Copyright (2014) 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 lead developers: 38 // Drew Kouri (dpkouri@sandia.gov) and 39 // Denis Ridzal (dridzal@sandia.gov) 40 // 41 // ************************************************************************ 42 // @HEADER 43 44 #ifndef ROL_STEPFACTORY_H 45 #define ROL_STEPFACTORY_H 46 47 #include "ROL_Types.hpp" 48 49 #include "ROL_ParameterList.hpp" 50 #include "ROL_Ptr.hpp" 51 52 #include "ROL_Step.hpp" 53 #include "ROL_LineSearchStep.hpp" 54 #include "ROL_TrustRegionStep.hpp" 55 #include "ROL_PrimalDualActiveSetStep.hpp" 56 #include "ROL_CompositeStep.hpp" 57 #include "ROL_AugmentedLagrangianStep.hpp" 58 #include "ROL_MoreauYosidaPenaltyStep.hpp" 59 #include "ROL_BundleStep.hpp" 60 #include "ROL_InteriorPointStep.hpp" 61 #include "ROL_FletcherStep.hpp" 62 63 namespace ROL { 64 65 template<class Real> 66 class StepFactory { 67 public: ~StepFactory(void)68 ~StepFactory(void){} 69 getStep(const std::string & type,ROL::ParameterList & parlist) const70 ROL::Ptr<Step<Real>> getStep(const std::string &type, 71 ROL::ParameterList &parlist) const { 72 EStep els = StringToEStep(type); 73 switch(els) { 74 case STEP_AUGMENTEDLAGRANGIAN: return ROL::makePtr<AugmentedLagrangianStep<Real>>(parlist); 75 case STEP_BUNDLE: return ROL::makePtr<BundleStep<Real>>(parlist); 76 case STEP_COMPOSITESTEP: return ROL::makePtr<CompositeStep<Real>>(parlist); 77 case STEP_LINESEARCH: return ROL::makePtr<LineSearchStep<Real>>(parlist); 78 case STEP_MOREAUYOSIDAPENALTY: return ROL::makePtr<MoreauYosidaPenaltyStep<Real>>(parlist); 79 case STEP_PRIMALDUALACTIVESET: return ROL::makePtr<PrimalDualActiveSetStep<Real>>(parlist); 80 case STEP_TRUSTREGION: return ROL::makePtr<TrustRegionStep<Real>>(parlist); 81 case STEP_INTERIORPOINT: return ROL::makePtr<InteriorPointStep<Real>>(parlist); 82 case STEP_FLETCHER: return ROL::makePtr<FletcherStep<Real>>(parlist); 83 default: return ROL::nullPtr; 84 } 85 } 86 }; 87 88 } 89 90 #endif 91