SPHinXsys  alpha version
weakly_compressible_fluid.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 WEAKLY_COMPRESSIBLE_FLUID_H
32 #define WEAKLY_COMPRESSIBLE_FLUID_H
33 
34 #include "base_material.h"
35 
36 namespace SPH
37 {
43  {
44  protected:
45  Real c0_, p0_;
46  public:
47  explicit WeaklyCompressibleFluid(Real rho0, Real c0, Real mu = 0.0)
48  : Fluid(rho0, mu), c0_(c0), p0_(rho0 * c0 * c0)
49  {
50  material_type_name_ = "WeaklyCompressibleFluid";
51  };
52  virtual ~WeaklyCompressibleFluid(){};
53 
54  Real ReferenceSoundSpeed() { return c0_; };
55  virtual Real getPressure(Real rho) override;
56  virtual Real DensityFromPressure(Real p) override;
57  virtual Real getSoundSpeed(Real p = 0.0, Real rho = 1.0) override;
58  virtual WeaklyCompressibleFluid *ThisObjectPtr() override { return this; };
59  };
60 
65  template <class WeaklyCompressibleFluidType>
67  {
68  protected:
69  Real cutoff_pressure_, cutoff_density_;
70 
71  public:
72  template <typename... ConstructorArgs>
73  explicit WeaklyCompressibleFluidFreeSurface(Real cutoff_pressure, ConstructorArgs &&...args)
74  : WeaklyCompressibleFluidType(std::forward<ConstructorArgs>(args)...),
75  cutoff_pressure_(cutoff_pressure),
76  cutoff_density_(WeaklyCompressibleFluidType::DensityFromPressure(cutoff_pressure))
77  {
78  WeaklyCompressibleFluidType::aterial_type_ += "FreeSurface";
79  };
81 
82  virtual Real getPressure(Real rho) override
83  {
84  return rho < cutoff_density_ ? cutoff_pressure_ : WeaklyCompressibleFluid::getPressure(rho);
85  };
86  };
87 
93  {
94  protected:
95  int gamma_;
96  public:
97  explicit SymmetricTaitFluid(Real rho0, Real c0, int gamma)
98  : WeaklyCompressibleFluid(rho0, c0), gamma_(gamma)
99  {
100  material_type_name_ = "SymmetricTaitFluid";
101  };
102  virtual ~SymmetricTaitFluid(){};
103 
104  virtual Real getPressure(Real rho) override;
105  virtual Real DensityFromPressure(Real p) override;
106  virtual Real getSoundSpeed(Real p = 0.0, Real rho = 1.0) override;
107  };
108 
114  {
115  protected:
116  Real lambda_;
117  Real mu_p_;
119  public:
120  explicit Oldroyd_B_Fluid(Real rho0, Real c0, Real mu, Real lambda, Real mu_p)
121  : WeaklyCompressibleFluid(rho0, c0, mu), lambda_(lambda), mu_p_(mu_p)
122  {
123  material_type_name_ = "Oldroyd_B_Fluid";
124  };
125  virtual ~Oldroyd_B_Fluid(){};
126 
127  Real getReferenceRelaxationTime() { return lambda_; };
128  Real ReferencePolymericViscosity() { return mu_p_; };
129  virtual Oldroyd_B_Fluid *ThisObjectPtr() override { return this; };
130  };
131 }
132 #endif // WEAKLY_COMPRESSIBLE_FLUID_H
Equation of state (EOS) with cut-off pressure.
Definition: weakly_compressible_fluid.h:66
linear EOS with relaxation time and polymetric viscosity.
Definition: weakly_compressible_fluid.h:113
Tait EOS for positive and negative pressure symmetrically.
Definition: weakly_compressible_fluid.h:92
Base class of all fluids.
Definition: base_material.h:89
Real p0_
Definition: weakly_compressible_fluid.h:45
Real mu_p_
Definition: weakly_compressible_fluid.h:117
This is the base classes of all materials. A function in a derived material class returns a value wit...
int gamma_
Definition: weakly_compressible_fluid.h:95
Linear equation of state (EOS).
Definition: weakly_compressible_fluid.h:42
Real lambda_
Definition: weakly_compressible_fluid.h:116
Definition: solid_body_supplementary.cpp:9