ROL
ROL_Quadrature.hpp
Go to the documentation of this file.
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 
50 #ifndef ROL_QUADRATURE_HPP
51 #define ROL_QUADRATURE_HPP
52 
53 #include "ROL_BurkardtRules.hpp"
54 #include "ROL_SGMGA.hpp"
55 #include "ROL_SandiaSGMGA.hpp"
56 #include "Teuchos_Assert.hpp"
57 
58 namespace ROL {
59 
60 enum EROLGrowth {
69 };
70 
71 template<class Real>
72 class Quadrature {
73 private:
74  typename std::map<std::vector<Real>,int> points_; // keys = nodes, values = location of weights
75  std::vector<Real> weights_;
76  std::vector<int> accuracy_;
78 
79 protected:
80  void addPointAndWeight(std::vector<Real> point, Real weight, int loc);
81 
82 public:
83  virtual ~Quadrature() {}
84  Quadrature(int dimension = 1);
85 
86  // 1D Constructors
87  Quadrature(int degree, EROLBurkardt rule, bool isNormalized);
88  Quadrature(EROLBurkardt rule, int numPoints, bool isNormalized);
89  Quadrature( std::vector<Real>& points, std::vector<Real>& weights );
90 
91  // Multi-D Constructors
92  Quadrature(int dimension, std::vector<int> numPoints1D, std::vector<EROLBurkardt> rule1D,
93  bool isNormalized);
94  Quadrature(int dimension, std::vector<int> numPoints1D, std::vector<EROLBurkardt> rule1D,
95  std::vector<EROLGrowth> growth1D, bool isNormalized);
96  Quadrature(int dimension, int maxNumPoints, std::vector<EROLBurkardt> rule1D,
97  std::vector<EROLGrowth> growth1D, bool isNormalized);
98  Quadrature(int dimension, int maxNumPoints, std::vector<EROLBurkardt> rule1D,
99  std::vector<EROLGrowth> growth1D, bool isNormalized, bool useSandia);
100  Quadrature(const char* SGinfo, const char* SGdata, bool isNormalized);
101 
102  virtual void getCubature(std::vector<std::vector<Real> >& cubPoints, std::vector<Real>& cubWeights) const;
103  virtual int getNumPoints() const;
104  virtual void getAccuracy(std::vector<int> & accuracy) const;
105  virtual int getDimension() const;
106  virtual typename std::map<std::vector<Real>,int>::iterator begin();
107  virtual typename std::map<std::vector<Real>,int>::iterator end();
108  virtual void insert(typename std::map<std::vector<Real>,int>::iterator it,
109  std::vector<Real> point, Real weight);
110  virtual std::vector<Real> getNode(typename std::map<std::vector<Real>,int>::iterator it);
111  virtual Real getWeight(int node);
112  virtual Real getWeight(std::vector<Real> point);
113  virtual void update(Real alpha, Quadrature<Real> &rule);
114  virtual void normalize();
115 
116 };
117 
118 } // ROL Namespace
119 
120 #include <ROL_QuadratureDef.hpp>
121 #include <ROL_QuadratureHelpers.hpp>
124 
125 #endif
virtual std::vector< Real > getNode(typename std::map< std::vector< Real >, int >::iterator it)
const double weights[4][5]
Definition: ROL_Types.hpp:1001
virtual void getCubature(std::vector< std::vector< Real > > &cubPoints, std::vector< Real > &cubWeights) const
Definition file for the ROL::Quadrature class.
EROLBurkardt
Enumeration of integration rules provided by John Burkardt.
virtual void insert(typename std::map< std::vector< Real >, int >::iterator it, std::vector< Real > point, Real weight)
Header file for integration rules provided by John Burkardt. <>
virtual int getDimension() const
virtual void getAccuracy(std::vector< int > &accuracy) const
std::vector< Real > weights_
virtual void normalize()
virtual void update(Real alpha, Quadrature< Real > &rule)
virtual ~Quadrature()
virtual std::map< std::vector< Real >, int >::iterator end()
void addPointAndWeight(std::vector< Real > point, Real weight, int loc)
std::map< std::vector< Real >, int > points_
Quadrature(int dimension=1)
virtual Real getWeight(int node)
std::vector< int > accuracy_
virtual int getNumPoints() const
virtual std::map< std::vector< Real >, int >::iterator begin()