https://mooseframework.inl.gov
LAROMANCE6DInterpolation.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
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 
12 #ifdef NEML2_ENABLED
13 
14 #include "neml2/models/Model.h"
15 #include "nlohmann/json.h"
16 
17 namespace neml2
18 {
19 class LAROMANCE6DInterpolation : public Model
20 {
21 public:
22  static OptionSet expected_options();
23 
24  LAROMANCE6DInterpolation(const OptionSet & options);
25 
26  void request_AD() override;
27 
28  enum class TransformEnum
29  {
30  COMPRESS,
31  DECOMPRESS,
34  MINMAX
35  };
36 
37 protected:
38  void set_value(bool, bool, bool) override;
39 
40 private:
42  Scalar _stress_grid;
45  Scalar _cell_grid;
46  Scalar _wall_grid;
47  Scalar _env_grid;
48 
50  Scalar _grid_values;
51 
53  // @{
55  const Variable<Scalar> & _vm_stress;
57  const Variable<Scalar> & _temperature;
59  const Variable<Scalar> & _ep_strain;
61  const Variable<Scalar> & _cell_dd;
63  const Variable<Scalar> & _wall_dd;
65  const Variable<Scalar> & _env_fac;
66  // @}
67 
69  // @{
71  Variable<Scalar> & _output_rate;
72  // @}
73 
75  nlohmann::json _json;
76 
78  std::pair<Scalar, Scalar> findLeftIndexAndFraction(const Scalar & grid,
79  const Scalar & interp_points) const;
80 
82  Scalar interpolate_and_transform() const;
83 
85  Scalar transform_data(const Scalar & data,
86  const std::vector<double> & param,
87  TransformEnum transform_type) const;
88 
90  std::string json_to_string(const std::string & key) const;
91 
93  std::vector<double> json_to_vector(const std::string & key) const;
94 
96  Scalar json_6Dvector_to_torch(const std::string & key) const;
97 
99  Scalar json_vector_to_torch(const std::string & key) const;
100 
102  Scalar compute_interpolation(const std::vector<std::pair<Scalar, Scalar>> index_and_fraction,
103  const Scalar grid_values) const;
104 
105  TransformEnum get_transform_enum(const std::string & name) const;
106 
114 
116  std::vector<double> _stress_transform_values;
117  std::vector<double> _temperature_transform_values;
118  std::vector<double> _plastic_strain_transform_values;
119  std::vector<double> _cell_transform_values;
120  std::vector<double> _wall_transform_values;
121  std::vector<double> _env_transform_values;
122 
124  std::string _output_rate_name;
126  std::vector<double> _output_transform_values;
129 
131  // @{
132  Scalar transform_compress(const Scalar & data, const std::vector<double> & params) const;
133  Scalar transform_decompress(const Scalar & data, const std::vector<double> & params) const;
134  Scalar transform_log10_bounded(const Scalar & data, const std::vector<double> & params) const;
135  Scalar transform_exp10_bounded(const Scalar & data, const std::vector<double> & params) const;
136  Scalar transform_min_max(const Scalar & data, const std::vector<double> & params) const;
137  // @}
138 };
139 } // namespace neml2
140 
141 #endif
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.
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
Scalar transform_exp10_bounded(const Scalar &data, const std::vector< double > &params) const
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
const std::string name
Definition: Setup.h:20
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.
void set_value(bool, bool, bool) override
Scalar _stress_grid
grid for interpolation
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
LAROMANCE6DInterpolation(const OptionSet &options)
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.
Scalar transform_compress(const Scalar &data, const std::vector< double > &params) const
LAROMANCE transforms for input axes and output axis.
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
Scalar interpolate_and_transform() const
compute interpolated value and transform results
Scalar transform_log10_bounded(const Scalar &data, const std::vector< double > &params) const
Variable< Scalar > & _output_rate
Model output.
std::vector< double > _temperature_transform_values
const Variable< Scalar > & _ep_strain
The creep strain.