diff --git a/Src/Particle/AMReX_ParticleContainer.H b/Src/Particle/AMReX_ParticleContainer.H index 95cc3a996d..2782e74335 100644 --- a/Src/Particle/AMReX_ParticleContainer.H +++ b/Src/Particle/AMReX_ParticleContainer.H @@ -60,6 +60,7 @@ #include #include #include +#include #include #include #include @@ -1269,6 +1270,11 @@ public: void AddRealComp (std::string const & name, int communicate=1) { + // names must be unique + auto const it = std::find(m_soa_rdata_names.begin(), m_soa_rdata_names.end(), name); + if (it != m_soa_rdata_names.end()) { + throw std::runtime_error("AddRealComp: name '" + name + "' is already present in the SoA."); + } m_soa_rdata_names.push_back(name); m_runtime_comps_defined = true; @@ -1297,6 +1303,11 @@ public: void AddIntComp (std::string const & name, int communicate=1) { + // names must be unique + auto const it = std::find(m_soa_idata_names.begin(), m_soa_idata_names.end(), name); + if (it != m_soa_idata_names.end()) { + throw std::runtime_error("AddIntComp: name '" + name + "' is already present in the SoA."); + } m_soa_idata_names.push_back(name); m_runtime_comps_defined = true; diff --git a/Src/Particle/AMReX_ParticleContainerI.H b/Src/Particle/AMReX_ParticleContainerI.H index 9d749bb3b8..769ab997f3 100644 --- a/Src/Particle/AMReX_ParticleContainerI.H +++ b/Src/Particle/AMReX_ParticleContainerI.H @@ -1,5 +1,6 @@ #include +#include #include #include #include @@ -89,6 +90,12 @@ ParticleContainer_impl const unique_r_names(rdata_name.begin(), rdata_name.end()); + std::set const unique_i_names(idata_name.begin(), idata_name.end()); + AMREX_ALWAYS_ASSERT_WITH_MESSAGE(rdata_name.size() == unique_r_names.size(), "SetSoACompileTimeNames: Provided names in rdata_name are not unique!"); + AMREX_ALWAYS_ASSERT_WITH_MESSAGE(idata_name.size() == unique_i_names.size(), "SetSoACompileTimeNames: Provided names in idata_name are not unique!"); + for (int i=0; i