LCOV - code coverage report
Current view: top level - include/materials - LAROMANCEStressUpdateBase.h (source / functions) Hit Total Coverage
Test: idaholab/moose solid_mechanics: f45d79 Lines: 46 49 93.9 %
Date: 2025-07-25 05:00:39 Functions: 16 21 76.2 %
Legend: Lines: hit not hit

          Line data    Source code
       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             : #include "RadialReturnCreepStressUpdateBase.h"
      13             : #include "nlohmann/json.h"
      14             : 
      15             : template <bool is_ad>
      16             : class LAROMANCEStressUpdateBaseTempl : public RadialReturnCreepStressUpdateBaseTempl<is_ad>
      17             : {
      18             : 
      19             : public:
      20             :   static InputParameters validParams();
      21             : 
      22             :   LAROMANCEStressUpdateBaseTempl(const InputParameters & parameters);
      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
      49             :   virtual void setupUnitConversionFactors(const InputParameters & parameters);
      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      455360 :   computeDerivative(const GenericReal<is_ad> & /*effective_trial_stress*/,
      60             :                     const GenericReal<is_ad> & /*scalar*/) override
      61             :   {
      62      455360 :     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             : 
      79             :   /// Enum to error, warn, ignore, or extrapolate if input is outside of window of applicability
      80             :   enum class WindowFailure
      81             :   {
      82             :     ERROR,
      83             :     EXCEPTION,
      84             :     WARN,
      85             :     IGNORE,
      86             :     DONOTHING,
      87             :     USELIMIT,
      88             :     EXTRAPOLATE
      89             :   };
      90             : 
      91             :   /**
      92             :    * Precompute the ROM strain rate information for all inputs except for strain. Strain will be
      93             :    * computed in the radial return algorithm several times, while the remainder of the inputs remain
      94             :    * constant.
      95             :    * @param out_index Output index
      96             :    */
      97             :   void precomputeROM(const unsigned out_index);
      98             : 
      99             :   /**
     100             :    * Computes the ROM calculated increment for a given output and tile.
     101             :    * @param tile Tile index
     102             :    * @param partition Partition index
     103             :    * @param out_index Output index
     104             :    * @param derivative Optional flag to return derivative of ROM increment with respect to stress.
     105             :    * @return ROM computed increment
     106             :    */
     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             : 
     112             :   /**
     113             :    * Checks if the input combination is in a specific tile
     114             :    * @param p Partition index
     115             :    * @param t Tile index
     116             :    * @return bool if in tile
     117             :    */
     118             :   bool checkInTile(const unsigned int p, const unsigned int t) const;
     119             : 
     120             :   /**
     121             :    * Checks if two tile domains are equal
     122             :    * @param p Partition index
     123             :    * @param t Tile 1 index
     124             :    * @param tt Tile 2 index
     125             :    * @param in_index input index
     126             :    * @return integer 0 (false) or 1 (true)
     127             :    */
     128             :   bool areTilesNotIdentical(const unsigned int p,
     129             :                             const unsigned int t,
     130             :                             const unsigned int tt,
     131             :                             const unsigned int in_index);
     132             : 
     133             :   /**
     134             :    * Convert the input variables into the form expected by the ROM Legendre polynomials to have a
     135             :    * normalized space from [-1, 1] so that every variable has equal weight
     136             :    * @param input Input value
     137             :    * @param transform ROMInputTransform enum indicating how the input is to be transformed
     138             :    * @param transform_coef Transform coefficient for the given input
     139             :    * @param transformed_limits Transformed limits for the given input
     140             :    * @param derivative Optional flag to return derivative of converted input with respect to stress.
     141             :    * @return Converted input
     142             :    */
     143             :   GenericReal<is_ad> normalizeInput(const GenericReal<is_ad> & input,
     144             :                                     const ROMInputTransform transform,
     145             :                                     const Real transform_coef,
     146             :                                     const std::vector<Real> & transformed_limits,
     147             :                                     const bool derivative = false);
     148             : 
     149             :   /**
     150             :    * Assemble the array of Legendre polynomials to be multiplied by the ROM coefficients
     151             :    * @param p Partition index
     152             :    * @param rom_input ROM input
     153             :    * @param polynomial_inputs Vector of transformed Legendre polynomials
     154             :    * @param drom_input Optional derivative of ROM input with respect to stress
     155             :    * @param derivative Optional flag to return derivative of converted input with respect to stress.
     156             :    */
     157             :   void buildPolynomials(const unsigned int p,
     158             :                         const GenericReal<is_ad> & rom_input,
     159             :                         std::vector<GenericReal<is_ad>> & polynomial_inputs,
     160     3248768 :                         const GenericReal<is_ad> & drom_input = 0,
     161             :                         const bool derivative = false);
     162             : 
     163             :   /**
     164             :    * Arranges the calculated Legendre polynomials into the proper oder and multiplies the Legendre
     165             :    * polynomials by the ROM coefficients to compute the predicted output values. This method works
     166             :    * with all inputs besides stress, while stress is handled by computeValues
     167             :    * @param p Partition index
     168             :    * @param coefs Legendre polynomial coefficients
     169             :    * @param polynomial_inputs Vector of transformed Legendre polynomial
     170             :    * @param precomputed Vector that holds the precomputed ROM values
     171             :    */
     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             : 
     177             :   /**
     178             :    * Arranges the calculated Legendre polynomials into the proper oder and multiplies the Legendre
     179             :    * polynomials by the ROM coefficients to compute the predicted output values. This method only
     180             :    * manipulates the stress input, with all others handled in precomputeValues
     181             :    * @param p Partition index
     182             :    * @param precomputed Precomputed multiplication of polynomials
     183             :    * @param polynomial_inputs Vector of Legendre polynomial transformation
     184             :    * @param dpolynomial_inputs Vector of derivative of Legendre polynomial transformation with
     185             :    * respect to stress
     186             :    * @param derivative Optional flag to return derivative of converted computed values with respect
     187             :    * to stress.
     188             :    * @return ROM output
     189             :    */
     190             :   GenericReal<is_ad>
     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             : 
     197             :   /**
     198             :    * Computes the output variable increments from the ROM predictions by bringing out of the
     199             :    * normalized map to the actual physical values
     200             :    * @param p Partition index
     201             :    * @param old_input_values Previous timestep values of ROM inputs
     202             :    * @param rom_output Outputs from ROM
     203             :    * @param out_index Output index
     204             :    * @param drom_output Derivative of output with respect to stress
     205             :    * @param derivative Optional flag to return derivative of output with respect to stress.
     206             :    * @return Converted ROM output
     207             :    */
     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     1149372 :                                            const GenericReal<is_ad> & drom_output = 0.0,
     213             :                                            const bool derivative = false);
     214             : 
     215             :   /**
     216             :    * Calculate the value or derivative of Legendre polynomial up to 3rd order
     217             :    * @param value Input to Legendre polynomial
     218             :    * @param degree Degree of Legendre polynomial
     219             :    * @param derivative Optional flag to return derivative of Legendre polynomial Legendre
     220             :    * @return Computed value from Legendre polynomial
     221             :    */
     222             :   GenericReal<is_ad> computePolynomial(const GenericReal<is_ad> & value,
     223             :                                        const unsigned int degree,
     224             :                                        const bool derivative = false);
     225             : 
     226             :   /**
     227             :    * Calculate the sigmoid function weighting for the input based on the limits
     228             :    * @param lower Lower limit
     229             :    * @param upper Upper limit
     230             :    * @param val Input value
     231             :    * @param derivative Optional flag to return derivative of the sigmoid w.r.t. the input
     232             :    * @return weight
     233             :    */
     234             :   GenericReal<is_ad> sigmoid(const Real lower,
     235             :                              const Real upper,
     236             :                              const GenericReal<is_ad> & val,
     237             :                              const bool derivative = false);
     238             : 
     239             :   /**
     240             :    * Compute the contribution (weight) of each tile in each partition,
     241             :    * based on the input and tile boundaries (in terms of input domain).
     242             :    * @param weights Weights for each tile
     243             :    * @param input Input value
     244             :    * @param in_index Input index
     245             :    * @param derivative Optional flag to return derivative of the sigmoid w.r.t. the input
     246             :    */
     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             : 
     252             :   /**
     253             :    * Compute the weight of the different partitions
     254             :    * @param weights Weights for each partition
     255             :    * @param derivative Optional flag to return derivative of the sigmoid w.r.t. the input
     256             :    */
     257      386848 :   virtual void computePartitionWeights(std::vector<GenericReal<is_ad>> & weights,
     258             :                                        std::vector<GenericReal<is_ad>> & dweights_dstress)
     259             :   {
     260      386848 :     if (_num_partitions != 1)
     261           0 :       mooseError("Internal error: If number of partitions is not one, then computePartitionWeights "
     262             :                  "must be defined");
     263      386848 :     weights[0] = 1.0;
     264      386848 :     dweights_dstress[0] = 0.0;
     265      386848 :   }
     266             : 
     267             :   /**
     268             :    * Convert input based on the transform type
     269             :    * @param x Input value
     270             :    * @param transform Enum declaring transform to be performed
     271             :    * @param coef Coefficient applied during transformation
     272             :    * @param derivative Optional flag to return derivative of the sigmoid w.r.t. the input
     273             :    */
     274             :   template <typename T>
     275     5304320 :   void convertValue(T & x,
     276             :                     const ROMInputTransform transform,
     277             :                     const Real coef,
     278             :                     const bool derivative = false)
     279             :   {
     280     5304320 :     if (transform == ROMInputTransform::EXP)
     281             :     {
     282             :       mooseAssert(coef != 0, "Coefficient must not be zero.");
     283      242364 :       if (derivative)
     284           0 :         x = std::exp(x / coef) / coef;
     285             :       else
     286      242364 :         x = std::exp(x / coef);
     287             :     }
     288     5061956 :     else if (transform == ROMInputTransform::LOG)
     289             :     {
     290             :       mooseAssert(x + coef > 0, "Sum must be greater than 0.");
     291     3353064 :       if (derivative)
     292      467200 :         x = 1.0 / (x + coef);
     293             :       else
     294     2979208 :         x = std::log(x + coef);
     295             :     }
     296     1708892 :     else if (transform == ROMInputTransform::LINEAR)
     297             :     {
     298             :       mooseAssert(coef == 0.0, "Coefficient cannot be supplied with linear transformation");
     299     1708892 :       if (derivative)
     300       22940 :         x = 1.0;
     301             :     }
     302     5304320 :   }
     303             : 
     304             :   /*
     305             :    * Calculates and returns vector utilized in assign values
     306             :    * @param p Partition index
     307             :    * @return Vector that preallocates indexing calculations for polynomial calculation
     308             :    */
     309             :   std::vector<unsigned int> getMakeFrameHelper(const unsigned int p) const;
     310             : 
     311             :   /*
     312             :    * Calculates and returns the transformed limits for the ROM calculations
     313             :    * Indexes are [partition][tile][output][input].
     314             :    * Inputs ordering is
     315             :    * input[0]: cell_old
     316             :    * input[1]: wall_old
     317             :    * input[2]: trial stress,
     318             :    * input[3]: effective strain old,
     319             :    * input[4]: temperature
     320             :    * input[5]: environmental factor (optional)
     321             :    * output ordering is:
     322             :    * output[0]: cell dislocations increment
     323             :    * output[1]: wall dislocations increment
     324             :    * output[2]: strain increment
     325             :    * @param p Partition index
     326             :    * @param limits Human readable limits
     327             :    * @return Multi-dimentional vector of transformed limits
     328             :    */
     329             :   std::vector<std::vector<std::vector<std::vector<Real>>>>
     330             :   getTransformedLimits(const unsigned int p,
     331             :                        const std::vector<std::vector<std::vector<Real>>> limits);
     332             : 
     333             :   /*
     334             :    * Returns vector of the functions to use for the conversion of input variables.
     335             :    * Indexes are [partition][tile][output][input].
     336             :    * Inputs ordering is
     337             :    * input[0]: cell_old
     338             :    * input[1]: wall_old
     339             :    * input[2]: trial stress,
     340             :    * input[3]: effective strain old,
     341             :    * input[4]: temperature
     342             :    * input[5]: environmental factor (optional)
     343             :    * output ordering is:
     344             :    * output[0]: cell dislocations increment
     345             :    * output[1]: wall dislocations increment
     346             :    * output[2]: strain increment
     347             :    * @return vector of the functions to use for the conversion of input variables.
     348             :    */
     349          54 :   virtual std::vector<std::vector<std::vector<std::vector<ROMInputTransform>>>> getTransform()
     350             :   {
     351          54 :     checkJSONKey("transform");
     352             :     return _json["transform"]
     353         108 :         .template get<std::vector<std::vector<std::vector<std::vector<ROMInputTransform>>>>>();
     354             :   }
     355             : 
     356             :   /*
     357             :    * Returns factors for the functions for the conversion functions given in getTransform
     358             :    * Indexes are [partition][tile][output][input].
     359             :    * Inputs ordering is
     360             :    * input[0]: cell_old
     361             :    * input[1]: wall_old
     362             :    * input[2]: trial stress,
     363             :    * input[3]: effective strain old,
     364             :    * input[4]: temperature
     365             :    * input[5]: environmental factor (optional)
     366             :    * output ordering is:
     367             :    * output[0]: cell dislocations increment
     368             :    * output[1]: wall dislocations increment
     369             :    * output[2]: strain increment
     370             :    * @return factors for the functions for the conversion functions given in getTransform
     371             :    */
     372          54 :   virtual std::vector<std::vector<std::vector<std::vector<Real>>>> getTransformCoefs()
     373             :   {
     374          54 :     checkJSONKey("transform_coefs");
     375             :     return _json["transform_coefs"]
     376         108 :         .template get<std::vector<std::vector<std::vector<std::vector<Real>>>>>();
     377             :   }
     378             : 
     379             :   /* Optional method that returns human-readable limits used for normalization. Default is to just
     380             :    * use the input limits.
     381             :    * Indexes are [partition][tile][input][upper/lower].
     382             :    * Inputs ordering is
     383             :    * input[0]: cell_old
     384             :    * input[1]: wall_old
     385             :    * input[2]: trial stress,
     386             :    * input[3]: effective strain old,
     387             :    * input[4]: temperature
     388             :    * input[5]: environmental factor (optional)
     389             :    * @return human-readable limits for the normalization limits
     390             :    */
     391         378 :   virtual std::vector<std::vector<std::vector<std::vector<Real>>>> getNormalizationLimits()
     392             :   {
     393         378 :     if (_json.contains("normalization_limits"))
     394             :       return _json["normalization_limits"]
     395          54 :           .template get<std::vector<std::vector<std::vector<std::vector<Real>>>>>();
     396             : 
     397         324 :     return getInputLimits();
     398             :   }
     399             : 
     400             :   /* Returns human-readable limits for the inputs.
     401             :    * Indexes are [partition][tile][input][upper/lower].
     402             :    * Inputs ordering is
     403             :    * input[0]: cell_old
     404             :    * input[1]: wall_old
     405             :    * input[2]: trial stress,
     406             :    * input[3]: effective strain old,
     407             :    * input[4]: temperature
     408             :    * input[5]: environmental factor (optional)
     409             :    * @return human-readable limits for the input limits
     410             :    */
     411          54 :   virtual std::vector<std::vector<std::vector<std::vector<Real>>>> getInputLimits()
     412             :   {
     413          54 :     checkJSONKey("input_limits");
     414             :     return _json["input_limits"]
     415         108 :         .template get<std::vector<std::vector<std::vector<std::vector<Real>>>>>();
     416             :   }
     417             : 
     418             :   /*
     419             :    * Material specific coefficients multiplied by the Legendre polynomials for each of the input
     420             :    * variables
     421             :    * @return Legendre polynomial coefficients
     422             :    */
     423          54 :   virtual std::vector<std::vector<std::vector<std::vector<Real>>>> getCoefs()
     424             :   {
     425          54 :     checkJSONKey("coefs");
     426         108 :     return _json["coefs"].template get<std::vector<std::vector<std::vector<std::vector<Real>>>>>();
     427             :   }
     428             : 
     429             :   /*
     430             :    * Material specific orientations of tiling
     431             :    * variables. Indexing is partition, then input
     432             :    * @return Vector of a vector declaring tiling orientation
     433             :    */
     434         378 :   virtual std::vector<std::vector<unsigned int>> getTilings()
     435             :   {
     436         378 :     if (_json.contains("tiling"))
     437          54 :       return _json["tiling"].template get<std::vector<std::vector<unsigned int>>>();
     438             : 
     439         324 :     if (_environmental)
     440           0 :       return {{1, 1, 1, 1, 1, 1}};
     441         648 :     return {{1, 1, 1, 1, 1}};
     442         648 :   };
     443             : 
     444             :   /*
     445             :    * Minimum strain value allowed by the ROM. This is material specific, and needs to be overwritten
     446             :    * by individual roms and each partition
     447             :    * @return Vector of material specific ROM low strain value for each partition
     448             :    */
     449          54 :   virtual std::vector<Real> getStrainCutoff()
     450             :   {
     451          54 :     checkJSONKey("cutoff");
     452         108 :     return _json["cutoff"].template get<std::vector<Real>>();
     453             :   }
     454             : 
     455             :   /// Coupled temperature variable
     456             :   const GenericVariableValue<is_ad> & _temperature;
     457             : 
     458             :   /// Optionally coupled environmental factor
     459             :   const GenericMaterialProperty<Real, is_ad> * _environmental;
     460             : 
     461             :   /*
     462             :    * Vector of vectors WindowFailure enum that informs how to handle input that is outside of the
     463             :    * limits. Shape is number of inputs by 2 (lower and upper window enum)
     464             :    */
     465             :   std::vector<std::pair<WindowFailure, WindowFailure>> _window_failure;
     466             : 
     467             :   /// Flag to output verbose infromation
     468             :   const bool _verbose;
     469             : 
     470             :   ///@{Material properties for cell (glissile) dislocation densities (1/m^2)
     471             :   GenericMaterialProperty<Real, is_ad> & _cell_dislocations;
     472             :   const MaterialProperty<Real> & _cell_dislocations_old;
     473             :   ///@}
     474             : 
     475             :   /// Maximum cell dislocation increment
     476             :   const Real _max_cell_increment;
     477             : 
     478             :   /// Optional cell dislocation forcing function
     479             :   const Function * const _cell_function;
     480             : 
     481             :   /// Container for cell dislocation increment
     482             :   GenericReal<is_ad> _cell_dislocation_increment;
     483             : 
     484             :   ///@{Material properties for wall (locked) dislocation densities (1/m^2)
     485             :   GenericMaterialProperty<Real, is_ad> & _wall_dislocations;
     486             :   const MaterialProperty<Real> & _wall_dislocations_old;
     487             :   ///@}
     488             : 
     489             :   /// Maximum wall dislocation increment
     490             :   const Real _max_wall_increment;
     491             : 
     492             :   /// Optional wall dislocation forcing function
     493             :   const Function * const _wall_function;
     494             : 
     495             :   /// Optiontal effective stress forcing function
     496             :   const Function * const _stress_function;
     497             : 
     498             :   /// Container for wall dislocation increment
     499             :   GenericReal<is_ad> _wall_dislocation_increment;
     500             : 
     501             :   /// Index corresponding to the position for the dislocations with in the cell in the input vector
     502             :   const unsigned int _cell_input_index;
     503             : 
     504             :   /// Index corresponding to the position for the dislocations within the cell wall in the input vector
     505             :   const unsigned int _wall_input_index;
     506             : 
     507             :   /// Index corresponding to the position for the stress in the input vector
     508             :   const unsigned int _stress_input_index;
     509             : 
     510             :   /// Index corresponding to the position for the old strain in the input vector
     511             :   const unsigned int _old_strain_input_index;
     512             : 
     513             :   /// Index corresponding to the position for the tempeature in the input vector
     514             :   const unsigned int _temperature_input_index;
     515             : 
     516             :   /// Index corresponding to the position for the environmental factor in the input vector
     517             :   const unsigned int _environmental_input_index;
     518             : 
     519             :   /// Index corresponding to the position for cell dislocations increment in the output vector
     520             :   const unsigned int _cell_output_index;
     521             : 
     522             :   /// Index corresponding to the position for wall dislocations increment in the output vector
     523             :   const unsigned int _wall_output_index;
     524             : 
     525             :   /// Index corresponding to the position for strain increment in the output vector
     526             :   const unsigned int _strain_output_index;
     527             : 
     528             :   /// Optional old creep strain forcing function
     529             :   const Function * const _creep_strain_old_forcing_function;
     530             : 
     531             :   /// Number of partitions
     532             :   unsigned int _num_partitions;
     533             : 
     534             :   /// Number of ROM tiles per partition
     535             :   std::vector<unsigned int> _num_tiles;
     536             : 
     537             :   /// Number of inputs for the ROM data set
     538             :   unsigned int _num_inputs;
     539             : 
     540             :   /// Number of inputs to the ROM data set
     541             :   unsigned int _num_outputs;
     542             : 
     543             :   /// Legendre polynomial degree for the ROM data set for each partition
     544             :   std::vector<unsigned int> _degree;
     545             : 
     546             :   /// Total number of Legendre polynomial coefficients for the ROM data set in each parition
     547             :   std::vector<unsigned int> _num_coefs;
     548             : 
     549             :   /// Transform rules defined by the ROM data set for each partition
     550             :   std::vector<std::vector<std::vector<std::vector<ROMInputTransform>>>> _transform;
     551             : 
     552             :   /// Transform coefficients defined by the ROM data set for each partition
     553             :   std::vector<std::vector<std::vector<std::vector<Real>>>> _transform_coefs;
     554             : 
     555             :   /// Input limits defined by the ROM data set for each partition
     556             :   std::vector<std::vector<std::vector<std::vector<Real>>>> _input_limits;
     557             : 
     558             :   /// Normalization limits defined by the ROM data set for each partition
     559             :   std::vector<std::vector<std::vector<std::vector<Real>>>> _normalization_limits;
     560             : 
     561             :   /// Coefficients used with Legendre polynomials defined by the ROM data set for each partition
     562             :   std::vector<std::vector<std::vector<std::vector<Real>>>> _coefs;
     563             : 
     564             :   /// Limits transformed from readabile input to ROM readable limits for normalization
     565             :   std::vector<std::vector<std::vector<std::vector<std::vector<Real>>>>>
     566             :       _transformed_normalization_limits;
     567             : 
     568             :   /// Helper container defined by the ROM data set
     569             :   std::vector<std::vector<unsigned int>> _makeframe_helper;
     570             : 
     571             :   /// Creep rate material property
     572             :   GenericMaterialProperty<Real, is_ad> & _creep_rate;
     573             : 
     574             :   /// Cell dislocations rate of change
     575             :   GenericMaterialProperty<Real, is_ad> & _cell_rate;
     576             : 
     577             :   /// Wall dislocations rate of change
     578             :   GenericMaterialProperty<Real, is_ad> & _wall_rate;
     579             : 
     580             :   /// Material property to hold smootherstep applied in order to extrapolate.
     581             :   MaterialProperty<Real> & _extrapolation;
     582             : 
     583             :   /// Material property to store partition weight.
     584             :   GenericMaterialProperty<Real, is_ad> & _second_partition_weight;
     585             : 
     586             :   /// Container for derivative of creep increment with respect to strain
     587             :   GenericReal<is_ad> _derivative;
     588             : 
     589             :   /// Container for input values
     590             :   std::vector<GenericReal<is_ad>> _input_values;
     591             : 
     592             :   /// Container for old input values
     593             :   std::vector<Real> _old_input_values;
     594             : 
     595             :   /// Container for converted rom_inputs
     596             :   std::vector<std::vector<std::vector<GenericReal<is_ad>>>> _rom_inputs;
     597             : 
     598             :   /// Container for ROM polynomial inputs
     599             :   std::vector<std::vector<std::vector<std::vector<GenericReal<is_ad>>>>> _polynomial_inputs;
     600             : 
     601             :   /// Container for ROM precomputed values
     602             :   std::vector<std::vector<std::vector<GenericReal<is_ad>>>> _precomputed_vals;
     603             : 
     604             :   /// Container for global limits
     605             :   std::vector<std::pair<Real, Real>> _global_limits;
     606             : 
     607             :   /// Container for weights for each tile as computed for all input values beside stress
     608             :   std::vector<std::vector<GenericReal<is_ad>>> _non_stress_weights;
     609             : 
     610             :   /// Container for weights for each tile as computed for all input values beside stress
     611             :   std::vector<std::vector<GenericReal<is_ad>>> _weights;
     612             : 
     613             :   /// Container for weights for each tile as computed for all input values beside stress
     614             :   std::vector<GenericReal<is_ad>> _partition_weights;
     615             : 
     616             :   /// Container for d_parition_weights d_stress
     617             :   std::vector<GenericReal<is_ad>> _dpartition_weight_dstress;
     618             : 
     619             :   /// Container for tiling orientations
     620             :   std::vector<std::vector<unsigned int>> _tiling;
     621             : 
     622             :   /// Container for strain cutoff
     623             :   std::vector<Real> _cutoff;
     624             : 
     625             :   /// Unit conversion factors required to convert from the specified unit to MPa
     626             :   Real _stress_ucf;
     627             : 
     628             :   ///@{Material properties accumulated at substeps
     629             :   GenericMaterialProperty<Real, is_ad> & _wall_dislocations_step;
     630             :   GenericMaterialProperty<Real, is_ad> & _cell_dislocations_step;
     631             :   ///@}
     632             : 
     633             :   /// Total plastic strain increment in step (summing substep contributions)
     634             :   RankTwoTensor _plastic_strain_increment;
     635             : 
     636             :   /// Material property capturing number of substeps for output purposes (defaults to one if substepping isn't used)
     637             :   MaterialProperty<Real> & _number_of_substeps;
     638             : 
     639             :   /// index names for error output
     640             :   std::vector<std::string> _index_name;
     641             : 
     642             :   /// check if a JSON file was loaded and if the specified key exists
     643             :   void checkJSONKey(const std::string & key);
     644             : 
     645             :   /// JSON object constructed from the datafile
     646             :   nlohmann::json _json;
     647             : 
     648             :   usingTransientInterfaceMembers;
     649             :   using Material::_name;
     650             :   using Material::_q_point;
     651             :   using Material::_qp;
     652             :   using Material::coupledGenericValue;
     653             :   using RadialReturnCreepStressUpdateBaseTempl<is_ad>::computeResidual;
     654             :   using RadialReturnCreepStressUpdateBaseTempl<is_ad>::computeDerivative;
     655             :   using RadialReturnCreepStressUpdateBaseTempl<is_ad>::_apply_strain;
     656             :   using RadialReturnCreepStressUpdateBaseTempl<is_ad>::initQpStatefulProperties;
     657             :   using RadialReturnCreepStressUpdateBaseTempl<is_ad>::outputIterationStep;
     658             :   using RadialReturnCreepStressUpdateBaseTempl<is_ad>::outputIterationSummary;
     659             : };
     660             : 
     661             : typedef LAROMANCEStressUpdateBaseTempl<false> LAROMANCEStressUpdateBase;
     662             : typedef LAROMANCEStressUpdateBaseTempl<true> ADLAROMANCEStressUpdateBase;

Generated by: LCOV version 1.14