https://mooseframework.inl.gov
LAROMANCEStressUpdateBase.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 
13 #include "nlohmann/json.h"
14 
15 template <bool is_ad>
17 {
18 
19 public:
21 
23 
24  virtual void resetIncrementalMaterialProperties() override;
25  virtual void
26  storeIncrementalMaterialProperties(const unsigned int total_number_substeps) override;
27 
28 protected:
29  virtual void exportJSON();
30 
31  virtual bool substeppingCapabilityEnabled() override;
32 
33  enum class ROMInputTransform
34  {
35  LINEAR,
36  LOG,
37  EXP
38  };
39 
40  virtual void initialSetup() override;
41 
42  // Setup unit conversion factors. The required units in the ROM are:
43  // Cell dislocation density: m^-2
44  // Wall dislocation density: m^-2
45  // MX phase fracture: nondim.
46  // stress: MPa
47  // strain: nondim.
48  // temperature: K
50 
51  virtual void initQpStatefulProperties() override;
52  virtual void
53  computeStressInitialize(const GenericReal<is_ad> & effective_trial_stress,
54  const GenericRankFourTensor<is_ad> & elasticity_tensor) override;
55  virtual GenericReal<is_ad> computeResidual(const GenericReal<is_ad> & effective_trial_stress,
56  const GenericReal<is_ad> & scalar) override;
57 
58  virtual GenericReal<is_ad>
59  computeDerivative(const GenericReal<is_ad> & /*effective_trial_stress*/,
60  const GenericReal<is_ad> & /*scalar*/) override
61  {
62  return _derivative;
63  }
64 
65  virtual void
66  computeStressFinalize(const GenericRankTwoTensor<is_ad> & plastic_strain_increment) override;
67  virtual GenericReal<is_ad>
68  maximumPermissibleValue(const GenericReal<is_ad> & effective_trial_stress) const override;
69  virtual Real computeTimeStepLimit() override;
70 
71  void outputIterationSummary(std::stringstream * iter_output,
72  const unsigned int total_it) override;
73 
74  virtual void outputIterationStep(std::stringstream * iter_output,
75  const GenericReal<is_ad> & effective_trial_stress,
76  const GenericReal<is_ad> & scalar,
77  const Real reference_residual) override;
78 
80  enum class WindowFailure
81  {
82  ERROR,
83  EXCEPTION,
84  WARN,
85  IGNORE,
86  DONOTHING,
87  USELIMIT,
89  };
90 
97  void precomputeROM(const unsigned out_index);
98 
107  GenericReal<is_ad> computeROM(const unsigned int tile,
108  const unsigned int partition,
109  const unsigned out_index,
110  const bool derivative = false);
111 
118  bool checkInTile(const unsigned int p, const unsigned int t) const;
119 
128  bool areTilesNotIdentical(const unsigned int p,
129  const unsigned int t,
130  const unsigned int tt,
131  const unsigned int in_index);
132 
144  const ROMInputTransform transform,
145  const Real transform_coef,
146  const std::vector<Real> & transformed_limits,
147  const bool derivative = false);
148 
157  void buildPolynomials(const unsigned int p,
158  const GenericReal<is_ad> & rom_input,
159  std::vector<GenericReal<is_ad>> & polynomial_inputs,
160  const GenericReal<is_ad> & drom_input = 0,
161  const bool derivative = false);
162 
172  void precomputeValues(const unsigned int p,
173  const std::vector<Real> & coefs,
174  const std::vector<std::vector<GenericReal<is_ad>>> & polynomial_inputs,
175  std::vector<GenericReal<is_ad>> & precomputed);
176 
191  computeValues(const unsigned int p,
192  const std::vector<GenericReal<is_ad>> & precomputed,
193  const std::vector<std::vector<GenericReal<is_ad>>> & polynomial_inputs,
194  const std::vector<GenericReal<is_ad>> & dpolynomial_inputs = {},
195  const bool derivative = false);
196 
208  virtual GenericReal<is_ad> convertOutput(const unsigned int p,
209  const std::vector<Real> & old_input_values,
210  const GenericReal<is_ad> & rom_output,
211  const unsigned out_index,
212  const GenericReal<is_ad> & drom_output = 0.0,
213  const bool derivative = false);
214 
223  const unsigned int degree,
224  const bool derivative = false);
225 
234  GenericReal<is_ad> sigmoid(const Real lower,
235  const Real upper,
236  const GenericReal<is_ad> & val,
237  const bool derivative = false);
238 
247  void computeTileWeight(std::vector<std::vector<GenericReal<is_ad>>> & weights,
248  GenericReal<is_ad> & input,
249  const unsigned int in_index,
250  const bool derivative = false);
251 
257  virtual void computePartitionWeights(std::vector<GenericReal<is_ad>> & weights,
258  std::vector<GenericReal<is_ad>> & dweights_dstress)
259  {
260  if (_num_partitions != 1)
261  mooseError("Internal error: If number of partitions is not one, then computePartitionWeights "
262  "must be defined");
263  weights[0] = 1.0;
264  dweights_dstress[0] = 0.0;
265  }
266 
274  template <typename T>
275  void convertValue(T & x,
276  const ROMInputTransform transform,
277  const Real coef,
278  const bool derivative = false)
279  {
280  using std::exp, std::log;
281 
282  if (transform == ROMInputTransform::EXP)
283  {
284  mooseAssert(coef != 0, "Coefficient must not be zero.");
285  if (derivative)
286  x = exp(x / coef) / coef;
287  else
288  x = exp(x / coef);
289  }
290  else if (transform == ROMInputTransform::LOG)
291  {
292  mooseAssert(x + coef > 0, "Sum must be greater than 0.");
293  if (derivative)
294  x = 1.0 / (x + coef);
295  else
296  x = log(x + coef);
297  }
298  else if (transform == ROMInputTransform::LINEAR)
299  {
300  mooseAssert(coef == 0.0, "Coefficient cannot be supplied with linear transformation");
301  if (derivative)
302  x = 1.0;
303  }
304  }
305 
306  /*
307  * Calculates and returns vector utilized in assign values
308  * @param p Partition index
309  * @return Vector that preallocates indexing calculations for polynomial calculation
310  */
311  std::vector<unsigned int> getMakeFrameHelper(const unsigned int p) const;
312 
313  /*
314  * Calculates and returns the transformed limits for the ROM calculations
315  * Indexes are [partition][tile][output][input].
316  * Inputs ordering is
317  * input[0]: cell_old
318  * input[1]: wall_old
319  * input[2]: trial stress,
320  * input[3]: effective strain old,
321  * input[4]: temperature
322  * input[5]: environmental factor (optional)
323  * output ordering is:
324  * output[0]: cell dislocations increment
325  * output[1]: wall dislocations increment
326  * output[2]: strain increment
327  * @param p Partition index
328  * @param limits Human readable limits
329  * @return Multi-dimentional vector of transformed limits
330  */
331  std::vector<std::vector<std::vector<std::vector<Real>>>>
332  getTransformedLimits(const unsigned int p,
333  const std::vector<std::vector<std::vector<Real>>> limits);
334 
335  /*
336  * Returns vector of the functions to use for the conversion of input variables.
337  * Indexes are [partition][tile][output][input].
338  * Inputs ordering is
339  * input[0]: cell_old
340  * input[1]: wall_old
341  * input[2]: trial stress,
342  * input[3]: effective strain old,
343  * input[4]: temperature
344  * input[5]: environmental factor (optional)
345  * output ordering is:
346  * output[0]: cell dislocations increment
347  * output[1]: wall dislocations increment
348  * output[2]: strain increment
349  * @return vector of the functions to use for the conversion of input variables.
350  */
351  virtual std::vector<std::vector<std::vector<std::vector<ROMInputTransform>>>> getTransform()
352  {
353  checkJSONKey("transform");
354  return _json["transform"]
355  .template get<std::vector<std::vector<std::vector<std::vector<ROMInputTransform>>>>>();
356  }
357 
358  /*
359  * Returns factors for the functions for the conversion functions given in getTransform
360  * Indexes are [partition][tile][output][input].
361  * Inputs ordering is
362  * input[0]: cell_old
363  * input[1]: wall_old
364  * input[2]: trial stress,
365  * input[3]: effective strain old,
366  * input[4]: temperature
367  * input[5]: environmental factor (optional)
368  * output ordering is:
369  * output[0]: cell dislocations increment
370  * output[1]: wall dislocations increment
371  * output[2]: strain increment
372  * @return factors for the functions for the conversion functions given in getTransform
373  */
374  virtual std::vector<std::vector<std::vector<std::vector<Real>>>> getTransformCoefs()
375  {
376  checkJSONKey("transform_coefs");
377  return _json["transform_coefs"]
378  .template get<std::vector<std::vector<std::vector<std::vector<Real>>>>>();
379  }
380 
381  /* Optional method that returns human-readable limits used for normalization. Default is to just
382  * use the input limits.
383  * Indexes are [partition][tile][input][upper/lower].
384  * Inputs ordering is
385  * input[0]: cell_old
386  * input[1]: wall_old
387  * input[2]: trial stress,
388  * input[3]: effective strain old,
389  * input[4]: temperature
390  * input[5]: environmental factor (optional)
391  * @return human-readable limits for the normalization limits
392  */
393  virtual std::vector<std::vector<std::vector<std::vector<Real>>>> getNormalizationLimits()
394  {
395  if (_json.contains("normalization_limits"))
396  return _json["normalization_limits"]
397  .template get<std::vector<std::vector<std::vector<std::vector<Real>>>>>();
398 
399  return getInputLimits();
400  }
401 
402  /* Returns human-readable limits for the inputs.
403  * Indexes are [partition][tile][input][upper/lower].
404  * Inputs ordering is
405  * input[0]: cell_old
406  * input[1]: wall_old
407  * input[2]: trial stress,
408  * input[3]: effective strain old,
409  * input[4]: temperature
410  * input[5]: environmental factor (optional)
411  * @return human-readable limits for the input limits
412  */
413  virtual std::vector<std::vector<std::vector<std::vector<Real>>>> getInputLimits()
414  {
415  checkJSONKey("input_limits");
416  return _json["input_limits"]
417  .template get<std::vector<std::vector<std::vector<std::vector<Real>>>>>();
418  }
419 
420  /*
421  * Material specific coefficients multiplied by the Legendre polynomials for each of the input
422  * variables
423  * @return Legendre polynomial coefficients
424  */
425  virtual std::vector<std::vector<std::vector<std::vector<Real>>>> getCoefs()
426  {
427  checkJSONKey("coefs");
428  return _json["coefs"].template get<std::vector<std::vector<std::vector<std::vector<Real>>>>>();
429  }
430 
431  /*
432  * Material specific orientations of tiling
433  * variables. Indexing is partition, then input
434  * @return Vector of a vector declaring tiling orientation
435  */
436  virtual std::vector<std::vector<unsigned int>> getTilings()
437  {
438  if (_json.contains("tiling"))
439  return _json["tiling"].template get<std::vector<std::vector<unsigned int>>>();
440 
441  if (_environmental)
442  return {{1, 1, 1, 1, 1, 1}};
443  return {{1, 1, 1, 1, 1}};
444  };
445 
446  /*
447  * Minimum strain value allowed by the ROM. This is material specific, and needs to be overwritten
448  * by individual roms and each partition
449  * @return Vector of material specific ROM low strain value for each partition
450  */
451  virtual std::vector<Real> getStrainCutoff()
452  {
453  checkJSONKey("cutoff");
454  return _json["cutoff"].template get<std::vector<Real>>();
455  }
456 
459 
462 
463  /*
464  * Vector of vectors WindowFailure enum that informs how to handle input that is outside of the
465  * limits. Shape is number of inputs by 2 (lower and upper window enum)
466  */
467  std::vector<std::pair<WindowFailure, WindowFailure>> _window_failure;
468 
470  const bool _verbose;
471 
476 
479 
481  const Function * const _cell_function;
482 
485 
490 
493 
495  const Function * const _wall_function;
496 
498  const Function * const _stress_function;
499 
502 
504  const unsigned int _cell_input_index;
505 
507  const unsigned int _wall_input_index;
508 
510  const unsigned int _stress_input_index;
511 
513  const unsigned int _old_strain_input_index;
514 
516  const unsigned int _temperature_input_index;
517 
519  const unsigned int _environmental_input_index;
520 
522  const unsigned int _cell_output_index;
523 
525  const unsigned int _wall_output_index;
526 
528  const unsigned int _strain_output_index;
529 
532 
534  unsigned int _num_partitions;
535 
537  std::vector<unsigned int> _num_tiles;
538 
540  unsigned int _num_inputs;
541 
543  unsigned int _num_outputs;
544 
546  std::vector<unsigned int> _degree;
547 
549  std::vector<unsigned int> _num_coefs;
550 
552  std::vector<std::vector<std::vector<std::vector<ROMInputTransform>>>> _transform;
553 
555  std::vector<std::vector<std::vector<std::vector<Real>>>> _transform_coefs;
556 
558  std::vector<std::vector<std::vector<std::vector<Real>>>> _input_limits;
559 
561  std::vector<std::vector<std::vector<std::vector<Real>>>> _normalization_limits;
562 
564  std::vector<std::vector<std::vector<std::vector<Real>>>> _coefs;
565 
567  std::vector<std::vector<std::vector<std::vector<std::vector<Real>>>>>
569 
571  std::vector<std::vector<unsigned int>> _makeframe_helper;
572 
575 
578 
581 
584 
587 
590 
592  std::vector<GenericReal<is_ad>> _input_values;
593 
595  std::vector<Real> _old_input_values;
596 
598  std::vector<std::vector<std::vector<GenericReal<is_ad>>>> _rom_inputs;
599 
601  std::vector<std::vector<std::vector<std::vector<GenericReal<is_ad>>>>> _polynomial_inputs;
602 
604  std::vector<std::vector<std::vector<GenericReal<is_ad>>>> _precomputed_vals;
605 
607  std::vector<std::pair<Real, Real>> _global_limits;
608 
610  std::vector<std::vector<GenericReal<is_ad>>> _non_stress_weights;
611 
613  std::vector<std::vector<GenericReal<is_ad>>> _weights;
614 
616  std::vector<GenericReal<is_ad>> _partition_weights;
617 
619  std::vector<GenericReal<is_ad>> _dpartition_weight_dstress;
620 
622  std::vector<std::vector<unsigned int>> _tiling;
623 
625  std::vector<Real> _cutoff;
626 
629 
634 
637 
640 
642  std::vector<std::string> _index_name;
643 
645  void checkJSONKey(const std::string & key);
646 
648  nlohmann::json _json;
649 
651  using Material::_name;
652  using Material::_q_point;
653  using Material::_qp;
661 };
662 
const MooseArray< Point > & _q_point
nlohmann::json _json
JSON object constructed from the datafile.
std::vector< unsigned int > _num_coefs
Total number of Legendre polynomial coefficients for the ROM data set in each parition.
Moose::GenericType< Real, is_ad > GenericReal
GenericMaterialProperty< Real, is_ad > & _cell_dislocations_step
const unsigned int _cell_output_index
Index corresponding to the position for cell dislocations increment in the output vector...
std::vector< GenericReal< is_ad > > _dpartition_weight_dstress
Container for d_parition_weights d_stress.
void outputIterationSummary(std::stringstream *iter_output, const unsigned int total_it) override
Output summary information for the convergence history of the model.
GenericReal< is_ad > computePolynomial(const GenericReal< is_ad > &value, const unsigned int degree, const bool derivative=false)
Calculate the value or derivative of Legendre polynomial up to 3rd order.
const Function *const _wall_function
Optional wall dislocation forcing function.
virtual std::vector< std::vector< std::vector< std::vector< Real > > > > getNormalizationLimits()
const Function *const _cell_function
Optional cell dislocation forcing function.
void convertValue(T &x, const ROMInputTransform transform, const Real coef, const bool derivative=false)
Convert input based on the transform type.
const unsigned int _old_strain_input_index
Index corresponding to the position for the old strain in the input vector.
void buildPolynomials(const unsigned int p, const GenericReal< is_ad > &rom_input, std::vector< GenericReal< is_ad >> &polynomial_inputs, const GenericReal< is_ad > &drom_input=0, const bool derivative=false)
Assemble the array of Legendre polynomials to be multiplied by the ROM coefficients.
LAROMANCEStressUpdateBaseTempl(const InputParameters &parameters)
GenericReal< is_ad > normalizeInput(const GenericReal< is_ad > &input, const ROMInputTransform transform, const Real transform_coef, const std::vector< Real > &transformed_limits, const bool derivative=false)
Convert the input variables into the form expected by the ROM Legendre polynomials to have a normaliz...
const std::string & _name
GenericMaterialProperty< Real, is_ad > & _cell_dislocations
Material properties for cell (glissile) dislocation densities (1/m^2)
auto exp(const T &)
virtual GenericReal< is_ad > maximumPermissibleValue(const GenericReal< is_ad > &effective_trial_stress) const override
Compute the maximum permissible value of the scalar.
const GenericMaterialProperty< Real, is_ad > * _environmental
Optionally coupled environmental factor.
const unsigned int _strain_output_index
Index corresponding to the position for strain increment in the output vector.
const Function *const _stress_function
Optiontal effective stress forcing function.
unsigned int _num_outputs
Number of inputs to the ROM data set.
const InputParameters & parameters() const
std::vector< unsigned int > _degree
Legendre polynomial degree for the ROM data set for each partition.
bool checkInTile(const unsigned int p, const unsigned int t) const
Checks if the input combination is in a specific tile.
std::vector< unsigned int > getMakeFrameHelper(const unsigned int p) const
virtual std::vector< std::vector< std::vector< std::vector< ROMInputTransform > > > > getTransform()
GenericReal< is_ad > sigmoid(const Real lower, const Real upper, const GenericReal< is_ad > &val, const bool derivative=false)
Calculate the sigmoid function weighting for the input based on the limits.
std::vector< std::vector< std::vector< std::vector< Real > > > > _coefs
Coefficients used with Legendre polynomials defined by the ROM data set for each partition.
const Function *const _creep_strain_old_forcing_function
Optional old creep strain forcing function.
unsigned int _num_inputs
Number of inputs for the ROM data set.
virtual std::vector< std::vector< std::vector< std::vector< Real > > > > getInputLimits()
const GenericVariableValue< is_ad > & _temperature
Coupled temperature variable.
virtual void outputIterationStep(std::stringstream *iter_output, const GenericReal< is_ad > &effective_trial_stress, const GenericReal< is_ad > &scalar, const Real reference_residual) override
Output information for a single iteration step to build the convergence history of the model...
const MaterialProperty< Real > & _wall_dislocations_old
GenericReal< is_ad > _wall_dislocation_increment
Container for wall dislocation increment.
std::vector< std::pair< Real, Real > > _global_limits
Container for global limits.
virtual bool substeppingCapabilityEnabled() override
Does the model include the infrastructure for substep decomposition of the elastic strain initially u...
Moose::GenericType< RankFourTensor, is_ad > GenericRankFourTensor
const unsigned int _wall_input_index
Index corresponding to the position for the dislocations within the cell wall in the input vector...
const unsigned int _stress_input_index
Index corresponding to the position for the stress in the input vector.
unsigned int _num_partitions
Number of partitions.
RankTwoTensor _plastic_strain_increment
Total plastic strain increment in step (summing substep contributions)
void precomputeROM(const unsigned out_index)
Precompute the ROM strain rate information for all inputs except for strain.
std::vector< std::pair< WindowFailure, WindowFailure > > _window_failure
GenericMaterialProperty< Real, is_ad > & _second_partition_weight
Material property to store partition weight.
LAROMANCEStressUpdateBaseTempl< true > ADLAROMANCEStressUpdateBase
virtual std::vector< std::vector< std::vector< std::vector< Real > > > > getTransformCoefs()
unsigned int _qp
std::vector< std::vector< unsigned int > > _makeframe_helper
Helper container defined by the ROM data set.
LAROMANCEStressUpdateBaseTempl< false > LAROMANCEStressUpdateBase
std::vector< Real > _old_input_values
Container for old input values.
void checkJSONKey(const std::string &key)
check if a JSON file was loaded and if the specified key exists
std::vector< std::vector< std::vector< std::vector< Real > > > > _normalization_limits
Normalization limits defined by the ROM data set for each partition.
const Real _max_wall_increment
Maximum wall dislocation increment.
std::vector< std::vector< std::vector< std::vector< std::vector< Real > > > > > _transformed_normalization_limits
Limits transformed from readabile input to ROM readable limits for normalization. ...
std::vector< GenericReal< is_ad > > _partition_weights
Container for weights for each tile as computed for all input values beside stress.
std::vector< std::vector< std::vector< std::vector< Real > > > > getTransformedLimits(const unsigned int p, const std::vector< std::vector< std::vector< Real >>> limits)
Moose::GenericType< VariableValue, is_ad > GenericVariableValue
const std::vector< double > x
const unsigned int _temperature_input_index
Index corresponding to the position for the tempeature in the input vector.
std::vector< std::vector< GenericReal< is_ad > > > _non_stress_weights
Container for weights for each tile as computed for all input values beside stress.
GenericMaterialProperty< Real, is_ad > & _wall_dislocations_step
Material properties accumulated at substeps.
typename GenericMaterialPropertyStruct< T, is_ad >::type GenericMaterialProperty
virtual GenericReal< is_ad > computeDerivative(const GenericReal< is_ad > &, const GenericReal< is_ad > &) override
Compute the derivative of the residual as a function of the scalar variable.
const GenericVariableValue< is_ad > & coupledGenericValue(const std::string &var_name, unsigned int comp=0) const
const MaterialProperty< Real > & _cell_dislocations_old
GenericReal< is_ad > computeValues(const unsigned int p, const std::vector< GenericReal< is_ad >> &precomputed, const std::vector< std::vector< GenericReal< is_ad >>> &polynomial_inputs, const std::vector< GenericReal< is_ad >> &dpolynomial_inputs={}, const bool derivative=false)
Arranges the calculated Legendre polynomials into the proper oder and multiplies the Legendre polynom...
std::vector< std::string > _index_name
index names for error output
const unsigned int _environmental_input_index
Index corresponding to the position for the environmental factor in the input vector.
virtual GenericReal< is_ad > computeResidual(const GenericReal< is_ad > &effective_trial_stress, const GenericReal< is_ad > &scalar) override
Compute the residual for a predicted value of the scalar.
virtual void setupUnitConversionFactors(const InputParameters &parameters)
virtual Real computeTimeStepLimit() override
Compute the limiting value of the time step for this material.
virtual GenericReal< is_ad > convertOutput(const unsigned int p, const std::vector< Real > &old_input_values, const GenericReal< is_ad > &rom_output, const unsigned out_index, const GenericReal< is_ad > &drom_output=0.0, const bool derivative=false)
Computes the output variable increments from the ROM predictions by bringing out of the normalized ma...
GenericReal< is_ad > _derivative
Container for derivative of creep increment with respect to strain.
auto log(const T &)
std::vector< GenericReal< is_ad > > _input_values
Container for input values.
std::vector< unsigned int > _num_tiles
Number of ROM tiles per partition.
GenericReal< is_ad > computeROM(const unsigned int tile, const unsigned int partition, const unsigned out_index, const bool derivative=false)
Computes the ROM calculated increment for a given output and tile.
std::vector< std::vector< std::vector< GenericReal< is_ad > > > > _precomputed_vals
Container for ROM precomputed values.
std::vector< std::vector< GenericReal< is_ad > > > _weights
Container for weights for each tile as computed for all input values beside stress.
virtual std::vector< Real > getStrainCutoff()
This class provides baseline functionallity for creep models based on the stress update material in a...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< std::vector< std::vector< std::vector< GenericReal< is_ad > > > > > _polynomial_inputs
Container for ROM polynomial inputs.
GenericMaterialProperty< Real, is_ad > & _creep_rate
Creep rate material property.
virtual void computeStressInitialize(const GenericReal< is_ad > &effective_trial_stress, const GenericRankFourTensor< is_ad > &elasticity_tensor) override
Perform any necessary initialization before return mapping iterations.
MaterialProperty< Real > & _number_of_substeps
Material property capturing number of substeps for output purposes (defaults to one if substepping is...
const bool _verbose
Flag to output verbose infromation.
std::vector< Real > _cutoff
Container for strain cutoff.
void mooseError(Args &&... args) const
virtual std::vector< std::vector< unsigned int > > getTilings()
virtual void resetIncrementalMaterialProperties() override
Reset material properties.
WindowFailure
Enum to error, warn, ignore, or extrapolate if input is outside of window of applicability.
virtual void computeStressFinalize(const GenericRankTwoTensor< is_ad > &plastic_strain_increment) override
Perform any necessary steps to finalize state after return mapping iterations.
const unsigned int _cell_input_index
Index corresponding to the position for the dislocations with in the cell in the input vector...
Real _stress_ucf
Unit conversion factors required to convert from the specified unit to MPa.
GenericMaterialProperty< Real, is_ad > & _wall_rate
Wall dislocations rate of change.
std::vector< std::vector< std::vector< std::vector< ROMInputTransform > > > > _transform
Transform rules defined by the ROM data set for each partition.
void computeTileWeight(std::vector< std::vector< GenericReal< is_ad >>> &weights, GenericReal< is_ad > &input, const unsigned int in_index, const bool derivative=false)
Compute the contribution (weight) of each tile in each partition, based on the input and tile boundar...
std::vector< std::vector< std::vector< GenericReal< is_ad > > > > _rom_inputs
Container for converted rom_inputs.
virtual void computePartitionWeights(std::vector< GenericReal< is_ad >> &weights, std::vector< GenericReal< is_ad >> &dweights_dstress)
Compute the weight of the different partitions.
const unsigned int _wall_output_index
Index corresponding to the position for wall dislocations increment in the output vector...
const Real _max_cell_increment
Maximum cell dislocation increment.
virtual std::vector< std::vector< std::vector< std::vector< Real > > > > getCoefs()
virtual void storeIncrementalMaterialProperties(const unsigned int total_number_substeps) override
Properly set up the incremental calculation storage of the stateful material properties in the inheri...
MaterialProperty< Real > & _extrapolation
Material property to hold smootherstep applied in order to extrapolate.
std::vector< std::vector< std::vector< std::vector< Real > > > > _input_limits
Input limits defined by the ROM data set for each partition.
bool areTilesNotIdentical(const unsigned int p, const unsigned int t, const unsigned int tt, const unsigned int in_index)
Checks if two tile domains are equal.
void precomputeValues(const unsigned int p, const std::vector< Real > &coefs, const std::vector< std::vector< GenericReal< is_ad >>> &polynomial_inputs, std::vector< GenericReal< is_ad >> &precomputed)
Arranges the calculated Legendre polynomials into the proper oder and multiplies the Legendre polynom...
virtual void initQpStatefulProperties() override
std::vector< std::vector< unsigned int > > _tiling
Container for tiling orientations.
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor
GenericReal< is_ad > _cell_dislocation_increment
Container for cell dislocation increment.
std::vector< std::vector< std::vector< std::vector< Real > > > > _transform_coefs
Transform coefficients defined by the ROM data set for each partition.
GenericMaterialProperty< Real, is_ad > & _cell_rate
Cell dislocations rate of change.
GenericMaterialProperty< Real, is_ad > & _wall_dislocations
Material properties for wall (locked) dislocation densities (1/m^2)