aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/ParticleCreation/DefaultInitialization.H
diff options
context:
space:
mode:
authorGravatar atmyers <atmyers2@gmail.com> 2020-02-02 18:23:35 -0800
committerGravatar atmyers <atmyers2@gmail.com> 2020-02-02 18:23:35 -0800
commit4c840d404339c7accc44cb7be95bb2cbf6ea5221 (patch)
tree1e5f08acbbadc477638ec92d9e898621a2d2854f /Source/Particles/ParticleCreation/DefaultInitialization.H
parent7cc97e105d422ad44c1d92aa42d2f103be1655ab (diff)
downloadWarpX-4c840d404339c7accc44cb7be95bb2cbf6ea5221.tar.gz
WarpX-4c840d404339c7accc44cb7be95bb2cbf6ea5221.tar.zst
WarpX-4c840d404339c7accc44cb7be95bb2cbf6ea5221.zip
combine the default initializer and the smart copy into one
Diffstat (limited to 'Source/Particles/ParticleCreation/DefaultInitialization.H')
-rw-r--r--Source/Particles/ParticleCreation/DefaultInitialization.H94
1 files changed, 33 insertions, 61 deletions
diff --git a/Source/Particles/ParticleCreation/DefaultInitialization.H b/Source/Particles/ParticleCreation/DefaultInitialization.H
index e2491a483..87ebdc5cb 100644
--- a/Source/Particles/ParticleCreation/DefaultInitialization.H
+++ b/Source/Particles/ParticleCreation/DefaultInitialization.H
@@ -28,35 +28,6 @@
enum struct InitializationPolicy {Zero=0, One, SignalingNan, RandomTau};
/**
- * \brief This is a functor that implements the above InitializationPolicies
- * in a switch statement. It is designed to be used in device code when
- * running on GPUs.
- */
-struct DefaultInitializer
-{
- const InitializationPolicy* m_policies;
-
- AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
- amrex::Real operator() (int j) const noexcept
- {
- switch (m_policies[j]) {
- case InitializationPolicy::Zero : return 0.0;
- case InitializationPolicy::One : return 1.0;
- case InitializationPolicy::SignalingNan : {
- return 1.0;
- }
- case InitializationPolicy::RandomTau : {
- return 1.0;
- }
- default : {
- amrex::Abort("Initialization Policy not recognized");
- return 1.0;
- }
- }
- }
-};
-
-/**
* \brief This map sets the initialization policy for each particle component
* used in WarpX.
*/
@@ -74,41 +45,42 @@ static std::map<std::string, InitializationPolicy> initialization_policies = {
#ifdef WARPX_DIM_RZ
{"theta", InitializationPolicy::Zero},
#endif
- {"tau", InitializationPolicy::RandomTau}
+ {"tau", InitializationPolicy::RandomTau}
};
-/**
- * \brief This is a factory class that creates instances of "DefaultInitializer".
- * Each particle type in WarpX has one of these associated with it. While
- * "DefaultInitializer" is a lightweight class intended to be used on the device,
- * this class is meant to be used on the host.
- */
-class DefaultInitializerFactory
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+amrex::ParticleReal initializeRealValue (const InitializationPolicy policy) noexcept
{
- amrex::Gpu::DeviceVector<InitializationPolicy> m_policies;
- bool m_defined;
-
-public:
-
- DefaultInitializerFactory () noexcept : m_defined(false) {};
-
- void define (const std::map<std::string, int>& comps) noexcept
- {
- m_policies.resize(comps.size());
- for (const auto& kv : comps)
- {
- m_policies[kv.second] = initialization_policies[kv.first];
- m_defined = true;
- }
- }
+ switch (policy) {
+ case InitializationPolicy::Zero : return 0.0;
+ case InitializationPolicy::One : return 1.0;
+ case InitializationPolicy::SignalingNan : {
+ return 1.0;
+ }
+ case InitializationPolicy::RandomTau : {
+ return 1.0;
+ }
+ default : {
+ amrex::Abort("Initialization Policy not recognized");
+ return 1.0;
+ }
+ }
+}
- DefaultInitializer getDefaultInitializer () const noexcept
- {
- AMREX_ASSERT(m_defined);
- return DefaultInitializer{m_policies.dataPtr()};
- }
-
- bool isDefined () const noexcept { return m_defined; }
-};
+AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
+int initializeIntValue (const InitializationPolicy policy) noexcept
+{
+ switch (policy) {
+ case InitializationPolicy::Zero : return 0;
+ case InitializationPolicy::One : return 1;
+ case InitializationPolicy::SignalingNan : {
+ return 1;
+ }
+ default : {
+ amrex::Abort("Initialization Policy not recognized");
+ return 1;
+ }
+ }
+}
#endif