SPHinXsys  alpha version
particle_dynamics_dissipation.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  * --------------------------------------------------------------------------*/
29 #ifndef PARTICLE_DYNAMICS_DISSIPATION_H
30 #define PARTICLE_DYNAMICS_DISSIPATION_H
31 
32 #include "all_particle_dynamics.h"
33 
34 namespace SPH
35 {
36  typedef DataDelegateInner<SPHBody, BaseParticles, BaseMaterial> DissipationDataInner;
37  typedef DataDelegateContact<SPHBody, BaseParticles, BaseMaterial,
38  SPHBody, BaseParticles, BaseMaterial, DataDelegateEmptyBase>
39  DissipationDataContact;
40  typedef DataDelegateContact<SPHBody, BaseParticles, BaseMaterial,
41  SolidBody, SolidParticles, Solid, DataDelegateEmptyBase>
42  DissipationDataWithWall;
43 
44  template <typename VariableType>
46  {
47  VariableType error_;
48  Real a_, c_;
49  ErrorAndParameters(Real zero = 0.0) : error_(zero), a_(zero), c_(zero){};
50  };
51 
60  template <typename VariableType>
62  {
63  protected:
64  public:
65  DampingBySplittingInner(BaseBodyRelationInner &inner_relation, const std::string &variable_name, Real eta);
66  virtual ~DampingBySplittingInner(){};
67  void resetDampingCoefficient(Real reset_ratio) { eta_ *= reset_ratio; };
68 
69  protected:
70  Real eta_;
71  StdLargeVec<Real> &Vol_, &mass_;
72  StdLargeVec<VariableType> &variable_;
73 
74  virtual ErrorAndParameters<VariableType> computeErrorAndParameters(size_t index_i, Real dt = 0.0);
75  virtual void updateStates(size_t index_i, Real dt, const ErrorAndParameters<VariableType> &error_and_parameters);
76  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
77  };
78 
79  template <typename VariableType>
81  {
82  public:
83  DampingBySplittingComplex(ComplexBodyRelation &complex_relation, const std::string &variable_name, Real eta);
84  virtual ~DampingBySplittingComplex(){};
85 
86  protected:
87  virtual ErrorAndParameters<VariableType> computeErrorAndParameters(size_t index_i, Real dt = 0.0) override;
88  virtual void updateStates(size_t index_i, Real dt, const ErrorAndParameters<VariableType> &error_and_parameters) override;
89 
90  private:
91  StdVec<StdLargeVec<Real> *> contact_Vol_, contact_mass_;
92  StdVec<StdLargeVec<VariableType> *> contact_variable_;
93  };
94 
95  template <typename VariableType,
96  template <typename BaseVariableType>
99  {
100  public:
101  DampingBySplittingWithWall(ComplexBodyRelation &complex_wall_relation, const std::string &variable_name, Real eta);
102  virtual ~DampingBySplittingWithWall(){};
103 
104  protected:
105  virtual ErrorAndParameters<VariableType> computeErrorAndParameters(size_t index_i, Real dt = 0.0) override;
106 
107  private:
108  StdVec<StdLargeVec<Real> *> wall_Vol_;
109  StdVec<StdLargeVec<VariableType> *> wall_variable_;
110  };
111 
120  template <typename VariableType>
122  {
123  public:
124  DampingPairwiseInner(BaseBodyRelationInner &inner_relation, const std::string &variable_name, Real eta);
125  virtual ~DampingPairwiseInner(){};
126  void resetDampingCoefficient(Real reset_ratio) { eta_ *= reset_ratio; };
127 
128  protected:
129  StdLargeVec<Real> &Vol_, &mass_;
130  StdLargeVec<VariableType> &variable_;
131  Real eta_;
133  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
134  };
135 
136  template <typename VariableType>
138  {
139  public:
141  BaseBodyRelationContact &contact_relation, const std::string &variable_name, Real eta);
142  DampingPairwiseComplex(ComplexBodyRelation &complex_relation, const std::string &variable_name, Real eta);
143  virtual ~DampingPairwiseComplex(){};
144 
145  protected:
146  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
147 
148  private:
149  StdVec<StdLargeVec<Real> *> contact_Vol_, contact_mass_;
150  StdVec<StdLargeVec<VariableType> *> contact_variable_;
151  };
152 
158  template <typename VariableType,
159  template <typename BaseVariableType> class BaseDampingPairwiseType>
160  class DampingPairwiseWithWall : public BaseDampingPairwiseType<VariableType>,
162  {
163  public:
165  BaseBodyRelationContact &contact_relation, const std::string &variable_name, Real eta);
166  DampingPairwiseWithWall(ComplexBodyRelation &complex_wall_relation, const std::string &variable_name, Real eta);
167  virtual ~DampingPairwiseWithWall(){};
168 
169  protected:
170  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
171 
172  private:
173  StdVec<StdLargeVec<Real> *> wall_Vol_;
174  StdVec<StdLargeVec<VariableType> *> wall_variable_;
175  };
176 
182  template <typename VariableType>
184  public DataDelegateContact<SPHBody, BaseParticles, BaseMaterial,
185  SolidBody, SolidParticles, Solid>
186  {
187  public:
188  DampingPairwiseFromWall(BaseBodyRelationContact &contact_relation, const std::string &variable_name, Real eta);
189  virtual ~DampingPairwiseFromWall(){};
190 
191  protected:
192  virtual void Interaction(size_t index_i, Real dt = 0.0) override;
193 
194  private:
195  Real eta_;
196  StdLargeVec<Real> &Vol_, &mass_;
197  StdLargeVec<VariableType> &variable_;
198  StdVec<StdLargeVec<Real> *> wall_Vol_;
199  StdVec<StdLargeVec<VariableType> *> wall_variable_;
200  };
201 
209  template <class DampingAlgorithmType>
211  {
212  protected:
213  Real random_ratio_;
214  bool RandomChoice();
215 
216  public:
217  template <typename... ConstructorArgs>
218  DampingWithRandomChoice(Real random_ratio, ConstructorArgs &&...args);
219  virtual ~DampingWithRandomChoice(){};
220 
221  virtual void exec(Real dt = 0.0) override;
222  virtual void parallel_exec(Real dt = 0.0) override;
223  };
224 }
225 #endif // PARTICLE_DYNAMICS_DISSIPATION_H
prepare data for inner particle dynamics
Definition: base_particle_dynamics.h:216
The base relation between a SPH body and its contact SPH bodies.
Definition: base_body_relation.h:136
virtual void Interaction(size_t index_i, Real dt=0.0) override
Definition: particle_dynamics_dissipation.hpp:348
Real eta_
Definition: particle_dynamics_dissipation.h:67
Definition: particle_dynamics_dissipation.h:98
Definition: particle_dynamics_dissipation.h:61
virtual void updateStates(size_t index_i, Real dt, const ErrorAndParameters< VariableType > &error_and_parameters) override
Definition: particle_dynamics_dissipation.hpp:130
Definition: particle_dynamics_dissipation.h:45
Real eta_
Definition: particle_dynamics_dissipation.h:131
virtual ErrorAndParameters< VariableType > computeErrorAndParameters(size_t index_i, Real dt=0.0) override
Definition: particle_dynamics_dissipation.hpp:98
This is for the splitting algorithm.
Definition: particle_dynamics_algorithms.h:202
Damping to wall by which the wall velocity is not updated and the mass of wall particle is not consid...
Definition: particle_dynamics_dissipation.h:183
prepare data for contact particle dynamics
Definition: base_particle_dynamics.h:240
Definition: particle_dynamics_dissipation.h:137
The relation combined an inner and a contact body relation. The interaction is in a inner-boundary-co...
Definition: complex_body_relation.h:42
virtual void Interaction(size_t index_i, Real dt=0.0) override
Definition: particle_dynamics_dissipation.hpp:278
virtual ErrorAndParameters< VariableType > computeErrorAndParameters(size_t index_i, Real dt=0.0) override
Definition: particle_dynamics_dissipation.hpp:181
Damping with wall by which the wall velocity is not updated and the mass of wall particle is not cons...
Definition: particle_dynamics_dissipation.h:160
virtual void Interaction(size_t index_i, Real dt=0.0) override
Definition: particle_dynamics_dissipation.hpp:401
The abstract relation within a SPH body.
Definition: base_body_relation.h:117
Definition: particle_dynamics_dissipation.h:80
A quantity damping by a pairwise splitting scheme this method modifies the quantity directly Note tha...
Definition: particle_dynamics_dissipation.h:121
A random choice method for obstaining static equilibrium state Note that, if periodic boundary condit...
Definition: particle_dynamics_dissipation.h:210
Definition: solid_body_supplementary.cpp:9