Skip to content

Commit

Permalink
Named: Enable Name Reset after Constructor
Browse files Browse the repository at this point in the history
  • Loading branch information
ax3l committed Sep 26, 2024
1 parent e097bb9 commit 81f7258
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 4 deletions.
26 changes: 24 additions & 2 deletions src/particles/elements/mixin/named.H
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,28 @@ namespace impactx::elements
*/
struct Named
{
/** Overwrite the name of the element
*
* @param new_name set a new name on the element
*/
AMREX_GPU_HOST
void set_name (
std::string const & new_name
)
{
// free old name
if (m_name != nullptr) {
delete[] m_name;
m_name = nullptr;
}

// set new name
if (new_name.size() > 0) {
m_name = new char[new_name.size() + 1];
std::strcpy(m_name, new_name.c_str());
}
}

/** A user-named element
*
* @param name a user defined and not necessarily unique name of the element
Expand All @@ -37,8 +59,7 @@ namespace impactx::elements
)
{
if (name.has_value()) {
m_name = new char[name->size() + 1];
std::strcpy(m_name, name->c_str());
set_name(*name);
}
}

Expand Down Expand Up @@ -116,6 +137,7 @@ namespace impactx::elements
return m_name != nullptr;
}

private:
// Implementation note:
// This is used as a mixin class in elements that are copied to GPU. GPU compilers copy
// a whole element by its sizeof(T).
Expand Down
6 changes: 5 additions & 1 deletion src/python/elements.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,11 @@ void init_elements(py::module& m)
// mixin classes

py::class_<elements::Named>(me, "Named")
.def_property_readonly("name", &elements::Named::name)
.def_property("name",
[](elements::Named & nm) { return nm.name(); },
[](elements::Named & nm, std::string new_name) { nm.set_name(new_name); },
"segment length in m"
)
.def_property_readonly("has_name", &elements::Named::has_name)
;

Expand Down
8 changes: 7 additions & 1 deletion tests/python/test_push.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,14 @@ def test_element_push():
assert pc.total_number_of_particles() == npart

# init accelerator lattice
drift = elements.Drift(name="drift1", ds=0.25)
assert drift.name == "drift1"
# changed my mind on the name
drift.name = "mydrift"
assert drift.name == "mydrift"

fodo = [
elements.Drift(name="drift1", ds=0.25),
drift,
]
sim.lattice.extend(fodo)

Expand Down

0 comments on commit 81f7258

Please sign in to comment.