18#include <range/v3/algorithm/fill.hpp>
19#include <range/v3/view/filter.hpp>
20#include <range/v3/view/transform.hpp>
30 std::string
const& property_name,
31 int const old_value,
int const new_value,
32 bool replace_if_exists)
40 catch (std::runtime_error
const& e)
42 ERR(
"{:s}", e.what());
46 const std::size_t n_property_tuples(
49 if (!replace_if_exists)
51 for (std::size_t i = 0; i < n_property_tuples; ++i)
53 if ((*property_value_vec)[i] == new_value)
56 "ElementValueModification::replaceElementValue() - "
57 "Replacement value '{:d}' is already taken, no changes "
65 auto const old_values_filter = ranges::views::filter(
66 [&old_value](
auto const& v) {
return v == old_value; });
67 ranges::fill(*property_value_vec | old_values_filter, new_value);
74 bool replace_if_exists)
76 return replace(mesh,
"MaterialIDs", old_value, new_value,
88 catch (std::runtime_error
const& e)
90 ERR(
"{:s}", e.what());
94 std::vector<int> value_mapping(
97 std::vector<int> reverse_mapping(value_mapping.back() + 1, 0);
98 std::size_t
const nValues(value_mapping.size());
99 for (std::size_t i = 0; i < nValues; ++i)
101 reverse_mapping[value_mapping[i]] = i;
104 property_value_vector->
assign(
105 *property_value_vector |
106 ranges::views::transform([&](
auto const v)
107 {
return reverse_mapping[v]; }));
121 catch (std::runtime_error
const& e)
123 ERR(
"{:s}", e.what());
127 auto const element_type_filter =
129 {
return e->getGeomType() == ele_type; });
131 auto selected_element_ids =
135 selected_element_ids |
136 ranges::views::transform([&](std::size_t
const k) ->
auto&
137 {
return (*property_value_vector)[k]; }),
140 return ranges::distance(selected_element_ids);
Definition of the ElementValueModification class.
Definition of the Element class.
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
void WARN(fmt::format_string< Args... > fmt, Args &&... args)
Definition of the Mesh class.
std::vector< Element * > const & getElements() const
Get the element-vector for the mesh.
Properties & getProperties()
PropertyVector< T > const * getPropertyVector(std::string_view name) const
constexpr std::size_t getNumberOfTuples() const
constexpr void assign(R &&r)
constexpr ranges::views::view_closure ids
For an element of a range view return its id.
MeshElemType
Types of mesh elements supported by OpenGeoSys. Values are from VTKCellType enum.