diff --git a/framework/include/variables/MooseVariableData.h b/framework/include/variables/MooseVariableData.h index 2c41cf98440d..42fcce9d79c4 100644 --- a/framework/include/variables/MooseVariableData.h +++ b/framework/include/variables/MooseVariableData.h @@ -340,13 +340,13 @@ class MooseVariableData const FieldVariableValue & uDotDotOld() const; - const VariableValue & duDotDu() const + const FieldVariableValue & duDotDu() const { _need_du_dot_du = true; return _du_dot_du; } - const VariableValue & duDotDotDu() const + const FieldVariableValue & duDotDotDu() const { _need_du_dotdot_du = true; return _du_dotdot_du; @@ -447,8 +447,8 @@ class MooseVariableData const DoFValue & dofValuesDotOld() const; const DoFValue & dofValuesDotDot() const; const DoFValue & dofValuesDotDotOld() const; - const MooseArray & dofValuesDuDotDu() const; - const MooseArray & dofValuesDuDotDotDu() const; + const DoFValue & dofValuesDuDotDu() const; + const DoFValue & dofValuesDuDotDotDu() const; /** * Return the AD dof values @@ -649,9 +649,9 @@ class MooseVariableData /// nodal values of u_dotdot_old DoFValue _dof_values_dotdot_old; /// nodal values of derivative of u_dot wrt u - MooseArray _dof_du_dot_du; + DoFValue _dof_du_dot_du; /// nodal values of derivative of u_dotdot wrt u - MooseArray _dof_du_dotdot_du; + DoFValue _dof_du_dotdot_du; /// u FieldVariableValue _u; @@ -703,10 +703,10 @@ class MooseVariableData FieldVariableValue _u_dotdot_old, _u_dotdot_old_bak; /// derivative of u_dot wrt u - VariableValue _du_dot_du; + FieldVariableValue _du_dot_du; /// derivative of u_dotdot wrt u - VariableValue _du_dotdot_du, _du_dotdot_du_bak; + FieldVariableValue _du_dotdot_du, _du_dotdot_du_bak; /// The current qrule. This has to be a reference because the current qrule will be constantly /// changing. If we initialized this to point to one qrule, then in the next calculation we would diff --git a/framework/include/variables/MooseVariableFE.h b/framework/include/variables/MooseVariableFE.h index ddf56021624b..d57065184c24 100644 --- a/framework/include/variables/MooseVariableFE.h +++ b/framework/include/variables/MooseVariableFE.h @@ -354,8 +354,8 @@ class MooseVariableFE : public MooseVariableFEBase const FieldVariableValue & uDotDot() const { return _element_data->uDotDot(); } const FieldVariableValue & uDotOld() const { return _element_data->uDotOld(); } const FieldVariableValue & uDotDotOld() const { return _element_data->uDotDotOld(); } - const VariableValue & duDotDu() const { return _element_data->duDotDu(); } - const VariableValue & duDotDotDu() const { return _element_data->duDotDotDu(); } + const FieldVariableValue & duDotDu() const { return _element_data->duDotDu(); } + const FieldVariableValue & duDotDotDu() const { return _element_data->duDotDotDu(); } /// neighbor solutions const FieldVariableValue & slnNeighbor() const { return _neighbor_data->sln(Moose::Current); } @@ -428,8 +428,8 @@ class MooseVariableFE : public MooseVariableFEBase const FieldVariableValue & uDotDotNeighbor() const { return _neighbor_data->uDotDot(); } const FieldVariableValue & uDotOldNeighbor() const { return _neighbor_data->uDotOld(); } const FieldVariableValue & uDotDotOldNeighbor() const { return _neighbor_data->uDotDotOld(); } - const VariableValue & duDotDuNeighbor() const { return _neighbor_data->duDotDu(); } - const VariableValue & duDotDotDuNeighbor() const { return _neighbor_data->duDotDotDu(); } + const FieldVariableValue & duDotDuNeighbor() const { return _neighbor_data->duDotDu(); } + const FieldVariableValue & duDotDotDuNeighbor() const { return _neighbor_data->duDotDotDu(); } /// lower-d element solution template @@ -527,10 +527,10 @@ class MooseVariableFE : public MooseVariableFEBase const DoFValue & dofValuesDotDotNeighbor(); const DoFValue & dofValuesDotDotOld(); const DoFValue & dofValuesDotDotOldNeighbor(); - const MooseArray & dofValuesDuDotDu(); - const MooseArray & dofValuesDuDotDuNeighbor(); - const MooseArray & dofValuesDuDotDotDu(); - const MooseArray & dofValuesDuDotDotDuNeighbor(); + const DoFValue & dofValuesDuDotDu(); + const DoFValue & dofValuesDuDotDuNeighbor(); + const DoFValue & dofValuesDuDotDotDu(); + const DoFValue & dofValuesDuDotDotDuNeighbor(); /** * Return the AD dof values diff --git a/framework/include/variables/MooseVariableInterface.h b/framework/include/variables/MooseVariableInterface.h index adac63f59ebe..903a1a4c644f 100644 --- a/framework/include/variables/MooseVariableInterface.h +++ b/framework/include/variables/MooseVariableInterface.h @@ -105,7 +105,7 @@ class MooseVariableInterface * * @return The reference to be stored off and used later. */ - virtual const VariableValue & dotDu(); + virtual const typename OutputTools::VariableValue & dotDu(); /** * The derivative of the second time derivative of the variable this object is operating on @@ -115,7 +115,7 @@ class MooseVariableInterface * * @return The reference to be stored off and used later. */ - virtual const VariableValue & dotDotDu(); + virtual const typename OutputTools::VariableValue & dotDotDu(); /** * The gradient of the variable this object is operating on. @@ -202,4 +202,3 @@ class MooseVariableInterface protected: Assembly * _mvi_assembly; }; - diff --git a/framework/src/variables/MooseVariableData.C b/framework/src/variables/MooseVariableData.C index 45e5ea65aaed..a2888ce7898d 100644 --- a/framework/src/variables/MooseVariableData.C +++ b/framework/src/variables/MooseVariableData.C @@ -903,10 +903,10 @@ MooseVariableData::computeValues() _u_dotdot_old[i].setZero(_count); if (_need_du_dot_du) - _du_dot_du[i] = 0; + _du_dot_du[i].setZero(_count); if (_need_du_dotdot_du) - _du_dotdot_du[i] = 0; + _du_dotdot_du[i].setZero(_count); if (_need_grad_dot) _grad_u_dot[i].setZero(_count, LIBMESH_DIM); @@ -1789,7 +1789,7 @@ MooseVariableData::dofValuesDotDotOld() const } template -const MooseArray & +const typename MooseVariableData::DoFValue & MooseVariableData::dofValuesDuDotDu() const { _need_dof_du_dot_du = true; @@ -1797,7 +1797,7 @@ MooseVariableData::dofValuesDuDotDu() const } template -const MooseArray & +const typename MooseVariableData::DoFValue & MooseVariableData::dofValuesDuDotDotDu() const { _need_dof_du_dotdot_du = true; diff --git a/framework/src/variables/MooseVariableFE.C b/framework/src/variables/MooseVariableFE.C index 7eaf61afc97e..f1da987765f7 100644 --- a/framework/src/variables/MooseVariableFE.C +++ b/framework/src/variables/MooseVariableFE.C @@ -346,28 +346,28 @@ MooseVariableFE::dofValuesDotDotOldNeighbor() } template -const MooseArray & +const typename MooseVariableFE::DoFValue & MooseVariableFE::dofValuesDuDotDu() { return _element_data->dofValuesDuDotDu(); } template -const MooseArray & +const typename MooseVariableFE::DoFValue & MooseVariableFE::dofValuesDuDotDotDu() { return _element_data->dofValuesDuDotDotDu(); } template -const MooseArray & +const typename MooseVariableFE::DoFValue & MooseVariableFE::dofValuesDuDotDuNeighbor() { return _neighbor_data->dofValuesDuDotDu(); } template -const MooseArray & +const typename MooseVariableFE::DoFValue & MooseVariableFE::dofValuesDuDotDotDuNeighbor() { return _neighbor_data->dofValuesDuDotDotDu(); diff --git a/framework/src/variables/MooseVariableInterface.C b/framework/src/variables/MooseVariableInterface.C index 83e56846da9e..10347331c041 100644 --- a/framework/src/variables/MooseVariableInterface.C +++ b/framework/src/variables/MooseVariableInterface.C @@ -213,7 +213,7 @@ MooseVariableInterface::dotDotOld() } template -const VariableValue & +const typename OutputTools::VariableValue & MooseVariableInterface::dotDu() { if (_nodal) @@ -223,7 +223,7 @@ MooseVariableInterface::dotDu() } template -const VariableValue & +const typename OutputTools::VariableValue & MooseVariableInterface::dotDotDu() { if (_nodal) @@ -232,6 +232,26 @@ MooseVariableInterface::dotDotDu() return _variable->duDotDotDu(); } +template <> +const VectorVariableValue & +MooseVariableInterface::dotDu() +{ + if (_nodal) + mooseError("Dofs are scalars while vector variables have vector values. Mismatch"); + else + return _variable->duDotDu(); +} + +template <> +const VectorVariableValue & +MooseVariableInterface::dotDotDu() +{ + if (_nodal) + mooseError("Dofs are scalars while vector variables have vector values. Mismatch"); + else + return _variable->duDotDotDu(); +} + template const typename OutputTools::VariableGradient & MooseVariableInterface::gradient()