53 _fparser_name(rhs._fparser_name),
54 _base_name(rhs._base_name),
55 _dependent_symbols(rhs._dependent_symbols),
56 _derivative_symbols(rhs._derivative_symbols),
58 _old_older_value(nullptr),
60 _property_name(rhs._property_name),
69 _fparser_name(rhs._fparser_name),
70 _base_name(rhs._base_name),
71 _dependent_symbols(rhs._dependent_symbols),
72 _derivative_symbols(rhs._derivative_symbols),
74 _old_older_value(nullptr),
76 _property_name(rhs._property_name),
125 auto open = expression.find_first_of(
"[");
126 auto close = expression.find_last_of(
"]");
128 if (open == std::string::npos && close == std::string::npos)
131 parseDependentSymbols(expression);
135 if (open != std::string::npos && close != std::string::npos)
137 if (expression.substr(0, open) ==
"Old")
139 _base_name = expression.substr(open + 1, close - open - 1);
140 _dependent_symbols.clear();
141 _state = PropertyState::OLD;
144 if (expression.substr(0, open) ==
"Older")
146 _base_name = expression.substr(open + 1, close - open - 1);
147 _dependent_symbols.clear();
148 _state = PropertyState::OLDER;
151 else if (expression.substr(0, open) ==
"D")
153 auto arguments = expression.substr(open + 1, close - open - 1);
154 auto close2 = arguments.find_last_of(
")");
156 if (close2 == std::string::npos)
163 if (_derivative_symbols.size() > 0)
166 parseDependentSymbols(_derivative_symbols[0]);
169 _derivative_symbols.erase(_derivative_symbols.begin());
170 updatePropertyName();
177 parseDependentSymbols(arguments.substr(0, close2 + 1));
179 updatePropertyName();
185 mooseError(
"Malformed material_properties expression '", expression,
"'");
192 auto open = expression.find_first_of(
"(");
193 auto close = expression.find_last_of(
")");
195 if (open == std::string::npos && close == std::string::npos)
198 _base_name = expression;
200 else if (open != std::string::npos && close != std::string::npos)
203 _base_name = expression.substr(0, open);
206 MooseUtils::tokenize(expression.substr(open + 1, close - open - 1), _dependent_symbols, 0,
",");
209 std::sort(_dependent_symbols.begin(), _dependent_symbols.end());
210 _dependent_symbols.erase(std::unique(_dependent_symbols.begin(), _dependent_symbols.end()),
211 _dependent_symbols.end());
214 mooseError(
"Malformed material_properties expression '", expression,
"'");
235 if (_state == PropertyState::CURRENT)
237 if (_value ==
nullptr)
245 auto name = derivativePropertyName(_base_name, _derivative_symbols);
248 if (_material_parent)
249 _value = _required ? &(_material_parent->getGenericMaterialProperty<Real, is_ad>(name))
250 : &(_material_parent->getGenericZeroMaterialProperty<Real, is_ad>(name));
251 else if (_kernel_parent)
252 _value = _required ? &(_kernel_parent->getGenericMaterialProperty<Real, is_ad>(name))
253 : &(_kernel_parent->getGenericZeroMaterialProperty<Real, is_ad>(name));
255 mooseError(
"A FunctionMaterialPropertyDescriptor must be owned by either a Material or a "
263 if (_old_older_value ==
nullptr)
265 mooseAssert(_derivative_symbols.empty(),
"Don't take derivatives of old/older properties.");
273 if (_material_parent)
274 _old_older_value = (_state == PropertyState::OLD)
275 ? &(_material_parent->getMaterialPropertyOld<Real>(_base_name))
276 : &(_material_parent->getMaterialPropertyOlder<Real>(_base_name));
277 else if (_kernel_parent)
278 _old_older_value = (_state == PropertyState::OLD)
279 ? &(_kernel_parent->getMaterialPropertyOld<Real>(_base_name))
280 : &(_kernel_parent->getMaterialPropertyOlder<Real>(_base_name));
282 mooseError(
"A FunctionMaterialPropertyDescriptor must be owned by either a Material or a "
void tokenize(const std::string &str, std::vector< T > &elements, unsigned int min_len=1, const std::string &delims="/")
This function will split the passed in string on a set of delimiters appending the substrings to the ...