Intrepid2
Intrepid2_CellToolsDefDebug.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ************************************************************************
3 //
4 // Intrepid2 Package
5 // Copyright (2007) 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 Kyungjoo Kim (kyukim@sandia.gov), or
38 // Mauro Perego (mperego@sandia.gov)
39 //
40 // ************************************************************************
41 // @HEADER
42 
43 
49 #ifndef __INTREPID2_CELLTOOLS_DEBUG_DEF_HPP__
50 #define __INTREPID2_CELLTOOLS_DEBUG_DEF_HPP__
51 
52 // disable clang warnings
53 #if defined (__clang__) && !defined (__INTEL_COMPILER)
54 #pragma clang system_header
55 #endif
56 
57 namespace Intrepid2 {
58 
59  //============================================================================================//
60  // //
61  // Debug //
62  // //
63  //============================================================================================//
64 
65 
66  template<class Scalar>
67  void CellTools<Scalar>::printSubcellVertices(const ordinal_type subcellDim,
68  const ordinal_type subcellOrd,
69  const shards::CellTopology & parentCell){
70 
71  // Get number of vertices for the specified subcell and parent cell dimension
72  ordinal_type subcVertexCount = parentCell.getVertexCount(subcellDim, subcellOrd);
73  ordinal_type cellDim = parentCell.getDimension();
74 
75  // Allocate space for the subcell vertex coordinates
76  FieldContainer<double> subcellVertices(subcVertexCount, cellDim);
77 
78  // Retrieve the vertex coordinates
79  getReferenceSubcellVertices(subcellVertices,
80  subcellDim,
81  subcellOrd,
82  parentCell);
83 
84  // Print the vertices
85  std::cout
86  << " Subcell " << std::setw(2) << subcellOrd
87  << " is " << parentCell.getName(subcellDim, subcellOrd) << " with vertices = {";
88 
89  // Loop over subcell vertices
90  for(ordinal_type subcVertOrd = 0; subcVertOrd < subcVertexCount; subcVertOrd++){
91  std::cout<< "(";
92 
93  // Loop over vertex Cartesian coordinates
94  for(ordinal_type dim = 0; dim < (ordinal_type)parentCell.getDimension(); dim++){
95  std::cout << subcellVertices(subcVertOrd, dim);
96  if(dim < (ordinal_type)parentCell.getDimension()-1 ) { std::cout << ","; }
97  }
98  std::cout<< ")";
99  if(subcVertOrd < subcVertexCount - 1) { std::cout << ", "; }
100  }
101  std::cout << "}\n";
102  }
103 
104 
105  template<class Scalar>
106  template<class ArrayCell>
107  void CellTools<Scalar>::printWorksetSubcell(const ArrayCell & cellWorkset,
108  const shards::CellTopology & parentCell,
109  const ordinal_type& pCellOrd,
110  const ordinal_type& subcellDim,
111  const ordinal_type& subcellOrd,
112  const ordinal_type& fieldWidth){
113 
114  // Get the ordinals, relative to reference cell, of subcell cellWorkset
115  ordinal_type subcNodeCount = parentCell.getNodeCount(subcellDim, subcellOrd);
116  ordinal_type pCellDim = parentCell.getDimension();
117  std::vector<ordinal_type> subcNodeOrdinals(subcNodeCount);
118 
119  for(ordinal_type i = 0; i < subcNodeCount; i++){
120  subcNodeOrdinals[i] = parentCell.getNodeMap(subcellDim, subcellOrd, i);
121  }
122 
123  // Loop over parent cells and print subcell cellWorkset
124 
125  std::cout
126  << " Subcell " << subcellOrd << " on parent cell " << pCellOrd << " is "
127  << parentCell.getName(subcellDim, subcellOrd) << " with node(s) \n ({";
128 
129  for(ordinal_type i = 0; i < subcNodeCount; i++){
130 
131  // print Cartesian coordinates of the node
132  for(ordinal_type dim = 0; dim < pCellDim; dim++){
133  std::cout
134  << std::setw(fieldWidth) << std::right << cellWorkset(pCellOrd, subcNodeOrdinals[i], dim);
135  if(dim < pCellDim - 1){ std::cout << ","; }
136  }
137  std::cout << "}";
138  if(i < subcNodeCount - 1){ std::cout <<", {"; }
139  }
140  std::cout << ")\n\n";
141  }
142 
143 }
144 
145 #endif