SPHinXsys  alpha version
eulerian_compressible_fluid_dynamics_inner.h
Go to the documentation of this file.
1 /* -------------------------------------------------------------------------*
2 * SPHinXsys *
3 * --------------------------------------------------------------------------*
4 * SPHinXsys (pronunciation: s'finksis) is an acronym from Smoothed Particle *
5 * Hydrodynamics for industrial compleX systems. It provides C++ APIs for *
6 * physical accurate simulation and aims to model coupled industrial dynamic *
7 * systems including fluid, solid, multi-body dynamics and beyond with SPH *
8 * (smoothed particle hydrodynamics), a meshless computational method using *
9 * particle discretization. *
10 * *
11 * SPHinXsys is partially funded by German Research Foundation *
12 * (Deutsche Forschungsgemeinschaft) DFG HU1527/6-1, HU1527/10-1 *
13 * and HU1527/12-1. *
14 * *
15 * Portions copyright (c) 2017-2020 Technical University of Munich and *
16 * the authors' affiliations. *
17 * *
18 * Licensed under the Apache License, Version 2.0 (the "License"); you may *
19 * not use this file except in compliance with the License. You may obtain a *
20 * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
21 * *
22 * --------------------------------------------------------------------------*/
30 #pragma once
31 
32 #include "fluid_dynamics_inner.h"
33 
34 #include "all_particle_dynamics.h"
35 #include "base_kernel.h"
36 #include "external_force.h"
37 #include "riemann_solver.h"
38 #include "compressible_fluid.h"
39 
40 namespace SPH
41 {
42  namespace eulerian_compressible_fluid_dynamics
43  {
44  typedef DataDelegateSimple<EulerianFluidBody, CompressibleFluidParticles, CompressibleFluid> CompressibleFluidDataSimple;
45  typedef DataDelegateInner<EulerianFluidBody, CompressibleFluidParticles, CompressibleFluid> CompressibleFluidDataInner;
46 
48  : public ParticleDynamicsSimple,
50  {
51  private:
52  UniquePtrKeeper<Gravity> gravity_ptr_keeper_;
53 
54  public:
58 
59  protected:
60  StdLargeVec<Real> &rho_, &dE_dt_prior_;
61  StdLargeVec<Vecd> &pos_, &vel_, &dmom_dt_prior_;
62  Gravity *gravity_;
63  virtual void setupDynamics(Real dt = 0.0) override;
64  virtual void Update(size_t index_i, Real dt = 0.0) override;
65  };
66 
73  : public ParticleDynamicsSimple,
75  {
76  public:
79 
80  protected:
81  StdLargeVec<Vecd> &pos_, &vel_, &mom_;
82  StdLargeVec<Real> &rho_, &E_, &p_;
83  Real gamma_;
84  };
85 
91  : public InteractionDynamics,
93  {
94  public:
95  explicit ViscousAccelerationInner(BaseBodyRelationInner &inner_relation);
96  virtual ~ViscousAccelerationInner(){};
97 
98  protected:
99  Real mu_;
100  Real smoothing_length_;
101  StdLargeVec<Real> &Vol_, &rho_, &p_, &mass_, &dE_dt_prior_;
102  StdLargeVec<Vecd> &vel_, &dmom_dt_prior_;
103 
104  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
105  };
106 
112  {
113  public:
114  explicit AcousticTimeStepSize(EulerianFluidBody &body);
115  virtual ~AcousticTimeStepSize(){};
116 
117  protected:
118  StdLargeVec<Real> &rho_, &p_;
119  StdLargeVec<Vecd> &vel_;
120  Real smoothing_length_;
121  Real ReduceFunction(size_t index_i, Real dt = 0.0) override;
122  Real OutputResult(Real reduced_value) override;
123  };
124 
130  {
131  public:
132  explicit BaseRelaxation(BaseBodyRelationInner &inner_relation);
133  virtual ~BaseRelaxation(){};
134 
135  protected:
136  StdLargeVec<Real> &Vol_, &rho_, &p_, &drho_dt_, &E_, &dE_dt_, &dE_dt_prior_;
137  StdLargeVec<Vecd> &vel_, &mom_, &dmom_dt_, &dmom_dt_prior_;
138  };
139 
145  {
146  public:
147  explicit BasePressureRelaxation(BaseBodyRelationInner &inner_relation);
148  virtual ~BasePressureRelaxation(){};
149 
150  protected:
151  virtual void Initialization(size_t index_i, Real dt = 0.0) override;
152  virtual void Update(size_t index_i, Real dt = 0.0) override;
153  };
154 
160  template <class RiemannSolverType>
162  {
163  public:
164  explicit BasePressureRelaxationInner(BaseBodyRelationInner &inner_relation);
165  virtual ~BasePressureRelaxationInner(){};
166  RiemannSolverType riemann_solver_;
167 
168  protected:
169  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
170  };
173 
179  {
180  public:
181  explicit BaseDensityAndEnergyRelaxation(BaseBodyRelationInner &inner_relation);
182  virtual ~BaseDensityAndEnergyRelaxation(){};
183 
184  protected:
185  virtual void Initialization(size_t index_i, Real dt = 0.0) override{};
186  virtual void Update(size_t index_i, Real dt = 0.0) override;
187  };
188 
193  template <class RiemannSolverType>
195  {
196  public:
199  RiemannSolverType riemann_solver_;
200 
201  protected:
202  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
203  };
206  }
207 }
prepare data for inner particle dynamics
Definition: base_particle_dynamics.h:216
Simple particle dynamics without considering particle interaction.
Definition: particle_dynamics_algorithms.h:48
Here, we define the algorithm classes for fluid dynamics within the body.
virtual void setupDynamics(Real dt=0.0) override
Definition: eulerian_compressible_fluid_dynamics_inner.cpp:30
Pure abstract base class for all fluid relaxation schemes.
Definition: eulerian_compressible_fluid_dynamics_inner.h:129
A wrapper to provide an ownership for a new derived object which previous often generated by new a ra...
Definition: ownership.h:90
Base abstract class for reduce.
Definition: particle_dynamics_algorithms.h:69
Eulerian Fluid body uses smoothing length to particle spacing 1.3.
Definition: fluid_body.h:60
Computing the acoustic time step size.
Definition: eulerian_compressible_fluid_dynamics_inner.h:111
Set initial condition for a fluid body. This is a abstract class to be override for case specific ini...
Definition: eulerian_compressible_fluid_dynamics_inner.h:72
This class includes an initialization, an interaction and a update steps.
Definition: particle_dynamics_algorithms.h:181
Abstract base class for all pressure relaxation schemes.
Definition: eulerian_compressible_fluid_dynamics_inner.h:144
Template density relaxation scheme in HLLC Riemann solver with and without limiter.
Definition: eulerian_compressible_fluid_dynamics_inner.h:194
the viscosity force induced acceleration
Definition: eulerian_compressible_fluid_dynamics_inner.h:90
This is the class for particle interaction with other particles.
Definition: particle_dynamics_algorithms.h:115
SPHBody is a base body with basic data and functions. Its derived class can be a real fluid body...
Definition: base_body.h:61
Here, we define the base external force class.
Describe the compressible fluid which is used model compressible fluids. Here, we have ideal gas equa...
The abstract relation within a SPH body.
Definition: base_body_relation.h:117
prepare data for simple particle dynamics.
Definition: base_particle_dynamics.h:185
This is the base classes of kernel functions. Implementation will be implemented in derived classes...
Definition: eulerian_compressible_fluid_dynamics_inner.h:47
Abstract base class for all density relaxation schemes.
Definition: eulerian_compressible_fluid_dynamics_inner.h:178
The gravity force, derived class of External force.
Definition: external_force.h:55
Definition: solid_body_supplementary.cpp:9
Template class for pressure relaxation scheme with the Riemann solver as template variable...
Definition: eulerian_compressible_fluid_dynamics_inner.h:161