Nektar++
Conditions.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////////////
2 //
3 // File: Conditions.h
4 //
5 // For more information, please see: http://www.nektar.info/
6 //
7 // The MIT License
8 //
9 // Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10 // Department of Aeronautics, Imperial College London (UK), and Scientific
11 // Computing and Imaging Institute, University of Utah (USA).
12 //
13 // License for the specific language governing rights and limitations under
14 // Permission is hereby granted, free of charge, to any person obtaining a
15 // copy of this software and associated documentation files (the "Software"),
16 // to deal in the Software without restriction, including without limitation
17 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
18 // and/or sell copies of the Software, and to permit persons to whom the
19 // Software is furnished to do so, subject to the following conditions:
20 //
21 // The above copyright notice and this permission notice shall be included
22 // in all copies or substantial portions of the Software.
23 //
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
30 // DEALINGS IN THE SOFTWARE.
31 //
32 // Description:
33 //
34 //
35 ////////////////////////////////////////////////////////////////////////////////
36 #ifndef NEKTAR_SPATIALDOMAINS_BOUNDARYCONDITIONS_H
37 #define NEKTAR_SPATIALDOMAINS_BOUNDARYCONDITIONS_H
38 
39 #include <string>
40 #include <map>
41 
45 
46 
47 namespace Nektar
48 {
49  struct OneD;
50 
51  namespace SpatialDomains
52  {
54  {
60  };
61 
63  {
66  const std::string &userDefined
67  = std::string("NoUserDefined")):
69  m_userDefined(userDefined),
70  m_isTimeDependent(false)
71  {
72  }
73 
75  {};
76 
78  {
80  }
81 
83  {
84  m_boundaryConditionType = boundaryType;
85  }
86 
87  void SetUserDefined(std::string &type)
88  {
89  m_userDefined = type;
90  }
91 
92  const std::string GetUserDefined() const
93  {
94  return m_userDefined;
95  }
96 
97  void SetIsTimeDependent(bool value)
98  {
99  m_isTimeDependent = value;
100  }
101 
102  bool IsTimeDependent(void)
103  {
104  return m_isTimeDependent;
105  }
106 
107  protected:
109  std::string m_userDefined;
111  };
112 
113 
115  {
116 
118  const LibUtilities::SessionReaderSharedPtr &pSession,
119  const std::string& eqn,
120  const std::string& userDefined = std::string("NoUserDefined"),
121  const std::string& filename=std::string("")):
122  BoundaryConditionBase(eDirichlet, userDefined),
123  m_dirichletCondition(pSession, eqn),
124  m_filename(filename)
125  {
126  }
127 
129  std::string m_filename;
130  };
131 
133  {
135  const LibUtilities::SessionReaderSharedPtr &pSession,
136  const std::string& eqn,
137  const std::string& userDefined = std::string("NoUserDefined"),
138  const std::string& filename=std::string("")):
139  BoundaryConditionBase(eNeumann, userDefined),
140  m_neumannCondition(pSession, eqn),
141  m_filename(filename)
142  {
143  }
144 
146  std::string m_filename;
147  };
148 
150  {
152  const LibUtilities::SessionReaderSharedPtr &pSession,
153  const std::string &a,
154  const std::string &b,
155  const std::string &userDefined = std::string("NoUserDefined"),
156  const std::string& filename=std::string("")):
157  BoundaryConditionBase(eRobin, userDefined),
158  m_robinFunction(pSession, a),
159  m_robinPrimitiveCoeff(pSession, b),
160  m_filename(filename)
161  {
162  }
163  // \frac{\partial {u}}{\partial{n}} +
164  // m_robinPrimativeCoeff(x,y,z)*u = m_robinFunction(x,y,z)
167  std::string m_filename;
168  };
169 
170 
172  {
173  PeriodicBoundaryCondition(const unsigned int n):
176  {
177  }
178 
180  };
181 
183  {
184 
186  const LibUtilities::SessionReaderSharedPtr &pSession,
187  const std::string& eqn,
188  const std::string& userDefined = std::string("NoUserDefined"),
189  const std::string& filename=std::string("")):
190  BoundaryConditionBase(eNotDefined, userDefined),
191  m_notDefinedCondition(pSession, eqn),
192  m_filename(filename)
193  {
194  }
195 
197  std::string m_filename;
198  };
199 
200 
201  typedef std::map<int, Composite> BoundaryRegion;
202  typedef boost::shared_ptr<BoundaryRegion> BoundaryRegionShPtr;
203  typedef boost::shared_ptr<const BoundaryRegion> ConstBoundaryRegionShPtr;
204  typedef std::map<int, BoundaryRegionShPtr> BoundaryRegionCollection;
205 
206  typedef boost::shared_ptr<BoundaryConditionBase> BoundaryConditionShPtr;
207  typedef boost::shared_ptr<DirichletBoundaryCondition> DirichletBCShPtr;
208  typedef boost::shared_ptr<NeumannBoundaryCondition> NeumannBCShPtr;
209  typedef boost::shared_ptr<RobinBoundaryCondition> RobinBCShPtr;
210 
211  typedef std::map<std::string,BoundaryConditionShPtr> BoundaryConditionMap;
212  typedef boost::shared_ptr<BoundaryConditionMap> BoundaryConditionMapShPtr;
213  typedef std::map<int, BoundaryConditionMapShPtr> BoundaryConditionCollection;
214 
216 
218  {
219  public:
221 
224 
225  const BoundaryRegionCollection &GetBoundaryRegions(void) const
226  {
227  return m_boundaryRegions;
228  }
229 
230  void AddBoundaryRegions(const int regionID, BoundaryRegionShPtr &bRegion)
231  {
232  m_boundaryRegions[regionID] = bRegion;
233  }
234 
235  const BoundaryConditionCollection &GetBoundaryConditions(void) const
236  {
237  return m_boundaryConditions;
238  }
239 
240 
241  void AddBoundaryConditions(const int regionID, BoundaryConditionMapShPtr &bCond)
242  {
243  m_boundaryConditions[regionID] = bCond;
244  }
245 
246  const std::string GetVariable(unsigned int indx)
247  {
248  return m_session->GetVariable(indx);
249  }
250 
251  protected:
252  /// The mesh graph to use for referencing geometry info.
255 
256  BoundaryRegionCollection m_boundaryRegions;
257  BoundaryConditionCollection m_boundaryConditions;
258 
259  private:
260 
261  /// Read segments (and general MeshGraph) given TiXmlDocument.
262  void Read(TiXmlElement *conditions);
263 
264  void ReadBoundaryRegions(TiXmlElement *regions);
265  void ReadBoundaryConditions(TiXmlElement *conditions);
266  };
267 
268  typedef boost::shared_ptr<BoundaryConditions>
270  }
271 }
272 
273 #endif //NEKTAR_SPATIALDOMAINS_BOUNDARYCONDITIONS_H
274 
NotDefinedBoundaryCondition(const LibUtilities::SessionReaderSharedPtr &pSession, const std::string &eqn, const std::string &userDefined=std::string("NoUserDefined"), const std::string &filename=std::string(""))
Definition: Conditions.h:185
RobinBoundaryCondition(const LibUtilities::SessionReaderSharedPtr &pSession, const std::string &a, const std::string &b, const std::string &userDefined=std::string("NoUserDefined"), const std::string &filename=std::string(""))
Definition: Conditions.h:151
BoundaryRegionCollection m_boundaryRegions
Definition: Conditions.h:256
void AddBoundaryRegions(const int regionID, BoundaryRegionShPtr &bRegion)
Definition: Conditions.h:230
const BoundaryConditionCollection & GetBoundaryConditions(void) const
Definition: Conditions.h:235
static const Array< OneD, BoundaryConditionShPtr > NullBoundaryConditionShPtrArray
Definition: Conditions.h:215
boost::shared_ptr< const BoundaryRegion > ConstBoundaryRegionShPtr
Definition: Conditions.h:203
DirichletBoundaryCondition(const LibUtilities::SessionReaderSharedPtr &pSession, const std::string &eqn, const std::string &userDefined=std::string("NoUserDefined"), const std::string &filename=std::string(""))
Definition: Conditions.h:117
boost::shared_ptr< NeumannBoundaryCondition > NeumannBCShPtr
Definition: Conditions.h:208
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
Definition: MeshPartition.h:50
NeumannBoundaryCondition(const LibUtilities::SessionReaderSharedPtr &pSession, const std::string &eqn, const std::string &userDefined=std::string("NoUserDefined"), const std::string &filename=std::string(""))
Definition: Conditions.h:134
const std::string GetVariable(unsigned int indx)
Definition: Conditions.h:246
boost::shared_ptr< DirichletBoundaryCondition > DirichletBCShPtr
Definition: Conditions.h:207
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
Definition: Conditions.h:204
std::map< std::string, BoundaryConditionShPtr > BoundaryConditionMap
Definition: Conditions.h:211
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
Definition: Conditions.h:213
std::map< int, Composite > BoundaryRegion
Definition: Conditions.h:201
void ReadBoundaryRegions(TiXmlElement *regions)
Definition: Conditions.cpp:84
void Read(TiXmlElement *conditions)
Read segments (and general MeshGraph) given TiXmlDocument.
Definition: Conditions.cpp:66
void SetBoundaryConditionType(BoundaryConditionType boundaryType)
Definition: Conditions.h:82
boost::shared_ptr< BoundaryConditionMap > BoundaryConditionMapShPtr
Definition: Conditions.h:212
LibUtilities::SessionReaderSharedPtr m_session
Definition: Conditions.h:254
BoundaryConditionCollection m_boundaryConditions
Definition: Conditions.h:257
boost::shared_ptr< BoundaryConditions > BoundaryConditionsSharedPtr
Definition: Conditions.h:269
BoundaryConditionType GetBoundaryConditionType() const
Definition: Conditions.h:77
MeshGraphSharedPtr m_meshGraph
The mesh graph to use for referencing geometry info.
Definition: Conditions.h:253
const BoundaryRegionCollection & GetBoundaryRegions(void) const
Definition: Conditions.h:225
void AddBoundaryConditions(const int regionID, BoundaryConditionMapShPtr &bCond)
Definition: Conditions.h:241
boost::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
Definition: Conditions.h:206
BoundaryConditionBase(BoundaryConditionType type, const std::string &userDefined=std::string("NoUserDefined"))
Definition: Conditions.h:64
void ReadBoundaryConditions(TiXmlElement *conditions)
Definition: Conditions.cpp:147
boost::shared_ptr< MeshGraph > MeshGraphSharedPtr
Definition: MeshGraph.h:432
boost::shared_ptr< BoundaryRegion > BoundaryRegionShPtr
Definition: Conditions.h:202
const std::string GetUserDefined() const
Definition: Conditions.h:92
#define SPATIAL_DOMAINS_EXPORT
boost::shared_ptr< RobinBoundaryCondition > RobinBCShPtr
Definition: Conditions.h:209