24 "data_file",
"",
"File holding csv data for use with PiecewiseBilinear");
25 params.
addParam<std::vector<Real>>(
"x",
"The x abscissa values");
26 params.
addParam<std::vector<Real>>(
"y",
"The y abscissa values");
27 params.
addParam<std::vector<Real>>(
"z",
"The ordinate values");
28 params.
addParam<
int>(
"axis", -1,
"The axis used (0, 1, or 2 for x, y, or z).");
30 "xaxis", -1,
"The coordinate used for x-axis data (0, 1, or 2 for x, y, or z).");
32 "yaxis", -1,
"The coordinate used for y-axis data (0, 1, or 2 for x, y, or z).");
34 "scale_factor", 1.0,
"Scale factor to be applied to the axis, yaxis, or xaxis values");
37 "Set to true if you want to interpolate along a radius "
38 "rather that along a specific axis, and note that you "
39 "have to define xaxis and yaxis in the input file");
46 _xaxis(getParam<
int>(
"xaxis")),
47 _yaxis(getParam<
int>(
"yaxis")),
48 _data_file_name(getParam<FileName>(
"data_file")),
49 _axis(getParam<
int>(
"axis")),
50 _axisValid(_axis > -1 && _axis < 3),
51 _yaxisValid(_yaxis > -1 && _yaxis < 3),
52 _xaxisValid(_xaxis > -1 && _xaxis < 3),
53 _scale_factor(getParam<Real>(
"scale_factor")),
54 _radial(getParam<bool>(
"radial"))
60 ": None of axis, yaxis, or xaxis properly defined. Allowable range is 0-2");
63 mooseError(
"In PiecewiseBilinear ",
_name,
": Cannot define axis with either yaxis or xaxis");
67 "In PiecewiseBilinear ",
_name,
": yaxis and xaxis must be defined when radial = true");
72 std::vector<Real> z_vec;
78 mooseError(
"In PiecewiseBilinear: Cannot specify 'data_file' and 'x', 'y', or 'z' together.");
85 mooseError(
"In PiecewiseBilinear: 'x' and 'y' and 'z' must be specified if any one is "
86 "specified or no 'data_file' is specified.");
90 x = getParam<std::vector<Real>>(
"x");
91 y = getParam<std::vector<Real>>(
"y");
92 z_vec = getParam<std::vector<Real>>(
"z");
95 if (z_vec.size() != x.size() * y.size())
96 mooseError(
"In PiecewiseBilinear: Size of z should be the size of x times the size of y.");
101 for (
unsigned int i = 0; i < y.size(); i++)
102 for (
unsigned int j = 0; j < x.size(); j++)
104 z(i, j) = z_vec[idx];
126template <
typename T,
typename P>
136 const auto r = sqrt(rx + ry);
156 std::vector<Real> & x,
157 std::vector<Real> & y,
159 const std::string & object_name)
161 std::ifstream file(data_file_name.c_str());
163 ::mooseError(object_name,
" : Error opening file '", data_file_name,
"'.");
165 std::size_t num_lines = 0;
167 std::vector<Real> data;
170 std::vector<Real> line_data;
171 while (std::getline(file, line))
174 if (!MooseUtils::tokenizeAndConvert<double>(line, line_data,
", "))
175 ::mooseError(object_name,
" : Error parsing file '", data_file_name,
"' on line ", num_lines);
177 data.insert(data.end(), line_data.begin(), line_data.end());
180 num_cols = line_data.size();
181 else if (line_data.size() != num_cols + 1)
185 " columns of data but expected ",
192 y.resize(num_lines - 1);
193 z.
reshape(num_lines - 1, num_cols);
194 std::size_t offset = 0;
197 for (
unsigned int j = 0; j < num_cols; ++j)
198 x[j] = data[offset++];
200 for (
unsigned int i = 0; i < num_lines - 1; ++i)
203 y[i] = data[offset++];
206 for (
unsigned int j = 0; j < num_cols; ++j)
207 z(i, j) = data[offset++];
210 if (data.size() != offset)
211 ::mooseError(object_name,
" : Inconsistency in data read from '", data_file_name,
"'.");
DualNumber< Real, DNDerivativeType, true > ADReal
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
registerMooseObject("MooseApp", PiecewiseBilinear)
void ErrorVector unsigned int
void reshape(const unsigned int rows, const unsigned int cols)
Change the shape of the tensor.
Base class for function objects.
static InputParameters validParams()
Class constructor.
const InputParameters & parameters() const
Get the parameters of the object.
const std::string & name() const
Get the name of the class.
const std::string & _name
The name of this class.
PiecewiseBilinear reads from a file the information necessary to build the vectors x and y and the Co...
T valueInternal(T t, const P &p) const
PiecewiseBilinear(const InputParameters ¶meters)
static InputParameters validParams()
virtual ~PiecewiseBilinear()
static void parse(const std::string &data_file_name, std::vector< Real > &x, std::vector< Real > &y, ColumnMajorMatrix &z, const std::string &object_name)
Parse a text/CSV file to fill two-dimensional data.
const std::string _data_file_name
virtual Real value(Real t, const Point &pt) const override
This function will return a value based on the first input argument only.
std::unique_ptr< BilinearInterpolation > _bilinear_interp
const unsigned int invalid_uint