SPHinXsys  alpha version
eulerian_weakly_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 
39 namespace SPH
40 {
41  namespace eulerian_weakly_compressible_fluid_dynamics
42  {
43  typedef DataDelegateSimple<EulerianFluidBody, WeaklyCompressibleFluidParticles, Fluid> EulerianWeaklyCompressibleFluidDataSimple;
44  typedef DataDelegateInner<EulerianFluidBody, WeaklyCompressibleFluidParticles, Fluid> EulerianWeaklyCompressibleFluidDataInner;
45 
47  : public ParticleDynamicsSimple,
49  {
50  private:
51  UniquePtrKeeper<Gravity> gravity_ptr_keeper_;
52 
53  public:
54  explicit EulerianFlowTimeStepInitialization(SPHBody &sph_body);
57 
58  protected:
59  StdLargeVec<Real> &rho_, &mass_;
60  StdLargeVec<Vecd> &pos_, &vel_, &dmom_dt_prior_;
61  Gravity *gravity_;
62  virtual void setupDynamics(Real dt = 0.0) override;
63  virtual void Update(size_t index_i, Real dt = 0.0) override;
64  };
65 
75  {
76  public:
77  explicit FreeSurfaceIndicationInner(BaseBodyRelationInner &inner_relation, Real thereshold = 0.75);
78  virtual ~FreeSurfaceIndicationInner() {};
79 
80  protected:
81  Real thereshold_by_dimensions_;
82  StdLargeVec<Real>& Vol_;
83  StdLargeVec<int>& surface_indicator_;
84  StdLargeVec<Real> pos_div_;
85  Real smoothing_length_;
86 
87  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
88  virtual void Update(size_t index_i, Real dt = 0.0) override;
89  };
90 
97  {
98  public:
99  explicit ViscousAccelerationInner(BaseBodyRelationInner &inner_relation);
100  virtual ~ViscousAccelerationInner() {};
101  protected:
102  Real mu_;
103  Real smoothing_length_;
104  StdLargeVec<Real> &Vol_, &rho_, &p_;
105  StdLargeVec<Vecd> &vel_, &dmom_dt_prior_;
106 
107  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
108  };
109 
116  {
117  public:
118  explicit AcousticTimeStepSize(EulerianFluidBody &fluid_body);
119  virtual ~AcousticTimeStepSize() {};
120  protected:
121  StdLargeVec<Real>& rho_, &p_;
122  StdLargeVec<Vecd>& vel_;
123  Real smoothing_length_;
124  Real ReduceFunction(size_t index_i, Real dt = 0.0) override;
125  Real OutputResult(Real reduced_value) override;
126  };
127 
134  {
135  public:
136  explicit VorticityInner(BaseBodyRelationInner &inner_relation);
137  virtual ~VorticityInner() {};
138  protected:
139  StdLargeVec<Real>& Vol_;
140  StdLargeVec<Vecd>& vel_;
141  StdLargeVec<AngularVecd> vorticity_;
142  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
143  };
144 
150  {
151  public:
152  explicit BaseRelaxation(BaseBodyRelationInner &inner_relation);
153  virtual ~BaseRelaxation() {};
154  protected:
155  StdLargeVec<Real>& Vol_, &mass_, &rho_, &p_, &drho_dt_;
156  StdLargeVec<Vecd>&vel_, &mom_, &dmom_dt_, &dmom_dt_prior_;
157  };
158 
164  {
165  public:
166  explicit BasePressureRelaxation(BaseBodyRelationInner &inner_relation);
167  virtual ~BasePressureRelaxation() {};
168  protected:
169  virtual void Initialization(size_t index_i, Real dt = 0.0) override;
170  virtual void Update(size_t index_i, Real dt = 0.0) override;
171  };
172 
178  template<class RiemannSolverType>
180  {
181  public:
182  explicit BasePressureRelaxationInner(BaseBodyRelationInner &inner_relation);
183  virtual ~BasePressureRelaxationInner() {};
184  RiemannSolverType riemann_solver_;
185  protected:
186  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
187  };
193 
199  {
200  public:
201  explicit BaseDensityAndEnergyRelaxation(BaseBodyRelationInner &inner_relation);
202  virtual ~BaseDensityAndEnergyRelaxation() {};
203  protected:
204  virtual void Initialization(size_t index_i, Real dt = 0.0) override {};
205  virtual void Update(size_t index_i, Real dt = 0.0) override;
206  };
207 
212  template<class RiemannSolverType>
214  {
215  public:
218  RiemannSolverType riemann_solver_;
219  protected:
220  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
221  };
227 
234  {
235  public:
237  InteractionDynamics(*inner_relation.sph_body_), EulerianWeaklyCompressibleFluidDataInner(inner_relation),
238  rho_(particles_->rho_), p_(particles_->p_), vel_(particles_->vel_),
239  mom_(particles_->mom_), pos_(particles_->pos_), mass_(particles_->mass_), Vol_(particles_->Vol_),
240  surface_indicator_(particles_->surface_indicator_)
241  {
242  particles_->registerVariable(n_, "NormalDirection");
243  };
245  protected:
246  Real p_farfield_, rho_farfield_, gamma_, sound_speed_;
247  Vecd vel_farfield_;
248  StdLargeVec<Real>& rho_, &p_, &mass_, &Vol_;
249  StdLargeVec<Vecd>& vel_, &mom_, &pos_;
251  StdLargeVec<int>& surface_indicator_;
252 
253  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
254  };
255  }
256 }
prepare data for inner particle dynamics
Definition: base_particle_dynamics.h:216
indicate the particles near the free surface of a fluid body. Note that, SPHinXsys does not require t...
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:73
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.
Abstract base class for all pressure relaxation schemes.
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:163
compute vorticity in the fluid field
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:132
A wrapper to provide an ownership for a new derived object which previous often generated by new a ra...
Definition: ownership.h:90
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:46
Base abstract class for reduce.
Definition: particle_dynamics_algorithms.h:69
the viscosity force induced acceleration
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:95
Eulerian Fluid body uses smoothing length to particle spacing 1.3.
Definition: fluid_body.h:60
Template class for pressure relaxation scheme with the Riemann solver as template variable...
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:179
virtual void setupDynamics(Real dt=0.0) override
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.cpp:31
Computing the acoustic time step size.
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:114
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
this function is applied to non_reflective flows
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:233
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.
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
virtual void Update(size_t index_i, Real dt=0.0) override
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.cpp:64
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...
Pure abstract base class for all fluid relaxation schemes.
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:149
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:213
Definition: eulerian_weakly_compressible_fluid_dynamics_inner.h:198
The gravity force, derived class of External force.
Definition: external_force.h:55
Definition: solid_body_supplementary.cpp:9