8(std::map<std::string, std::vector<double>> & vars,
9 std::initializer_list<str>
const & pvarnames,
10 std::initializer_list<str>
const & gvarnames,
11 bool apply_mass)
const {
12 using strlist = std::initializer_list<str>
const &;
14 (vars, pvarnames, gvarnames, apply_mass);
17template<
typename GT,
typename PT>
20(std::map<std::string, std::vector<double>> & vars,
23 bool apply_mass)
const {
26 double N = 0.0, xx = 0.0, yy = 0.0;
30 for (std::size_t ivar = 0; ivar < std::size(gvarnames); ++ivar) {
31 auto & gvar = vars[
getkey(gvarnames, ivar)];
32 auto const & dprop =
dprops.at (
getkey(pvarnames, ivar));
38 for (
idx_t inode = 0; inode < 4; ++inode) {
39 N = icell.shp(xx, yy, inode) * dprop[
ip];
40 gvar[icell.gt(inode)] += N;
49 for (std::size_t ivar = 0; ivar < std::size (gvarnames); ++ivar)
51 for (
idx_t ii = 0; ii <
M.size (); ++ii) {
52 vars[
getkey(gvarnames, ivar)][ii] /=
M[ii];
60(std::map<std::string, std::vector<double>> & vars,
61 std::initializer_list<str>
const & pxvarnames,
62 std::initializer_list<str>
const & pyvarnames,
63 std::string
const &area,
64 std::initializer_list<str>
const & gvarnames,
65 bool apply_mass)
const {
66 using strlist = std::initializer_list<str>
const &;
68 (vars, pxvarnames, pyvarnames, area, gvarnames, apply_mass);
72template<
typename GT,
typename PT>
75(std::map<std::string, std::vector<double>> & vars,
76 PT
const & pxvarnames,
77 PT
const & pyvarnames,
78 std::string
const &area,
80 bool apply_mass)
const {
83 double xx = 0.0, yy = 0.0, Nx = 0.0, Ny = 0.0;
85 for (std::size_t ivar = 0; ivar < std::size (gvarnames); ++ivar) {
86 auto & gvar = vars[
getkey(gvarnames, ivar)];
87 auto const & dpropx =
dprops.at (
getkey(pxvarnames, ivar));
88 auto const & dpropy =
dprops.at (
getkey(pyvarnames, ivar));
89 auto const & dproparea =
dprops.at (area);
95 for (
idx_t inode = 0; inode < 4; ++inode) {
96 Nx = icell.shg (xx, yy, 0, inode);
97 Ny = icell.shg (xx, yy, 1, inode);
98 gvar[icell.gt(inode)] += (Nx * dpropx[
ip] + Ny * dpropy[
ip]) * dproparea[
ip];
105 for (std::size_t ivar = 0; ivar < std::size (gvarnames); ++ivar)
106 for (
idx_t ii = 0; ii <
M.size (); ++ii) {
107 vars[
getkey(gvarnames, ivar)][ii] /=
M[ii];
112template<
typename str>
115(
const std::map<std::string, std::vector<double>> & vars,
116 std::initializer_list<str>
const & gvarnames,
117 std::initializer_list<str>
const & pvarnames,
119 using strlist = std::initializer_list<str>
const &;
121 pvarnames, apply_mass);
126template<
typename GVAR_t,
typename PVAR_t,
typename P2C_t>
145 const GVAR_t gvar_,
const P2C_t ptcl_to_grd_,
const idx_t nrows_,
146 const double hx_,
const double hy_, PVAR_t dprop_,
bool apply_mass_)
147 :
x(x_),
y(y_),
gvar(gvar_),
159 for (
idx_t inode = 0; inode < 4; ++inode) {
161 qgt::shp (xx, yy, inode, c, r,
hx,
hy);
168template<
typename GT,
typename PT>
171(
const std::map<std::string, std::vector<double>>& vars,
172 GT
const & gvarnames,
173 PT
const & pvarnames,
177 double N = 0.0, xx = 0.0, yy = 0.0;
180 for (std::size_t ivar = 0; ivar < std::size (gvarnames); ++ivar) {
182 auto const & gvar = vars.at (
getkey (gvarnames, ivar));
199 dprop.begin (), apply_mass);
202 std::for_each (rng.
begin (), rng.
end (), helper);
207template<
typename str>
210(
const std::map<std::string, std::vector<double>>& vars,
211 std::initializer_list<str>
const & gvarnames,
212 std::initializer_list<str>
const & pxvarnames,
213 std::initializer_list<str>
const & pyvarnames,
215 using strlist = std::initializer_list<str>
const &;
217 pyvarnames, apply_mass);
222template<
typename GVAR_t,
typename PVAR_t,
typename P2C_t>
242 const GVAR_t gvar_,
const P2C_t ptcl_to_grd_,
const idx_t nrows_,
243 const double hx_,
const double hy_, PVAR_t dpropx_, PVAR_t dpropy_,
245 :
x(x_),
y(y_),
gvar(gvar_),
252 double Nx = 0.0, Ny = 0.0;
258 for (
idx_t inode = 0; inode < 4; ++inode) {
260 qgt::shg (xx, yy, 0, inode, c, r,
hx,
hy) *
M[qgt::gt(inode, c, r,
nrows)] :
261 qgt::shg (xx, yy, 0, inode, c, r,
hx,
hy);
263 qgt::shg (xx, yy, 1, inode, c, r,
hx,
hy) *
M[qgt::gt(inode, c, r,
nrows)] :
264 qgt::shg (xx, yy, 1, inode, c, r,
hx,
hy);
272template<
typename GT,
typename PT>
275(
const std::map<std::string, std::vector<double>>& vars,
276 GT
const & gvarnames,
277 PT
const & pxvarnames,
278 PT
const & pyvarnames,
282 double Nx = 0.0, Ny = 0.0, xx = 0.0, yy = 0.0;
284 for (std::size_t ivar = 0; ivar < std::size (gvarnames); ++ivar) {
285 auto const & gvar = vars.at (
getkey (gvarnames, ivar));
308 dpropx.begin (), dpropy.begin (), apply_mass);
311 std::for_each (rng.
begin (), rng.
end (), helper);
319(std::ostream & os)
const;
324(std::ostream & os)
const;
329(std::ostream & os)
const;
Template class for the implementation of the g2p method.
Definition particles_imp.h:128
bool apply_mass
Definition particles_imp.h:140
PVAR_t dprop
Definition particles_imp.h:139
const double hy
Definition particles_imp.h:138
const GVAR_t M
Definition particles_imp.h:133
const double hx
Definition particles_imp.h:137
const P2C_t ptcl_to_grd
Definition particles_imp.h:135
const PVAR_t x
Definition particles_imp.h:131
particles_t::idx_t idx_t
Definition particles_imp.h:130
const GVAR_t gvar
Definition particles_imp.h:134
g2p_helper_t(const PVAR_t x_, const PVAR_t y_, const GVAR_t M_, const GVAR_t gvar_, const P2C_t ptcl_to_grd_, const idx_t nrows_, const double hx_, const double hy_, PVAR_t dprop_, bool apply_mass_)
Definition particles_imp.h:144
const idx_t nrows
Definition particles_imp.h:136
const PVAR_t y
Definition particles_imp.h:132
Template class for the implementation g2pd method.
Definition particles_imp.h:224
particles_t::idx_t idx_t
Definition particles_imp.h:226
const P2C_t ptcl_to_grd
Definition particles_imp.h:231
const GVAR_t gvar
Definition particles_imp.h:230
PVAR_t dpropx
Definition particles_imp.h:235
bool apply_mass
Definition particles_imp.h:237
const double hy
Definition particles_imp.h:234
PVAR_t dpropy
Definition particles_imp.h:236
const idx_t nrows
Definition particles_imp.h:232
const GVAR_t M
Definition particles_imp.h:229
g2pd_helper_t(const PVAR_t x_, const PVAR_t y_, const GVAR_t M_, const GVAR_t gvar_, const P2C_t ptcl_to_grd_, const idx_t nrows_, const double hx_, const double hy_, PVAR_t dpropx_, PVAR_t dpropy_, bool apply_mass_)
Definition particles_imp.h:241
const double hx
Definition particles_imp.h:233
const PVAR_t x
Definition particles_imp.h:227
const PVAR_t y
Definition particles_imp.h:228
Definition quadgrid_cpp.h:24
idx_t & ip(const std::string &name, idx_t ii)
shortcut for iprops.at (name) [ii]
Definition particles.h:265
void p2gd(std::map< std::string, std::vector< double > > &vars, PT const &pxvarnames, PT const &pyvarnames, std::string const &area, GT const &gvarnames, bool apply_mass=false) const
Definition particles_imp.h:75
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
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
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
std::vector< double > y
y coordinate of particle positions.
Definition particles.h:36
void g2pd(const std::map< std::string, std::vector< double > > &vars, GT const &gvarnames, PT const &pxvarnames, PT const &pyvarnames, bool apply_mass=false)
Definition particles_imp.h:275
std::vector< double > M
Mass matrix to be used for transfers if required.
Definition particles.h:44
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
iterator begin() const
Definition counter.h:33
iterator end() const
Definition counter.h:34