43 #ifndef PANZER_INTEGRATION_VALUES_IMPL_HPP
44 #define PANZER_INTEGRATION_VALUES_IMPL_HPP
46 #include "Shards_CellTopology.hpp"
47 #include "Intrepid_FieldContainer.hpp"
48 #include "Intrepid_FunctionSpaceTools.hpp"
49 #include "Intrepid_RealSpaceTools.hpp"
50 #include "Intrepid_CellTools.hpp"
67 int num_space_dim = ir->
topology->getDimension();
70 cub_points = Intrepid::FieldContainer<double>(
num_ip, num_space_dim);
74 Intrepid::FieldContainer<double>(num_ip,
77 cub_weights = Intrepid::FieldContainer<double>(
num_ip);
80 Intrepid::FieldContainer<double>(num_cells,
num_nodes, num_space_dim);
82 jac = Intrepid::FieldContainer<double>(num_cells,
num_ip, num_space_dim,
85 jac_inv = Intrepid::FieldContainer<double>(num_cells,
num_ip,
89 jac_det = Intrepid::FieldContainer<double>(num_cells,
num_ip);
92 Intrepid::FieldContainer<double>(num_cells,
num_ip);
95 Intrepid::FieldContainer<double>(num_cells,
num_ip,
100 Intrepid::FieldContainer<double>(num_cells,
num_ip,
105 Intrepid::FieldContainer<double>(num_cells,
num_ip);
108 Intrepid::FieldContainer<double>(num_cells,
num_ip, num_space_dim);
120 int num_space_dim = ir->
topology->getDimension();
123 if(num_space_dim==1 && ir->
isSide()) {
124 setupArraysForNodeRule(ir);
128 Intrepid::DefaultCubatureFactory<double,Intrepid::FieldContainer<double> >
132 intrepid_cubature = cubature_factory.create(*(ir->
side_topology),
135 intrepid_cubature = cubature_factory.create(*(ir->
topology),
138 int num_ip = intrepid_cubature->getNumPoints();
140 cub_points = Intrepid::FieldContainer<double>(
num_ip, num_space_dim);
144 Intrepid::FieldContainer<double>(num_ip,
147 cub_weights = Intrepid::FieldContainer<double>(
num_ip);
150 Intrepid::FieldContainer<double>(num_cells,
num_nodes, num_space_dim);
152 jac = Intrepid::FieldContainer<double>(num_cells,
num_ip, num_space_dim,
155 jac_inv = Intrepid::FieldContainer<double>(num_cells,
num_ip,
159 jac_det = Intrepid::FieldContainer<double>(num_cells,
num_ip);
162 Intrepid::FieldContainer<double>(num_cells,
num_ip);
165 Intrepid::FieldContainer<double>(num_cells,
num_ip,
170 Intrepid::FieldContainer<double>(num_cells,
num_ip,
175 Intrepid::FieldContainer<double>(num_cells,
num_ip);
178 Intrepid::FieldContainer<double>(num_cells,
num_ip, num_space_dim);
186 template<
typename Scalar,
typename Array>
187 template<
typename NodeCoordinateArray>
192 int num_space_dim = int_rule->topology->getDimension();
193 if (int_rule->isSide() && num_space_dim==1) {
194 std::cout <<
"WARNING: 0-D quadrature rule ifrastructure does not exist!!! Will not be able to do "
195 <<
"non-natural integration rules.";
199 Intrepid::CellTools<Scalar> cell_tools;
201 if (!int_rule->isSide())
202 intrepid_cubature->getCubature(cub_points, cub_weights);
204 intrepid_cubature->getCubature(side_cub_points, cub_weights);
206 cell_tools.mapToReferenceSubcell(cub_points,
208 int_rule->spatial_dimension-1,
210 *(int_rule->topology));
218 size_type num_cells = in_node_coordinates.dimension(0);
219 size_type
num_nodes = in_node_coordinates.dimension(1);
220 size_type num_dims = in_node_coordinates.dimension(2);
222 for (size_type cell = 0; cell < num_cells; ++cell) {
223 for (size_type node = 0; node <
num_nodes; ++node) {
224 for (size_type dim = 0; dim < num_dims; ++dim) {
225 node_coordinates(cell,node,dim) =
226 in_node_coordinates(cell,node,dim);
232 cell_tools.setJacobian(
jac, cub_points, node_coordinates,
233 *(int_rule->topology));
235 cell_tools.setJacobianInv(jac_inv,
jac);
237 cell_tools.setJacobianDet(jac_det,
jac);
239 if (!int_rule->isSide()) {
240 Intrepid::FunctionSpaceTools::
241 computeCellMeasure<Scalar>(weighted_measure, jac_det, cub_weights);
243 else if(int_rule->spatial_dimension==3) {
244 Intrepid::FunctionSpaceTools::
245 computeFaceMeasure<Scalar>(weighted_measure,
jac, cub_weights,int_rule->side,*int_rule->topology);
247 else if(int_rule->spatial_dimension==2) {
248 Intrepid::FunctionSpaceTools::
249 computeEdgeMeasure<Scalar>(weighted_measure,
jac, cub_weights,int_rule->side,*int_rule->topology);
257 for (size_type cell = 0; cell < contravarient.dimension(0); ++cell) {
258 for (size_type ip = 0; ip < contravarient.dimension(1); ++ip) {
261 for (size_type i = 0; i < contravarient.dimension(2); ++i)
262 for (size_type j = 0; j < contravarient.dimension(3); ++j)
263 covarient(cell,ip,i,j) = 0.0;
266 for (size_type i = 0; i < contravarient.dimension(2); ++i) {
267 for (size_type j = 0; j < contravarient.dimension(3); ++j) {
268 for (size_type alpha = 0; alpha < contravarient.dimension(2); ++alpha) {
269 covarient(cell,ip,i,j) +=
jac(cell,ip,i,alpha) *
jac(cell,ip,j,alpha);
279 Intrepid::RealSpaceTools<Scalar>::inverse(contravarient, covarient);
296 for (size_type cell = 0; cell < contravarient.dimension(0); ++cell) {
297 for (size_type ip = 0; ip < contravarient.dimension(1); ++ip) {
298 norm_contravarient(cell,ip) = 0.0;
299 for (size_type i = 0; i < contravarient.dimension(2); ++i) {
300 for (size_type j = 0; j < contravarient.dimension(3); ++j) {
301 norm_contravarient(cell,ip) += contravarient(cell,ip,i,j) * contravarient(cell,ip,i,j);
304 norm_contravarient(cell,ip) = std::sqrt(norm_contravarient(cell,ip));
310 cell_tools.mapToPhysicalFrame(ip_coordinates, cub_points, node_coordinates, *(int_rule->topology));
Array::size_type size_type
Teuchos::RCP< const shards::CellTopology > topology
Teuchos::RCP< shards::CellTopology > side_topology
void evaluateValues(const NodeCoordinateArray &node_coordinates)
node_coordinates are cell vertex coordinates, not basis coordinates
#define TEUCHOS_ASSERT(assertion_test)