diff --git a/framework/include/interfaces/Coupleable.h b/framework/include/interfaces/Coupleable.h index 102b83f00239..a8d8bab894ed 100644 --- a/framework/include/interfaces/Coupleable.h +++ b/framework/include/interfaces/Coupleable.h @@ -551,6 +551,13 @@ class Coupleable virtual const VariableValue & coupledValueOlder(const std::string & var_name, unsigned int comp = 0) const; + /** + * Returns the older values for all of a coupled variable's components + * @param var_name Name of coupled variable + * @return Vector of VariableValue pointers for each component of \p var_name + */ + std::vector coupledValuesOlder(const std::string & var_name) const; + /** * Returns value of previous Newton iterate of a coupled variable * @param var_name Name of coupled variable diff --git a/framework/src/interfaces/Coupleable.C b/framework/src/interfaces/Coupleable.C index f4482eda62dd..260d5ecae47e 100644 --- a/framework/src/interfaces/Coupleable.C +++ b/framework/src/interfaces/Coupleable.C @@ -2544,6 +2544,13 @@ Coupleable::coupledValuesOld(const std::string & var_name) const return coupledVectorHelper(var_name, func); } +std::vector +Coupleable::coupledValuesOlder(const std::string & var_name) const +{ + auto func = [this, &var_name](unsigned int comp) { return &coupledValueOlder(var_name, comp); }; + return coupledVectorHelper(var_name, func); +} + std::vector Coupleable::coupledGradients(const std::string & var_name) const { diff --git a/framework/src/materials/InterpolatedStatefulMaterial.C b/framework/src/materials/InterpolatedStatefulMaterial.C index 74cb95fc2c07..d001c0bb6660 100644 --- a/framework/src/materials/InterpolatedStatefulMaterial.C +++ b/framework/src/materials/InterpolatedStatefulMaterial.C @@ -31,14 +31,16 @@ InterpolatedStatefulMaterialTempl::InterpolatedStatefulMaterialTempl( const InputParameters & parameters) : Material(parameters), _old_state(coupledValuesOld("old_state")), - _older_state(coupledValuesOld("old_state")), // older is missing + _older_state(coupledValuesOlder("old_state")), _size(Moose::SerialAccess::size()), _prop_name(getParam("prop_name")), _prop_old(declareProperty(_prop_name + "_interpolated_old")), _prop_older(declareProperty(_prop_name + "_interpolated_older")) { if (_old_state.size() != _size) - paramError("old_state", "Wrong number of compoet AuxVariables passed in."); + paramError("old_state", "Wrong number of component AuxVariables passed in."); + mooseAssert(_old_state.size() == _older_state.size(), + "Internal error. Old and older coupled variable vectors should have the same size."); } template