99
1010#include "KokkosParsedObjectBase.h"
1111
12+ #include "FEProblemBase.h"
13+
1214namespace Moose::Kokkos
1315{
1416
@@ -21,6 +23,8 @@ ParsedObjectBase::validParams()
2123 "use_xyzt" ,
2224 false,
2325 "Make coordinate (x,y,z) and time (t) variables available in the function expression." );
26+ params.addParam<bool >(
27+ "use_dt" , false, "Make time step (dt) variable available in the function expression." );
2428
2529 // Constants and their values
2630 params.addParam<std::vector<std::string>>("constant_names" ,
@@ -34,24 +38,24 @@ ParsedObjectBase::validParams()
3438 params.addParam<std::vector<PostprocessorName>>(
3539 "postprocessor_names" ,
3640 std::vector<PostprocessorName>(),
37- "Vector of postprocessor names used in the parsed function" );
41+ "Vector of postprocessor names used in the parsed function. " );
3842
3943 // Field variables
40- params.addCoupledVar("coupled_variables" , "Vector of variables used in the parsed function" );
44+ params.addCoupledVar("coupled_variables" , "Vector of variables used in the parsed function. " );
4145
4246 // Material properties
4347 params.addParam<std::vector<MaterialPropertyName>>(
4448 "material_property_names" ,
4549 std::vector<MaterialPropertyName>(),
46- "Vector of material properties used in the parsed function" );
50+ "Vector of material properties used in the parsed function. " );
4751
4852 // Functions
4953 params.addParam<std::vector<FunctionName>>("function_names" ,
5054 std::vector<FunctionName>(),
51- "Vector of functions used in the parsed function" );
55+ "Vector of functions used in the parsed function. " );
5256
5357 // Function expression
54- params.addParam<std::string>("expression" , "Parsed function expression for the parsed material " );
58+ params.addParam<std::string>("expression" , "Parsed function expression. " );
5559
5660 return params;
5761}
@@ -73,6 +77,13 @@ ParsedObjectBase::ParsedObjectBase(const MooseObject * object)
7377 _all_symbols.insert("t" );
7478 }
7579
80+ if (parameters.get<bool >("use_dt" ))
81+ {
82+ addScalar("dt" , object->getMooseApp().feProblem().dt());
83+
84+ _all_symbols.insert("dt" );
85+ }
86+
7687 const auto & constant_names = parameters.get<std::vector<std::string>>("constant_names" );
7788 const auto & postprocessor_names =
7889 parameters.get<std::vector<PostprocessorName>>("postprocessor_names" );
@@ -96,16 +107,14 @@ ParsedObjectBase::addConstant(const std::string & name, const Real constant)
96107 _builder->addVariable(name);
97108
98109 _constants[name] = constant;
99- _builder->associateScalar(name, &_constants.at(name));
100110}
101111
102112void
103- ParsedObjectBase::addScalar(const std::string & name, const Real * scalar)
113+ ParsedObjectBase::addScalar(const std::string & name, const Real & scalar)
104114{
105115 _builder->addVariable(name);
106116
107- _scalars[name] = scalar;
108- _builder->associateScalar(name, _scalars.at(name));
117+ _scalars.insert({name, scalar});
109118}
110119
111120void
@@ -114,7 +123,6 @@ ParsedObjectBase::addField(const std::string & name, const VariableValue & field
114123 _builder->addVariable(name);
115124
116125 _fields[name] = field;
117- _builder->associateField(name, &_fields.at(name));
118126}
119127
120128void
@@ -123,7 +131,6 @@ ParsedObjectBase::addProperty(const std::string & name, const MaterialProperty<R
123131 _builder->addVariable(name);
124132
125133 _properties[name] = property;
126- _builder->associateProperty(name, &_properties.at(name));
127134}
128135
129136void
@@ -132,12 +139,26 @@ ParsedObjectBase::addFunction(const std::string & name, const Function & functio
132139 _builder->addVariable(name);
133140
134141 _functions.insert({name, function});
135- _builder->associateFunction(name, &_functions.at(name));
136142}
137143
138144void
139145ParsedObjectBase::finalize()
140146{
147+ for (const auto & [name, constant] : _constants)
148+ _builder->associateScalar(name, &constant);
149+
150+ for (const auto & [name, scalar] : _scalars)
151+ _builder->associateScalar(name, &scalar.get());
152+
153+ for (const auto & [name, field] : _fields)
154+ _builder->associateField(name, &field);
155+
156+ for (const auto & [name, property] : _properties)
157+ _builder->associateProperty(name, &property);
158+
159+ for (const auto & [name, function] : _functions)
160+ _builder->associateFunction(name, &function);
161+
141162 _builder->build();
142163 _builder->finalize();
143164
0 commit comments