https://mooseframework.inl.gov
Loading...
Searching...
No Matches
KokkosParsedObjectBase.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://www.mooseframework.org
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
13
14#include "MooseObject.h"
15
16namespace Moose::Kokkos
17{
18
20{
21public:
23
25
26protected:
32 template <typename T>
33 void checkDuplicateSymbols(const std::vector<T> & symbols, const std::string & param);
34
40 void addConstant(const std::string & name, const Real constant);
46 void addScalar(const std::string & name, const Real & scalar);
52 void addField(const std::string & name, const VariableValue & field);
58 void addProperty(const std::string & name, const MaterialProperty<Real> & property);
64 void addFunction(const std::string & name, const Function & function);
65
70 template <typename T>
71 void initParsed(T * obj, const std::vector<VariableName> & variable_names);
72
76 const std::string & _expression;
80 std::shared_ptr<RPNBuilder> _builder;
88 std::unordered_map<std::string, Real> _constants;
92 std::unordered_map<std::string, std::reference_wrapper<const Real>> _scalars;
96 std::unordered_map<std::string, VariableValue> _fields;
100 std::unordered_map<std::string, MaterialProperty<Real>> _properties;
104 std::unordered_map<std::string, Function> _functions;
105
106private:
110 void finalize();
111
119 std::unordered_set<std::string> _all_symbols;
120};
121
122template <typename T>
123void
124ParsedObjectBase::checkDuplicateSymbols(const std::vector<T> & symbols, const std::string & param)
125{
126 for (const auto & symbol : symbols)
127 {
128 if (_all_symbols.count(symbol))
129 _parsed_object->paramError(param, "Symbol '", symbol, "' was added multiple times.");
130
131 _all_symbols.insert(symbol);
132 }
133}
134
135template <typename T>
136void
137ParsedObjectBase::initParsed(T * obj, const std::vector<VariableName> & variable_names)
138{
139 const auto & constant_names = obj->template getParam<std::vector<std::string>>("constant_names");
140 const auto & postprocessor_names =
141 obj->template getParam<std::vector<PostprocessorName>>("postprocessor_names");
142 const auto & property_names =
143 obj->template getParam<std::vector<MaterialPropertyName>>("material_property_names");
144 const auto & function_names = obj->template getParam<std::vector<FunctionName>>("function_names");
145 const auto & constant_expressions =
146 obj->template getParam<std::vector<Real>>("constant_expressions");
147
148 for (const auto i : make_range(constant_names.size()))
149 addConstant(constant_names[i], constant_expressions[i]);
150
151 for (const auto & pp : postprocessor_names)
152 addScalar(pp, obj->getPostprocessorValueByName(pp));
153
154 for (const auto i : make_range(variable_names.size()))
155 addField(variable_names[i], obj->kokkosCoupledValue("coupled_variables", i));
156
157 for (const auto & prop : property_names)
158 addProperty(prop, obj->template getKokkosMaterialPropertyByName<Real>(prop));
159
160 for (const auto & func : function_names)
161 addFunction(func, obj->getKokkosFunctionByName(func));
162
163 finalize();
164}
165
166} // namespace Moose::Kokkos
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void paramError(const std::string &param, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
Definition MooseBase.h:457
Every object that can be built by the factory should be derived from this class.
Definition MooseObject.h:31
The abstract class that provides polymorphic interfaces for a function.
The Kokkos material property class.
void addProperty(const std::string &name, const MaterialProperty< Real > &property)
Add a material property.
void addField(const std::string &name, const VariableValue &field)
Add a field variable.
const MooseObject * _parsed_object
Parsed object.
void initParsed(T *obj, const std::vector< VariableName > &variable_names)
Initialize symbols from parsed parameters.
void addScalar(const std::string &name, const Real &scalar)
Add a scalar variable.
void addFunction(const std::string &name, const Function &function)
Add a function.
std::unordered_map< std::string, VariableValue > _fields
Field variables used in the parsed expression.
void addConstant(const std::string &name, const Real constant)
Add a constant.
std::unordered_map< std::string, Real > _constants
Constants used in the parsed expression.
RPNEvaluator _evaluator
Parsed function evaluator.
std::unordered_map< std::string, MaterialProperty< Real > > _properties
Material properties used in the parsed expression.
std::unordered_set< std::string > _all_symbols
All symbols added to the parsed function.
std::unordered_map< std::string, std::reference_wrapper< const Real > > _scalars
Scalar variables used in the parsed expression.
const std::string & _expression
Parsed expression.
std::unordered_map< std::string, Function > _functions
Functions used in the parsed expression.
std::shared_ptr< RPNBuilder > _builder
Parsed function builder.
void checkDuplicateSymbols(const std::vector< T > &symbols, const std::string &param)
Check if duplicate symbols were added.
void finalize()
Finalize parsed function.
ParsedObjectBase(const MooseObject *object)
static InputParameters validParams()
Reverse Polish Notation (RPN) evaluator.
The Kokkos wrapper classes for MOOSE-like variable value access.