4 #include "../../misc/universal_error.hpp" 5 #include "../common/hydrodynamic_variables.hpp" 6 #include "../common/hydrodynamics.hpp" 7 #include "../../misc/utils.hpp" 8 #include "../../misc/lazy_list.hpp" 9 #include "spdlog/spdlog.h" 35 (
const vector<double>& v,
43 vector<Extensive> calc_extensives
49 const vector<ComputationalCell>& cells = ss.
getCells();
50 vector<Extensive> res(ss.
getCells().size());
51 for(
size_t i=0;i<res.size();++i){
52 const double volume = GetVolume(vertices,
55 res.at(i).mass = cells.at(i).density*volume;
56 res.at(i).momentum = res.at(i).mass*cells.at(i).velocity;
57 const double kinetic_specific_energy =
58 0.5*pow(
abs(cells.at(i).velocity),2);
59 const double thermal_specific_energy =
60 eos.
dp2e(cells.at(i).density, cells.at(i).pressure);
61 res.at(i).energy = res.at(i).mass*
62 (kinetic_specific_energy+thermal_specific_energy);
63 for(
size_t j=0;j<cells.at(0).tracers.size();++j){
64 res.at(i).tracers.push_back
65 (cells.at(i).tracers.at(j)*res.at(i).mass);
86 extensives_(calc_extensives(pg,ss,eos)),
95 tracers_intensive_(vector<vector<double> >()),
96 tracers_extensive_(vector<vector<double> >())
98 spdlog::debug(
"hdsim1D initialisation completed");
102 vector<double> CalcVertexVelocities
107 for(
size_t i = 0; i<state.
getVertices().size();i++)
113 vector<double> calc_new_vertices
114 (
const vector<double>& vv_,
116 const vector<double>& vertices)
118 vector<double> res = vertices;
119 for(
size_t i=0;i<res.size();++i)
120 res.at(i) += dt*vv_.at(i);
139 void force_contribution
144 vector<Extensive>& extensive)
146 for(
size_t i=0;i<extensive.size();++i)
148 dt*force(state, i, t, dt);
154 spdlog::debug(
"begin time advance 1o iteration {0}, virtual time {1}",
157 const vector<double> _VertexVelocity = CalcVertexVelocities
160 spdlog::debug(
"Vertex velocity calculated");
162 const double dt = tsf_(ss_,eos_);
164 spdlog::debug(
"Time step calculated");
166 const vector<Extensive> fluxes =
167 fc_(ss_, _VertexVelocity, eos_, dt);
169 spdlog::debug(
"Fluxes calculated");
178 spdlog::debug(
"Extensives updated");
180 force_contribution(ss_,
184 spdlog::debug(
"source term calculated");
186 ss_.updateVertices(calc_new_vertices(_VertexVelocity,
190 spdlog::debug(
"Vertices updated");
192 ss_.updateCells(cu_(pg_,
197 spdlog::debug(
"cells updated");
202 spdlog::debug(
"time advance interation finished");
207 const vector<double> mid_vertex_velocities =
208 CalcVertexVelocities(ss_, vm_);
210 const double dt = tsf_(ss_, eos_);
212 const vector<Extensive> mid_fluxes =
213 fc_(ss_, mid_vertex_velocities, eos_, dt);
215 vector<Extensive> mid_extensive = extensives_;
223 force_contribution(ss_,
229 (calc_new_vertices(mid_vertex_velocities,
246 const vector<double> _VertexVelocity = CalcVertexVelocities
249 const vector<Extensive> fluxes =
250 fc_(mid_state, _VertexVelocity, eos_, dt);
263 ss_.updateVertices(calc_new_vertices(_VertexVelocity,
267 ss_.updateCells(cu_(pg_,
Base class for a flux calculator.
const vector< double > & getVertices(void) const
Access to vertices.
Base class for physical geometry.
double GetTime(void) const
Returns the time of the simulation.
Base class for vertex motion.
int GetCycle(void) const
Returns the number of times time advance was called.
void updateCells(const vector< ComputationalCell > &cells)
Updates hydro cellls.
hdsim1D(const PhysicalGeometry1D &pg, const SimulationState1D &ss, const EquationOfState &eos, const VertexMotion &vm, const SourceTerm1D &force, const TimeStepFunction1D &tsf, const FluxCalculator1D &fc, const ExtensiveUpdater1D &eu, const CellUpdater1D &cu)
Class constructor.
void TimeAdvance2(void)
Second order time advance.
void TimeAdvance(void)
Advances the simulation in time.
const vector< ComputationalCell > & getCells(void) const
Access to hydro cells.
Base class for equation of state.
Abstract class for external forces.
Abstract class for the cell update scheme.
Method for updating the extensive variables.
virtual double dp2e(double d, double p, tvector const &tracers=tvector(), vector< string > const &tracernames=vector< string >()) const =0
Calculates the thermal energy per unit mass.
virtual double calcVolume(double radius) const =0
Calculates the volume.
Base class for a time step calculator.
double abs(Vector3D const &v)
Norm of a vector.
const SimulationState1D & getState(void) const
Access to computational domain and hydro cells.
Package for computational domain and hydro cells.
void updateVertices(const vector< double > &vertices)
Updates positions of vertices.
One dimensional hydrodynamic simulation.