Skip to content
Snippets Groups Projects
Commit af2ce73e authored by Christoph Lehmann's avatar Christoph Lehmann
Browse files

[MPL] Made function property thread safe

parent 5382e6ce
No related branches found
No related tags found
No related merge requests found
...@@ -77,13 +77,18 @@ static void updateVariableValues( ...@@ -77,13 +77,18 @@ static void updateVariableValues(
static PropertyDataType evaluateExpressions( static PropertyDataType evaluateExpressions(
std::vector<std::pair<Variable, double*>> const& symbol_values, std::vector<std::pair<Variable, double*>> const& symbol_values,
VariableArray const& variable_array, VariableArray const& variable_array,
std::vector<exprtk::expression<double>> const& expressions) std::vector<exprtk::expression<double>> const& expressions,
std::mutex& mutex)
{ {
updateVariableValues(symbol_values, variable_array);
std::vector<double> result(expressions.size()); std::vector<double> result(expressions.size());
std::transform(begin(expressions), end(expressions), begin(result),
[](auto const& e) { return e.value(); }); {
std::lock_guard lock_guard(mutex);
updateVariableValues(symbol_values, variable_array);
std::transform(begin(expressions), end(expressions), begin(result),
[](auto const& e) { return e.value(); });
}
switch (result.size()) switch (result.size())
{ {
...@@ -187,7 +192,7 @@ PropertyDataType Function::value(VariableArray const& variable_array, ...@@ -187,7 +192,7 @@ PropertyDataType Function::value(VariableArray const& variable_array,
double const /*t*/, double const /*dt*/) const double const /*t*/, double const /*dt*/) const
{ {
return evaluateExpressions(symbol_values_, variable_array, return evaluateExpressions(symbol_values_, variable_array,
value_expressions_); value_expressions_, mutex_);
} }
PropertyDataType Function::dValue(VariableArray const& variable_array, PropertyDataType Function::dValue(VariableArray const& variable_array,
...@@ -208,7 +213,8 @@ PropertyDataType Function::dValue(VariableArray const& variable_array, ...@@ -208,7 +213,8 @@ PropertyDataType Function::dValue(VariableArray const& variable_array,
variable_enum_to_string[static_cast<int>(variable)], name_); variable_enum_to_string[static_cast<int>(variable)], name_);
} }
return evaluateExpressions(symbol_values_, variable_array, it->second); return evaluateExpressions(symbol_values_, variable_array, it->second,
mutex_);
} }
} // namespace MaterialPropertyLib } // namespace MaterialPropertyLib
...@@ -55,5 +55,7 @@ private: ...@@ -55,5 +55,7 @@ private:
/// Multiple expressions are representing vector-valued functions. /// Multiple expressions are representing vector-valued functions.
std::vector<std::pair<Variable, std::vector<Expression>>> std::vector<std::pair<Variable, std::vector<Expression>>>
dvalue_expressions_; dvalue_expressions_;
mutable std::mutex mutex_;
}; };
} // namespace MaterialPropertyLib } // namespace MaterialPropertyLib
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment