Panzer  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Panzer_FaceToElement.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  * FaceToElement.hpp
45  *
46  * Created on: Nov 15, 2016
47  * Author: mbetten
48  */
49 
50 #ifndef PANZER_FACE_TO_ELEMENT_HPP
51 #define PANZER_FACE_TO_ELEMENT_HPP
52 
53 #include "Phalanx_KokkosDeviceTypes.hpp"
54 
55 #include "Panzer_ConnManager.hpp"
56 
57 #include <Tpetra_Map.hpp>
58 #include <Tpetra_MultiVector.hpp>
59 #include <Tpetra_Import.hpp>
60 #include <Tpetra_Export.hpp>
61 
62 namespace panzer
63 {
64 
68 template <typename LocalOrdinal,typename GlobalOrdinal>
70 private:
71  FaceToElement(const FaceToElement &); // disallowed
72 
73 public:
74 
75  FaceToElement();
76 
77 #ifndef PANZER_HIDE_DEPRECATED_CODE
78 
82  [[deprecated]]
84 #endif
85 
87  const Teuchos::RCP<const Teuchos::Comm<int>> comm);
88 
89 #ifndef PANZER_HIDE_DEPRECATED_CODE
90 
95  [[deprecated]]
96  void initialize(panzer::ConnManager & conn);
97 #endif
98 
101  void initialize(panzer::ConnManager & conn,
102  const Teuchos::RCP<const Teuchos::Comm<int>> comm);
103 
104 
105  GlobalOrdinal getLeftElem (GlobalOrdinal face_id) const
106  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return elems_by_face_(lid,0);}
107 
108  GlobalOrdinal getRightElem(GlobalOrdinal face_id) const
109  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return elems_by_face_(lid,1);}
110 
111  int getLeftBlock (GlobalOrdinal face_id) const
112  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return blocks_by_face_(lid,0);}
113 
114  int getRightBlock(GlobalOrdinal face_id) const
115  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return blocks_by_face_(lid,1);}
116 
117  int getLeftProc (GlobalOrdinal face_id) const
118  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return procs_by_face_(lid,0);}
119 
120  int getRightProc (GlobalOrdinal face_id) const
121  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return procs_by_face_(lid,1);}
122 
123  PHX::View<const GlobalOrdinal*[2]> getFaceToElementsMap() const
124  { return elems_by_face_; }
125 
126  PHX::View<const int*[2]> getFaceToCellLocalIdxMap() const
127  { return lidx_by_face_; }
128 
129 protected:
130 
131  PHX::View<GlobalOrdinal *[2]> elems_by_face_;
132  PHX::View<int *[2]> lidx_by_face_;
133  PHX::View<int *[2]> blocks_by_face_;
134  PHX::View<int *[2]> procs_by_face_;
135 
136  typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode<PHX::Device> NodeType;
137  typedef Tpetra::Map<LocalOrdinal, GlobalOrdinal, NodeType> Map;
138  typedef Tpetra::Export<LocalOrdinal, GlobalOrdinal, NodeType> Export;
139  typedef Tpetra::Import<LocalOrdinal, GlobalOrdinal, NodeType> Import;
140  typedef Tpetra::MultiVector<GlobalOrdinal, LocalOrdinal, GlobalOrdinal, NodeType> GOMultiVector;
141 
142 
144 
145 };
146 
147 }
148 
149 #endif
Teuchos::RCP< const Map > face_map_
PHX::View< int *[2]> blocks_by_face_
GlobalOrdinal getRightElem(GlobalOrdinal face_id) const
GlobalOrdinal getLeftElem(GlobalOrdinal face_id) const
Tpetra::Import< LocalOrdinal, GlobalOrdinal, NodeType > Import
PHX::View< int *[2]> procs_by_face_
Tpetra::KokkosCompat::KokkosDeviceWrapperNode< PHX::Device > NodeType
void initialize(panzer::ConnManager &conn)
Tpetra::Map< LocalOrdinal, GlobalOrdinal, NodeType > Map
PHX::View< const GlobalOrdinal *[2]> getFaceToElementsMap() const
int getRightProc(GlobalOrdinal face_id) const
PHX::View< GlobalOrdinal *[2]> elems_by_face_
Pure virtual base class for supplying mesh connectivity information to the DOF Manager.
int getLeftBlock(GlobalOrdinal face_id) const
PHX::View< int *[2]> lidx_by_face_
int getLeftProc(GlobalOrdinal face_id) const
Tpetra::Export< LocalOrdinal, GlobalOrdinal, NodeType > Export
Tpetra::MultiVector< GlobalOrdinal, LocalOrdinal, GlobalOrdinal, NodeType > GOMultiVector
PHX::View< const int *[2]> getFaceToCellLocalIdxMap() const
int getRightBlock(GlobalOrdinal face_id) const