Nektar++
Loading...
Searching...
No Matches
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
36#ifndef NEKTAR_SPATIALDOMAINS_BOUNDARYCONDITIONS_H
37#define NEKTAR_SPATIALDOMAINS_BOUNDARYCONDITIONS_H
38
39#include <map>
40#include <string>
41
45
46namespace Nektar
47{
48struct OneD;
49
50namespace SpatialDomains
51{
60
62{
65 const std::string &userDefined = std::string("NoUserDefined"),
67 : m_comm(comm), m_userDefined(userDefined),
69 {
70 }
71
72 virtual ~BoundaryConditionBase() = default;
73
78
80 {
81 m_boundaryConditionType = boundaryType;
82 }
83
84 void SetUserDefined(std::string &type)
85 {
86 m_userDefined = type;
87 }
88
89 const std::string GetUserDefined() const
90 {
91 return m_userDefined;
92 }
93
94 void SetIsTimeDependent(bool value)
95 {
96 m_isTimeDependent = value;
97 }
98
99 bool IsTimeDependent(void)
100 {
101 return m_isTimeDependent;
102 }
103
105 {
106 return m_comm;
107 }
108
110
111protected:
113 std::string m_userDefined;
116};
117
119{
122 const std::string &eqn,
123 const std::string &userDefined = std::string("NoUserDefined"),
124 const std::string &filename = std::string(""),
126 : BoundaryConditionBase(eDirichlet, userDefined, comm),
128 MemoryManager<LibUtilities::Equation>::AllocateSharedPtr(
129 pSession->GetInterpreter(), eqn)),
130 m_expr(eqn), m_filename(filename)
131 {
132 }
133
135 {
137 }
138
140 std::string m_expr;
141 std::string m_filename;
142};
143
145{
148 const std::string &eqn,
149 const std::string &userDefined = std::string("NoUserDefined"),
150 const std::string &filename = std::string(""),
152 : BoundaryConditionBase(eNeumann, userDefined, comm),
154 MemoryManager<LibUtilities::Equation>::AllocateSharedPtr(
155 pSession->GetInterpreter(), eqn)),
156 m_filename(filename)
157 {
158 }
159
161 {
162 return m_neumannCondition;
163 }
164
166 std::string m_filename;
167};
168
170{
173 const std::string &a, const std::string &b,
174 const std::string &userDefined = std::string("NoUserDefined"),
175 const std::string &filename = std::string(""),
177 : BoundaryConditionBase(eRobin, userDefined, comm),
179 MemoryManager<LibUtilities::Equation>::AllocateSharedPtr(
180 pSession->GetInterpreter(), a)),
182 MemoryManager<LibUtilities::Equation>::AllocateSharedPtr(
183 pSession->GetInterpreter(), b)),
184 m_filename(filename)
185 {
186 }
187
189 {
190 return m_robinFunction;
191 }
192
193 // \frac{\partial {u}}{\partial{n}} +
194 // m_robinPrimativeCoeff(x,y,z)*u = m_robinFunction(x,y,z)
197 std::string m_filename;
198};
199
201{
203 const unsigned int n,
204 const std::string &userDefined = std::string("NoUserDefined"),
206 : BoundaryConditionBase(ePeriodic, userDefined, comm),
208 {
209 }
210
212 {
214 return empty;
215 }
216
218};
219
221{
222
225 const std::string &eqn,
226 const std::string &userDefined = std::string("NoUserDefined"),
227 const std::string &filename = std::string(""),
229 : BoundaryConditionBase(eNotDefined, userDefined, comm),
231 MemoryManager<LibUtilities::Equation>::AllocateSharedPtr(
232 pSession->GetInterpreter(), eqn)),
233 m_filename(filename)
234 {
235 }
236
238 {
240 }
241
243 std::string m_filename;
244};
245
246typedef std::map<int, CompositeSharedPtr> BoundaryRegion;
247typedef std::shared_ptr<BoundaryRegion> BoundaryRegionShPtr;
248typedef std::shared_ptr<const BoundaryRegion> ConstBoundaryRegionShPtr;
249typedef std::map<int, BoundaryRegionShPtr> BoundaryRegionCollection;
250
251typedef std::shared_ptr<BoundaryConditionBase> BoundaryConditionShPtr;
252typedef std::shared_ptr<DirichletBoundaryCondition> DirichletBCShPtr;
253typedef std::shared_ptr<NeumannBoundaryCondition> NeumannBCShPtr;
254typedef std::shared_ptr<RobinBoundaryCondition> RobinBCShPtr;
255
256typedef std::map<std::string, BoundaryConditionShPtr> BoundaryConditionMap;
257typedef std::shared_ptr<BoundaryConditionMap> BoundaryConditionMapShPtr;
258typedef std::map<int, BoundaryConditionMapShPtr> BoundaryConditionCollection;
259
262
264{
265public:
268 const MeshGraphSharedPtr &meshGraph);
269
272
274 {
275 return m_boundaryRegions;
276 }
277
278 void AddBoundaryRegions(const int regionID, BoundaryRegionShPtr &bRegion)
279 {
280 m_boundaryRegions[regionID] = bRegion;
281 }
282
287
288 void AddBoundaryConditions(const int regionID,
290 {
291 m_boundaryConditions[regionID] = bCond;
292 }
293
294 const std::string GetVariable(unsigned int indx)
295 {
296 return m_session->GetVariable(indx);
297 }
298
299 std::map<int, LibUtilities::CommSharedPtr> GetBoundaryCommunicators() const
300 {
302 }
303
304 const std::map<int, std::string> &GetBoundaryLabels(void) const
305 {
306 return m_boundaryLabels;
307 }
308
309protected:
310 /// The mesh graph to use for referencing geometry info.
313
315 std::map<int, std::string> m_boundaryLabels;
317 std::map<int, LibUtilities::CommSharedPtr> m_boundaryCommunicators;
318
319private:
320 /// Read segments (and general MeshGraph) given TiXmlDocument.
321 void Read(TiXmlElement *conditions);
322 void ReadBoundaryRegions(TiXmlElement *regions);
323 void ReadBoundaryConditions(TiXmlElement *conditions);
324 void CreateBoundaryComms();
325};
326
327typedef std::shared_ptr<BoundaryConditions> BoundaryConditionsSharedPtr;
328} // namespace SpatialDomains
329} // namespace Nektar
330
331#endif // NEKTAR_SPATIALDOMAINS_BOUNDARYCONDITIONS_H
#define SPATIAL_DOMAINS_EXPORT
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
const std::map< int, std::string > & GetBoundaryLabels(void) const
Definition Conditions.h:304
std::map< int, LibUtilities::CommSharedPtr > m_boundaryCommunicators
Definition Conditions.h:317
BoundaryRegionCollection m_boundaryRegions
Definition Conditions.h:314
std::map< int, LibUtilities::CommSharedPtr > GetBoundaryCommunicators() const
Definition Conditions.h:299
void ReadBoundaryConditions(TiXmlElement *conditions)
void Read(TiXmlElement *conditions)
Read segments (and general MeshGraph) given TiXmlDocument.
void AddBoundaryRegions(const int regionID, BoundaryRegionShPtr &bRegion)
Definition Conditions.h:278
LibUtilities::SessionReaderSharedPtr m_session
Definition Conditions.h:312
const std::string GetVariable(unsigned int indx)
Definition Conditions.h:294
BoundaryConditionCollection m_boundaryConditions
Definition Conditions.h:316
const BoundaryRegionCollection & GetBoundaryRegions(void) const
Definition Conditions.h:273
std::map< int, std::string > m_boundaryLabels
Definition Conditions.h:315
MeshGraphSharedPtr m_meshGraph
The mesh graph to use for referencing geometry info.
Definition Conditions.h:311
void ReadBoundaryRegions(TiXmlElement *regions)
const BoundaryConditionCollection & GetBoundaryConditions(void) const
Definition Conditions.h:283
void AddBoundaryConditions(const int regionID, BoundaryConditionMapShPtr &bCond)
Definition Conditions.h:288
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< Equation > EquationSharedPtr
Definition Equation.h:131
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
Definition Comm.h:55
std::map< int, CompositeSharedPtr > BoundaryRegion
Definition Conditions.h:246
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
Definition Conditions.h:249
std::shared_ptr< BoundaryRegion > BoundaryRegionShPtr
Definition Conditions.h:247
std::shared_ptr< BoundaryConditions > BoundaryConditionsSharedPtr
Definition Conditions.h:327
std::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
Definition Conditions.h:251
std::map< std::string, BoundaryConditionShPtr > BoundaryConditionMap
Definition Conditions.h:256
std::shared_ptr< DirichletBoundaryCondition > DirichletBCShPtr
Definition Conditions.h:252
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
Definition Conditions.h:258
std::shared_ptr< const BoundaryRegion > ConstBoundaryRegionShPtr
Definition Conditions.h:248
static const Array< OneD, BoundaryConditionShPtr > NullBoundaryConditionShPtrArray
Definition Conditions.h:261
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
Definition MeshGraph.h:217
std::shared_ptr< NeumannBoundaryCondition > NeumannBCShPtr
Definition Conditions.h:253
std::shared_ptr< BoundaryConditionMap > BoundaryConditionMapShPtr
Definition Conditions.h:257
std::shared_ptr< RobinBoundaryCondition > RobinBCShPtr
Definition Conditions.h:254
virtual const LibUtilities::EquationSharedPtr & GetEquation() const =0
BoundaryConditionType GetBoundaryConditionType() const
Definition Conditions.h:74
void SetBoundaryConditionType(BoundaryConditionType boundaryType)
Definition Conditions.h:79
const std::string GetUserDefined() const
Definition Conditions.h:89
BoundaryConditionBase(BoundaryConditionType type, const std::string &userDefined=std::string("NoUserDefined"), LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr())
Definition Conditions.h:63
LibUtilities::CommSharedPtr GetComm()
Definition Conditions.h:104
const LibUtilities::EquationSharedPtr & GetEquation() const override
Definition Conditions.h:134
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:120
LibUtilities::EquationSharedPtr m_dirichletCondition
Definition Conditions.h:139
const LibUtilities::EquationSharedPtr & GetEquation() const override
Definition Conditions.h:160
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:146
LibUtilities::EquationSharedPtr m_neumannCondition
Definition Conditions.h:165
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:223
LibUtilities::EquationSharedPtr m_notDefinedCondition
Definition Conditions.h:242
const LibUtilities::EquationSharedPtr & GetEquation() const override
Definition Conditions.h:237
PeriodicBoundaryCondition(const unsigned int n, const std::string &userDefined=std::string("NoUserDefined"), const LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr())
Definition Conditions.h:202
const LibUtilities::EquationSharedPtr & GetEquation() const override
Definition Conditions.h:211
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:171
LibUtilities::EquationSharedPtr m_robinPrimitiveCoeff
Definition Conditions.h:196
LibUtilities::EquationSharedPtr m_robinFunction
Definition Conditions.h:195
const LibUtilities::EquationSharedPtr & GetEquation() const override
Definition Conditions.h:188