Nektar++
NonlinearPeregrine.h
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // File: NonlinearPeregrine.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: Nonlinear Boussinesq equations of Peregrine in conservative
32 // variables
33 //
34 ///////////////////////////////////////////////////////////////////////////////
35 
36 #ifndef NEKTAR_SOLVERS_SHALLOWWATERSOLVER_EQUATIONSYSTEMS_NONLINEARPEREGRINE_H
37 #define NEKTAR_SOLVERS_SHALLOWWATERSOLVER_EQUATIONSYSTEMS_NONLINEARPEREGRINE_H
38 
40 
41 namespace Nektar
42 {
43 
45 {
46  eGeneral, ///< No problem defined - Default Inital data
47  eSolitaryWave, ///< First order Laitone solitary wave
48  SIZE_ProblemType ///< Length of enum list
49 };
50 
51 const char *const ProblemTypeMap[] = {"General", "SolitaryWave"};
52 
53 /**
54  *
55  *
56  **/
57 
59 {
60 public:
61  friend class MemoryManager<NonlinearPeregrine>;
62 
63  /// Creates an instance of this class
67  {
70  pGraph);
71  p->InitObject();
72  return p;
73  }
74  /// Name of class
75  static std::string className;
76 
77  virtual ~NonlinearPeregrine();
78 
79  ///< problem type selector
81 
82 protected:
84 
87 
88  virtual void v_InitObject(bool DeclareFields = true) override;
89 
90  /// Still water depth traces
93 
94  void DoOdeRhs(const Array<OneD, const Array<OneD, NekDouble>> &inarray,
95  Array<OneD, Array<OneD, NekDouble>> &outarray,
96  const NekDouble time);
97 
98  void DoOdeProjection(
99  const Array<OneD, const Array<OneD, NekDouble>> &inarray,
100  Array<OneD, Array<OneD, NekDouble>> &outarray, const NekDouble time);
101 
102  void GetFluxVector(
103  const Array<OneD, const Array<OneD, NekDouble>> &physfield,
105 
106  virtual void v_GenerateSummary(SolverUtils::SummaryList &s) override;
107 
108  virtual void v_PrimitiveToConservative() override;
109 
110  virtual void v_ConservativeToPrimitive() override;
111 
112  virtual void v_SetInitialConditions(NekDouble initialtime = 0.0,
113  bool dumpInitialConditions = true,
114  const int domain = 0) override;
115 
117  {
118  return m_dFwd;
119  }
121  {
122  return m_dBwd;
123  }
124 
125 private:
127 
129  Array<OneD, Array<OneD, NekDouble>> &numfluxX);
130 
132  Array<OneD, Array<OneD, NekDouble>> &numfluxX,
133  Array<OneD, Array<OneD, NekDouble>> &numfluxY);
134 
136  NekDouble x_offset);
137 
139  NekDouble time);
140 
141  void WallBoundary2D(int bcRegion, int cnt,
143  Array<OneD, Array<OneD, NekDouble>> &physarray);
144 
145  void WallBoundary(int bcRegion, int cnt,
147  Array<OneD, Array<OneD, NekDouble>> &physarray);
148 
149  void AddCoriolis(const Array<OneD, const Array<OneD, NekDouble>> &physarray,
150  Array<OneD, Array<OneD, NekDouble>> &outarray);
151 
152  void AddVariableDepth(
153  const Array<OneD, const Array<OneD, NekDouble>> &physarray,
154  Array<OneD, Array<OneD, NekDouble>> &outarray);
155 
157  const Array<OneD, const Array<OneD, NekDouble>> &physin,
158  Array<OneD, Array<OneD, NekDouble>> &physout);
159 
161  const Array<OneD, const Array<OneD, NekDouble>> &physin,
162  Array<OneD, Array<OneD, NekDouble>> &physout);
163 
164  void GetVelocityVector(const Array<OneD, Array<OneD, NekDouble>> &physfield,
165  Array<OneD, Array<OneD, NekDouble>> &velocity);
166 
167  // Dispersive parts
168  void WCESolve(Array<OneD, NekDouble> &fce, NekDouble lambda);
169 
171  const Array<OneD, const Array<OneD, NekDouble>> &inarray,
172  Array<OneD, NekDouble> &numfluxX, Array<OneD, NekDouble> &numfluxY);
173 
175  Array<OneD, Array<OneD, NekDouble>> &inarray, NekDouble time);
176 
177  void WallBoundaryForcing(int bcRegion, int cnt,
178  Array<OneD, Array<OneD, NekDouble>> &inarray);
179 
181  NekDouble time);
182 
183  void WallBoundaryContVariables(int bcRegion, int cnt,
184  Array<OneD, NekDouble> &inarray);
185 
188  Array<OneD, NekDouble> &outY);
189 };
190 
191 } // namespace Nektar
192 
193 #endif
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
virtual void v_SetInitialConditions(NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0) override
Set the initial conditions.
void NumericalFlux2D(Array< OneD, Array< OneD, NekDouble >> &physfield, Array< OneD, Array< OneD, NekDouble >> &numfluxX, Array< OneD, Array< OneD, NekDouble >> &numfluxY)
void SetBoundaryConditions(Array< OneD, Array< OneD, NekDouble >> &physarray, NekDouble time)
virtual void v_PrimitiveToConservative() override
static SolverUtils::EquationSystemSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
Creates an instance of this class.
const Array< OneD, NekDouble > & GetDepthBwd()
void AddVariableDepth(const Array< OneD, const Array< OneD, NekDouble >> &physarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
virtual void v_ConservativeToPrimitive() override
Array< OneD, NekDouble > m_dFwd
Still water depth traces.
Array< OneD, NekDouble > m_dBwd
void DoOdeProjection(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
void WallBoundary(int bcRegion, int cnt, Array< OneD, Array< OneD, NekDouble >> &Fwd, Array< OneD, Array< OneD, NekDouble >> &physarray)
Wall boundary condition.
virtual void v_GenerateSummary(SolverUtils::SummaryList &s) override
Print a summary of time stepping parameters.
void LaitoneSolitaryWave(NekDouble amp, NekDouble d, NekDouble time, NekDouble x_offset)
void DoOdeRhs(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
static std::string className
Name of class.
const Array< OneD, NekDouble > & GetDepthFwd()
void SetBoundaryConditionsContVariables(Array< OneD, NekDouble > &inarray, NekDouble time)
void GetVelocityVector(const Array< OneD, Array< OneD, NekDouble >> &physfield, Array< OneD, Array< OneD, NekDouble >> &velocity)
Compute the velocity field given the momentum .
void AddCoriolis(const Array< OneD, const Array< OneD, NekDouble >> &physarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
void WallBoundaryForcing(int bcRegion, int cnt, Array< OneD, Array< OneD, NekDouble >> &inarray)
void WallBoundaryContVariables(int bcRegion, int cnt, Array< OneD, NekDouble > &inarray)
void NumericalFluxConsVariables(Array< OneD, NekDouble > &physfield, Array< OneD, NekDouble > &outX, Array< OneD, NekDouble > &outY)
void GetFluxVector(const Array< OneD, const Array< OneD, NekDouble >> &physfield, Array< OneD, Array< OneD, Array< OneD, NekDouble >>> &flux)
StdRegions::ConstFactorMap m_factors
virtual void v_InitObject(bool DeclareFields=true) override
Init object for UnsteadySystem class.
void SetBoundaryConditionsForcing(Array< OneD, Array< OneD, NekDouble >> &inarray, NekDouble time)
void WallBoundary2D(int bcRegion, int cnt, Array< OneD, Array< OneD, NekDouble >> &Fwd, Array< OneD, Array< OneD, NekDouble >> &physarray)
NonlinearPeregrine(const LibUtilities::SessionReaderSharedPtr &pSession, const SpatialDomains::MeshGraphSharedPtr &pGraph)
virtual ~NonlinearPeregrine()
problem type selector
void NumericalFluxForcing(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, NekDouble > &numfluxX, Array< OneD, NekDouble > &numfluxY)
void WCESolve(Array< OneD, NekDouble > &fce, NekDouble lambda)
void NumericalFlux1D(Array< OneD, Array< OneD, NekDouble >> &physfield, Array< OneD, Array< OneD, NekDouble >> &numfluxX)
Base class for unsteady solvers.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::vector< std::pair< std::string, std::string > > SummaryList
Definition: Misc.h:48
std::shared_ptr< EquationSystem > EquationSystemSharedPtr
A shared pointer to an EquationSystem object.
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
Definition: MeshGraph.h:172
std::map< ConstFactorType, NekDouble > ConstFactorMap
Definition: StdRegions.hpp:399
The above copyright notice and this permission notice shall be included.
Definition: CoupledSolver.h:2
const char *const ProblemTypeMap[]
@ eGeneral
No problem defined - Default Inital data.
@ SIZE_ProblemType
Length of enum list.
@ eSolitaryWave
First order Laitone solitary wave.
double NekDouble