35 std::vector<double>
x;
36 std::vector<double>
y;
39 std::map<std::string, std::vector<idx_t>>
iprops;
42 std::map<std::string, std::vector<double>>
dprops;
44 std::vector<double>
M;
81 default_x_generator ();
89 default_y_generator ();
95 template<output_format fmt>
97 print (std::ostream & os)
const {
98 os <<
"output format not implementd" << std::endl;
117 j[
"dprops"].get_to<std::map<std::string, std::vector<double>>> (
dprops);
118 j[
"iprops"].get_to<std::map<std::string, std::vector<int>>> (
iprops);
119 j[
"x"].get_to<std::vector<double>> (
x);
120 j[
"y"].get_to<std::vector<double>> (
y);
133 const std::vector<std::string>& dpropnames,
134 const quadgrid_t<std::vector<double>>& grid_);
148 const std::vector<std::string>& dpropnames,
150 const std::vector<double> & xv,
151 const std::vector<double> & yv);
165 const std::vector<std::string>& dpropnames,
167 std::function<
double ()> xgen,
168 std::function<
double ()> ygen);
178 init_props (
const std::vector<std::string>& ipropnames,
179 const std::vector<std::string>& dpropnames);
189 std::vector<idx_t> vin{};
191 if (fun (
x[i],
y[i])) {
196 for (
auto &dprop :
dprops) {
197 for (
auto id = vin.rbegin ();
id != vin.rend (); ++
id) {
198 dprop.second.erase (dprop.second.begin () + (*
id));
202 for (
auto &iprop :
iprops) {
203 for (
auto id = vin.rbegin ();
id != vin.rend (); ++
id) {
204 iprop.second.erase (iprop.second.begin () + (*
id));
208 for (
auto id = vin.rbegin ();
id != vin.rend (); ++
id) {
209 x.erase (
x.begin () + (*
id));
210 y.erase (
y.begin () + (*
id));
220 init_particle_mesh ();
225 update_ptcl_to_grd ();
234 reorder (std::vector<idx_t> &);
242 std::function<
double ()> ygentr);
254 return dprops.at (name) [ii];
259 dp (
const std::string & name,
idx_t ii)
const {
260 return dprops.at (name) [ii];
266 return iprops.at (name) [ii];
271 ip (
const std::string & name,
idx_t ii)
const {
272 return iprops.at (name) [ii];
277 getkey(std::map<std::string, std::vector<double>>
const &varnames,
279 return std::next (varnames.begin (), ivar)->first;
284 getkey(std::vector<std::string>
const &varnames,
286 return varnames[ivar];
291 getkey(std::initializer_list<const char *>
const &varnames,
293 return *(std::next (varnames.begin (), ivar));
302 p2g (std::map<std::string, std::vector<double>> & vars,
303 bool apply_mass =
false)
const {
304 p2g (vars, vars, vars, apply_mass);
313 template<
typename GT,
typename PT>
315 p2g (std::map<std::string, std::vector<double>> & vars,
316 PT
const & pvarnames,
317 GT
const & gvarnames,
318 bool apply_mass =
false)
const;
320 template<
typename str>
322 p2g (std::map<std::string, std::vector<double>> & vars,
323 std::initializer_list<str>
const & pvarnames,
324 std::initializer_list<str>
const & gvarnames,
325 bool apply_mass =
false)
const;
327 template<
typename GT,
typename PT>
329 p2gd (std::map<std::string, std::vector<double>> & vars,
330 PT
const & pxvarnames,
331 PT
const & pyvarnames,
332 std::string
const &area,
333 GT
const & gvarnames,
334 bool apply_mass =
false)
const;
336 template<
typename str>
338 p2gd (std::map<std::string, std::vector<double>> & vars,
339 std::initializer_list<str>
const & pxvarnames,
340 std::initializer_list<str>
const & pyvarnames,
341 std::string
const & area,
342 std::initializer_list<str>
const & gvarnames,
343 bool apply_mass =
false)
const;
346 g2p (
const std::map<std::string, std::vector<double>>& vars,
347 bool apply_mass =
false) {
348 g2p (vars, vars, vars, apply_mass);
351 template<
typename str>
353 g2p (
const std::map<std::string, std::vector<double>>& vars,
354 std::initializer_list<str>
const & gvarnames,
355 std::initializer_list<str>
const & pvarnames,
356 bool apply_mass =
false);
358 template<
typename GT,
typename PT>
360 g2p (
const std::map<std::string, std::vector<double>>& vars,
361 GT
const & gvarnames,
362 PT
const & pvarnames,
363 bool apply_mass =
false);
365 template<
typename GT,
typename PT>
367 g2pd (
const std::map<std::string, std::vector<double>>& vars,
368 GT
const & gvarnames,
369 PT
const & pxvarnames,
370 PT
const & pyvarnames,
371 bool apply_mass =
false);
373 template<
typename str>
375 g2pd (
const std::map<std::string, std::vector<double>>& vars,
376 std::initializer_list<str>
const & gvarnames,
377 std::initializer_list<str>
const &pxvarnames,
378 std::initializer_list<str>
const & pyvarnames,
379 bool apply_mass =
false);
390template<
typename P2G_t,
typename COORD_t>
404 const COORD_t x_,
const COORD_t y_,
405 double hx_,
double hy_,
const idx_t nrows_)
410 static_cast<idx_t> (std::floor (
x[ii] /
hx)),
const double hx
Definition particles.h:398
P2G_t ptcl_to_grd
Definition particles.h:395
const idx_t nrows
Definition particles.h:400
const double hy
Definition particles.h:399
particles_t::idx_t idx_t
Definition particles.h:394
const COORD_t x
Definition particles.h:396
ptcl_to_grd_update_t(P2G_t ptcl_to_grd_, const COORD_t x_, const COORD_t y_, double hx_, double hy_, const idx_t nrows_)
Definition particles.h:403
const COORD_t y
Definition particles.h:397
Definition quadgrid_cpp.h:24
static idx_t sub2gind(idx_t r, idx_t c, idx_t nr)
Definition quadgrid_cpp.h:198
void to_json(nlohmann::json &j, const particles_t &p)
Adaptor to allow implicit conversion from particles_t to json.
Definition particles.cpp:359
Class to represent particles embedded in a grid.
Definition particles.h:29
const idx_t & ip(const std::string &name, idx_t ii) const
shortcut for iprops.at (name) [ii]
Definition particles.h:271
idx_t & ip(const std::string &name, idx_t ii)
shortcut for iprops.at (name) [ii]
Definition particles.h:265
std::vector< idx_t > ptcl_grd_color
color of particle's cell.
Definition particles.h:47
std::map< idx_t, std::vector< idx_t > > grd_to_ptcl
grid->particles connectivity.
Definition particles.h:45
std::map< std::string, std::vector< idx_t > > iprops
integer type quantities associated with the particles.
Definition particles.h:39
particles_t(idx_t n, const quadgrid_t< std::vector< double > > &grid_)
Simplest form of constructor.
Definition particles.h:106
void mark_by_cell_color()
Mark particles by cell color.
double & dp(const std::string &name, idx_t ii)
shortcut for dprops.at (name) [ii]
Definition particles.h:253
idx_t num_particles
number of particles.
Definition particles.h:34
void g2p(const std::map< std::string, std::vector< double > > &vars, bool apply_mass=false)
Definition particles.h:346
quadgrid_t< std::vector< double > >::idx_t idx_t
datatype for indexing into vectors of properties
Definition particles.h:32
const quadgrid_t< std::vector< double > > & grid
refernce to a grid object.
Definition particles.h:48
cell_color
Enumeration of cell colors.
Definition particles.h:66
@ black
Definition particles.h:70
@ blue
Definition particles.h:69
@ all_colors
Definition particles.h:71
@ green
Definition particles.h:68
@ red
Definition particles.h:67
output_format
Enumeration of available output format.
Definition particles.h:52
@ json
Definition particles.h:60
@ csv
Definition particles.h:53
@ octave_ascii
Definition particles.h:57
static const char * getkey(std::initializer_list< const char * > const &varnames, std::size_t ivar)
Definition particles.h:291
static const std::string & getkey(std::map< std::string, std::vector< double > > const &varnames, std::size_t ivar)
Definition particles.h:277
void print(std::ostream &os) const
Template for export function.
Definition particles.h:97
std::map< std::string, std::vector< double > > dprops
double type quantities associated with the particles.
Definition particles.h:42
void remove_in_region(std::function< bool(double, double)> fun)
Erase particcles based on coordinates.
Definition particles.h:188
const double & dp(const std::string &name, idx_t ii) const
shortcut for dprops.at (name) [ii]
Definition particles.h:259
std::vector< idx_t > ptcl_to_grd
particles->grid connectivity.
Definition particles.h:46
std::vector< double > x
x coordinate of particle positions.
Definition particles.h:35
particles_t(const nlohmann::json &j, const quadgrid_t< std::vector< double > > &grid_)
Ctor to import data from json.
Definition particles.h:113
std::vector< double > y
y coordinate of particle positions.
Definition particles.h:36
void build_mass()
Construct a mass matrix.
Definition particles.cpp:249
static const std::string & getkey(std::vector< std::string > const &varnames, std::size_t ivar)
Definition particles.h:284
std::vector< double > M
Mass matrix to be used for transfers if required.
Definition particles.h:44
void reorder(std::vector< idx_t > &)
Reorder coordinates an properties according to the ordering vvector.
Definition particles.cpp:376
void p2g(std::map< std::string, std::vector< double > > &vars, bool apply_mass=false) const
Map particle variables to the grid.
Definition particles.h:302
void init_particle_positions(std::function< double()> xgentr, std::function< double()> ygentr)
Initialize particle positions with generator functions.
Definition particles.cpp:236