SPHinXsys  alpha version
riemann_solver.h
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 RIEMANN_SOLVER_H
30 #define RIEMANN_SOLVER_H
31 
32 #include "base_data_package.h"
33 
34 namespace SPH
35 {
36  struct FluidState
37  {
38  Vecd &vel_;
39  Real &rho_, &p_;
40  FluidState(Real &rho, Vecd &vel, Real &p)
41  : vel_(vel), rho_(rho), p_(p){};
42  };
43 
45  {
46  Real &E_;
47  CompressibleFluidState(Real &rho, Vecd &vel, Real &p, Real &E)
48  : FluidState(rho, vel, p), E_(E){};
49  };
50 
51  class Fluid;
52  class CompressibleFluid;
53 
55  {
56  Fluid &fluid_l_, &fluid_r_;
57 
58  public:
59  NoRiemannSolver(Fluid &fluid_i, Fluid &fluid_j) : fluid_l_(fluid_i), fluid_r_(fluid_j){};
60  Real getPStar(const FluidState &state_i, const FluidState &state_j, const Vecd &direction_to_i);
61  Vecd getVStar(const FluidState &state_i, const FluidState &state_j, const Vecd &direction_to_i);
62  };
63 
65  {
66  protected:
67  Fluid &fluid_i_, &fluid_j_;
68 
69  public:
70  BaseAcousticRiemannSolver(Fluid &fluid_i, Fluid &fluid_j) : fluid_i_(fluid_i), fluid_j_(fluid_j){};
71  inline void prepareSolver(const FluidState &state_i, const FluidState &state_j, const Vecd &direction_to_i,
72  Real &ul, Real &ur, Real &rhol_cl, Real &rhor_cr);
73  };
75  {
76  public:
77  AcousticRiemannSolver(Fluid &fluid_i, Fluid &fluid_j) : BaseAcousticRiemannSolver(fluid_i, fluid_j){};
78  Real getPStar(const FluidState &state_i, const FluidState &state_j, const Vecd &direction_to_i);
79  Vecd getVStar(const FluidState &state_i, const FluidState &state_j, const Vecd &direction_to_i);
80  };
81 
83  {
84  public:
85  DissipativeRiemannSolver(Fluid &fluid_i, Fluid &fluid_j) : BaseAcousticRiemannSolver(fluid_i, fluid_j){};
86  Real getPStar(const FluidState &state_i, const FluidState &state_j, const Vecd &direction_to_i);
87  Vecd getVStar(const FluidState &state_i, const FluidState &state_j, const Vecd &direction_to_i);
88  };
89 
91  {
92  Fluid& fluid_i_, &fluid_j_;
93 
94  public:
95  HLLCRiemannSolverInWeaklyCompressibleFluid(Fluid& compressible_fluid_i, Fluid& compressible_fluid_j) :
96  fluid_i_(compressible_fluid_i), fluid_j_(compressible_fluid_j) {};
97  FluidState getInterfaceState(const FluidState &state_i, const FluidState &state_j, const Vecd &direction_to_i);
98  };
99 
101  {
102  Fluid& fluid_i_, &fluid_j_;
103 
104  public:
105  HLLCRiemannSolverWithLimiterInWeaklyCompressibleFluid(Fluid& compressible_fluid_i, Fluid& compressible_fluid_j) :
106  fluid_i_(compressible_fluid_i), fluid_j_(compressible_fluid_j) {};
107  FluidState getInterfaceState(const FluidState &state_i, const FluidState &state_j, const Vecd &direction_to_i);
108  };
109 
111  {
112  CompressibleFluid &compressible_fluid_i_, &compressible_fluid_j_;
113 
114  public:
115  HLLCRiemannSolver(CompressibleFluid &compressible_fluid_i, CompressibleFluid &compressible_fluid_j)
116  : compressible_fluid_i_(compressible_fluid_i), compressible_fluid_j_(compressible_fluid_j){};
117  CompressibleFluidState getInterfaceState(const CompressibleFluidState &state_i, const CompressibleFluidState &state_j, const Vecd &direction_to_i);
118  };
119 
121  {
122  CompressibleFluid &compressible_fluid_i_, &compressible_fluid_j_;
123 
124  public:
125  HLLCWithLimiterRiemannSolver(CompressibleFluid &compressible_fluid_i, CompressibleFluid &compressible_fluid_j)
126  : compressible_fluid_i_(compressible_fluid_i), compressible_fluid_j_(compressible_fluid_j){};
127  CompressibleFluidState getInterfaceState(const CompressibleFluidState &state_i, const CompressibleFluidState &state_j, const Vecd &direction_to_i);
128  };
129 }
130 
131 #endif //RIEMANN_SOLVER_H
Definition: riemann_solver.h:120
Definition: riemann_solver.h:82
Definition: riemann_solver.h:110
Definition: riemann_solver.h:54
Base class of all fluids.
Definition: base_material.h:89
Definition: riemann_solver.h:44
Definition: riemann_solver.h:74
Ideal gas equation of state (EOS).
Definition: compressible_fluid.h:40
Definition: riemann_solver.h:64
Definition: riemann_solver.h:36
Definition: solid_body_supplementary.cpp:9