Panzer  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Panzer_IntegrationDescriptor.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Panzer: A partial differential equation assembly
5 // engine for strongly coupled complex multiphysics systems
6 // Copyright (2011) Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39 // Eric C. Cyr (eccyr@sandia.gov)
40 // ***********************************************************************
41 // @HEADER
42 
43 
44 #ifndef PANZER_INTEGRATION_DESCRIPTOR_HPP
45 #define PANZER_INTEGRATION_DESCRIPTOR_HPP
46 
47 #include <functional>
48 
49 namespace panzer {
50 
52 {
53 public:
54 
58  enum {
59  NONE,
62  SIDE,
66  };
67 
72 
74  virtual ~IntegrationDescriptor() = default;
75 
82  IntegrationDescriptor(const int cubature_order, const int integration_type, const int side=-1);
83 
88  const int & getType() const {return _integration_type;}
89 
94  const int & getOrder() const {return _cubature_order;}
95 
100  const int & getSide() const {return _side;}
101 
107  std::size_t getKey() const {return _key;}
108 
109 protected:
110 
117  void setup(const int cubature_order, const int integration_type, const int side=-1);
118 
121 
124 
126  int _side;
127 
129  std::size_t _key;
130 
131 };
132 
133 }
134 
135 
136 namespace std {
137 
138 template <>
139 struct hash<panzer::IntegrationDescriptor>
140 {
141  std::size_t operator()(const panzer::IntegrationDescriptor& desc) const;
142 };
143 
144 }
145 
146 
147 #endif
std::size_t getKey() const
Get unique key associated with integrator of this order and type The key is used to sort through a ma...
int _cubature_order
Order of integration (Order of polynomial this integrator is designed for)
IntegrationDescriptor()
Constructor for empty integrator.
Integral over a specific side of cells (side must be set)
No integral specified - default state.
const int & getType() const
Get type of integrator.
void setup(const int cubature_order, const int integration_type, const int side=-1)
Setup function.
std::size_t _key
Unique key associated with integrator.
const int & getSide() const
Get side associated with integration - this is for backward compatibility.
Integral over all sides of cells (closed surface integral)
virtual ~IntegrationDescriptor()=default
Destructor.
int _side
Side associated with integration - this is for backward compatibility.
const int & getOrder() const
Get order of integrator.