2 #include "../../../misc/lazy_list.hpp" 10 vector<Extensive>
const& fluxes)
16 int n =
static_cast<int>(edge_index.size());
18 for (
int i = 0; i < n; ++i)
20 edge = tess.
GetEdge(edge_index[static_cast<size_t>(i)]);
23 dm -= edge.
GetLength() * fluxes[
static_cast<size_t>(edge_index[
static_cast<size_t>(i)])].mass *
30 dm += edge.
GetLength() * fluxes[
static_cast<size_t>(edge_index[
static_cast<size_t>(i)])].mass *
35 throw UniversalError(
"Error in ConservativeForce MassFlux: Cell and edge are not mutual neighbors");
42 acc_(acc), mass_flux_(mass_flux) {}
46 vector<Extensive> ConservativeForce::operator()
50 const vector<ComputationalCell>& cells,
51 const vector<Extensive>& fluxes,
52 const vector<Vector2D>& point_velocities,
56 vector<Extensive> res(static_cast<size_t>(tess.
GetPointNo()));
57 for (
size_t i = 0; i < res.size(); ++i)
59 const Vector2D acc = acc_(tess, cells, fluxes, t, static_cast<int>(i),tracerstickernames);
60 const double volume = cd.volumes[i];
62 res[i].momentum = volume*cells[i].density*acc;
64 res[i].energy = volume*cells[i].density*
ScalarProd(acc, cells[i].velocity);
67 const Vector2D mass_flux = MassFlux(tess, static_cast<int>(i), fluxes);
68 res[i].energy = volume*cells[i].density*
ScalarProd(point_velocities[i], acc) +
71 res[i].tracers.resize(tracerstickernames.tracer_names.size(),0);
76 Acceleration::~Acceleration(
void) {}
Abstract class for tessellation.
virtual int GetPointNo(void) const =0
Get Total number of mesh generating points.
Container for error reports.
Interface between two cells.
virtual Vector2D GetMeshPoint(int index) const =0
Returns Position of mesh generating point.
virtual Edge const & GetEdge(int index) const =0
Returns edge (interface between cells)
double ScalarProd(Vector3D const &v1, Vector3D const &v2)
Scalar product of two vectors.
ConservativeForce(const Acceleration &acc, bool mass_flux=false)
Class constructor.
Container for cache data.
double min(vector< double > const &v)
Returns the minimal term in a vector.
Class for keeping the names of the tracers and stickers.
~ConservativeForce(void)
Class destructor.
Abstract class for conservative force's acceleration.
std::pair< int, int > neighbors
Neighboring cells.
virtual vector< int > const & GetCellEdges(int index) const =0
Returns the indexes of a cell's edges.
double GetLength(void) const
Returns the length of the edge.
Base class for physical geometry.