https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
15template <bool is_ad>
17{
18
19public:
21
23
24 virtual void resetIncrementalMaterialProperties() override;
25 virtual void
26 storeIncrementalMaterialProperties(const unsigned int total_number_substeps) override;
27
28protected:
29 virtual void exportJSON();
30
31 virtual bool substeppingCapabilityEnabled() override;
32
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,
84 WARN,
85 IGNORE,
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>
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
482
485
490
493
496
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 std::vector< double > x
const Real p
const double T
LAROMANCEStressUpdateBaseTempl< true > ADLAROMANCEStressUpdateBase
LAROMANCEStressUpdateBaseTempl< false > LAROMANCEStressUpdateBase
typename GenericMaterialPropertyStruct< T, is_ad >::type GenericMaterialProperty
Moose::GenericType< VariableValue, is_ad > GenericVariableValue
Moose::GenericType< RankFourTensor, is_ad > GenericRankFourTensor
Moose::GenericType< Real, is_ad > GenericReal
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor
const GenericVariableValue< is_ad > & coupledGenericValue(const std::string &var_name, unsigned int comp=0) const
virtual std::vector< std::vector< std::vector< std::vector< Real > > > > getInputLimits()
virtual std::vector< std::vector< std::vector< std::vector< Real > > > > getNormalizationLimits()
Real _stress_ucf
Unit conversion factors required to convert from the specified unit to MPa.
const MaterialProperty< Real > & _cell_dislocations_old
virtual std::vector< Real > getStrainCutoff()
std::vector< std::vector< std::vector< std::vector< Real > > > > _normalization_limits
Normalization limits defined by the ROM data set for each partition.
GenericMaterialProperty< Real, is_ad > & _cell_dislocations
Material properties for cell (glissile) dislocation densities (1/m^2)
void checkJSONKey(const std::string &key)
check if a JSON file was loaded and if the specified key exists
GenericMaterialProperty< Real, is_ad > & _wall_rate
Wall dislocations rate of change.
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...
const unsigned int _cell_output_index
Index corresponding to the position for cell dislocations increment in the output vector.
virtual GenericReal< is_ad > maximumPermissibleValue(const GenericReal< is_ad > &effective_trial_stress) const override
Compute the maximum permissible value of the scalar.
std::vector< std::vector< std::vector< std::vector< Real > > > > getTransformedLimits(const unsigned int p, const std::vector< std::vector< std::vector< Real > > > limits)
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.
virtual std::vector< std::vector< std::vector< std::vector< ROMInputTransform > > > > getTransform()
GenericMaterialProperty< Real, is_ad > & _cell_dislocations_step
virtual Real computeTimeStepLimit() override
Compute the limiting value of the time step for this material.
std::vector< unsigned int > _degree
Legendre polynomial degree for the ROM data set for each partition.
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.
std::vector< std::string > _index_name
index names for error output
const Function *const _wall_function
Optional wall dislocation forcing function.
std::vector< Real > _cutoff
Container for strain cutoff.
virtual void resetIncrementalMaterialProperties() override
Reset material properties.
MaterialProperty< Real > & _number_of_substeps
Material property capturing number of substeps for output purposes (defaults to one if substepping is...
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...
std::vector< std::vector< GenericReal< is_ad > > > _non_stress_weights
Container for weights for each tile as computed for all input values beside stress.
std::vector< GenericReal< is_ad > > _partition_weights
Container for weights for each tile as computed for all input values beside stress.
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.
RankTwoTensor _plastic_strain_increment
Total plastic strain increment in step (summing substep contributions)
unsigned int _num_inputs
Number of inputs for the ROM data set.
virtual std::vector< std::vector< unsigned int > > getTilings()
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.
std::vector< std::pair< Real, Real > > _global_limits
Container for global limits.
const Function *const _creep_strain_old_forcing_function
Optional old creep strain forcing function.
void precomputeROM(const unsigned out_index)
Precompute the ROM strain rate information for all inputs except for strain.
const unsigned int _wall_input_index
Index corresponding to the position for the dislocations within the cell wall in the input vector.
std::vector< GenericReal< is_ad > > _input_values
Container for input values.
GenericReal< is_ad > _derivative
Container for derivative of creep increment with respect to strain.
virtual bool substeppingCapabilityEnabled() override
Does the model include the infrastructure for substep decomposition of the elastic strain initially u...
const unsigned int _stress_input_index
Index corresponding to the position for the stress 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.
std::vector< std::vector< std::vector< std::vector< GenericReal< is_ad > > > > > _polynomial_inputs
Container for ROM polynomial inputs.
std::vector< GenericReal< is_ad > > _dpartition_weight_dstress
Container for d_parition_weights d_stress.
const unsigned int _strain_output_index
Index corresponding to the position for strain increment in the output vector.
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< GenericReal< is_ad > > > > _rom_inputs
Container for converted rom_inputs.
std::vector< std::vector< std::vector< std::vector< Real > > > > _transform_coefs
Transform coefficients defined by the ROM data set for each partition.
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::vector< std::vector< std::vector< Real > > > > _input_limits
Input limits defined by the ROM data set for each partition.
const unsigned int _cell_input_index
Index corresponding to the position for the dislocations with in the cell in the input vector.
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.
virtual void computeStressFinalize(const GenericRankTwoTensor< is_ad > &plastic_strain_increment) override
Perform any necessary steps to finalize state after return mapping iterations.
const bool _verbose
Flag to output verbose infromation.
GenericMaterialProperty< Real, is_ad > & _cell_rate
Cell dislocations rate of change.
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...
WindowFailure
Enum to error, warn, ignore, or extrapolate if input is outside of window of applicability.
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.
const Real _max_wall_increment
Maximum wall dislocation increment.
const unsigned int _old_strain_input_index
Index corresponding to the position for the old strain in the input vector.
virtual void setupUnitConversionFactors(const InputParameters &parameters)
std::vector< unsigned int > getMakeFrameHelper(const unsigned int p) const
virtual void initQpStatefulProperties() override
GenericReal< is_ad > _cell_dislocation_increment
Container for cell dislocation increment.
unsigned int _num_outputs
Number of inputs to the ROM data set.
std::vector< std::vector< std::vector< GenericReal< is_ad > > > > _precomputed_vals
Container for ROM precomputed values.
const MaterialProperty< Real > & _wall_dislocations_old
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< unsigned int > _num_coefs
Total number of Legendre polynomial coefficients for the ROM data set in each parition.
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...
const GenericMaterialProperty< Real, is_ad > * _environmental
Optionally coupled environmental factor.
const Real _max_cell_increment
Maximum cell dislocation increment.
std::vector< std::vector< unsigned int > > _tiling
Container for tiling orientations.
GenericMaterialProperty< Real, is_ad > & _wall_dislocations
Material properties for wall (locked) dislocation densities (1/m^2)
const Function *const _stress_function
Optiontal effective stress forcing function.
void convertValue(T &x, const ROMInputTransform transform, const Real coef, const bool derivative=false)
Convert input based on the transform type.
std::vector< std::vector< unsigned int > > _makeframe_helper
Helper container defined by the ROM data set.
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.
const unsigned int _environmental_input_index
Index corresponding to the position for the environmental factor in the input vector.
virtual void computePartitionWeights(std::vector< GenericReal< is_ad > > &weights, std::vector< GenericReal< is_ad > > &dweights_dstress)
Compute the weight of the different partitions.
virtual std::vector< std::vector< std::vector< std::vector< Real > > > > getTransformCoefs()
MaterialProperty< Real > & _extrapolation
Material property to hold smootherstep applied in order to extrapolate.
const unsigned int _temperature_input_index
Index corresponding to the position for the tempeature in the input vector.
const GenericVariableValue< is_ad > & _temperature
Coupled temperature variable.
bool checkInTile(const unsigned int p, const unsigned int t) const
Checks if the input combination is in a specific tile.
GenericMaterialProperty< Real, is_ad > & _second_partition_weight
Material property to store partition weight.
GenericReal< is_ad > _wall_dislocation_increment
Container for wall dislocation increment.
nlohmann::json _json
JSON object constructed from the datafile.
std::vector< Real > _old_input_values
Container for old input values.
std::vector< std::vector< std::vector< std::vector< ROMInputTransform > > > > _transform
Transform rules defined by the ROM data set for each partition.
std::vector< std::pair< WindowFailure, WindowFailure > > _window_failure
const Function *const _cell_function
Optional cell dislocation forcing function.
GenericMaterialProperty< Real, is_ad > & _wall_dislocations_step
Material properties accumulated at substeps.
virtual std::vector< std::vector< std::vector< std::vector< Real > > > > getCoefs()
unsigned int _num_partitions
Number of partitions.
std::vector< std::vector< std::vector< std::vector< Real > > > > _coefs
Coefficients used with Legendre polynomials defined by the ROM data set for each partition.
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...
std::vector< std::vector< GenericReal< is_ad > > > _weights
Container for weights for each tile as computed for all input values beside stress.
std::vector< unsigned int > _num_tiles
Number of ROM tiles per partition.
void outputIterationSummary(std::stringstream *iter_output, const unsigned int total_it) override
Output summary information for the convergence history of the model.
const unsigned int _wall_output_index
Index corresponding to the position for wall dislocations increment in the output vector.
GenericMaterialProperty< Real, is_ad > & _creep_rate
Creep rate material property.
unsigned int _qp
const MooseArray< Point > & _q_point
const InputParameters & parameters() const
void mooseError(Args &&... args) const
const std::string & _name
This class provides baseline functionallity for creep models based on the stress update material in a...
const bool _apply_strain
Debugging option to enable specifying instead of calculating strain.