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 // Permission is hereby granted, free of charge, to any person obtaining a
14 // copy of this software and associated documentation files (the "Software"),
15 // to deal in the Software without restriction, including without limitation
16 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 // and/or sell copies of the Software, and to permit persons to whom the
18 // Software is furnished to do so, subject to the following conditions:
19 //
20 // The above copyright notice and this permission notice shall be included
21 // in all copies or substantial portions of the Software.
22 //
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29 // DEALINGS IN THE SOFTWARE.
30 //
31 // Description:
32 //
33 //
34 ////////////////////////////////////////////////////////////////////////////////
35 #ifndef NEKTAR_SPATIALDOMAINS_BOUNDARYCONDITIONS_H
36 #define NEKTAR_SPATIALDOMAINS_BOUNDARYCONDITIONS_H
37 
38 #include <string>
39 #include <map>
40 
44 
45 namespace Nektar
46 {
47  struct OneD;
48 
49  namespace SpatialDomains
50  {
52  {
58  };
59 
61  {
64  const std::string &userDefined = std::string("NoUserDefined"),
67  m_userDefined(userDefined),
68  m_isTimeDependent(false),
69  m_comm(comm)
70  {
71  }
72 
74  {};
75 
77  {
79  }
80 
82  {
83  m_boundaryConditionType = boundaryType;
84  }
85 
86  void SetUserDefined(std::string &type)
87  {
88  m_userDefined = type;
89  }
90 
91  const std::string GetUserDefined() const
92  {
93  return m_userDefined;
94  }
95 
96  void SetIsTimeDependent(bool value)
97  {
98  m_isTimeDependent = value;
99  }
100 
101  bool IsTimeDependent(void)
102  {
103  return m_isTimeDependent;
104  }
105 
107  {
108  return m_comm;
109  }
110 
111  protected:
113  std::string m_userDefined;
116  };
117 
119  {
120 
122  const LibUtilities::SessionReaderSharedPtr &pSession,
123  const std::string& eqn,
124  const std::string& userDefined = std::string("NoUserDefined"),
125  const std::string& filename=std::string(""),
127  BoundaryConditionBase(eDirichlet, userDefined, comm),
128  m_dirichletCondition(pSession->GetInterpreter(), eqn),
129  m_expr(eqn),
130  m_filename(filename)
131  {
132  }
133 
135  std::string m_expr;
136  std::string m_filename;
137  };
138 
140  {
142  const LibUtilities::SessionReaderSharedPtr &pSession,
143  const std::string& eqn,
144  const std::string& userDefined = std::string("NoUserDefined"),
145  const std::string& filename=std::string(""),
147  BoundaryConditionBase(eNeumann, userDefined, comm),
148  m_neumannCondition(pSession->GetInterpreter(), eqn),
149  m_filename(filename)
150  {
151  }
152 
154  std::string m_filename;
155  };
156 
158  {
160  const LibUtilities::SessionReaderSharedPtr &pSession,
161  const std::string &a,
162  const std::string &b,
163  const std::string &userDefined = std::string("NoUserDefined"),
164  const std::string& filename=std::string(""),
166  BoundaryConditionBase(eRobin, userDefined, comm),
167  m_robinFunction(pSession->GetInterpreter(), a),
168  m_robinPrimitiveCoeff(pSession->GetInterpreter(), b),
169  m_filename(filename)
170  {
171  }
172  // \frac{\partial {u}}{\partial{n}} +
173  // m_robinPrimativeCoeff(x,y,z)*u = m_robinFunction(x,y,z)
176  std::string m_filename;
177  };
178 
179 
181  {
183  const unsigned int n,
184  const std::string &userDefined = std::string("NoUserDefined"),
186  : BoundaryConditionBase(ePeriodic, userDefined, comm),
187  m_connectedBoundaryRegion(n)
188  {
189  }
190 
192  };
193 
195  {
196 
198  const LibUtilities::SessionReaderSharedPtr &pSession,
199  const std::string& eqn,
200  const std::string& userDefined = std::string("NoUserDefined"),
201  const std::string& filename=std::string(""),
203  : BoundaryConditionBase(eNotDefined, userDefined, comm),
204  m_notDefinedCondition(pSession->GetInterpreter(), eqn),
205  m_filename(filename)
206  {
207  }
208 
210  std::string m_filename;
211  };
212 
213 
214  typedef std::map<int, CompositeSharedPtr> BoundaryRegion;
215  typedef std::shared_ptr<BoundaryRegion> BoundaryRegionShPtr;
216  typedef std::shared_ptr<const BoundaryRegion> ConstBoundaryRegionShPtr;
217  typedef std::map<int, BoundaryRegionShPtr> BoundaryRegionCollection;
218 
219  typedef std::shared_ptr<BoundaryConditionBase> BoundaryConditionShPtr;
220  typedef std::shared_ptr<DirichletBoundaryCondition> DirichletBCShPtr;
221  typedef std::shared_ptr<NeumannBoundaryCondition> NeumannBCShPtr;
222  typedef std::shared_ptr<RobinBoundaryCondition> RobinBCShPtr;
223 
224  typedef std::map<std::string,BoundaryConditionShPtr> BoundaryConditionMap;
225  typedef std::shared_ptr<BoundaryConditionMap> BoundaryConditionMapShPtr;
226  typedef std::map<int, BoundaryConditionMapShPtr> BoundaryConditionCollection;
227 
229 
231  {
232  public:
234 
235  SPATIAL_DOMAINS_EXPORT BoundaryConditions(void);
236  SPATIAL_DOMAINS_EXPORT ~BoundaryConditions(void);
237 
238  const BoundaryRegionCollection &GetBoundaryRegions(void) const
239  {
240  return m_boundaryRegions;
241  }
242 
243  void AddBoundaryRegions(const int regionID, BoundaryRegionShPtr &bRegion)
244  {
245  m_boundaryRegions[regionID] = bRegion;
246  }
247 
248  const BoundaryConditionCollection &GetBoundaryConditions(void) const
249  {
250  return m_boundaryConditions;
251  }
252 
253 
254  void AddBoundaryConditions(const int regionID, BoundaryConditionMapShPtr &bCond)
255  {
256  m_boundaryConditions[regionID] = bCond;
257  }
258 
259  const std::string GetVariable(unsigned int indx)
260  {
261  return m_session->GetVariable(indx);
262  }
263 
264  std::map<int, LibUtilities::CommSharedPtr> GetBoundaryCommunicators() const
265  {
266  return m_boundaryCommunicators;
267  }
268 
269  protected:
270  /// The mesh graph to use for referencing geometry info.
273 
274  BoundaryRegionCollection m_boundaryRegions;
275  BoundaryConditionCollection m_boundaryConditions;
276  std::map<int, LibUtilities::CommSharedPtr> m_boundaryCommunicators;
277 
278  private:
279 
280  /// Read segments (and general MeshGraph) given TiXmlDocument.
281  void Read(TiXmlElement *conditions);
282 
283  void ReadBoundaryRegions(TiXmlElement *regions);
284  void ReadBoundaryConditions(TiXmlElement *conditions);
285  void CreateBoundaryComms();
286  };
287 
288  typedef std::shared_ptr<BoundaryConditions>
290  }
291 }
292 
293 #endif //NEKTAR_SPATIALDOMAINS_BOUNDARYCONDITIONS_H
294 
LibUtilities::CommSharedPtr GetComm()
Definition: Conditions.h:106
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
Definition: MeshGraph.h:163
BoundaryRegionCollection m_boundaryRegions
Definition: Conditions.h:274
void AddBoundaryRegions(const int regionID, BoundaryRegionShPtr &bRegion)
Definition: Conditions.h:243
std::shared_ptr< BoundaryConditions > BoundaryConditionsSharedPtr
Definition: Conditions.h:289
static const Array< OneD, BoundaryConditionShPtr > NullBoundaryConditionShPtrArray
Definition: Conditions.h:228
const BoundaryConditionCollection & GetBoundaryConditions(void) const
Definition: Conditions.h:248
NeumannBoundaryCondition(const LibUtilities::SessionReaderSharedPtr &pSession, const std::string &eqn, const std::string &userDefined=std::string("NoUserDefined"), const std::string &filename=std::string(""), const LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr())
Definition: Conditions.h:141
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
Definition: Comm.h:53
std::shared_ptr< NeumannBoundaryCondition > NeumannBCShPtr
Definition: Conditions.h:221
NotDefinedBoundaryCondition(const LibUtilities::SessionReaderSharedPtr &pSession, const std::string &eqn, const std::string &userDefined=std::string("NoUserDefined"), const std::string &filename=std::string(""), const LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr())
Definition: Conditions.h:197
const std::string GetUserDefined() const
Definition: Conditions.h:91
std::map< int, LibUtilities::CommSharedPtr > m_boundaryCommunicators
Definition: Conditions.h:276
PeriodicBoundaryCondition(const unsigned int n, const std::string &userDefined=std::string("NoUserDefined"), const LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr())
Definition: Conditions.h:182
std::map< int, LibUtilities::CommSharedPtr > GetBoundaryCommunicators() const
Definition: Conditions.h:264
std::shared_ptr< RobinBoundaryCondition > RobinBCShPtr
Definition: Conditions.h:222
LibUtilities::CommSharedPtr m_comm
Definition: Conditions.h:115
const std::string GetVariable(unsigned int indx)
Definition: Conditions.h:259
std::shared_ptr< BoundaryConditionMap > BoundaryConditionMapShPtr
Definition: Conditions.h:225
std::map< int, CompositeSharedPtr > BoundaryRegion
Definition: Conditions.h:214
std::shared_ptr< BoundaryRegion > BoundaryRegionShPtr
Definition: Conditions.h:215
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
Definition: Conditions.h:217
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(""), const LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr())
Definition: Conditions.h:159
std::map< std::string, BoundaryConditionShPtr > BoundaryConditionMap
Definition: Conditions.h:224
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
Definition: Conditions.h:226
BoundaryConditionBase(BoundaryConditionType type, const std::string &userDefined=std::string("NoUserDefined"), LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr())
Definition: Conditions.h:62
std::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
Definition: Conditions.h:219
void SetBoundaryConditionType(BoundaryConditionType boundaryType)
Definition: Conditions.h:81
BoundaryConditionType GetBoundaryConditionType() const
Definition: Conditions.h:76
LibUtilities::SessionReaderSharedPtr m_session
Definition: Conditions.h:272
BoundaryConditionCollection m_boundaryConditions
Definition: Conditions.h:275
std::shared_ptr< DirichletBoundaryCondition > DirichletBCShPtr
Definition: Conditions.h:220
MeshGraphSharedPtr m_meshGraph
The mesh graph to use for referencing geometry info.
Definition: Conditions.h:271
void AddBoundaryConditions(const int regionID, BoundaryConditionMapShPtr &bCond)
Definition: Conditions.h:254
DirichletBoundaryCondition(const LibUtilities::SessionReaderSharedPtr &pSession, const std::string &eqn, const std::string &userDefined=std::string("NoUserDefined"), const std::string &filename=std::string(""), const LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr())
Definition: Conditions.h:121
std::shared_ptr< SessionReader > SessionReaderSharedPtr
const BoundaryRegionCollection & GetBoundaryRegions(void) const
Definition: Conditions.h:238
#define SPATIAL_DOMAINS_EXPORT
std::shared_ptr< const BoundaryRegion > ConstBoundaryRegionShPtr
Definition: Conditions.h:216