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
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{
53{
59};
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
75 {
77 }
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
109protected:
111 std::string m_userDefined;
114};
115
117{
118
121 const std::string &eqn,
122 const std::string &userDefined = std::string("NoUserDefined"),
123 const std::string &filename = std::string(""),
125 : BoundaryConditionBase(eDirichlet, userDefined, comm),
126 m_dirichletCondition(pSession->GetInterpreter(), eqn), m_expr(eqn),
127 m_filename(filename)
128 {
129 }
130
132 std::string m_expr;
133 std::string m_filename;
134};
135
137{
140 const std::string &eqn,
141 const std::string &userDefined = std::string("NoUserDefined"),
142 const std::string &filename = std::string(""),
144 : BoundaryConditionBase(eNeumann, userDefined, comm),
145 m_neumannCondition(pSession->GetInterpreter(), eqn),
146 m_filename(filename)
147 {
148 }
149
151 std::string m_filename;
152};
153
155{
158 const std::string &a, const std::string &b,
159 const std::string &userDefined = std::string("NoUserDefined"),
160 const std::string &filename = std::string(""),
162 : BoundaryConditionBase(eRobin, userDefined, comm),
163 m_robinFunction(pSession->GetInterpreter(), a),
164 m_robinPrimitiveCoeff(pSession->GetInterpreter(), b),
165 m_filename(filename)
166 {
167 }
168 // \frac{\partial {u}}{\partial{n}} +
169 // m_robinPrimativeCoeff(x,y,z)*u = m_robinFunction(x,y,z)
172 std::string m_filename;
173};
174
176{
178 const unsigned int n,
179 const std::string &userDefined = std::string("NoUserDefined"),
181 : BoundaryConditionBase(ePeriodic, userDefined, comm),
183 {
184 }
185
187};
188
190{
191
194 const std::string &eqn,
195 const std::string &userDefined = std::string("NoUserDefined"),
196 const std::string &filename = std::string(""),
198 : BoundaryConditionBase(eNotDefined, userDefined, comm),
199 m_notDefinedCondition(pSession->GetInterpreter(), eqn),
200 m_filename(filename)
201 {
202 }
203
205 std::string m_filename;
206};
207
208typedef std::map<int, CompositeSharedPtr> BoundaryRegion;
209typedef std::shared_ptr<BoundaryRegion> BoundaryRegionShPtr;
210typedef std::shared_ptr<const BoundaryRegion> ConstBoundaryRegionShPtr;
211typedef std::map<int, BoundaryRegionShPtr> BoundaryRegionCollection;
212
213typedef std::shared_ptr<BoundaryConditionBase> BoundaryConditionShPtr;
214typedef std::shared_ptr<DirichletBoundaryCondition> DirichletBCShPtr;
215typedef std::shared_ptr<NeumannBoundaryCondition> NeumannBCShPtr;
216typedef std::shared_ptr<RobinBoundaryCondition> RobinBCShPtr;
217
218typedef std::map<std::string, BoundaryConditionShPtr> BoundaryConditionMap;
219typedef std::shared_ptr<BoundaryConditionMap> BoundaryConditionMapShPtr;
220typedef std::map<int, BoundaryConditionMapShPtr> BoundaryConditionCollection;
221
224
226{
227public:
230 const MeshGraphSharedPtr &meshGraph);
231
234
236 {
237 return m_boundaryRegions;
238 }
239
240 void AddBoundaryRegions(const int regionID, BoundaryRegionShPtr &bRegion)
241 {
242 m_boundaryRegions[regionID] = bRegion;
243 }
244
246 {
248 }
249
250 void AddBoundaryConditions(const int regionID,
252 {
253 m_boundaryConditions[regionID] = bCond;
254 }
255
256 const std::string GetVariable(unsigned int indx)
257 {
258 return m_session->GetVariable(indx);
259 }
260
261 std::map<int, LibUtilities::CommSharedPtr> GetBoundaryCommunicators() const
262 {
264 }
265
266 const std::map<int, std::string> &GetBoundaryLabels(void) const
267 {
268 return m_boundaryLabels;
269 }
270
271protected:
272 /// The mesh graph to use for referencing geometry info.
275
277 std::map<int, std::string> m_boundaryLabels;
279 std::map<int, LibUtilities::CommSharedPtr> m_boundaryCommunicators;
280
281private:
282 /// Read segments (and general MeshGraph) given TiXmlDocument.
283 void Read(TiXmlElement *conditions);
284 void ReadBoundaryRegions(TiXmlElement *regions);
285 void ReadBoundaryConditions(TiXmlElement *conditions);
286 void CreateBoundaryComms();
287};
288
289typedef std::shared_ptr<BoundaryConditions> BoundaryConditionsSharedPtr;
290} // namespace SpatialDomains
291} // namespace Nektar
292
293#endif // NEKTAR_SPATIALDOMAINS_BOUNDARYCONDITIONS_H
#define SPATIAL_DOMAINS_EXPORT
const std::map< int, std::string > & GetBoundaryLabels(void) const
Definition: Conditions.h:266
std::map< int, LibUtilities::CommSharedPtr > m_boundaryCommunicators
Definition: Conditions.h:279
BoundaryRegionCollection m_boundaryRegions
Definition: Conditions.h:276
std::map< int, LibUtilities::CommSharedPtr > GetBoundaryCommunicators() const
Definition: Conditions.h:261
void ReadBoundaryConditions(TiXmlElement *conditions)
Definition: Conditions.cpp:318
void Read(TiXmlElement *conditions)
Read segments (and general MeshGraph) given TiXmlDocument.
Definition: Conditions.cpp:210
void AddBoundaryRegions(const int regionID, BoundaryRegionShPtr &bRegion)
Definition: Conditions.h:240
LibUtilities::SessionReaderSharedPtr m_session
Definition: Conditions.h:274
const std::string GetVariable(unsigned int indx)
Definition: Conditions.h:256
BoundaryConditionCollection m_boundaryConditions
Definition: Conditions.h:278
const BoundaryRegionCollection & GetBoundaryRegions(void) const
Definition: Conditions.h:235
std::map< int, std::string > m_boundaryLabels
Definition: Conditions.h:277
MeshGraphSharedPtr m_meshGraph
The mesh graph to use for referencing geometry info.
Definition: Conditions.h:273
void ReadBoundaryRegions(TiXmlElement *regions)
Definition: Conditions.cpp:228
const BoundaryConditionCollection & GetBoundaryConditions(void) const
Definition: Conditions.h:245
void AddBoundaryConditions(const int regionID, BoundaryConditionMapShPtr &bCond)
Definition: Conditions.h:250
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
Definition: Comm.h:55
std::map< int, CompositeSharedPtr > BoundaryRegion
Definition: Conditions.h:208
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
Definition: Conditions.h:211
std::shared_ptr< BoundaryRegion > BoundaryRegionShPtr
Definition: Conditions.h:209
std::shared_ptr< BoundaryConditions > BoundaryConditionsSharedPtr
Definition: Conditions.h:289
std::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
Definition: Conditions.h:213
std::map< std::string, BoundaryConditionShPtr > BoundaryConditionMap
Definition: Conditions.h:218
std::shared_ptr< DirichletBoundaryCondition > DirichletBCShPtr
Definition: Conditions.h:214
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
Definition: Conditions.h:220
std::shared_ptr< const BoundaryRegion > ConstBoundaryRegionShPtr
Definition: Conditions.h:210
static const Array< OneD, BoundaryConditionShPtr > NullBoundaryConditionShPtrArray
Definition: Conditions.h:223
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
Definition: MeshGraph.h:174
std::shared_ptr< NeumannBoundaryCondition > NeumannBCShPtr
Definition: Conditions.h:215
std::shared_ptr< BoundaryConditionMap > BoundaryConditionMapShPtr
Definition: Conditions.h:219
std::shared_ptr< RobinBoundaryCondition > RobinBCShPtr
Definition: Conditions.h:216
BoundaryConditionType GetBoundaryConditionType() const
Definition: Conditions.h:74
void SetBoundaryConditionType(BoundaryConditionType boundaryType)
Definition: Conditions.h:79
const std::string GetUserDefined() const
Definition: Conditions.h:89
LibUtilities::CommSharedPtr m_comm
Definition: Conditions.h:110
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
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:119
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:138
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:192
PeriodicBoundaryCondition(const unsigned int n, const std::string &userDefined=std::string("NoUserDefined"), const LibUtilities::CommSharedPtr comm=LibUtilities::CommSharedPtr())
Definition: Conditions.h:177
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:156