39 std::map<std::string, vector_t<idx_t>>
iprops;
42 std::map<std::string, vector_t<real_t>>
dprops;
54 std::map<std::string, device_vector_t<real_t>> device_dprops;
55 std::map<std::string, device_vector_t<idx_t>> device_iprops;
58 std::map<std::string, device_vector_t<real_t>> device_grid_vars;
93 default_x_generator ();
101 default_y_generator ();
107 template<output_format fmt>
110 os <<
"output format not implementd" << std::endl;
129 j[
"dprops"].get_to<std::map<std::string, vector_t<real_t>>> (
dprops);
130 j[
"iprops"].get_to<std::map<std::string, vector_t<int>>> (
iprops);
179 std::function<
real_t ()> xgen,
180 std::function<
real_t ()> ygen);
203 if (fun (
x[i],
y[i])) {
208 for (
auto &dprop :
dprops) {
209 for (
auto id = vin.rbegin ();
id != vin.rend (); ++
id) {
210 dprop.second.erase (dprop.second.begin () + (*
id));
214 for (
auto &iprop :
iprops) {
215 for (
auto id = vin.rbegin ();
id != vin.rend (); ++
id) {
216 iprop.second.erase (iprop.second.begin () + (*
id));
220 for (
auto id = vin.rbegin ();
id != vin.rend (); ++
id) {
221 x.erase (
x.begin () + (*
id));
222 y.erase (
y.begin () + (*
id));
245 template<
class backend>
254 update_ptcl_to_grd_device;
271 std::function<
real_t ()> ygentr);
283 return dprops.at (name) [ii];
288 dp (
const std::string & name,
idx_t ii)
const {
289 return dprops.at (name) [ii];
295 return iprops.at (name) [ii];
300 ip (
const std::string & name,
idx_t ii)
const {
301 return iprops.at (name) [ii];
308 return std::next (varnames.begin (), ivar)->first;
315 return varnames[ivar];
320 getkey(std::initializer_list<const char *>
const &varnames,
322 return *(std::next (varnames.begin (), ivar));
332 bool apply_mass =
false) {
333 p2g (vars, vars, vars, apply_mass);
342 template<
typename GT,
typename PT>
345 PT
const & pvarnames,
346 GT
const & gvarnames,
347 bool apply_mass =
false) ;
349 template<
typename str>
352 std::initializer_list<str>
const & pvarnames,
353 std::initializer_list<str>
const & gvarnames,
354 bool apply_mass =
false) ;
357 template<
typename UnaryFunction>
360 UnaryFunction helper);
362 template<
typename GT,
typename PT>
365 PT
const & pvarnames,
366 GT
const & gvarnames,
367 bool apply_mass =
false)
const;
369 template<
typename str>
372 std::initializer_list<str>
const & pvarnames,
373 std::initializer_list<str>
const & gvarnames,
374 bool apply_mass =
false)
const;
376 template<
typename GT,
typename PT>
379 PT
const & pxvarnames,
380 PT
const & pyvarnames,
381 std::string
const &area,
382 GT
const & gvarnames,
383 bool apply_mass =
false);
385 template<
typename str>
388 std::initializer_list<str>
const & pxvarnames,
389 std::initializer_list<str>
const & pyvarnames,
390 std::string
const & area,
391 std::initializer_list<str>
const & gvarnames,
392 bool apply_mass =
false);
395 template<
typename UnaryFunction>
398 UnaryFunction helper);
402 bool apply_mass =
false) {
403 g2p (vars, vars, vars, apply_mass);
406 template<
typename str>
409 std::initializer_list<str>
const & gvarnames,
410 std::initializer_list<str>
const & pvarnames,
411 bool apply_mass =
false);
413 template<
typename GT,
typename PT>
416 GT
const & gvarnames,
417 PT
const & pvarnames,
418 bool apply_mass =
false);
421 template<
typename UnaryFunction>
424 UnaryFunction helper);
426 template<
typename GT,
typename PT>
429 GT
const & gvarnames,
430 PT
const & pxvarnames,
431 PT
const & pyvarnames,
432 bool apply_mass =
false);
434 template<
typename str>
437 std::initializer_list<str>
const & gvarnames,
438 std::initializer_list<str>
const &pxvarnames,
439 std::initializer_list<str>
const & pyvarnames,
440 bool apply_mass =
false);
443 template<
typename UnaryFunction>
446 UnaryFunction helper);
457template<
typename P2G_t,
typename COORD_t>
471 const COORD_t x_,
const COORD_t y_,
478 static_cast<idx_t> (std::floor (
x[ii] /
hx)),
ptcl_to_grd_update_t(P2G_t ptcl_to_grd_, const COORD_t x_, const COORD_t y_, const real_t hx_, const real_t hy_, const idx_t nrows_)
HOST static DEVICE idx_t sub2gind(idx_t r, idx_t c, idx_t nr)
void to_json(nlohmann::json &j, const particles_t &p)
Adaptor to allow implicit conversion from particles_t to json.
Class to represent particles embedded in a grid.
void p2g(std::map< std::string, device_vector_t< real_t > > &vars, bool apply_mass=false)
Map particle variables to the grid.
const idx_t & ip(const std::string &name, idx_t ii) const
shortcut for iprops.at (name) [ii]
static const std::string & getkey(vector_t< std::string > const &varnames, std::size_t ivar)
idx_t & ip(const std::string &name, idx_t ii)
shortcut for iprops.at (name) [ii]
void memcpy_host_to_device()
Copy Host To Device.
real_t & dp(const std::string &name, idx_t ii)
shortcut for dprops.at (name) [ii]
void init_particle_positions(std::function< real_t()> xgentr, std::function< real_t()> ygentr)
Initialize particle positions with generator functions.
void g2p(const std::map< std::string, device_vector_t< real_t > > &vars, bool apply_mass=false)
void mark_by_cell_color()
Mark particles by cell color.
idx_t num_particles
number of particles.
vector_t< idx_t > ptcl_to_grd
particles->grid connectivity.
const real_t & dp(const std::string &name, idx_t ii) const
shortcut for dprops.at (name) [ii]
void init_particle_mesh()
Build grid/particles connectivity.
particles_t(const nlohmann::json &j, const quadgrid_t< vector_t< real_t > > &grid_)
Ctor to import data from json.
vector_t< idx_t > ptcl_grd_color
color of particle's cell.
std::map< std::string, vector_t< idx_t > > iprops
integer type quantities associated with the particles.
quadgrid_t< vector_t< real_t > >::idx_t idx_t
datatype for indexing into vectors of properties
cell_color
Enumeration of cell colors.
void remove_in_region(std::function< bool(real_t, real_t)> fun)
Erase particcles based on coordinates.
output_format
Enumeration of available output format.
static const char * getkey(std::initializer_list< const char * > const &varnames, std::size_t ivar)
void print(std::ostream &os) const
Template for export function.
vector_t< real_t > M
Mass matrix to be used for transfers if required.
std::map< idx_t, vector_t< idx_t > > grd_to_ptcl
grid->particles connectivity.
vector_t< real_t > x
x coordinate of particle positions.
const quadgrid_t< vector_t< real_t > > & grid
refernce to a grid object.
std::map< std::string, vector_t< real_t > > dprops
double type quantities associated with the particles.
vector_t< real_t > y
y coordinate of particle positions.
void build_mass()
Construct a mass matrix.
void reorder(vector_t< idx_t > &)
Reorder coordinates an properties according to the ordering vvector.
particles_t(idx_t n, const quadgrid_t< vector_t< real_t > > &grid_)
Simplest form of constructor.
static const std::string & getkey(std::map< std::string, device_vector_t< real_t > > const &varnames, std::size_t ivar)
void memcpy_device_to_host()
Copy Device To Host.
void update_ptcl_to_grd()
Updates theptcl_to_grd map only, without changing.