|
IPPL (Independent Parallel Particle Layer)
IPPL
|
#include <OrthogonalRecursiveBisection.h>
Public Member Functions | |
| void | initialize (FieldLayout< Dim > &fl, mesh_type &mesh, const Field &rho) |
| template<typename Attrib> | |
| bool | binaryRepartition (const Attrib &R, FieldLayout< Dim > &fl, const bool &isFirstRepartition) |
| int | findCutAxis (NDIndex< Dim > &dom) |
| void | perpendicularReduction (std::vector< Tf > &rankWeights, unsigned int cutAxis, NDIndex< Dim > &dom) |
| int | findMedian (std::vector< Tf > &w) |
| void | cutDomain (std::vector< NDIndex< Dim > > &domains, std::vector< int > &procs, int it, int cutAxis, int median) |
| template<typename Attrib> | |
| void | scatterR (const Attrib &r) |
Public Attributes | |
| Field | bf_m |
Private Types | |
| using | mesh_type = typename Field::Mesh_t |
| using | Tf = typename Field::value_type |
Static Private Attributes | |
| static constexpr unsigned | Dim = Field::dim |
Definition at line 28 of file OrthogonalRecursiveBisection.h.
|
private |
Definition at line 30 of file OrthogonalRecursiveBisection.h.
|
private |
Definition at line 31 of file OrthogonalRecursiveBisection.h.
| bool ippl::OrthogonalRecursiveBisection< Field, Tp >::binaryRepartition | ( | const Attrib & | R, |
| FieldLayout< Dim > & | fl, | ||
| const bool & | isFirstRepartition ) |
Performs scatter operation of particle positions in field (weights) and repartitions FieldLayout's global domain
| Attrib | the particle attribute type (memory space must be accessible to field memory) |
| R | Weights to scatter |
| fl | FieldLayout |
| isFirstRepartition | boolean which tells whether to scatter or not |
Definition at line 14 of file OrthogonalRecursiveBisection.hpp.
References bf_m, ippl::FieldLayout< Dim >::comm, cutDomain(), findCutAxis(), findMedian(), ippl::FieldLayout< Dim >::getDomain(), IpplTimings::getTimer(), perpendicularReduction(), scatterR(), ippl::mpi::Communicator::size(), IpplTimings::startTimer(), IpplTimings::stopTimer(), and ippl::FieldLayout< Dim >::updateLayout().
| void ippl::OrthogonalRecursiveBisection< Field, Tp >::cutDomain | ( | std::vector< NDIndex< Dim > > & | domains, |
| std::vector< int > & | procs, | ||
| int | it, | ||
| int | cutAxis, | ||
| int | median ) |
Splits the domain given by the iterator along the cut axis at the median, the corresponding index will be cut between median and median+1
| domains | Set of subdomains which will be cut |
| procs | Set of ranks count associated to each subdomain |
| it | Iterator |
| cutAxis | Index of cut axis |
| median | Median |
Definition at line 241 of file OrthogonalRecursiveBisection.hpp.
References first(), and ippl::NDIndex< Dim >::split().
Referenced by binaryRepartition().
| int ippl::OrthogonalRecursiveBisection< Field, Tp >::findCutAxis | ( | NDIndex< Dim > & | dom | ) |
Find cutting axis as the longest axis of the field layout.
| dom | Domain to reduce |
Definition at line 125 of file OrthogonalRecursiveBisection.hpp.
References ippl::NDIndex< Dim >::begin(), and ippl::NDIndex< Dim >::end().
Referenced by binaryRepartition().
| int ippl::OrthogonalRecursiveBisection< Field, Tp >::findMedian | ( | std::vector< Tf > & | w | ) |
Find median of array
| w | Array of real numbers |
Definition at line 203 of file OrthogonalRecursiveBisection.hpp.
Referenced by binaryRepartition().
| void ippl::OrthogonalRecursiveBisection< Field, Tp >::initialize | ( | FieldLayout< Dim > & | fl, |
| mesh_type & | mesh, | ||
| const Field & | rho ) |
Initialize member field with mesh and field layout
| fl | |
| mesh | Mesh |
| rho | Density field |
Definition at line 6 of file OrthogonalRecursiveBisection.hpp.
References bf_m.
| void ippl::OrthogonalRecursiveBisection< Field, Tp >::perpendicularReduction | ( | std::vector< Tf > & | rankWeights, |
| unsigned int | cutAxis, | ||
| NDIndex< Dim > & | dom ) |
Performs reduction on local field in all dimension except that determined by cutAxis, stores result in res
| rankWeights | Array giving the result of reduction |
| cutAxis | Index of cut axis |
| dom | Domain to reduce |
Definition at line 134 of file OrthogonalRecursiveBisection.hpp.
References ippl::apply(), bf_m, ippl::createRangePolicy(), Dim, first(), ippl::NDIndex< Dim >::first(), and ippl::parallel_reduce().
Referenced by binaryRepartition().
| void ippl::OrthogonalRecursiveBisection< Field, Tp >::scatterR | ( | const Attrib & | r | ) |
Scattering of particle positions in field using a CIC method
| Attrib | the particle attribute type (memory space must be accessible to field memory) |
| r | Weights |
Definition at line 258 of file OrthogonalRecursiveBisection.hpp.
References bf_m, Dim, ippl::NDIndex< Dim >::first(), ippl::FieldLayout< Dim >::getLocalNDIndex(), ippl::Mesh< T, Dim >::getMeshSpacing(), and ippl::Mesh< T, Dim >::getOrigin().
Referenced by binaryRepartition().
| Field ippl::OrthogonalRecursiveBisection< Field, Tp >::bf_m |
Definition at line 35 of file OrthogonalRecursiveBisection.h.
Referenced by binaryRepartition(), initialize(), perpendicularReduction(), and scatterR().
|
staticconstexprprivate |
Definition at line 29 of file OrthogonalRecursiveBisection.h.
Referenced by perpendicularReduction(), and scatterR().