https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
17namespace neml2
18{
19class LAROMANCE6DInterpolation : public Model
20{
21public:
22 static OptionSet expected_options();
23
24 LAROMANCE6DInterpolation(const OptionSet & options);
25
26 void request_AD() override;
27
28 enum class TransformEnum
29 {
34 MINMAX
35 };
36
37protected:
38 void set_value(bool, bool, bool) override;
39
40private:
45 Scalar _cell_grid;
46 Scalar _wall_grid;
47 Scalar _env_grid;
48
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;
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
const std::string name
Definition Setup.h:21
std::vector< double > _temperature_transform_values
Scalar transform_decompress(const Scalar &data, const std::vector< double > &params) const
std::pair< Scalar, Scalar > findLeftIndexAndFraction(const Scalar &grid, const Scalar &interp_points) const
find index of input point
const Variable< Scalar > & _temperature
Temperature.
const Variable< Scalar > & _cell_dd
cell dislocation density
const Variable< Scalar > & _wall_dd
wall dislocation density
Scalar transform_log10_bounded(const Scalar &data, const std::vector< double > &params) const
Scalar transform_data(const Scalar &data, const std::vector< double > &param, TransformEnum transform_type) const
transform data
const Variable< Scalar > & _vm_stress
Model input for interpolation.
Scalar transform_min_max(const Scalar &data, const std::vector< double > &params) const
nlohmann::json _json
JSON object containing interpolation grid and values.
TransformEnum _output_transform_enum
output transform enum
Scalar interpolate_and_transform() const
compute interpolated value and transform results
Scalar _grid_values
grid values being interpolated
std::vector< double > json_to_vector(const std::string &key) const
read in json axes transform constants
Scalar json_vector_to_torch(const std::string &key) const
read 1D vector of grid points from json and store in Torch tensor
std::vector< double > _output_transform_values
output transform values
Scalar compute_interpolation(const std::vector< std::pair< Scalar, Scalar > > index_and_fraction, const Scalar grid_values) const
compute interpolated value
void set_value(bool, bool, bool) override
Variable< Scalar > & _output_rate
Model output.
Scalar _stress_grid
grid for interpolation
Scalar transform_exp10_bounded(const Scalar &data, const std::vector< double > &params) const
std::string json_to_string(const std::string &key) const
read in json axes transform name
Scalar json_6Dvector_to_torch(const std::string &key) const
read 6D grid date from json and store in Torch tensor
std::vector< double > _stress_transform_values
input transform values
TransformEnum _stress_transform_enum
input transform enums
std::vector< double > _plastic_strain_transform_values
const Variable< Scalar > & _env_fac
environmental factor
const Variable< Scalar > & _ep_strain
The creep strain.
Scalar transform_compress(const Scalar &data, const std::vector< double > &params) const
LAROMANCE transforms for input axes and output axis.
std::string _output_rate_name
output transform rate name
TransformEnum get_transform_enum(const std::string &name) const