Panzer Version of the Day
Loading...
Searching...
No Matches
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
56
57#include <Tpetra_Map.hpp>
58#include <Tpetra_MultiVector.hpp>
59#include <Tpetra_Import.hpp>
60#include <Tpetra_Export.hpp>
61
62namespace panzer
63{
64
68template <typename LocalOrdinal,typename GlobalOrdinal>
70private:
71 FaceToElement(const FaceToElement &); // disallowed
72
73public:
74
76
77#ifndef PANZER_HIDE_DEPRECATED_CODE
82 [[deprecated]]
84#endif
85
87 const Teuchos::RCP<const Teuchos::Comm<int>> comm);
88
89#ifndef PANZER_HIDE_DEPRECATED_CODE
95 [[deprecated]]
97#endif
98
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
129protected:
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 Kokkos::Compat::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
143 Teuchos::RCP<const Map> face_map_;
144
145};
146
147}
148
149#endif
Pure virtual base class for supplying mesh connectivity information to the DOF Manager.
Teuchos::RCP< const Map > face_map_
Tpetra::MultiVector< GlobalOrdinal, LocalOrdinal, GlobalOrdinal, NodeType > GOMultiVector
Tpetra::Export< LocalOrdinal, GlobalOrdinal, NodeType > Export
PHX::View< int *[2]> lidx_by_face_
GlobalOrdinal getLeftElem(GlobalOrdinal face_id) const
PHX::View< GlobalOrdinal *[2]> elems_by_face_
GlobalOrdinal getRightElem(GlobalOrdinal face_id) const
int getRightProc(GlobalOrdinal face_id) const
int getRightBlock(GlobalOrdinal face_id) const
int getLeftProc(GlobalOrdinal face_id) const
PHX::View< int *[2]> procs_by_face_
void initialize(panzer::ConnManager &conn)
PHX::View< const int *[2]> getFaceToCellLocalIdxMap() const
Tpetra::Map< LocalOrdinal, GlobalOrdinal, NodeType > Map
Tpetra::Import< LocalOrdinal, GlobalOrdinal, NodeType > Import
int getLeftBlock(GlobalOrdinal face_id) const
PHX::View< int *[2]> blocks_by_face_
PHX::View< const GlobalOrdinal *[2]> getFaceToElementsMap() const
FaceToElement(const FaceToElement &)
Kokkos::Compat::KokkosDeviceWrapperNode< PHX::Device > NodeType