diff --git a/src/include/psc/current_deposition.hxx b/src/include/psc/current_deposition.hxx index f46d5a161c..4447bbb71c 100644 --- a/src/include/psc/current_deposition.hxx +++ b/src/include/psc/current_deposition.hxx @@ -10,93 +10,79 @@ class CurrentDeposition1vb public: using Curr = C; using real_t = typename Curr::real_t; - using real3_t = Vec3; + using Real3 = Vec3; - GT_INLINE CurrentDeposition1vb(real3_t fnqs) : fnqs_{fnqs} {} + GT_INLINE CurrentDeposition1vb(Real3 fnqs) : fnqs_{fnqs} {} - GT_INLINE void operator()(Curr& curr, const int i[3], real_t qni_wni, - const real_t dx[3], const real_t xa[3], + GT_INLINE void operator()(Curr& curr, const Int3& i, real_t qni_wni, + const Real3& dx, const Real3& xa, dim_xyz tag_dim) const { - real_t h = (1.f / real_t(12.f)) * dx[0] * dx[1] * dx[2]; - real3_t fnq = qni_wni * fnqs_; - - curr.add(0, i[0], i[1], i[2], - fnq[0] * (dx[0] * (1.f - xa[1]) * (1.f - xa[2]) + h)); - curr.add(0, i[0], i[1] + 1, i[2], - fnq[0] * (dx[0] * (xa[1]) * (1.f - xa[2]) - h)); - curr.add(0, i[0], i[1], i[2] + 1, - fnq[0] * (dx[0] * (1.f - xa[1]) * (xa[2]) - h)); - curr.add(0, i[0], i[1] + 1, i[2] + 1, - fnq[0] * (dx[0] * (xa[1]) * (xa[2]) + h)); - - curr.add(1, i[0], i[1], i[2], - fnq[1] * (dx[1] * (1.f - xa[0]) * (1.f - xa[2]) + h)); - curr.add(1, i[0] + 1, i[1], i[2], - fnq[1] * (dx[1] * (xa[0]) * (1.f - xa[2]) - h)); - curr.add(1, i[0], i[1], i[2] + 1, - fnq[1] * (dx[1] * (1.f - xa[0]) * (xa[2]) - h)); - curr.add(1, i[0] + 1, i[1], i[2] + 1, - fnq[1] * (dx[1] * (xa[0]) * (xa[2]) + h)); - - curr.add(2, i[0], i[1], i[2], - fnq[2] * (dx[2] * (1.f - xa[0]) * (1.f - xa[1]) + h)); - curr.add(2, i[0] + 1, i[1], i[2], - fnq[2] * (dx[2] * (xa[0]) * (1.f - xa[1]) - h)); - curr.add(2, i[0], i[1] + 1, i[2], - fnq[2] * (dx[2] * (1.f - xa[0]) * (xa[1]) - h)); - curr.add(2, i[0] + 1, i[1] + 1, i[2], - fnq[2] * (dx[2] * (xa[0]) * (xa[1]) + h)); + real_t h = (1.f / real_t(12.f)) * dx.prod(); + Real3 fnq = qni_wni * fnqs_; + + // clang-format off + curr.add(0, i[0], i[1], i[2], fnq[0] * (dx[0] * (1.f - xa[1]) * (1.f - xa[2]) + h)); + curr.add(0, i[0], i[1] + 1, i[2], fnq[0] * (dx[0] * ( xa[1]) * (1.f - xa[2]) - h)); + curr.add(0, i[0], i[1], i[2] + 1, fnq[0] * (dx[0] * (1.f - xa[1]) * ( xa[2]) - h)); + curr.add(0, i[0], i[1] + 1, i[2] + 1, fnq[0] * (dx[0] * ( xa[1]) * ( xa[2]) + h)); + + curr.add(1, i[0], i[1], i[2], fnq[1] * (dx[1] * (1.f - xa[2]) * (1.f - xa[0]) + h)); + curr.add(1, i[0], i[1], i[2] + 1, fnq[1] * (dx[1] * ( xa[2]) * (1.f - xa[0]) - h)); + curr.add(1, i[0] + 1, i[1], i[2], fnq[1] * (dx[1] * (1.f - xa[2]) * ( xa[0]) - h)); + curr.add(1, i[0] + 1, i[1], i[2] + 1, fnq[1] * (dx[1] * ( xa[2]) * ( xa[0]) + h)); + + curr.add(2, i[0], i[1], i[2], fnq[2] * (dx[2] * (1.f - xa[0]) * (1.f - xa[1]) + h)); + curr.add(2, i[0] + 1, i[1], i[2], fnq[2] * (dx[2] * ( xa[0]) * (1.f - xa[1]) - h)); + curr.add(2, i[0], i[1] + 1, i[2], fnq[2] * (dx[2] * (1.f - xa[0]) * ( xa[1]) - h)); + curr.add(2, i[0] + 1, i[1] + 1, i[2], fnq[2] * (dx[2] * ( xa[0]) * ( xa[1]) + h)); + // clang-format on }; - GT_INLINE void operator()(Curr& curr, const int i[3], real_t qni_wni, - const real_t dx[3], const real_t xa[3], + GT_INLINE void operator()(Curr& curr, const Int3& i, real_t qni_wni, + const Real3& dx, const Real3& xa, dim_xz tag_dim) const { - real_t h = (1.f / real_t(12.f)) * dx[0] * dx[1] * dx[2]; - real3_t fnq = qni_wni * fnqs_; - - curr.add(0, i[0], i[1], i[2], fnq[0] * (dx[0] * (1.f - xa[2]))); - curr.add(0, i[0], i[1], i[2] + 1, fnq[0] * (dx[0] * (xa[2]))); - - curr.add(1, i[0], i[1], i[2], - fnq[1] * (dx[1] * (1.f - xa[0]) * (1.f - xa[2]) + h)); - curr.add(1, i[0] + 1, i[1], i[2], - fnq[1] * (dx[1] * (xa[0]) * (1.f - xa[2]) - h)); - curr.add(1, i[0], i[1], i[2] + 1, - fnq[1] * (dx[1] * (1.f - xa[0]) * (xa[2]) - h)); - curr.add(1, i[0] + 1, i[1], i[2] + 1, - fnq[1] * (dx[1] * (xa[0]) * (xa[2]) + h)); - - curr.add(2, i[0], i[1], i[2], fnq[2] * (dx[2] * (1.f - xa[0]))); - curr.add(2, i[0] + 1, i[1], i[2], fnq[2] * (dx[2] * (xa[0]))); + real_t h = (1.f / real_t(12.f)) * dx.prod(); + Real3 fnq = qni_wni * fnqs_; + + // clang-format off + curr.add(0, i[0], i[1], i[2], fnq[0] * (dx[0] * (1.f - xa[2]) )); + curr.add(0, i[0], i[1], i[2] + 1, fnq[0] * (dx[0] * ( xa[2]) )); + + curr.add(1, i[0], i[1], i[2], fnq[1] * (dx[1] * (1.f - xa[2]) * (1.f - xa[0]) + h)); + curr.add(1, i[0], i[1], i[2] + 1, fnq[1] * (dx[1] * ( xa[2]) * (1.f - xa[0]) - h)); + curr.add(1, i[0] + 1, i[1], i[2], fnq[1] * (dx[1] * (1.f - xa[2]) * ( xa[0]) - h)); + curr.add(1, i[0] + 1, i[1], i[2] + 1, fnq[1] * (dx[1] * ( xa[2]) * ( xa[0]) + h)); + + curr.add(2, i[0], i[1], i[2], fnq[2] * (dx[2] * (1.f - xa[0]) )); + curr.add(2, i[0] + 1, i[1], i[2], fnq[2] * (dx[2] * ( xa[0]) )); + // clang-format on } - GT_INLINE void operator()(Curr& curr, const int i[3], real_t qni_wni, - const real_t dx[3], const real_t xa[3], + GT_INLINE void operator()(Curr& curr, const Int3& i, real_t qni_wni, + const Real3& dx, const Real3& xa, dim_yz tag_dim) const { - real_t h = (1.f / real_t(12.f)) * dx[0] * dx[1] * dx[2]; - - real3_t fnq = qni_wni * fnqs_; - curr.add(0, i[0], i[1], i[2], - fnq[0] * (dx[0] * (1.f - xa[1]) * (1.f - xa[2]) + h)); - curr.add(0, i[0], i[1] + 1, i[2], - fnq[0] * (dx[0] * (xa[1]) * (1.f - xa[2]) - h)); - curr.add(0, i[0], i[1], i[2] + 1, - fnq[0] * (dx[0] * (1.f - xa[1]) * (xa[2]) - h)); - curr.add(0, i[0], i[1] + 1, i[2] + 1, - fnq[0] * (dx[0] * (xa[1]) * (xa[2]) + h)); - - curr.add(1, i[0], i[1], i[2], fnq[1] * (dx[1] * (1.f - xa[2]))); - curr.add(1, i[0], i[1], i[2] + 1, fnq[1] * (dx[1] * (xa[2]))); - - curr.add(2, i[0], i[1], i[2], fnq[2] * (dx[2] * (1.f - xa[1]))); - curr.add(2, i[0], i[1] + 1, i[2], fnq[2] * (dx[2] * (xa[1]))); + real_t h = (1.f / real_t(12.f)) * dx.prod(); + Real3 fnq = qni_wni * fnqs_; + + // clang-format off + curr.add(0, i[0], i[1], i[2], fnq[0] * (dx[0] * (1.f - xa[1]) * (1.f - xa[2]) + h)); + curr.add(0, i[0], i[1] + 1, i[2], fnq[0] * (dx[0] * ( xa[1]) * (1.f - xa[2]) - h)); + curr.add(0, i[0], i[1], i[2] + 1, fnq[0] * (dx[0] * (1.f - xa[1]) * ( xa[2]) - h)); + curr.add(0, i[0], i[1] + 1, i[2] + 1, fnq[0] * (dx[0] * ( xa[1]) * ( xa[2]) + h)); + + curr.add(1, i[0], i[1], i[2], fnq[1] * (dx[1] * (1.f - xa[2]) )); + curr.add(1, i[0], i[1], i[2] + 1, fnq[1] * (dx[1] * ( xa[2]) )); + + curr.add(2, i[0], i[1], i[2], fnq[2] * (dx[2] * (1.f - xa[1]) )); + curr.add(2, i[0], i[1] + 1, i[2], fnq[2] * (dx[2] * ( xa[1]) )); + // clang-format on } private: - real3_t fnqs_; + Real3 fnqs_; }; }; // namespace psc diff --git a/src/include/psc/deposit.hxx b/src/include/psc/deposit.hxx index af0a89f3f8..f00d3a9235 100644 --- a/src/include/psc/deposit.hxx +++ b/src/include/psc/deposit.hxx @@ -26,13 +26,13 @@ class Deposit1st { public: using real_t = R; - using real3_t = gt::sarray; + using Real3 = Vec3; using dim_t = D; private: template - void operator()(F& flds, const gt::sarray& l, const real3_t& h, - real_t val, dim_yz tag) + void operator()(F& flds, const Int3& l, const Real3& h, real_t val, + dim_yz tag) { flds(0, l[1] + 0, l[2] + 0) += val * (1.f - h[1]) * (1.f - h[2]); flds(0, l[1] + 1, l[2] + 0) += val * h[1] * (1.f - h[2]); @@ -41,8 +41,8 @@ private: } template - void operator()(F& flds, const gt::sarray& l, const real3_t& h, - real_t val, dim_xyz tag) + void operator()(F& flds, const Int3& l, const Real3& h, real_t val, + dim_xyz tag) { // clang-format off flds(l[0] + 0, l[1] + 0, l[2] + 0) += val * (1.f - h[0]) * (1.f - h[1]) * (1.f - h[2]); @@ -58,8 +58,7 @@ private: public: template - void operator()(F& flds, const gt::sarray& l, const real3_t& h, - real_t val) + void operator()(F& flds, const Int3& l, const Real3& h, real_t val) { (*this)(flds, l, h, val, dim_t{}); } @@ -76,13 +75,13 @@ class Deposit2nd { public: using real_t = R; - using real3_t = gt::sarray; + using Real3 = Vec3; using dim_t = D; private: template - void operator()(F& flds, const gt::sarray& l, const real3_t& h, - real_t val, dim_yz tag) + void operator()(F& flds, const Int3& l, const Real3& h, real_t val, + dim_yz tag) { real_t gmy = .5f * (.5f + h[1]) * (.5f + h[1]); real_t gmz = .5f * (.5f + h[2]) * (.5f + h[2]); @@ -105,8 +104,8 @@ private: } template - void operator()(F& flds, const gt::sarray& l, const real3_t& h, - real_t val, dim_xyz tag) + void operator()(F& flds, const Int3& l, const Real3& h, real_t val, + dim_xyz tag) { real_t gmx = .5f * (.5f + h[0]) * (.5f + h[0]); real_t gmy = .5f * (.5f + h[1]) * (.5f + h[1]); @@ -151,8 +150,7 @@ private: public: template - void operator()(F& flds, const gt::sarray& l, const real3_t& h, - real_t val) + void operator()(F& flds, const Int3& l, const Real3& h, real_t val) { (*this)(flds, l, h, val, dim_t{}); } @@ -178,12 +176,10 @@ public: static std::string suffix() { return "_1st_nc"; } template - void operator()(F& flds, const gt::sarray& ib, - const gt::sarray& x, T val) - + void operator()(F& flds, const Int3& ib, const Vec3& x, T val) { - gt::sarray l; - gt::sarray h; + Int3 l; + Vec3 h; for (int d = 0; d < 3; d++) { l[d] = fint(x[d]); h[d] = x[d] - l[d]; @@ -201,12 +197,10 @@ public: static std::string suffix() { return "_1st_cc"; } template - void operator()(F& flds, const gt::sarray& ib, - const gt::sarray& x, T val) - + void operator()(F& flds, const Int3& ib, const Vec3& x, T val) { - gt::sarray l; - gt::sarray h; + Int3 l; + Vec3 h; for (int d = 0; d < 3; d++) { l[d] = fint(x[d] - .5f); h[d] = x[d] - .5f - l[d]; @@ -228,12 +222,10 @@ public: static std::string suffix() { return "_2nd_nc"; } template - void operator()(F& flds, const gt::sarray& ib, - const gt::sarray& x, T val) - + void operator()(F& flds, const Int3& ib, const Vec3& x, T val) { - gt::sarray l; - gt::sarray h; + Int3 l; + Vec3 h; for (int d = 0; d < 3; d++) { l[d] = nint(x[d]); h[d] = l[d] - x[d]; // negated! @@ -245,14 +237,14 @@ public: }; template -void nc(F& flds, const gt::sarray& ib, const gt::sarray& x, T val) +void nc(F& flds, const Int3& ib, const Vec3& x, T val) { Deposit1stNc deposit; deposit(flds, ib, x, val); } template -void cc(F& flds, const gt::sarray& ib, const gt::sarray& x, T val) +void cc(F& flds, const Int3& ib, const Vec3& x, T val) { Deposit1stCc deposit; deposit(flds, ib, x, val); @@ -276,27 +268,25 @@ class Deposit public: using real_t = R; using dim_t = D; - using real3_t = gt::sarray; + using Real3 = Vec3; using DepositNorm = DEPOSIT_NORM; static const centering::Centering CENTERING = DepositNorm::CENTERING; static std::string suffix() { return DepositNorm::suffix(); } - Deposit(const real3_t& dx, real_t fnqs) : dxi_{real_t(1.) / dx}, fnqs_{fnqs} - {} + Deposit(const Real3& dx, real_t fnqs) : dxi_{real_t(1.) / dx}, fnqs_{fnqs} {} template - void operator()(const F& flds, const gt::shape_type<3>& ib, const real3_t& xi, - real_t val) + void operator()(const F& flds, const Int3& ib, const Real3& xi, real_t val) { - real3_t x = xi * dxi_; + Real3 x = xi * dxi_; real_t value = fnqs_ * val; DepositNorm deposit; deposit(flds, ib, x, value); } - real3_t dxi_; + Real3 dxi_; real_t fnqs_; }; diff --git a/src/include/psc/gtensor.h b/src/include/psc/gtensor.h index 98ec8ebb61..7ca29bdb4c 100644 --- a/src/include/psc/gtensor.h +++ b/src/include/psc/gtensor.h @@ -8,92 +8,3 @@ #endif #include - -namespace -{ - -template -GT_INLINE gt::sarray operator*(T a, const gt::sarray& x) -{ - gt::sarray res; - for (gt::size_type i = 0; i < N; i++) { - res[i] = a * x[i]; - } - return res; -} - -template -GT_INLINE gt::sarray operator/(const gt::sarray& x, T a) -{ - gt::sarray res; - for (gt::size_type i = 0; i < N; i++) { - res[i] = x[i] / a; - } - return res; -} - -template -GT_INLINE gt::sarray operator/(T a, const gt::sarray& x) -{ - gt::sarray res; - for (gt::size_type i = 0; i < N; i++) { - res[i] = a / x[i]; - } - return res; -} - -template -GT_INLINE gt::sarray operator-(const gt::sarray& x) -{ - gt::sarray res; - for (gt::size_type i = 0; i < N; i++) { - res[i] = -x[i]; - } - return res; -} - -template -GT_INLINE gt::sarray operator+(const gt::sarray& x, - const gt::sarray& y) -{ - gt::sarray res; - for (gt::size_type i = 0; i < N; i++) { - res[i] = x[i] + y[i]; - } - return res; -} - -template -GT_INLINE gt::sarray operator-(const gt::sarray& x, - const gt::sarray& y) -{ - gt::sarray res; - for (gt::size_type i = 0; i < N; i++) { - res[i] = x[i] - y[i]; - } - return res; -} - -template -GT_INLINE gt::sarray operator*(const gt::sarray& x, - const gt::sarray& y) -{ - gt::sarray res; - for (gt::size_type i = 0; i < N; i++) { - res[i] = x[i] * y[i]; - } - return res; -} - -template -GT_INLINE gt::sarray operator/(const gt::sarray& x, - const gt::sarray& y) -{ - gt::sarray res; - for (gt::size_type i = 0; i < N; i++) { - res[i] = x[i] / y[i]; - } - return res; -} - -} // namespace diff --git a/src/include/psc/moment.hxx b/src/include/psc/moment.hxx index 39672f7ed5..08a108714d 100644 --- a/src/include/psc/moment.hxx +++ b/src/include/psc/moment.hxx @@ -18,11 +18,11 @@ struct DepositParticlesContext using storage_type = S; using dim_t = D; using real_t = typename storage_type::value_type; - using real3_t = gt::sarray; + using Real3 = Vec3; using Deposit = DepositCode; DepositParticlesContext(storage_type& mflds_gt, const Int3& ib, - const real3_t& dx, real_t fnqs) + const Real3& dx, real_t fnqs) : mflds_gt{mflds_gt}, ib{ib}, deposit{dx, fnqs} {} @@ -35,7 +35,7 @@ struct DepositParticlesContext Int3 ib; Deposit deposit; int p; - real3_t x; + Real3 x; }; template ; + using Real3 = Vec3; using DepositCtx = DepositParticlesContext; template - void operator()(const real3_t& dx, real_t fnqs, storage_type& mflds_gt, + void operator()(const Real3& dx, real_t fnqs, storage_type& mflds_gt, const Int3& ib, const Mparticles& mprts, F&& func) { auto accessor = mprts.accessor(); @@ -70,10 +70,10 @@ template