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 : #include "MooseVariableField.h" 11 : #include "SystemBase.h" 12 : #include "TimeIntegrator.h" 13 : 14 : #include "libmesh/fe_base.h" 15 : 16 : using namespace Moose; 17 : 18 : template <typename OutputType> 19 : InputParameters 20 207581 : MooseVariableField<OutputType>::validParams() 21 : { 22 207581 : return MooseVariableFieldBase::validParams(); 23 : } 24 : 25 : template <typename OutputType> 26 186618 : MooseVariableField<OutputType>::MooseVariableField(const InputParameters & parameters) 27 : : MooseVariableFieldBase(parameters), 28 : Moose::FunctorBase<typename Moose::ADType<OutputType>::type>(name()), 29 : MeshChangedInterface(parameters), 30 746472 : _time_integrator(_sys.queryTimeIntegrator(_var_num)) 31 : { 32 373236 : } 33 : 34 : template <typename OutputType> 35 : void 36 7837968 : MooseVariableField<OutputType>::residualSetup() 37 : { 38 7837968 : MooseVariableFieldBase::residualSetup(); 39 7837968 : FunctorBase<typename Moose::ADType<OutputType>::type>::residualSetup(); 40 7837968 : } 41 : 42 : template <typename OutputType> 43 : void 44 1308464 : MooseVariableField<OutputType>::jacobianSetup() 45 : { 46 1308464 : MooseVariableFieldBase::jacobianSetup(); 47 1308464 : FunctorBase<typename Moose::ADType<OutputType>::type>::jacobianSetup(); 48 1308464 : } 49 : 50 : template <typename OutputType> 51 : void 52 1244389 : MooseVariableField<OutputType>::timestepSetup() 53 : { 54 1244389 : MooseVariableFieldBase::timestepSetup(); 55 1244389 : FunctorBase<typename Moose::ADType<OutputType>::type>::timestepSetup(); 56 1244389 : } 57 : 58 : template <typename OutputType> 59 : Moose::VarFieldType 60 154980882 : MooseVariableField<OutputType>::fieldType() const 61 : { 62 : if (std::is_same<OutputType, Real>::value) 63 145812549 : return Moose::VarFieldType::VAR_FIELD_STANDARD; 64 : else if (std::is_same<OutputType, RealVectorValue>::value) 65 6542875 : return Moose::VarFieldType::VAR_FIELD_VECTOR; 66 : else if (std::is_same<OutputType, RealEigenVector>::value) 67 2625458 : return Moose::VarFieldType::VAR_FIELD_ARRAY; 68 : else 69 : mooseError("Unknown variable field type"); 70 : } 71 : 72 : template <typename OutputType> 73 : bool 74 1188742 : MooseVariableField<OutputType>::isArray() const 75 : { 76 1188742 : const auto is_array = MooseVariableBase::isArray(); 77 1188742 : if (std::is_same<OutputType, RealEigenVector>::value != is_array) 78 0 : mooseError("A variable is marked as an array variable in a base class, but in a derived class " 79 : "the output type is not consistent."); 80 1188742 : return is_array; 81 : } 82 : 83 : template <typename OutputType> 84 : bool 85 402817 : MooseVariableField<OutputType>::isVector() const 86 : { 87 402817 : return std::is_same<OutputType, RealVectorValue>::value; 88 : } 89 : 90 : template <> 91 : template <> 92 : const MooseArray<Real> & 93 279 : MooseVariableField<Real>::genericDofValues<false>() const 94 : { 95 279 : return dofValues(); 96 : } 97 : 98 : template <> 99 : template <> 100 : const MooseArray<Real> & 101 0 : MooseVariableField<RealVectorValue>::genericDofValues<false>() const 102 : { 103 0 : return dofValues(); 104 : } 105 : 106 : template <> 107 : template <> 108 : const MooseArray<Real> & 109 0 : MooseVariableField<RealEigenVector>::genericDofValues<false>() const 110 : { 111 0 : mooseError("genericDofValues not implemented for array variables"); 112 : } 113 : 114 : template class MooseVariableField<Real>; 115 : template class MooseVariableField<RealVectorValue>; 116 : template class MooseVariableField<RealEigenVector>;