diff --git a/src/utils/Messenger.hpp b/src/utils/Messenger.hpp index 21e17abf24600869b619a66415dc51714ec2cb70..ac79ee8490882a1bac8a9fd74db58b6cd8dccdb7 100644 --- a/src/utils/Messenger.hpp +++ b/src/utils/Messenger.hpp @@ -766,6 +766,15 @@ class Messenger CastArray cast_array = cast_value_to<CastType>::from(data); _broadcast_array(cast_array, root_rank); } + } else if constexpr (std::is_same_v<std::string, DataType>) { + Array s = convert_to_array(data); + broadcast(s, root_rank); + if (m_rank != root_rank) { + data.resize(s.size()); + for (size_t i = 0; i < s.size(); ++i) { + data[i] = s[i]; + } + } } else { static_assert(is_false_v<DataType>, "unexpected type of data"); } diff --git a/tests/test_Messenger.cpp b/tests/test_Messenger.cpp index 4f76e250ddab60d81e1d49eacb1bcfc23425e317..4565614fbcd4e4dc387527b77ddb1be23b092e23 100644 --- a/tests/test_Messenger.cpp +++ b/tests/test_Messenger.cpp @@ -223,6 +223,18 @@ TEST_CASE("Messenger", "[mpi]") parallel::broadcast(value, 0); REQUIRE((value == mpi_check::tri_int{6, 2, 4})); } + + { + std::string data; + if (parallel::rank() == 0) { + data = "foo"; + } else { + data = "bar"; + } + + parallel::broadcast(data, 0); + REQUIRE(data == "foo"); + } } SECTION("broadcast array")