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
BoundaryConditions.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 BoundaryConditions_h
10 #define BoundaryConditions_h
11 
12 #include <Enums.h>
13 
14 // yaml for parsing..
15 #include <yaml-cpp/yaml.h>
16 
17 #include <map>
18 #include <string>
19 #include <vector>
20 
21 namespace YAML {
22  class Node;
23 }
24 
25 namespace sierra{
26  namespace nalu{
27 
28 class Realm;
29 class BoundaryConditions;
30 class Simulation;
31 
33  public:
34  BoundaryCondition(BoundaryConditions& bcs) : boundaryConditions_(bcs) {}
35 
36  virtual ~BoundaryCondition() {}
37 
38  BoundaryCondition * load(const YAML::Node & node) ;
39  Simulation *root();
40  BoundaryConditions *parent();
41 
42  void breadboard()
43  {
44  // nothing
45  }
46 
47  std::string bcName_;
48  std::string targetName_;
51 };
52 
53  typedef std::vector<BoundaryCondition *> BoundaryConditionVector;
54 
56  public:
57 
59  : realm_(realm) {}
61  for ( size_t iboundary_condition = 0; iboundary_condition < boundaryConditionVector_.size(); ++iboundary_condition ) {
62  delete boundaryConditionVector_[iboundary_condition];
63  }
64  }
65 
67  {
68  BoundaryCondition tmp_boundary_condition(*this);
69 
70  if(node["boundary_conditions"]) {
71  const YAML::Node boundary_conditions = node["boundary_conditions"];
72  for ( size_t iboundary_condition = 0; iboundary_condition < boundary_conditions.size(); ++iboundary_condition ) {
73  const YAML::Node boundary_condition_node = boundary_conditions[iboundary_condition];
74  BoundaryCondition* bc = tmp_boundary_condition.load(boundary_condition_node);
75  boundaryConditionVector_.push_back(bc);
76  }
77  }
78  else {
79  throw std::runtime_error("parser error BoundaryConditions::load");
80  }
81 
82  return this;
83  }
84 
85  void breadboard()
86  {
87  for ( size_t iboundary_condition = 0; iboundary_condition < boundaryConditionVector_.size(); ++iboundary_condition ) {
88  boundaryConditionVector_[iboundary_condition]->breadboard();
89  }
90  }
91 
92  Simulation *root();
93  Realm *parent();
94 
95  // ease of access methods to particular boundary condition
96  size_t size() {return boundaryConditionVector_.size();}
97  BoundaryCondition *operator[](int i) { return boundaryConditionVector_[i];}
98 
100  BoundaryConditionVector boundaryConditionVector_;
101 };
102 
103 } // namespace nalu
104 } // namespace Sierra
105 
106 #endif
void breadboard()
Definition: BoundaryConditions.h:85
Definition: Simulation.h:28
~BoundaryConditions()
Definition: BoundaryConditions.h:60
Definition: ABLForcingAlgorithm.C:26
BoundaryConditions(Realm &realm)
Definition: BoundaryConditions.h:58
BoundaryConditionType
Definition: Enums.h:45
BoundaryConditionType theBcType_
Definition: BoundaryConditions.h:49
BoundaryConditions * load(const YAML::Node &node)
Definition: BoundaryConditions.h:66
Realm & realm_
Definition: BoundaryConditions.h:99
BoundaryCondition * operator[](int i)
Definition: BoundaryConditions.h:97
BoundaryCondition * load(const YAML::Node &node)
this is an example of a load() method with polymorphism - the type of the node is determined from som...
Definition: BoundaryConditions.C:42
std::vector< BoundaryCondition * > BoundaryConditionVector
Definition: BoundaryConditions.h:53
BoundaryConditionVector boundaryConditionVector_
Definition: BoundaryConditions.h:100
Definition: BoundaryConditions.h:55
Definition: NaluParsing.C:400
BoundaryConditions & boundaryConditions_
Definition: BoundaryConditions.h:50
std::string targetName_
Definition: BoundaryConditions.h:48
std::string bcName_
Definition: BoundaryConditions.h:47
BoundaryCondition(BoundaryConditions &bcs)
Definition: BoundaryConditions.h:34
Tpetra::Map< LocalOrdinal, GlobalOrdinal >::node_type Node
Definition: LinearSolver.h:32
void breadboard()
Definition: BoundaryConditions.h:42
size_t size()
Definition: BoundaryConditions.h:96
Definition: Realm.h:82
virtual ~BoundaryCondition()
Definition: BoundaryConditions.h:36
Definition: BoundaryConditions.h:32