SPHinXsys  alpha version
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 * --------------------------------------------------------------------------*/
31 #ifndef FLUID_DYNAMICS_INNER_H
32 #define FLUID_DYNAMICS_INNER_H
33 
34 #include "all_particle_dynamics.h"
35 #include "base_kernel.h"
36 #include "all_body_relations.h"
37 #include "fluid_body.h"
38 #include "fluid_particles.h"
40 #include "riemann_solver.h"
41 
42 namespace SPH
43 {
44  namespace fluid_dynamics
45  {
46  typedef DataDelegateSimple<FluidBody, FluidParticles, Fluid> FluidDataSimple;
47  typedef DataDelegateInner<FluidBody, FluidParticles, Fluid> FluidDataInner;
48 
55  {
56  public:
57  explicit FluidInitialCondition(FluidBody &fluid_body);
58  virtual ~FluidInitialCondition(){};
59 
60  protected:
61  StdLargeVec<Vecd> &pos_, &vel_;
62  };
63 
69  {
70  public:
71  explicit DensitySummationInner(BaseBodyRelationInner &inner_relation);
72  virtual ~DensitySummationInner(){};
73 
74  protected:
75  Real W0_, rho0_, inv_sigma0_;
76  StdLargeVec<Real> &Vol_, &rho_, &mass_, &rho_sum_;
77 
78  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
79  virtual void Update(size_t index_i, Real dt = 0.0) override;
80  virtual Real ReinitializedDensity(Real rho_sum, Real rho_0, Real rho_n) { return rho_sum; };
81  };
82 
88  {
89  public:
90  explicit ViscousAccelerationInner(BaseBodyRelationInner &inner_relation);
91  virtual ~ViscousAccelerationInner(){};
92 
93  protected:
94  Real mu_;
95  Real smoothing_length_;
96  StdLargeVec<Real> &Vol_, &rho_, &p_;
97  StdLargeVec<Vecd> &vel_, &acc_prior_;
98 
99  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
100  };
101 
108  {
109  public:
111  : ViscousAccelerationInner(inner_relation){};
113 
114  protected:
115  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
116  };
117 
123  {
124  public:
127 
128  protected:
129  StdLargeVec<Real> &Vol_, &rho_;
130  StdLargeVec<Vecd> &pos_;
131  StdLargeVec<int> &surface_indicator_;
132  Real p_background_;
133 
134  virtual void setupDynamics(Real dt = 0.0) override;
135  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
136  };
137 
142  class AcousticTimeStepSize : public ParticleDynamicsReduce<Real, ReduceMax>, public FluidDataSimple
143  {
144  public:
145  explicit AcousticTimeStepSize(FluidBody &fluid_body);
146  virtual ~AcousticTimeStepSize(){};
147 
148  protected:
149  StdLargeVec<Real> &rho_, &p_;
150  StdLargeVec<Vecd> &vel_;
151  Real smoothing_length_;
152  Real ReduceFunction(size_t index_i, Real dt = 0.0) override;
153  Real OutputResult(Real reduced_value) override;
154  };
155 
160  class AdvectionTimeStepSize : public ParticleDynamicsReduce<Real, ReduceMax>, public FluidDataSimple
161  {
162  public:
163  explicit AdvectionTimeStepSize(FluidBody &fluid_body, Real U_max);
164  virtual ~AdvectionTimeStepSize(){};
165 
166  protected:
167  Real smoothing_length_;
168  StdLargeVec<Vecd> &vel_;
169  Real ReduceFunction(size_t index_i, Real dt = 0.0) override;
170  Real OutputResult(Real reduced_value) override;
171  };
172 
178  {
179  public:
180  explicit AdvectionTimeStepSizeForImplicitViscosity(FluidBody &fluid_body, Real U_max);
182  };
183 
189  {
190  public:
191  explicit VorticityInner(BaseBodyRelationInner &inner_relation);
192  virtual ~VorticityInner(){};
193 
194  protected:
195  StdLargeVec<Real> &Vol_;
196  StdLargeVec<Vecd> &vel_;
197  StdLargeVec<AngularVecd> vorticity_;
198  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
199  };
200 
206  {
207  public:
208  explicit BaseRelaxation(BaseBodyRelationInner &inner_relation);
209  virtual ~BaseRelaxation(){};
210 
211  protected:
212  StdLargeVec<Real> &Vol_, &mass_, &rho_, &p_, &drho_dt_;
213  StdLargeVec<Vecd> &pos_, &vel_, &acc_, &acc_prior_;
214  };
215 
221  {
222  public:
223  explicit BasePressureRelaxation(BaseBodyRelationInner &inner_relation);
224  virtual ~BasePressureRelaxation(){};
225 
226  protected:
227  virtual void Initialization(size_t index_i, Real dt = 0.0) override;
228  virtual void Update(size_t index_i, Real dt = 0.0) override;
229  virtual Vecd computeNonConservativeAcceleration(size_t index_i);
230  };
231 
237  template <class RiemannSolverType>
239  {
240  public:
241  explicit BasePressureRelaxationInner(BaseBodyRelationInner &inner_relation);
242  virtual ~BasePressureRelaxationInner(){};
243  RiemannSolverType riemann_solver_;
244 
245  protected:
246  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
247  };
252 
258  {
259  public:
260  explicit BaseDensityRelaxation(BaseBodyRelationInner &inner_relation);
261  virtual ~BaseDensityRelaxation(){};
262 
263  protected:
264  virtual void Initialization(size_t index_i, Real dt = 0.0) override;
265  virtual void Update(size_t index_i, Real dt = 0.0) override;
266  };
267 
272  template <class RiemannSolverType>
274  {
275  public:
276  explicit BaseDensityRelaxationInner(BaseBodyRelationInner &inner_relation);
277  virtual ~BaseDensityRelaxationInner(){};
278  RiemannSolverType riemann_solver_;
279 
280  protected:
281  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
282  };
287 
294  {
295  public:
296  explicit Oldroyd_B_FluidInitialCondition(FluidBody &fluid_body)
297  : ParticleDynamicsSimple(fluid_body), FluidDataSimple(fluid_body){};
298  virtual ~Oldroyd_B_FluidInitialCondition(){};
299  };
300 
306  {
307  public:
310 
311  protected:
312  StdLargeVec<Matd> &tau_, &dtau_dt_;
313  virtual void Initialization(size_t index_i, Real dt = 0.0) override;
314  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
315  };
316 
322  {
323  public:
324  explicit DensityRelaxationInnerOldroyd_B(BaseBodyRelationInner &inner_relation);
325  virtual ~DensityRelaxationInnerOldroyd_B(){};
326 
327  protected:
328  StdLargeVec<Matd> &tau_, &dtau_dt_;
329  Real mu_p_, lambda_;
330 
331  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
332  virtual void Update(size_t index_i, Real dt = 0.0) override;
333  };
334  }
335 }
336 #endif //FLUID_DYNAMICS_INNER_H
Fluid body uses smoothing length to particle spacing 1.3 and carry out particle sorting every 100 ite...
Definition: fluid_body.h:43
virtual void Interaction(size_t index_i, Real dt=0.0) override
Definition: fluid_dynamics_inner.cpp:28
prepare data for inner particle dynamics
Definition: base_particle_dynamics.h:216
This is the derived class of base particle.
Simple particle dynamics without considering particle interaction.
Definition: particle_dynamics_algorithms.h:48
Abstract base class for all density relaxation schemes.
Definition: fluid_dynamics_inner.h:257
Set initial condition for a fluid body. This is a abstract class to be override for case specific ini...
Definition: fluid_dynamics_inner.h:54
Computing the acoustic time step size.
Definition: fluid_dynamics_inner.h:142
Pressure relaxation scheme with the mostly used Riemann solver.
Definition: fluid_dynamics_inner.h:305
virtual void Interaction(size_t index_i, Real dt=0.0) override
Definition: fluid_dynamics_inner.cpp:73
computing density by summation
Definition: fluid_dynamics_inner.h:68
Base abstract class for reduce.
Definition: particle_dynamics_algorithms.h:69
Abstract base class for all pressure relaxation schemes.
Definition: fluid_dynamics_inner.h:220
set initial condition for Oldroyd_B_Fluid dynamics This is a abstract class to be override for case s...
Definition: fluid_dynamics_inner.h:293
Density relaxation scheme with the mostly used Riemann solver.
Definition: fluid_dynamics_inner.h:321
Computing the advection time step size when viscosity is handled implicitly.
Definition: fluid_dynamics_inner.h:177
the viscosity force induced acceleration
Definition: fluid_dynamics_inner.h:87
Definition: fluid_dynamics_inner.h:273
This class includes an initialization, an interaction and a update steps.
Definition: particle_dynamics_algorithms.h:181
This is the class for particle interaction with other particles.
Definition: particle_dynamics_algorithms.h:115
Pure abstract base class for all fluid relaxation schemes.
Definition: fluid_dynamics_inner.h:205
the viscosity force induced acceleration, a formulation for conserving angular momentum, to be tested for its practical applications.
Definition: fluid_dynamics_inner.h:107
Template class for pressure relaxation scheme with the Riemann solver as template variable...
Definition: fluid_dynamics_inner.h:238
virtual void setupDynamics(Real dt=0.0) override
Definition: fluid_dynamics_inner.cpp:104
This is the class for bodies used for fluid.
This class includes an interaction and a update steps.
Definition: particle_dynamics_algorithms.h:160
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...
Describe the weakly compressible fluid which is used model incompressible fluids. Here...
transport velocity correction
Definition: fluid_dynamics_inner.h:122
compute vorticity in the fluid field
Definition: fluid_dynamics_inner.h:188
Definition: solid_body_supplementary.cpp:9
Computing the advection time step size.
Definition: fluid_dynamics_inner.h:160