135 std::vector<InitialConditionDataSet>& data_initial_conditions)
141 for (
auto& initial_condition : data_initial_conditions)
143 auto const& property_name = initial_condition.variable_name;
145 initial_condition.mesh->getProperties();
148 property_name, initial_condition.mesh_item_type))
151 "overwrite_mesh_data: property '{:s}' of the requested mesh "
152 "item type was not found on the mesh.",
157 if (initial_condition.parameter)
162 if (!initial_condition.property_copy)
165 initial_condition.property_copy.reset(
168 DBUG(
"created property copy for: {}", property_name);
173 for (
auto const& initial_condition : data_initial_conditions)
176 initial_condition.mesh->getProperties();
178 initial_condition.variable_name);
182 collectWriteGroups(initial_condition, pv, properties);
184 bool const has_parameter = initial_condition.parameter !=
nullptr;
188 if (!has_parameter && !initial_condition.property_copy)
191 "overwrite_mesh_data: neither a parameter nor an original-data "
192 "snapshot is available for property '{:s}'. This is an "
195 initial_condition.variable_name);
197 auto const*
const copy_data =
198 has_parameter ? nullptr
199 :
static_cast<double const*
>(
200 initial_condition.property_copy->data());
202 for (
auto const& group : groups)
204 std::vector<double> param_values;
207 param_values = (*initial_condition.parameter)(0.0, group.pos);
212 if (
static_cast<int>(param_values.size()) != n_components)
215 "overwrite_mesh_data: the parameter used to set "
216 "property '{:s}' returns {:d} component(s), but the "
217 "property has {:d} component(s).",
218 initial_condition.variable_name, param_values.size(),
223 for (std::size_t slot = group.slot_begin; slot < group.slot_end;
226 double const*
const source =
227 has_parameter ? param_values.data()
228 : copy_data + slot * n_components;
229 for (
int comp = 0; comp < n_components; ++comp)
231 pv[slot * n_components + comp] = source[comp];