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#ifndef NEKTAR_SPATIALDOMAINS_MOVEMENT_H
37#define NEKTAR_SPATIALDOMAINS_MOVEMENT_H
38
40
44
46{
47
48typedef std::map<std::pair<int, std::string>, InterfacePairShPtr>
50
52{
53public:
54 /// Default constructor
56
57 /// Constructor to read from XML file
60 MeshGraph *meshGraph);
61
62 /// Default destructor
64
65 /// Write the MOVEMENT section of the XML file
66 SPATIAL_DOMAINS_EXPORT void WriteMovement(TiXmlElement *root);
67
68 inline const InterfaceCollection &GetInterfaces() const
69 {
70 return m_interfaces;
71 }
72
73 inline const std::map<int, ZoneBaseShPtr> &GetZones() const
74 {
75 return m_zones;
76 }
77
79
80 inline const bool &GetMoveFlag() const
81 {
82 return m_moveFlag;
83 }
84
85 inline bool &GetCoordExchangeFlag()
86 {
88 }
89
91 {
92 return m_DomainBox;
93 }
94
96 {
97 return m_DomainLength;
98 }
99
100 inline const bool &GetMovedFlag() const
101 {
102 return m_moved;
103 }
104
105 inline const bool &GetTranslateFlag() const
106 {
107 return m_translate;
108 }
109
110 inline const bool &GetImplicitALESolverFlag() const
111 {
112 return m_ImplicitALESolver;
113 }
114
115 void SetImplicitALEFlag(bool &ImplicitALE)
116 {
117 m_ImplicitALESolver = ImplicitALE;
118 }
119
120 // Methods for manipulating the MOVEMENT data programatically
121 /// Add a zone object to this Movement data.
123
124 /// Add pair of interfaces to this data
126 InterfaceShPtr left,
127 InterfaceShPtr right);
128
129protected:
131 std::map<int, ZoneBaseShPtr> m_zones;
132 bool m_moveFlag = false; // Flags presence of moving zones
133 bool m_translate = false; // Flags for translate
134 bool m_moved = false; // Flags to check if domain moved
137 true; // Flags if missing coordinates need to be calculated
140
141private:
142 /// Read zones given TiXmlDocument
143 void ReadZones(TiXmlElement *zonesTag, MeshGraph *meshGraph,
145 /// Read interfaces given TiXmlDocument
146 void ReadInterfaces(TiXmlElement *interfacesTag, MeshGraph *meshGraph);
147 /// Calculate length of the domain
148 void DomainBox();
149};
150
151typedef std::shared_ptr<Movement> MovementSharedPtr;
152
153} // namespace Nektar::SpatialDomains
154
155#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:80
const std::map< int, ZoneBaseShPtr > & GetZones() const
Definition: Movement.h:73
void DomainBox()
Calculate length of the domain.
const bool & GetMovedFlag() const
Definition: Movement.h:100
const Array< OneD, NekDouble > & GetDomainLength() const
Definition: Movement.h:95
const InterfaceCollection & GetInterfaces() const
Definition: Movement.h:68
const bool & GetImplicitALESolverFlag() const
Definition: Movement.h:110
void PerformMovement(NekDouble timeStep)
Array< OneD, NekDouble > m_DomainLength
Definition: Movement.h:139
void ReadZones(TiXmlElement *zonesTag, MeshGraph *meshGraph, const LibUtilities::SessionReaderSharedPtr &pSession)
Read zones given TiXmlDocument.
void SetImplicitALEFlag(bool &ImplicitALE)
Definition: Movement.h:115
void AddInterface(std::string name, InterfaceShPtr left, InterfaceShPtr right)
Add pair of interfaces to this data.
const bool & GetTranslateFlag() const
Definition: Movement.h:105
void ReadInterfaces(TiXmlElement *interfacesTag, MeshGraph *meshGraph)
Read interfaces given TiXmlDocument.
~Movement()=default
Default destructor.
Array< OneD, NekDouble > m_DomainBox
Definition: Movement.h:138
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:130
const Array< OneD, NekDouble > & GetDomainBox() const
Definition: Movement.h:90
std::map< int, ZoneBaseShPtr > m_zones
Definition: Movement.h:131
Movement()=default
Default constructor.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< ZoneBase > ZoneBaseShPtr
Definition: Zones.h:170
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:49
double NekDouble