Nalu
Nalu: a generalized unstructured massively parallel low Mach flow code designed to support a variety of energy applications of interest (most notably Wind ECP) built on the Sierra Toolkit and Trilinos solver Tpetra/Epetra stack. The open source BSD, clause 3 license model has been chosen for the code base. See LICENSE for more information. http://NaluCFD.org
ElemDataRequests.h
Go to the documentation of this file.
1 /*------------------------------------------------------------------------*/
2 /* Copyright 2014 Sandia Corporation. */
3 /* This software is released under the license detailed */
4 /* in the file, LICENSE, which is located in the top-level Nalu */
5 /* directory structure */
6 /*------------------------------------------------------------------------*/
7 
8 
9 #ifndef ElemDataRequests_h
10 #define ElemDataRequests_h
11 
12 #include <stk_mesh/base/Field.hpp>
13 #include <stk_mesh/base/FieldBase.hpp>
14 #include <stk_mesh/base/MetaData.hpp>
15 #include <stk_mesh/base/BulkData.hpp>
16 
17 #include <set>
18 
19 namespace sierra{
20 namespace nalu{
21 
22 class MasterElement;
23 
25  SCS_AREAV = 0,
32 };
33 
38 };
39 
40 static const std::string CoordinatesTypeNames[] = {
41  "current_coordinates",
42  "model_coordinates"
43 };
44 
45 struct FieldInfo {
46  FieldInfo(const stk::mesh::FieldBase* fld, unsigned scalars)
47  : field(fld), scalarsDim1(scalars), scalarsDim2(0)
48  {}
49  FieldInfo(const stk::mesh::FieldBase* fld, unsigned tensorDim1, unsigned tensorDim2)
50  : field(fld), scalarsDim1(tensorDim1), scalarsDim2(tensorDim2)
51  {}
52  const stk::mesh::FieldBase* field;
53  unsigned scalarsDim1;
54  unsigned scalarsDim2;
55 };
56 
57 struct FieldInfoLess {
58  bool operator()(const FieldInfo& lhs, const FieldInfo& rhs) const
59  {
60  return lhs.field->mesh_meta_data_ordinal() < rhs.field->mesh_meta_data_ordinal();
61  }
62 };
63 
64 typedef std::set<FieldInfo,FieldInfoLess> FieldSet;
65 
67 {
68 public:
70  : dataEnums(),
71  coordsFields_(),
72  fields(), meSCS_(NULL), meSCV_(NULL), meFEM_(NULL)
73  {
74  }
75 
77  ELEM_DATA_NEEDED data,
79  )
80  {
81  auto it = coordsFields_.find(cType);
82  ThrowRequireMsg(
83  it != coordsFields_.end(),
84  "ElemDataRequests::add_master_element_call: Coordinates field (" +
85  CoordinatesTypeNames[cType] +
86  ") must be registered to ElemDataRequests before registering MasterElement calls");
87  dataEnums[cType].insert(data);
88  }
89 
90  void add_gathered_nodal_field(const stk::mesh::FieldBase& field, unsigned scalarsPerNode);
91 
92  void add_gathered_nodal_field(const stk::mesh::FieldBase& field, unsigned tensorDim1, unsigned tensorDim2);
93 
94  void add_element_field(const stk::mesh::FieldBase& field, unsigned scalarsPerElement);
95 
96  void add_element_field(const stk::mesh::FieldBase& field, unsigned tensorDim1, unsigned tensorDim2);
97 
98  void add_coordinates_field(
99  const stk::mesh::FieldBase& field,
100  unsigned scalarsPerNode,
101  COORDS_TYPES cType);
102 
104  {
105  meSCV_ = meSCV;
106  }
107 
109  {
110  meSCS_ = meSCS;
111  }
112 
114  {
115  meFEM_ = meFEM;
116  }
117 
118  const std::set<ELEM_DATA_NEEDED>& get_data_enums(
119  const COORDS_TYPES cType) const
120  { return dataEnums[cType]; }
121 
122  const stk::mesh::FieldBase* get_coordinates_field(
123  const COORDS_TYPES cType) const
124  {
125  auto it = coordsFields_.find(cType);
126  ThrowRequireMsg(
127  it != coordsFields_.end(),
128  "ElemDataRequests::get_coordinates_field: Coordinates field (" +
129  CoordinatesTypeNames[cType] +
130  ") must be registered to ElemDataRequests before access");
131  return it->second;
132  }
133 
134  const std::map<COORDS_TYPES, const stk::mesh::FieldBase*>&
136  { return coordsFields_; }
137 
138  const FieldSet& get_fields() const { return fields; }
139  MasterElement *get_cvfem_volume_me() {return meSCV_;}
141  MasterElement *get_fem_volume_me() {return meFEM_;}
142 
143 private:
144  std::array<std::set<ELEM_DATA_NEEDED>, MAX_COORDS_TYPES> dataEnums;
145  std::map<COORDS_TYPES, const stk::mesh::FieldBase*> coordsFields_;
146  FieldSet fields;
150 };
151 
152 } // namespace nalu
153 } // namespace Sierra
154 
155 #endif
Definition: ElemDataRequests.h:27
Definition: ElemDataRequests.h:57
Definition: ElemDataRequests.h:28
FieldInfo(const stk::mesh::FieldBase *fld, unsigned tensorDim1, unsigned tensorDim2)
Definition: ElemDataRequests.h:49
Definition: ABLForcingAlgorithm.C:26
Definition: ElemDataRequests.h:25
Definition: MasterElement.h:53
Definition: ElemDataRequests.h:31
MasterElement * get_cvfem_volume_me()
Definition: ElemDataRequests.h:139
const FieldSet & get_fields() const
Definition: ElemDataRequests.h:138
void add_fem_volume_me(MasterElement *meFEM)
Definition: ElemDataRequests.h:113
MasterElement * meSCV_
Definition: ElemDataRequests.h:148
void add_cvfem_volume_me(MasterElement *meSCV)
Definition: ElemDataRequests.h:103
Definition: ElemDataRequests.h:66
Definition: ElemDataRequests.h:36
static const std::string CoordinatesTypeNames[]
Definition: ElemDataRequests.h:40
Definition: ElemDataRequests.h:37
bool operator()(const FieldInfo &lhs, const FieldInfo &rhs) const
Definition: ElemDataRequests.h:58
MasterElement * meFEM_
Definition: ElemDataRequests.h:149
void add_master_element_call(ELEM_DATA_NEEDED data, COORDS_TYPES cType=CURRENT_COORDINATES)
Definition: ElemDataRequests.h:76
Definition: ElemDataRequests.h:29
MasterElement * get_cvfem_surface_me()
Definition: ElemDataRequests.h:140
void add_cvfem_surface_me(MasterElement *meSCS)
Definition: ElemDataRequests.h:108
static constexpr double lhs[8][8]
Definition: UnitTestContinuityAdvElem.C:25
std::array< std::set< ELEM_DATA_NEEDED >, MAX_COORDS_TYPES > dataEnums
Definition: ElemDataRequests.h:144
ElemDataRequests()
Definition: ElemDataRequests.h:69
static constexpr double rhs[8]
Definition: UnitTestContinuityAdvElem.C:18
FieldInfo(const stk::mesh::FieldBase *fld, unsigned scalars)
Definition: ElemDataRequests.h:46
MasterElement * get_fem_volume_me()
Definition: ElemDataRequests.h:141
const std::map< COORDS_TYPES, const stk::mesh::FieldBase * > & get_coordinates_map() const
Definition: ElemDataRequests.h:135
Definition: ElemDataRequests.h:35
ELEM_DATA_NEEDED
Definition: ElemDataRequests.h:24
FieldSet fields
Definition: ElemDataRequests.h:146
unsigned scalarsDim1
Definition: ElemDataRequests.h:53
const stk::mesh::FieldBase * field
Definition: ElemDataRequests.h:52
Definition: UnitTestMasterElements.C:367
unsigned scalarsDim2
Definition: ElemDataRequests.h:54
Definition: ElemDataRequests.h:45
std::set< FieldInfo, FieldInfoLess > FieldSet
Definition: ElemDataRequests.h:64
COORDS_TYPES
Definition: ElemDataRequests.h:34
Definition: ElemDataRequests.h:26
std::map< COORDS_TYPES, const stk::mesh::FieldBase * > coordsFields_
Definition: ElemDataRequests.h:145
MasterElement * meSCS_
Definition: ElemDataRequests.h:147
const stk::mesh::FieldBase * get_coordinates_field(const COORDS_TYPES cType) const
Definition: ElemDataRequests.h:122
Definition: ElemDataRequests.h:30
const std::set< ELEM_DATA_NEEDED > & get_data_enums(const COORDS_TYPES cType) const
Definition: ElemDataRequests.h:118