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_PDEOPT_BRANCHHELPER_PEBBL_H
45 #define ROL_PDEOPT_BRANCHHELPER_PEBBL_H
46 
47 #include "ROL_StdBranchHelper_PEBBL.hpp"
48 #include "transform.hpp"
49 
50 template <class Real>
51 class PDEOPT_BranchHelper_PEBBL : public ROL::StdBranchHelper_PEBBL<Real> {
52 private:
getParameter(const ROL::Vector<Real> & x) const53   ROL::Ptr<const ROL::StdVector<Real>> getParameter(const ROL::Vector<Real> &x) const {
54     try {
55       return ROL::makePtrFromRef(dynamic_cast<const ROL::StdVector<Real>&>(x));
56     }
57     catch (std::exception &e) {
58       return dynamic_cast<const PDE_OptVector<Real>&>(x).getParameter();
59     }
60   }
61 
62 public:
PDEOPT_BranchHelper_PEBBL(const Real tol=1e-6,const int method=0)63   PDEOPT_BranchHelper_PEBBL(const Real tol = 1e-6, const int method = 0)
64     : ROL::StdBranchHelper_PEBBL<Real>(tol, method) {}
65 
PDEOPT_BranchHelper_PEBBL(const PDEOPT_BranchHelper_PEBBL & BH)66   PDEOPT_BranchHelper_PEBBL(const PDEOPT_BranchHelper_PEBBL &BH)
67     : ROL::StdBranchHelper_PEBBL<Real>(BH) {}
68 
69   //int getMyIndex(const ROL::Vector<Real> &x) const {
getMyIndex(const ROL::Vector<Real> & x,const ROL::Vector<Real> & g) const70   int getMyIndex(const ROL::Vector<Real> &x, const ROL::Vector<Real> &g) const {
71     // Use Std implementation
72     return ROL::StdBranchHelper_PEBBL<Real>::getMyIndex(*getParameter(x),*getParameter(g));
73   }
74 
getMyNumFrac(int & nfrac,Real & integralityMeasure,const ROL::Vector<Real> & x) const75   void getMyNumFrac(int &nfrac, Real &integralityMeasure,
76                     const ROL::Vector<Real> &x) const {
77     // Use Std implementation
78     ROL::StdBranchHelper_PEBBL<Real>::getMyNumFrac(nfrac, integralityMeasure, *getParameter(x));
79   }
80 
createTransform(void) const81   ROL::Ptr<ROL::Transform_PEBBL<Real>> createTransform(void) const {
82     return ROL::makePtr<PDEOPT_Transform_PEBBL<Real>>();
83   }
84 
85 }; // class PDEOPT_BranchHelper_PEBBL
86 
87 #endif
88