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 <Kokkos_View.hpp>
58 
59 #include <Tpetra_Map.hpp>
60 #include <Tpetra_MultiVector.hpp>
61 #include <Tpetra_Import.hpp>
62 #include <Tpetra_Export.hpp>
63 
64 namespace panzer
65 {
66 
70 template <typename LocalOrdinal,typename GlobalOrdinal>
72 private:
73  FaceToElement(const FaceToElement &); // disallowed
74 
75 public:
76 
77  FaceToElement();
78 
80 
84 
85  GlobalOrdinal getLeftElem (GlobalOrdinal face_id) const
86  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return elems_by_face_(lid,0);}
87 
88  GlobalOrdinal getRightElem(GlobalOrdinal face_id) const
89  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return elems_by_face_(lid,1);}
90 
91  int getLeftBlock (GlobalOrdinal face_id) const
92  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return blocks_by_face_(lid,0);}
93 
94  int getRightBlock(GlobalOrdinal face_id) const
95  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return blocks_by_face_(lid,1);}
96 
97  int getLeftProc (GlobalOrdinal face_id) const
98  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return procs_by_face_(lid,0);}
99 
100  int getRightProc (GlobalOrdinal face_id) const
101  {LocalOrdinal lid = face_map_->getLocalElement(face_id); return procs_by_face_(lid,1);}
102 
103  Kokkos::View<const GlobalOrdinal*[2]> getFaceToElementsMap() const
104  { return elems_by_face_; }
105 
106  Kokkos::View<const int*[2]> getFaceToCellLocalIdxMap() const
107  { return lidx_by_face_; }
108 
109 protected:
110 
111  Kokkos::View<GlobalOrdinal *[2]> elems_by_face_;
112  Kokkos::View<int *[2]> lidx_by_face_;
113  Kokkos::View<int *[2]> blocks_by_face_;
114  Kokkos::View<int *[2]> procs_by_face_;
115 
116  typedef Kokkos::Compat::KokkosDeviceWrapperNode<PHX::Device> NodeType;
117  typedef Tpetra::Map<LocalOrdinal, GlobalOrdinal, NodeType> Map;
118  typedef Tpetra::Export<LocalOrdinal, GlobalOrdinal, NodeType> Export;
119  typedef Tpetra::Import<LocalOrdinal, GlobalOrdinal, NodeType> Import;
120  typedef Tpetra::MultiVector<GlobalOrdinal, LocalOrdinal, GlobalOrdinal, NodeType> GOMultiVector;
121 
122 
124 
125 };
126 
127 }
128 
129 #endif
Teuchos::RCP< const Map > face_map_
Kokkos::View< GlobalOrdinal *[2]> elems_by_face_
GlobalOrdinal getRightElem(GlobalOrdinal face_id) const
GlobalOrdinal getLeftElem(GlobalOrdinal face_id) const
Tpetra::Import< LocalOrdinal, GlobalOrdinal, NodeType > Import
Kokkos::View< int *[2]> procs_by_face_
Kokkos::View< int *[2]> blocks_by_face_
Tpetra::Map< LocalOrdinal, GlobalOrdinal, NodeType > Map
int getRightProc(GlobalOrdinal face_id) const
Kokkos::Compat::KokkosDeviceWrapperNode< PHX::Device > NodeType
Kokkos::View< const int *[2]> getFaceToCellLocalIdxMap() const
Kokkos::View< const GlobalOrdinal *[2]> getFaceToElementsMap() const
int getLeftBlock(GlobalOrdinal face_id) const
int getLeftProc(GlobalOrdinal face_id) const
Tpetra::Export< LocalOrdinal, GlobalOrdinal, NodeType > Export
Tpetra::MultiVector< GlobalOrdinal, LocalOrdinal, GlobalOrdinal, NodeType > GOMultiVector
Kokkos::View< int *[2]> lidx_by_face_
void initialize(panzer::ConnManager< LocalOrdinal, GlobalOrdinal > &conn)
int getRightBlock(GlobalOrdinal face_id) const