Panzer Version of the Day
Loading...
Searching...
No Matches
Panzer_PointRule.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#ifndef PANZER_POINT_RULE_HPP
44#define PANZER_POINT_RULE_HPP
45
46#include "Teuchos_ArrayRCP.hpp"
47
48#include "Phalanx_DataLayout.hpp"
49
50#include "Shards_CellTopology.hpp"
51
53
54namespace panzer {
55
56 class CellData;
57
61 class PointRule {
62 public:
63
70 PointRule(const std::string & ptName,int np, const panzer::CellData& cell_data);
71
72
82 PointRule(const std::string & point_rule_name,
83 const int num_cells,
84 const int num_points_per_cell,
85 const int num_faces,
86 const int num_points_per_face,
87 const Teuchos::RCP<const shards::CellTopology> & cell_topology);
88
91 PointRule(const panzer::PointDescriptor& description,
92 const Teuchos::RCP<const shards::CellTopology> & cell_topology,
93 const int num_cells);
94
96 virtual ~PointRule() {}
97
98 void setup(const std::string & ptName,int np, const panzer::CellData& cell_data);
99
100 // Returns true if this point rule is for a sideset
101 bool isSide() const;
102
105 const std::string & getName() const;
106
107 Teuchos::RCP<const shards::CellTopology> topology;
108
109 Teuchos::RCP<shards::CellTopology> side_topology;
110
112 Teuchos::RCP<PHX::DataLayout> dl_scalar;
114 Teuchos::RCP<PHX::DataLayout> dl_vector;
116 Teuchos::RCP<PHX::DataLayout> dl_tensor;
117
119 Teuchos::RCP<PHX::DataLayout> dl_vector3;
120
122 Teuchos::RCP<PHX::DataLayout> dl_tensor3x3;
123
127
129 int side;
130
132 virtual void print(std::ostream & os);
133
134 // TODO: These need to be moved to a DataLayoutGenerator
135
136 Teuchos::RCP<PHX::DataLayout> getCellDataLayout() const;
137 Teuchos::RCP<PHX::DataLayout> getCellDataLayout(const int dim0) const;
138 Teuchos::RCP<PHX::DataLayout> getCellDataLayout(const int dim0, const int dim1) const;
139
140 Teuchos::RCP<PHX::DataLayout> getCellPointDataLayout() const;
141 Teuchos::RCP<PHX::DataLayout> getCellPointDataLayout(const int dim0) const;
142 Teuchos::RCP<PHX::DataLayout> getCellPointDataLayout(const int dim0, const int dim1) const;
143
144 Teuchos::RCP<PHX::DataLayout> getFaceDataLayout() const;
145 Teuchos::RCP<PHX::DataLayout> getFaceDataLayout(const int dim0) const;
146 Teuchos::RCP<PHX::DataLayout> getFaceDataLayout(const int dim0, const int dim1) const;
147
148 Teuchos::RCP<PHX::DataLayout> getFacePointDataLayout() const;
149 Teuchos::RCP<PHX::DataLayout> getFacePointDataLayout(const int dim0) const;
150 Teuchos::RCP<PHX::DataLayout> getFacePointDataLayout(const int dim0, const int dim1) const;
151
152 protected:
153 PointRule() : side(-1) {}
154
158 static Teuchos::RCP<shards::CellTopology> getSideTopology(const CellData & cell_data);
159
160
161 void setup(const std::string & point_rule_name,
162 const int num_cells,
163 const int num_points_per_cell,
164 const int num_faces,
165 const int num_points_per_face,
166 const Teuchos::RCP<const shards::CellTopology> & cell_topology);
167
170
171 private:
172 std::string point_name;
173 };
174
175}
176
177#endif
Data for determining cell topology and dimensionality.
Teuchos::RCP< PHX::DataLayout > getFaceDataLayout() const
Teuchos::RCP< PHX::DataLayout > getFacePointDataLayout() const
Teuchos::RCP< PHX::DataLayout > dl_vector
Data layout for vector fields.
Teuchos::RCP< PHX::DataLayout > dl_vector3
Data layout for vector fields - full (x,y,z)
Teuchos::RCP< PHX::DataLayout > dl_scalar
Data layout for scalar fields.
static Teuchos::RCP< shards::CellTopology > getSideTopology(const CellData &cell_data)
Teuchos::RCP< shards::CellTopology > side_topology
virtual void print(std::ostream &os)
print information about the integration rule
int side
Defaults to -1 if this is volume and not sideset.
void setup(const std::string &ptName, int np, const panzer::CellData &cell_data)
Teuchos::RCP< PHX::DataLayout > dl_tensor3x3
Data layout for vector fields - full ((xx,xy,xz),(yx,yy,yz),(zx,zy,zz)) (or transpose?...
Teuchos::RCP< PHX::DataLayout > getCellDataLayout() const
Teuchos::RCP< PHX::DataLayout > dl_tensor
Data layout for rank-2 tensor fields.
Teuchos::RCP< PHX::DataLayout > getCellPointDataLayout() const
virtual ~PointRule()
Destructor (Satisfying the compiler)
Teuchos::RCP< const shards::CellTopology > topology
const std::string & getName() const