SPHinXsys  alpha version
fluid_dynamics_multi_phase.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 #ifndef FLUID_DYNAMICS_MULTI_PHASE_H
31 #define FLUID_DYNAMICS_MULTI_PHASE_H
32 
33 #include "fluid_dynamics_complex.h"
35 
36 namespace SPH
37 {
38  namespace fluid_dynamics
39  {
40  typedef DataDelegateContact<FluidBody, FluidParticles, Fluid,
41  FluidBody, FluidParticles, Fluid, DataDelegateEmptyBase> MultiPhaseContactData;
42  typedef DataDelegateContact<FluidBody, FluidParticles, Fluid, FluidBody, FluidParticles, Fluid> MultiPhaseData;
48  {
49  public:
51  BaseBodyRelationContact &contact_relation);
52  explicit ViscousAccelerationMultiPhase(ComplexBodyRelation &complex_relation);
53  virtual ~ViscousAccelerationMultiPhase() {};
54  protected:
55  StdVec<StdLargeVec<Real>*> contact_Vol_;
56  StdVec<StdLargeVec<Vecd>*> contact_vel_n_;
57 
58  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
59  };
62 
67  template<class RelaxationInnerType>
69  {
70  public:
72  BaseBodyRelationContact &contact_relation);
73  virtual ~RelaxationMultiPhase() {};
74  protected:
75  StdVec<StdLargeVec<Real>*> contact_Vol_, contact_p_, contact_rho_n_;
76  StdVec<StdLargeVec<Vecd>*> contact_vel_n_;
77  };
78 
83  template<class PressureRelaxationInnerType>
84  class BasePressureRelaxationMultiPhase : public RelaxationMultiPhase<PressureRelaxationInnerType>
85  {
86  public:
88  BaseBodyRelationContact &contact_relation);
89  explicit BasePressureRelaxationMultiPhase(ComplexBodyRelation &complex_relation);
91  protected:
92  using CurrentRiemannSolver = decltype(PressureRelaxationInnerType::riemann_solver_);
93  StdVec<CurrentRiemannSolver> riemann_solvers_;
94 
95  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
96  virtual Vecd computeNonConservativeAcceleration(size_t index_i) override;
97  };
100 
107 
108 
113  template<class DensityRelaxationInnerType>
114  class BaseDensityRelaxationMultiPhase : public RelaxationMultiPhase<DensityRelaxationInnerType>
115  {
116  public:
118  BaseBodyRelationContact &contact_relation);
119  explicit BaseDensityRelaxationMultiPhase(ComplexBodyRelation &complex_relation);
120  virtual ~BaseDensityRelaxationMultiPhase() {};
121  protected:
122  using CurrentRiemannSolver = decltype(DensityRelaxationInnerType::riemann_solver_);
123  StdVec<CurrentRiemannSolver> riemann_solvers_;
124 
125  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
126  };
131 
137  {
138  public:
139  explicit MultiPhaseColorFunctionGradient(BaseBodyRelationContact &contact_relation);
140  virtual ~MultiPhaseColorFunctionGradient() {};
141  protected:
142  Real rho0_;
143  StdVec<Real> contact_rho0_;
144  StdLargeVec<Real>& Vol_, & pos_div_;
145  StdLargeVec<int>& surface_indicator_;
146  StdLargeVec<Vecd> color_grad_, surface_norm_;
147  StdVec<StdLargeVec<Real>*> contact_Vol_;
148 
149  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
150  };
151  }
152 }
153 #endif //FLUID_DYNAMICS_MULTI_PHASE_H
The base relation between a SPH body and its contact SPH bodies.
Definition: base_body_relation.h:136
Definition: fluid_dynamics_complex.h:195
template class for multiphase pressure relaxation scheme
Definition: fluid_dynamics_multi_phase.h:84
the viscosity force induced acceleration
Definition: fluid_dynamics_inner.h:87
prepare data for contact particle dynamics
Definition: base_particle_dynamics.h:240
Definition: fluid_dynamics_complex.h:114
Definition: fluid_dynamics_complex.h:241
indicate the particles near the interface of a fluid-fluid interaction and computing norm ...
Definition: fluid_dynamics_multi_phase.h:136
The relation combined an inner and a contact body relation. The interaction is in a inner-boundary-co...
Definition: complex_body_relation.h:42
This is the class for particle interaction with other particles.
Definition: particle_dynamics_algorithms.h:115
virtual void Interaction(size_t index_i, Real dt=0.0) override
Definition: fluid_dynamics_multi_phase.cpp:85
The abstract relation within a SPH body.
Definition: base_body_relation.h:117
Here, we define the algorithm classes for complex fluid dynamics, which is involving with either soli...
Definition: fluid_dynamics_multi_phase.h:68
the viscosity force induced acceleration
Definition: fluid_dynamics_multi_phase.h:47
Definition: fluid_dynamics_complex.h:209
template class pressure relaxation scheme with wall boundary
Definition: fluid_dynamics_multi_phase.h:114
Definition: solid_body_supplementary.cpp:9