2 #include "../common/hydrodynamics.hpp" 12 (vector<double>
const& grid,
13 vector<Primitive>
const& cells,
16 return (cells[
size_t(idx)]-cells[
size_t(idx-1)])/
17 (0.5*(grid[size_t(idx+1)]-grid[size_t(idx-1)]));
21 (vector<double>
const& grid,
22 vector<Primitive>
const& cells,
25 const double xr = 0.5*(grid[size_t(idx+2)]+grid[size_t(idx+1)]);
26 const double xl = 0.5*(grid[size_t(idx)]+grid[size_t(idx-1)]);
27 return (cells[
size_t(idx+1)]-cells[size_t(idx-1)])/(xr-xl);
30 bool effectively_zero(
double x)
41 else if(effectively_zero(x))
47 double my_min(
double x,
double y,
double z)
52 double minmod(
double x,
double y,
double z)
54 return 0.125*(sgn(x)+sgn(y))*
66 res[i] = minmod(p1[i],p2[i],p3[i]);
72 (vector<double>
const& vp,
73 vector<Primitive>
const& hv,
75 size_t idx,
int dir,
double dt)
const 80 else if(idx==vp.size()-1)
81 return hv[vp.size()-2];
83 throw UniversalError(
"Error in PLM1D::InterpState\n Target of interpolation lies outside grid, on the left side");
85 const Primitive slope_left = Derivative(vp,hv,idx-1);
86 const Primitive slope_center = Derivative(vp,hv,idx);
87 const Primitive slope_symmetric = SymmetricDerivative(vp,hv,idx-1);
88 const Primitive slope = minmod(slope_left,slope_center,2*slope_symmetric);
89 const double dx = vp[size_t(idx)]-vp[size_t(idx-1)];
90 const double edge_density =
91 hv[size_t(idx-1)].Density
93 -(dt/2)*slope.
Density*(hv[
size_t(idx-1)].Velocity.x-v_i)
94 -(dt/2)*slope.
Velocity.
x*hv[size_t(idx-1)].Density;
96 const double edge_pressure =
97 hv[size_t(idx-1)].Pressure
99 -(dt/2)*slope.
Velocity.
x*g*hv[
size_t(idx-1)].Pressure
100 -(dt/2)*slope.
Pressure*(hv[
size_t(idx-1)].Velocity.x-v_i);
101 const double edge_xvelocity =
102 hv[size_t(idx-1)].Velocity.x
104 -(dt/2)*slope.
Velocity.
x*(hv[size_t(idx-1)].Velocity.x-v_i)
105 -(dt/2)*slope.
Pressure/hv[size_t(idx-1)].Density;
106 const double edge_yvelocity =
107 hv[size_t(idx-1)].Velocity.y
109 -(dt/2)*slope.
Velocity.
y*(hv[size_t(idx-1)].Velocity.x-v_i);
120 return hv[vp.size()-2];
123 else if(idx==vp.size()-1)
124 throw UniversalError(
"Error in PLM1D::InterpState\n Target of interpolation lies outside grid, on the right side");
126 const Primitive slope_right = Derivative(vp,hv,idx+1);
127 const Primitive slope_center = Derivative(vp,hv,idx);
128 const Primitive slope_symmetric = SymmetricDerivative(vp,hv,idx);
129 const Primitive slope = minmod(slope_center,slope_right,2*slope_symmetric);
130 const double dx = vp[size_t(idx+1)]-vp[size_t(idx)];
131 const double edge_density =
132 hv[size_t(idx)].Density
134 -(dt/2)*slope.
Density*(hv[
size_t(idx)].Velocity.x-v_i)
135 -(dt/2)*slope.
Velocity.
x*hv[size_t(idx)].Density;
137 const double edge_pressure =
138 hv[size_t(idx)].Pressure
140 -(dt/2)*slope.
Velocity.
x*g*hv[
size_t(idx)].Pressure
141 -(dt/2)*slope.
Pressure*(hv[
size_t(idx)].Velocity.x-v_i);
142 const double edge_xvelocity =
143 hv[size_t(idx)].Velocity.x
145 -(dt/2)*slope.
Velocity.
x*(hv[size_t(idx)].Velocity.x-v_i)
146 -(dt/2)*slope.
Pressure/hv[size_t(idx)].Density;
147 const double edge_yvelocity =
148 hv[size_t(idx)].Velocity.y
150 -(dt/2)*slope.
Velocity.
y*(hv[size_t(idx)].Velocity.x-v_i);
Ideal gas equation of state.
int GetVarNo(void) const
Returns the numbers of members.
Container for error reports.
Primitive CalcPrimitive(double density, double pressure, Vector2D const &velocity, EquationOfState const &eos)
Calculates the primitive variables.
Interpolation described in arepo paper.
Vector2D Velocity
Velocity.
double getAdiabaticIndex(void) const
Returns the adiabatic index.
double y
Component in the y direction.
ArepoInterp(IdealGas const &eos)
Class constructor.
double min(vector< double > const &v)
Returns the minimal term in a vector.
double abs(Vector3D const &v)
Norm of a vector.
Primitive hydrodynamic variables.
double x
Component in the x direction.