https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
neml2::LAROMANCE6DInterpolation Class Reference

#include <LAROMANCE6DInterpolation.h>

Inheritance diagram for neml2::LAROMANCE6DInterpolation:
[legend]

Public Types

enum  TransformEnum {
  TransformEnum::COMPRESS, TransformEnum::DECOMPRESS, TransformEnum::LOG10BOUNDED, TransformEnum::EXP10BOUNDED,
  TransformEnum::MINMAX
}
 

Public Member Functions

 LAROMANCE6DInterpolation (const OptionSet &options)
 
void request_AD () override
 

Static Public Member Functions

static OptionSet expected_options ()
 

Protected Member Functions

void set_value (bool, bool, bool) override
 

Private Member Functions

std::pair< Scalar, Scalar > findLeftIndexAndFraction (const Scalar &grid, const Scalar &interp_points) const
 find index of input point More...
 
Scalar interpolate_and_transform () const
 compute interpolated value and transform results More...
 
Scalar transform_data (const Scalar &data, const std::vector< double > &param, TransformEnum transform_type) const
 transform data More...
 
std::string json_to_string (const std::string &key) const
 read in json axes transform name More...
 
std::vector< double > json_to_vector (const std::string &key) const
 read in json axes transform constants More...
 
Scalar json_6Dvector_to_torch (const std::string &key) const
 read 6D grid date from json and store in Torch tensor More...
 
Scalar json_vector_to_torch (const std::string &key) const
 read 1D vector of grid points from json and store in Torch tensor More...
 
Scalar compute_interpolation (const std::vector< std::pair< Scalar, Scalar >> index_and_fraction, const Scalar grid_values) const
 compute interpolated value More...
 
TransformEnum get_transform_enum (const std::string &name) const
 
Scalar transform_compress (const Scalar &data, const std::vector< double > &params) const
 LAROMANCE transforms for input axes and output axis. More...
 
Scalar transform_decompress (const Scalar &data, const std::vector< double > &params) const
 
Scalar transform_log10_bounded (const Scalar &data, const std::vector< double > &params) const
 
Scalar transform_exp10_bounded (const Scalar &data, const std::vector< double > &params) const
 
Scalar transform_min_max (const Scalar &data, const std::vector< double > &params) const
 

Private Attributes

Scalar _stress_grid
 grid for interpolation More...
 
Scalar _temperature_grid
 
Scalar _plastic_strain_grid
 
Scalar _cell_grid
 
Scalar _wall_grid
 
Scalar _env_grid
 
Scalar _grid_values
 grid values being interpolated More...
 
nlohmann::json _json
 JSON object containing interpolation grid and values. More...
 
TransformEnum _stress_transform_enum
 input transform enums More...
 
TransformEnum _temperature_transform_enum
 
TransformEnum _plastic_strain_transform_enum
 
TransformEnum _cell_transform_enum
 
TransformEnum _wall_transform_enum
 
TransformEnum _env_transform_enum
 
std::vector< double > _stress_transform_values
 input transform values More...
 
std::vector< double > _temperature_transform_values
 
std::vector< double > _plastic_strain_transform_values
 
std::vector< double > _cell_transform_values
 
std::vector< double > _wall_transform_values
 
std::vector< double > _env_transform_values
 
std::string _output_rate_name
 output transform rate name More...
 
std::vector< double > _output_transform_values
 output transform values More...
 
TransformEnum _output_transform_enum
 output transform enum More...
 
const Variable< Scalar > & _vm_stress
 Model input for interpolation. More...
 
const Variable< Scalar > & _temperature
 Temperature. More...
 
const Variable< Scalar > & _ep_strain
 The creep strain. More...
 
const Variable< Scalar > & _cell_dd
 cell dislocation density More...
 
const Variable< Scalar > & _wall_dd
 wall dislocation density More...
 
const Variable< Scalar > & _env_fac
 environmental factor More...
 
Variable< Scalar > & _output_rate
 Model output. More...
 

Detailed Description

Definition at line 19 of file LAROMANCE6DInterpolation.h.

Member Enumeration Documentation

◆ TransformEnum

Enumerator
COMPRESS 
DECOMPRESS 
LOG10BOUNDED 
EXP10BOUNDED 
MINMAX 

Definition at line 28 of file LAROMANCE6DInterpolation.h.

29  {
30  COMPRESS,
31  DECOMPRESS,
32  LOG10BOUNDED,
33  EXP10BOUNDED,
34  MINMAX
35  };

Constructor & Destructor Documentation

◆ LAROMANCE6DInterpolation()

neml2::LAROMANCE6DInterpolation::LAROMANCE6DInterpolation ( const OptionSet &  options)

Definition at line 56 of file LAROMANCE6DInterpolation.C.

57  : Model(options),
58  _vm_stress(declare_input_variable<Scalar>("von_mises_stress")),
59  _temperature(declare_input_variable<Scalar>("temperature")),
60  _ep_strain(declare_input_variable<Scalar>("equivalent_plastic_strain")),
61  _cell_dd(declare_input_variable<Scalar>("cell_dislocation_density")),
62  _wall_dd(declare_input_variable<Scalar>("wall_dislocation_density")),
63  _env_fac(declare_input_variable<Scalar>("env_factor")),
64  _output_rate(declare_output_variable<Scalar>("output_rate"))
65 {
66  std::string filename = options.get<std::string>("model_file_name");
67  std::ifstream model_file(filename.c_str());
68  model_file >> _json;
69 
70  // storing grid points for indexing.
71  // these should be stored differently so that they are all read in at once. The order of this can
72  // get messed up easily
73  _stress_grid = json_vector_to_torch("in_stress");
74  _temperature_grid = json_vector_to_torch("in_temperature");
75  _plastic_strain_grid = json_vector_to_torch("in_plastic_strain");
76  _cell_grid = json_vector_to_torch("in_cell");
77  _wall_grid = json_vector_to_torch("in_wall");
78  _env_grid = json_vector_to_torch("in_env");
79 
80  // Read in grid axes transform enums
81  _stress_transform_enum = get_transform_enum(json_to_string("in_stress_transform_type"));
82  _temperature_transform_enum = get_transform_enum(json_to_string("in_temperature_transform_type"));
84  get_transform_enum(json_to_string("in_plastic_strain_transform_type"));
85  _cell_transform_enum = get_transform_enum(json_to_string("in_cell_transform_type"));
86  _wall_transform_enum = get_transform_enum(json_to_string("in_wall_transform_type"));
87  _env_transform_enum = get_transform_enum(json_to_string("in_env_transform_type"));
88 
89  // Read in grid axes transform values
90  _stress_transform_values = json_to_vector("in_stress_transform_values");
91  _temperature_transform_values = json_to_vector("in_temperature_transform_values");
92  _plastic_strain_transform_values = json_to_vector("in_plastic_strain_transform_values");
93  _cell_transform_values = json_to_vector("in_cell_transform_values");
94  _wall_transform_values = json_to_vector("in_wall_transform_values");
95  _env_transform_values = json_to_vector("in_env_transform_values");
96 
97  // Storing values for interpolation
98  _output_rate_name = options.get<std::string>("model_file_variable_name");
100 
101  // set up output transforms
102  if (_output_rate_name == "out_ep")
103  {
104  _output_transform_enum = get_transform_enum(json_to_string("out_strain_rate_transform_type"));
105  _output_transform_values = json_to_vector("out_strain_rate_transform_values");
106  }
107  else if (_output_rate_name == "out_cell")
108  {
109  _output_transform_enum = get_transform_enum(json_to_string("out_cell_rate_transform_type"));
110  _output_transform_values = json_to_vector("out_cell_rate_transform_values");
111  }
112  else if (_output_rate_name == "out_wall")
113  {
114  _output_transform_enum = get_transform_enum(json_to_string("out_wall_rate_transform_type"));
115  _output_transform_values = json_to_vector("out_wall_rate_transform_values");
116  }
117  else
118  {
119  throw NEMLException("This ouput variable is not implemented, model_file_variable_name: " +
120  std::string(_output_rate_name));
121  }
122 }
TransformEnum _output_transform_enum
output transform enum
const Variable< Scalar > & _temperature
Temperature.
std::string json_to_string(const std::string &key) const
read in json axes transform name
TransformEnum get_transform_enum(const std::string &name) const
const Variable< Scalar > & _wall_dd
wall dislocation density
const Variable< Scalar > & _cell_dd
cell dislocation density
std::vector< double > _plastic_strain_transform_values
const Variable< Scalar > & _env_fac
environmental factor
std::string _output_rate_name
output transform rate name
std::vector< double > _stress_transform_values
input transform values
TransformEnum _stress_transform_enum
input transform enums
Scalar json_6Dvector_to_torch(const std::string &key) const
read 6D grid date from json and store in Torch tensor
Scalar _grid_values
grid values being interpolated
const Variable< Scalar > & _vm_stress
Model input for interpolation.
Scalar _stress_grid
grid for interpolation
Scalar json_vector_to_torch(const std::string &key) const
read 1D vector of grid points from json and store in Torch tensor
nlohmann::json _json
JSON object containing interpolation grid and values.
std::vector< double > _output_transform_values
output transform values
std::vector< double > json_to_vector(const std::string &key) const
read in json axes transform constants
Variable< Scalar > & _output_rate
Model output.
std::vector< double > _temperature_transform_values
const Variable< Scalar > & _ep_strain
The creep strain.

Member Function Documentation

◆ compute_interpolation()

Scalar neml2::LAROMANCE6DInterpolation::compute_interpolation ( const std::vector< std::pair< Scalar, Scalar >>  index_and_fraction,
const Scalar  grid_values 
) const
private

compute interpolated value

Definition at line 179 of file LAROMANCE6DInterpolation.C.

Referenced by interpolate_and_transform().

181 {
182  Scalar result = Scalar::zeros_like(_temperature);
183  for (const auto i : {0, 1})
184  for (const auto j : {0, 1})
185  for (const auto k : {0, 1})
186  for (const auto l : {0, 1})
187  for (const auto m : {0, 1})
188  for (const auto n : {0, 1})
189  {
190  auto vertex_value =
191  grid_values.index({(index_and_fraction[0].first +
192  torch::tensor(i, default_integer_tensor_options())),
193  (index_and_fraction[1].first +
194  torch::tensor(j, default_integer_tensor_options())),
195  (index_and_fraction[2].first +
196  torch::tensor(k, default_integer_tensor_options())),
197  (index_and_fraction[3].first +
198  torch::tensor(l, default_integer_tensor_options())),
199  (index_and_fraction[4].first +
200  torch::tensor(m, default_integer_tensor_options())),
201  (index_and_fraction[5].first +
202  torch::tensor(n, default_integer_tensor_options()))});
203  auto weight = index_and_fraction[0].second.select(-1, i) *
204  index_and_fraction[1].second.select(-1, j) *
205  index_and_fraction[2].second.select(-1, k) *
206  index_and_fraction[3].second.select(-1, l) *
207  index_and_fraction[4].second.select(-1, m) *
208  index_and_fraction[5].second.select(-1, n);
209  result += vertex_value * weight;
210  }
211  return result;
212 }
const Variable< Scalar > & _temperature
Temperature.
dof_id_type weight(const MeshBase &mesh, const processor_id_type pid)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
static const std::string k
Definition: NS.h:130

◆ expected_options()

OptionSet neml2::LAROMANCE6DInterpolation::expected_options ( )
static

Definition at line 30 of file LAROMANCE6DInterpolation.C.

31 {
32  auto options = Model::expected_options();
33  options.doc() =
34  "Multilinear interpolation over six dimensions (von_mises_stress, temperature, "
35  "equivalent_plastic_strain, cell_dislocation_density, wall_dislocation_density, env_factor)";
36  // Model inputs
37  options.set<VariableName>("equivalent_plastic_strain");
38  options.set<VariableName>("von_mises_stress");
39 
40  options.set<VariableName>("cell_dislocation_density");
41  options.set<VariableName>("wall_dislocation_density");
42 
43  options.set<VariableName>("temperature");
44  options.set<VariableName>("env_factor");
45  // Model Outputs
46  options.set_output("output_rate");
47  // JSON
48  options.set<std::string>("model_file_name");
49  options.set<std::string>("model_file_variable_name");
50  // jit does not currently work with this
51  options.set<bool>("jit") = false;
52  options.set("jit").suppressed() = true;
53  return options;
54 }

◆ findLeftIndexAndFraction()

std::pair< Scalar, Scalar > neml2::LAROMANCE6DInterpolation::findLeftIndexAndFraction ( const Scalar &  grid,
const Scalar &  interp_points 
) const
private

find index of input point

Definition at line 160 of file LAROMANCE6DInterpolation.C.

Referenced by interpolate_and_transform().

162 {
163  // idx is for the left grid point.
164  // searchsorted returns the right idx so -1 makes it the left
165  auto left_idx = Scalar(torch::searchsorted(grid, interp_points) - 1);
166 
167  // this allows us to extrapolate
168  left_idx = Scalar(torch::clamp(left_idx, 0, grid.sizes()[0] - 2));
169 
170  auto left_coord = grid.batch_index({left_idx});
171  auto right_coord =
172  grid.batch_index({left_idx + torch::tensor(1, default_integer_tensor_options())});
173  auto left_fraction = (right_coord - interp_points) / (right_coord - left_coord);
174 
175  return {left_idx, neml2::batch_stack({left_fraction, 1 - left_fraction}, -1)};
176 }

◆ get_transform_enum()

LAROMANCE6DInterpolation::TransformEnum neml2::LAROMANCE6DInterpolation::get_transform_enum ( const std::string &  name) const
private

Definition at line 143 of file LAROMANCE6DInterpolation.C.

Referenced by LAROMANCE6DInterpolation().

144 {
145  if (name == "COMPRESS")
147  else if (name == "DECOMPRESS")
149  else if (name == "LOG10BOUNDED")
151  else if (name == "EXP10BOUNDED")
153  else if (name == "MINMAX")
154  return TransformEnum::MINMAX;
155 
156  throw NEMLException("Unrecognized transform: " + std::string(name));
157 }
const std::string name
Definition: Setup.h:20

◆ interpolate_and_transform()

Scalar neml2::LAROMANCE6DInterpolation::interpolate_and_transform ( ) const
private

compute interpolated value and transform results

compute interpolated value

Definition at line 216 of file LAROMANCE6DInterpolation.C.

Referenced by set_value().

217 {
218  // These transform constants should be given in the json file.
219  const auto cell_dd_transformed =
221  const auto wall_dd_transformed =
223  const auto vm_stress_transformed =
225  const auto ep_strain_transformed =
227  const auto temperature_transformed =
229  const auto env_fac_transformed =
231 
232  std::vector<std::pair<Scalar, Scalar>> left_index_weight;
233  left_index_weight.push_back(findLeftIndexAndFraction(_stress_grid, vm_stress_transformed));
234  left_index_weight.push_back(findLeftIndexAndFraction(_temperature_grid, temperature_transformed));
235  left_index_weight.push_back(
236  findLeftIndexAndFraction(_plastic_strain_grid, ep_strain_transformed));
237  left_index_weight.push_back(findLeftIndexAndFraction(_cell_grid, cell_dd_transformed));
238  left_index_weight.push_back(findLeftIndexAndFraction(_wall_grid, wall_dd_transformed));
239  left_index_weight.push_back(findLeftIndexAndFraction(_env_grid, env_fac_transformed));
240  Scalar interpolated_result = compute_interpolation(left_index_weight, _grid_values);
241  Scalar transformed_result =
243  return transformed_result;
244 }
Scalar transform_data(const Scalar &data, const std::vector< double > &param, TransformEnum transform_type) const
transform data
TransformEnum _output_transform_enum
output transform enum
const Variable< Scalar > & _temperature
Temperature.
const Variable< Scalar > & _wall_dd
wall dislocation density
const Variable< Scalar > & _cell_dd
cell dislocation density
std::vector< double > _plastic_strain_transform_values
const Variable< Scalar > & _env_fac
environmental factor
std::vector< double > _stress_transform_values
input transform values
std::pair< Scalar, Scalar > findLeftIndexAndFraction(const Scalar &grid, const Scalar &interp_points) const
find index of input point
TransformEnum _stress_transform_enum
input transform enums
Scalar compute_interpolation(const std::vector< std::pair< Scalar, Scalar >> index_and_fraction, const Scalar grid_values) const
compute interpolated value
Scalar _grid_values
grid values being interpolated
const Variable< Scalar > & _vm_stress
Model input for interpolation.
Scalar _stress_grid
grid for interpolation
std::vector< double > _output_transform_values
output transform values
std::vector< double > _temperature_transform_values
const Variable< Scalar > & _ep_strain
The creep strain.

◆ json_6Dvector_to_torch()

Scalar neml2::LAROMANCE6DInterpolation::json_6Dvector_to_torch ( const std::string &  key) const
private

read 6D grid date from json and store in Torch tensor

Definition at line 372 of file LAROMANCE6DInterpolation.C.

Referenced by LAROMANCE6DInterpolation().

373 {
374  using std::vector;
375  if (!_json.contains(key))
376  throw NEMLException("The key '" + std::string(key) + "' is missing from the JSON data file.");
377 
378  vector<vector<vector<vector<vector<vector<double>>>>>> out_data =
379  _json[key].get<vector<vector<vector<vector<vector<vector<double>>>>>>>();
380 
381  const int64_t sz_l0 = out_data.size();
382  const int64_t sz_l1 = out_data[0].size();
383  const int64_t sz_l2 = out_data[0][0].size();
384  const int64_t sz_l3 = out_data[0][0][0].size();
385  const int64_t sz_l4 = out_data[0][0][0][0].size();
386  const int64_t sz_l5 = out_data[0][0][0][0][0].size();
387 
388  auto check_level_size =
389  [](const int64_t current_vec_size, const int64_t sz_level, const std::string & key)
390  {
391  if (current_vec_size != sz_level)
392  throw NEMLException("Incorrect JSON interpolation grid size for '" + key + "'.");
393  };
394 
395  std::vector<double> linearize_values;
396  check_level_size(out_data.size(), sz_l0, key);
397  for (auto && level1 : out_data)
398  {
399  check_level_size(level1.size(), sz_l1, key);
400  for (auto && level2 : level1)
401  {
402  check_level_size(level2.size(), sz_l2, key);
403  for (auto && level3 : level2)
404  {
405  check_level_size(level3.size(), sz_l3, key);
406  for (auto && level4 : level3)
407  {
408  check_level_size(level4.size(), sz_l4, key);
409  for (auto && level5 : level4)
410  {
411  check_level_size(level5.size(), sz_l5, key);
412  for (auto && value : level5)
413  linearize_values.push_back(value);
414  }
415  }
416  }
417  }
418  }
419 
420  return Scalar::create(linearize_values)
421  .batch_reshape({sz_l0, sz_l1, sz_l2, sz_l3, sz_l4, sz_l5})
422  .clone();
423 }
nlohmann::json _json
JSON object containing interpolation grid and values.

◆ json_to_string()

std::string neml2::LAROMANCE6DInterpolation::json_to_string ( const std::string &  key) const
private

read in json axes transform name

Definition at line 342 of file LAROMANCE6DInterpolation.C.

Referenced by LAROMANCE6DInterpolation().

343 {
344  if (!_json.contains(key))
345  throw NEMLException("The key '" + std::string(key) + "' is missing from the JSON data file.");
346 
347  std::string name = _json[key].get<std::string>();
348  return name;
349 }
const std::string name
Definition: Setup.h:20
nlohmann::json _json
JSON object containing interpolation grid and values.

◆ json_to_vector()

std::vector< double > neml2::LAROMANCE6DInterpolation::json_to_vector ( const std::string &  key) const
private

read in json axes transform constants

Definition at line 352 of file LAROMANCE6DInterpolation.C.

Referenced by LAROMANCE6DInterpolation().

353 {
354  if (!_json.contains(key))
355  throw NEMLException("The key '" + std::string(key) + "' is missing from the JSON data file.");
356 
357  std::vector<double> data_vec = _json[key].get<std::vector<double>>();
358  return data_vec;
359 }
nlohmann::json _json
JSON object containing interpolation grid and values.

◆ json_vector_to_torch()

Scalar neml2::LAROMANCE6DInterpolation::json_vector_to_torch ( const std::string &  key) const
private

read 1D vector of grid points from json and store in Torch tensor

Definition at line 362 of file LAROMANCE6DInterpolation.C.

Referenced by LAROMANCE6DInterpolation().

363 {
364  if (!_json.contains(key))
365  throw NEMLException("The key '" + std::string(key) + "' is missing from the JSON data file.");
366 
367  std::vector<double> in_data = _json[key].get<std::vector<double>>();
368  return Scalar::create(in_data).clone();
369 }
nlohmann::json _json
JSON object containing interpolation grid and values.

◆ request_AD()

void neml2::LAROMANCE6DInterpolation::request_AD ( )
override

Definition at line 125 of file LAROMANCE6DInterpolation.C.

126 {
127  // only using first derivatives of out_ep, not out_cell and out_wall
128  if (_output_rate_name == "out_ep")
129  {
130  std::vector<const VariableBase *> inputs = {&_vm_stress};
131  _output_rate.request_AD(inputs);
132  }
133 }
std::string _output_rate_name
output transform rate name
const Variable< Scalar > & _vm_stress
Model input for interpolation.
Variable< Scalar > & _output_rate
Model output.

◆ set_value()

void neml2::LAROMANCE6DInterpolation::set_value ( bool  out,
bool  ,
bool   
)
overrideprotected

Definition at line 136 of file LAROMANCE6DInterpolation.C.

137 {
138  if (out)
140 }
Scalar interpolate_and_transform() const
compute interpolated value and transform results
Variable< Scalar > & _output_rate
Model output.

◆ transform_compress()

Scalar neml2::LAROMANCE6DInterpolation::transform_compress ( const Scalar &  data,
const std::vector< double > &  params 
) const
private

LAROMANCE transforms for input axes and output axis.

Definition at line 274 of file LAROMANCE6DInterpolation.C.

Referenced by transform_data().

276 {
277  double factor = param[0];
278  double compressor = param[1];
279  double original_min = param[2];
280  auto d1 = neml2::sign(data) * neml2::pow(neml2::abs(data * factor), compressor);
281  auto transformed_data = neml2::log10(1.0 + d1 - original_min);
282  return transformed_data;
283 }
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)

◆ transform_data()

Scalar neml2::LAROMANCE6DInterpolation::transform_data ( const Scalar &  data,
const std::vector< double > &  param,
TransformEnum  transform_type 
) const
private

transform data

Definition at line 247 of file LAROMANCE6DInterpolation.C.

Referenced by interpolate_and_transform().

250 {
251  switch (transform_type)
252  {
254  return transform_compress(data, param);
255 
257  return transform_decompress(data, param);
258 
260  return transform_log10_bounded(data, param);
261 
263  return transform_exp10_bounded(data, param);
264 
266  return transform_min_max(data, param);
267 
268  default:
269  return data;
270  }
271 }
Scalar transform_exp10_bounded(const Scalar &data, const std::vector< double > &params) const
Scalar transform_decompress(const Scalar &data, const std::vector< double > &params) const
Scalar transform_min_max(const Scalar &data, const std::vector< double > &params) const
Scalar transform_compress(const Scalar &data, const std::vector< double > &params) const
LAROMANCE transforms for input axes and output axis.
Scalar transform_log10_bounded(const Scalar &data, const std::vector< double > &params) const

◆ transform_decompress()

Scalar neml2::LAROMANCE6DInterpolation::transform_decompress ( const Scalar &  data,
const std::vector< double > &  params 
) const
private

Definition at line 286 of file LAROMANCE6DInterpolation.C.

Referenced by transform_data().

288 {
289  double factor = param[0];
290  double compressor = param[1];
291  double original_min = param[2];
292  auto d1 = neml2::pow(10.0, data) - 1.0 + original_min;
293  auto transformed_data = neml2::sign(d1) * neml2::pow(neml2::abs(d1), 1.0 / compressor) / factor;
294  return transformed_data;
295 }
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)

◆ transform_exp10_bounded()

Scalar neml2::LAROMANCE6DInterpolation::transform_exp10_bounded ( const Scalar &  data,
const std::vector< double > &  params 
) const
private

Definition at line 314 of file LAROMANCE6DInterpolation.C.

Referenced by transform_data().

316 {
317  double factor = param[0];
318  double lowerbound = param[1];
319  double upperbound = param[2];
320  double logmin = param[3];
321  double logmax = param[4];
322  double range = upperbound - lowerbound;
323  auto transformed_data =
324  (neml2::pow(10.0, ((data - lowerbound) * (logmax - logmin) / range) + logmin) - factor);
325  return transformed_data;
326 }
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)

◆ transform_log10_bounded()

Scalar neml2::LAROMANCE6DInterpolation::transform_log10_bounded ( const Scalar &  data,
const std::vector< double > &  params 
) const
private

Definition at line 298 of file LAROMANCE6DInterpolation.C.

Referenced by transform_data().

301 {
302  double factor = param[0];
303  double lowerbound = param[1];
304  double upperbound = param[2];
305  double logmin = param[3];
306  double logmax = param[4];
307  double range = upperbound - lowerbound;
308  auto transformed_data =
309  range * (neml2::log10(data + factor) - logmin) / (logmax - logmin) + lowerbound;
310  return transformed_data;
311 }

◆ transform_min_max()

Scalar neml2::LAROMANCE6DInterpolation::transform_min_max ( const Scalar &  data,
const std::vector< double > &  params 
) const
private

Definition at line 329 of file LAROMANCE6DInterpolation.C.

Referenced by transform_data().

331 {
332  double data_min = param[0];
333  double data_max = param[1];
334  double scaled_min = param[2];
335  double scaled_max = param[3];
336  auto transformed_data =
337  ((data - data_min) / (data_max - data_min)) * (scaled_max - scaled_min) + scaled_min;
338  return transformed_data;
339 }

Member Data Documentation

◆ _cell_dd

const Variable<Scalar>& neml2::LAROMANCE6DInterpolation::_cell_dd
private

cell dislocation density

Definition at line 61 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform().

◆ _cell_grid

Scalar neml2::LAROMANCE6DInterpolation::_cell_grid
private

◆ _cell_transform_enum

TransformEnum neml2::LAROMANCE6DInterpolation::_cell_transform_enum
private

◆ _cell_transform_values

std::vector<double> neml2::LAROMANCE6DInterpolation::_cell_transform_values
private

◆ _env_fac

const Variable<Scalar>& neml2::LAROMANCE6DInterpolation::_env_fac
private

environmental factor

Definition at line 65 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform().

◆ _env_grid

Scalar neml2::LAROMANCE6DInterpolation::_env_grid
private

◆ _env_transform_enum

TransformEnum neml2::LAROMANCE6DInterpolation::_env_transform_enum
private

◆ _env_transform_values

std::vector<double> neml2::LAROMANCE6DInterpolation::_env_transform_values
private

◆ _ep_strain

const Variable<Scalar>& neml2::LAROMANCE6DInterpolation::_ep_strain
private

The creep strain.

Definition at line 59 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform().

◆ _grid_values

Scalar neml2::LAROMANCE6DInterpolation::_grid_values
private

grid values being interpolated

Definition at line 50 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform(), and LAROMANCE6DInterpolation().

◆ _json

nlohmann::json neml2::LAROMANCE6DInterpolation::_json
private

JSON object containing interpolation grid and values.

Definition at line 75 of file LAROMANCE6DInterpolation.h.

Referenced by json_6Dvector_to_torch(), json_to_string(), json_to_vector(), json_vector_to_torch(), and LAROMANCE6DInterpolation().

◆ _output_rate

Variable<Scalar>& neml2::LAROMANCE6DInterpolation::_output_rate
private

Model output.

output rate

Definition at line 71 of file LAROMANCE6DInterpolation.h.

Referenced by request_AD(), and set_value().

◆ _output_rate_name

std::string neml2::LAROMANCE6DInterpolation::_output_rate_name
private

output transform rate name

Definition at line 124 of file LAROMANCE6DInterpolation.h.

Referenced by LAROMANCE6DInterpolation(), and request_AD().

◆ _output_transform_enum

TransformEnum neml2::LAROMANCE6DInterpolation::_output_transform_enum
private

output transform enum

Definition at line 128 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform(), and LAROMANCE6DInterpolation().

◆ _output_transform_values

std::vector<double> neml2::LAROMANCE6DInterpolation::_output_transform_values
private

output transform values

Definition at line 126 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform(), and LAROMANCE6DInterpolation().

◆ _plastic_strain_grid

Scalar neml2::LAROMANCE6DInterpolation::_plastic_strain_grid
private

◆ _plastic_strain_transform_enum

TransformEnum neml2::LAROMANCE6DInterpolation::_plastic_strain_transform_enum
private

◆ _plastic_strain_transform_values

std::vector<double> neml2::LAROMANCE6DInterpolation::_plastic_strain_transform_values
private

◆ _stress_grid

Scalar neml2::LAROMANCE6DInterpolation::_stress_grid
private

grid for interpolation

Definition at line 42 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform(), and LAROMANCE6DInterpolation().

◆ _stress_transform_enum

TransformEnum neml2::LAROMANCE6DInterpolation::_stress_transform_enum
private

input transform enums

Definition at line 108 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform(), and LAROMANCE6DInterpolation().

◆ _stress_transform_values

std::vector<double> neml2::LAROMANCE6DInterpolation::_stress_transform_values
private

input transform values

Definition at line 116 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform(), and LAROMANCE6DInterpolation().

◆ _temperature

const Variable<Scalar>& neml2::LAROMANCE6DInterpolation::_temperature
private

Temperature.

Definition at line 57 of file LAROMANCE6DInterpolation.h.

Referenced by compute_interpolation(), and interpolate_and_transform().

◆ _temperature_grid

Scalar neml2::LAROMANCE6DInterpolation::_temperature_grid
private

◆ _temperature_transform_enum

TransformEnum neml2::LAROMANCE6DInterpolation::_temperature_transform_enum
private

◆ _temperature_transform_values

std::vector<double> neml2::LAROMANCE6DInterpolation::_temperature_transform_values
private

◆ _vm_stress

const Variable<Scalar>& neml2::LAROMANCE6DInterpolation::_vm_stress
private

Model input for interpolation.

The von Mises stress

Definition at line 55 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform(), and request_AD().

◆ _wall_dd

const Variable<Scalar>& neml2::LAROMANCE6DInterpolation::_wall_dd
private

wall dislocation density

Definition at line 63 of file LAROMANCE6DInterpolation.h.

Referenced by interpolate_and_transform().

◆ _wall_grid

Scalar neml2::LAROMANCE6DInterpolation::_wall_grid
private

◆ _wall_transform_enum

TransformEnum neml2::LAROMANCE6DInterpolation::_wall_transform_enum
private

◆ _wall_transform_values

std::vector<double> neml2::LAROMANCE6DInterpolation::_wall_transform_values
private

The documentation for this class was generated from the following files: