Nektar++
Movement.h
Go to the documentation of this file.
1////////////////////////////////////////////////////////////////////////////////
2//
3// File: Movement.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:
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: This file contains the base class for implementing
33// non-conformal geometry using the Movement object
34//
35////////////////////////////////////////////////////////////////////////////////
36
37#ifndef NEKTAR_SPATIALDOMAINS_MOVEMENT_H
38#define NEKTAR_SPATIALDOMAINS_MOVEMENT_H
39
41
45
47{
48
49typedef std::map<std::pair<int, std::string>, InterfacePairShPtr>
51
53{
54public:
55 /// Default constructor
57
58 /// Constructor to read from XML file
61 MeshGraph *meshGraph);
62
63 /// Default destructor
65
66 /// Write the MOVEMENT section of the XML file
67 SPATIAL_DOMAINS_EXPORT void WriteMovement(TiXmlElement *root);
68
69 inline const InterfaceCollection &GetInterfaces() const
70 {
71 return m_interfaces;
72 }
73
74 inline const std::map<int, ZoneBaseShPtr> &GetZones() const
75 {
76 return m_zones;
77 }
78
80
81 inline const bool &GetMoveFlag() const
82 {
83 return m_moveFlag;
84 }
85
86 inline bool &GetCoordExchangeFlag()
87 {
89 }
90
92 {
93 return m_DomainBox;
94 }
95
97 {
98 return m_DomainLength;
99 }
100
101 inline const bool &GetMovedFlag() const
102 {
103 return m_moved;
104 }
105
106 inline const bool &GetTranslateFlag() const
107 {
108 return m_translate;
109 }
110
111 inline const bool &GetImplicitALESolverFlag() const
112 {
113 return m_ImplicitALESolver;
114 }
115
116 void SetImplicitALEFlag(bool &ImplicitALE)
117 {
118 m_ImplicitALESolver = ImplicitALE;
119 }
120
121 // Methods for manipulating the MOVEMENT data programatically
122 /// Add a zone object to this Movement data.
124
125 /// Add pair of interfaces to this data
127 InterfaceShPtr left,
128 InterfaceShPtr right);
129
130protected:
132 std::map<int, ZoneBaseShPtr> m_zones;
133 bool m_moveFlag = false; // Flags presence of moving zones
134 bool m_translate = false; // Flags for translate
135 bool m_moved = false; // Flags to check if domain moved
138 true; // Flags if missing coordinates need to be calculated
141
142private:
143 /// Read zones given TiXmlDocument
144 void ReadZones(TiXmlElement *zonesTag, MeshGraph *meshGraph,
146 /// Read interfaces given TiXmlDocument
147 void ReadInterfaces(TiXmlElement *interfacesTag, MeshGraph *meshGraph);
148 /// Calculate length of the domain
149 void DomainBox();
150};
151
152typedef std::shared_ptr<Movement> MovementSharedPtr;
153
154} // namespace Nektar::SpatialDomains
155
156#endif // NEKTAR_SPATIALDOMAINS_MOVEMENT_H
#define SPATIAL_DOMAINS_EXPORT
Base class for a spectral/hp element mesh.
Definition: MeshGraph.h:181
const bool & GetMoveFlag() const
Definition: Movement.h:81
const std::map< int, ZoneBaseShPtr > & GetZones() const
Definition: Movement.h:74
void DomainBox()
Calculate length of the domain.
const bool & GetMovedFlag() const
Definition: Movement.h:101
const Array< OneD, NekDouble > & GetDomainLength() const
Definition: Movement.h:96
const InterfaceCollection & GetInterfaces() const
Definition: Movement.h:69
const bool & GetImplicitALESolverFlag() const
Definition: Movement.h:111
void PerformMovement(NekDouble timeStep)
Array< OneD, NekDouble > m_DomainLength
Definition: Movement.h:140
void ReadZones(TiXmlElement *zonesTag, MeshGraph *meshGraph, const LibUtilities::SessionReaderSharedPtr &pSession)
Read zones given TiXmlDocument.
void SetImplicitALEFlag(bool &ImplicitALE)
Definition: Movement.h:116
void AddInterface(std::string name, InterfaceShPtr left, InterfaceShPtr right)
Add pair of interfaces to this data.
const bool & GetTranslateFlag() const
Definition: Movement.h:106
void ReadInterfaces(TiXmlElement *interfacesTag, MeshGraph *meshGraph)
Read interfaces given TiXmlDocument.
~Movement()=default
Default destructor.
Array< OneD, NekDouble > m_DomainBox
Definition: Movement.h:139
void AddZone(ZoneBaseShPtr zone)
Add a zone object to this Movement data.
void WriteMovement(TiXmlElement *root)
Write the MOVEMENT section of the XML file.
InterfaceCollection m_interfaces
Definition: Movement.h:131
const Array< OneD, NekDouble > & GetDomainBox() const
Definition: Movement.h:91
std::map< int, ZoneBaseShPtr > m_zones
Definition: Movement.h:132
Movement()=default
Default constructor.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< ZoneBase > ZoneBaseShPtr
Definition: Zones.h:171
std::shared_ptr< InterfacePair > InterfacePairShPtr
std::shared_ptr< Interface > InterfaceShPtr
std::shared_ptr< Movement > MovementSharedPtr
Definition: MeshGraph.h:177
std::map< std::pair< int, std::string >, InterfacePairShPtr > InterfaceCollection
Definition: Movement.h:50
double NekDouble