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 60 of file LAROMANCE6DInterpolation.C.

61  : Model(options),
62  _vm_stress(declare_input_variable<Scalar>("von_mises_stress")),
63  _temperature(declare_input_variable<Scalar>("temperature")),
64  _ep_strain(declare_input_variable<Scalar>("equivalent_plastic_strain")),
65  _cell_dd(declare_input_variable<Scalar>("cell_dislocation_density")),
66  _wall_dd(declare_input_variable<Scalar>("wall_dislocation_density")),
67  _env_fac(declare_input_variable<Scalar>("env_factor")),
68  _output_rate(declare_output_variable<Scalar>("output_rate"))
69 {
70  std::string filename = options.get<std::string>("model_file_name");
71  std::ifstream model_file(filename.c_str());
72  model_file >> _json;
73 
74  // storing grid points for indexing.
75  // these should be stored differently so that they are all read in at once. The order of this can
76  // get messed up easily
77  _stress_grid = json_vector_to_torch("in_stress");
78  _temperature_grid = json_vector_to_torch("in_temperature");
79  _plastic_strain_grid = json_vector_to_torch("in_plastic_strain");
80  _cell_grid = json_vector_to_torch("in_cell");
81  _wall_grid = json_vector_to_torch("in_wall");
82  _env_grid = json_vector_to_torch("in_env");
83 
84  // Read in grid axes transform enums
85  _stress_transform_enum = get_transform_enum(json_to_string("in_stress_transform_type"));
86  _temperature_transform_enum = get_transform_enum(json_to_string("in_temperature_transform_type"));
88  get_transform_enum(json_to_string("in_plastic_strain_transform_type"));
89  _cell_transform_enum = get_transform_enum(json_to_string("in_cell_transform_type"));
90  _wall_transform_enum = get_transform_enum(json_to_string("in_wall_transform_type"));
91  _env_transform_enum = get_transform_enum(json_to_string("in_env_transform_type"));
92 
93  // Read in grid axes transform values
94  _stress_transform_values = json_to_vector("in_stress_transform_values");
95  _temperature_transform_values = json_to_vector("in_temperature_transform_values");
96  _plastic_strain_transform_values = json_to_vector("in_plastic_strain_transform_values");
97  _cell_transform_values = json_to_vector("in_cell_transform_values");
98  _wall_transform_values = json_to_vector("in_wall_transform_values");
99  _env_transform_values = json_to_vector("in_env_transform_values");
100 
101  // Storing values for interpolation
102  _output_rate_name = options.get<std::string>("model_file_variable_name");
104 
105  // set up output transforms
106  if (_output_rate_name == "out_ep")
107  {
108  _output_transform_enum = get_transform_enum(json_to_string("out_strain_rate_transform_type"));
109  _output_transform_values = json_to_vector("out_strain_rate_transform_values");
110  }
111  else if (_output_rate_name == "out_cell")
112  {
113  _output_transform_enum = get_transform_enum(json_to_string("out_cell_rate_transform_type"));
114  _output_transform_values = json_to_vector("out_cell_rate_transform_values");
115  }
116  else if (_output_rate_name == "out_wall")
117  {
118  _output_transform_enum = get_transform_enum(json_to_string("out_wall_rate_transform_type"));
119  _output_transform_values = json_to_vector("out_wall_rate_transform_values");
120  }
121  else
122  {
123  throw NEMLException("This ouput variable is not implemented, model_file_variable_name: " +
124  std::string(_output_rate_name));
125  }
126 }
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 183 of file LAROMANCE6DInterpolation.C.

Referenced by interpolate_and_transform().

185 {
186  Scalar result = Scalar::zeros_like(_temperature());
187  for (const auto i : {0, 1})
188  for (const auto j : {0, 1})
189  for (const auto k : {0, 1})
190  for (const auto l : {0, 1})
191  for (const auto m : {0, 1})
192  for (const auto n : {0, 1})
193  {
194  auto vertex_value =
195  grid_values.index({(index_and_fraction[0].first +
196  torch::tensor(i, default_integer_tensor_options())),
197  (index_and_fraction[1].first +
198  torch::tensor(j, default_integer_tensor_options())),
199  (index_and_fraction[2].first +
200  torch::tensor(k, default_integer_tensor_options())),
201  (index_and_fraction[3].first +
202  torch::tensor(l, default_integer_tensor_options())),
203  (index_and_fraction[4].first +
204  torch::tensor(m, default_integer_tensor_options())),
205  (index_and_fraction[5].first +
206  torch::tensor(n, default_integer_tensor_options()))});
207  auto weight = index_and_fraction[0].second.select(-1, i) *
208  index_and_fraction[1].second.select(-1, j) *
209  index_and_fraction[2].second.select(-1, k) *
210  index_and_fraction[3].second.select(-1, l) *
211  index_and_fraction[4].second.select(-1, m) *
212  index_and_fraction[5].second.select(-1, n);
213  result += vertex_value * weight;
214  }
215  return result;
216 }
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:134

◆ 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 
37  // Model inputs
38  options.add_input("equivalent_plastic_strain", "The equivalent plastic strain");
39  options.add_input("von_mises_stress", "The von Mises stress");
40  options.add_input("cell_dislocation_density", "The cell dislocation density");
41  options.add_input("wall_dislocation_density", "The wall dislocation density");
42  options.add_input("temperature", "The temperature");
43  options.add_input("env_factor", "The environment factor");
44 
45  // Model Outputs
46  options.add_output("output_rate", "The output rate");
47 
48  // JSON
49  options.add<std::string>("model_file_name", "The name of the model file");
50  options.add<std::string>("model_file_variable_name",
51  "The name of the variable in the model file");
52 
53  // jit does not currently work with this
54  options.set<bool>("jit", false);
55  options.suppress("jit");
56 
57  return options;
58 }

◆ 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 164 of file LAROMANCE6DInterpolation.C.

Referenced by interpolate_and_transform().

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

◆ get_transform_enum()

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

Definition at line 147 of file LAROMANCE6DInterpolation.C.

Referenced by LAROMANCE6DInterpolation().

148 {
149  if (name == "COMPRESS")
151  else if (name == "DECOMPRESS")
153  else if (name == "LOG10BOUNDED")
155  else if (name == "EXP10BOUNDED")
157  else if (name == "MINMAX")
158  return TransformEnum::MINMAX;
159 
160  throw NEMLException("Unrecognized transform: " + std::string(name));
161 }
const std::string name
Definition: Setup.h:21

◆ interpolate_and_transform()

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

compute interpolated value and transform results

compute interpolated value

Definition at line 220 of file LAROMANCE6DInterpolation.C.

Referenced by set_value().

221 {
222  // These transform constants should be given in the json file.
223  const auto cell_dd_transformed =
225  const auto wall_dd_transformed =
227  const auto vm_stress_transformed =
229  const auto ep_strain_transformed = transform_data(
231  const auto temperature_transformed =
233  const auto env_fac_transformed =
235 
236  std::vector<std::pair<Scalar, Scalar>> left_index_weight;
237  left_index_weight.push_back(findLeftIndexAndFraction(_stress_grid, vm_stress_transformed));
238  left_index_weight.push_back(findLeftIndexAndFraction(_temperature_grid, temperature_transformed));
239  left_index_weight.push_back(
240  findLeftIndexAndFraction(_plastic_strain_grid, ep_strain_transformed));
241  left_index_weight.push_back(findLeftIndexAndFraction(_cell_grid, cell_dd_transformed));
242  left_index_weight.push_back(findLeftIndexAndFraction(_wall_grid, wall_dd_transformed));
243  left_index_weight.push_back(findLeftIndexAndFraction(_env_grid, env_fac_transformed));
244  Scalar interpolated_result = compute_interpolation(left_index_weight, _grid_values);
245  Scalar transformed_result =
247  return transformed_result;
248 }
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 376 of file LAROMANCE6DInterpolation.C.

Referenced by LAROMANCE6DInterpolation().

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

Referenced by LAROMANCE6DInterpolation().

347 {
348  if (!_json.contains(key))
349  throw NEMLException("The key '" + std::string(key) + "' is missing from the JSON data file.");
350 
351  std::string name = _json[key].get<std::string>();
352  return name;
353 }
const std::string name
Definition: Setup.h:21
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 356 of file LAROMANCE6DInterpolation.C.

Referenced by LAROMANCE6DInterpolation().

357 {
358  if (!_json.contains(key))
359  throw NEMLException("The key '" + std::string(key) + "' is missing from the JSON data file.");
360 
361  std::vector<double> data_vec = _json[key].get<std::vector<double>>();
362  return data_vec;
363 }
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 366 of file LAROMANCE6DInterpolation.C.

Referenced by LAROMANCE6DInterpolation().

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

◆ request_AD()

void neml2::LAROMANCE6DInterpolation::request_AD ( )
override

Definition at line 129 of file LAROMANCE6DInterpolation.C.

130 {
131  // only using first derivatives of out_ep, not out_cell and out_wall
132  if (_output_rate_name == "out_ep")
133  {
134  std::vector<const VariableBase *> inputs = {&_vm_stress};
135  _output_rate.request_AD(inputs);
136  }
137 }
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 140 of file LAROMANCE6DInterpolation.C.

141 {
142  if (out)
144 }
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 278 of file LAROMANCE6DInterpolation.C.

Referenced by transform_data().

280 {
281  double factor = param[0];
282  double compressor = param[1];
283  double original_min = param[2];
284  auto d1 = neml2::sign(data) * neml2::pow(neml2::abs(data * factor), compressor);
285  auto transformed_data = neml2::log10(1.0 + d1 - original_min);
286  return transformed_data;
287 }
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 251 of file LAROMANCE6DInterpolation.C.

Referenced by interpolate_and_transform().

254 {
255  switch (transform_type)
256  {
258  return transform_compress(data, param);
259 
261  return transform_decompress(data, param);
262 
264  return transform_log10_bounded(data, param);
265 
267  return transform_exp10_bounded(data, param);
268 
270  return transform_min_max(data, param);
271 
272  default:
273  return data;
274  }
275 }
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 290 of file LAROMANCE6DInterpolation.C.

Referenced by transform_data().

292 {
293  double factor = param[0];
294  double compressor = param[1];
295  double original_min = param[2];
296  auto d1 = neml2::pow(10.0, data) - 1.0 + original_min;
297  auto transformed_data = neml2::sign(d1) * neml2::pow(neml2::abs(d1), 1.0 / compressor) / factor;
298  return transformed_data;
299 }
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 318 of file LAROMANCE6DInterpolation.C.

Referenced by transform_data().

320 {
321  double factor = param[0];
322  double lowerbound = param[1];
323  double upperbound = param[2];
324  double logmin = param[3];
325  double logmax = param[4];
326  double range = upperbound - lowerbound;
327  auto transformed_data =
328  (neml2::pow(10.0, ((data - lowerbound) * (logmax - logmin) / range) + logmin) - factor);
329  return transformed_data;
330 }
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 302 of file LAROMANCE6DInterpolation.C.

Referenced by transform_data().

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

◆ transform_min_max()

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

Definition at line 333 of file LAROMANCE6DInterpolation.C.

Referenced by transform_data().

335 {
336  double data_min = param[0];
337  double data_max = param[1];
338  double scaled_min = param[2];
339  double scaled_max = param[3];
340  auto transformed_data =
341  ((data - data_min) / (data_max - data_min)) * (scaled_max - scaled_min) + scaled_min;
342  return transformed_data;
343 }

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: