LCOV - code coverage report
Current view: top level - src/variables - MooseVariableField.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 32 37 86.5 %
Date: 2025-07-17 01:28:37 Functions: 28 33 84.8 %
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             : #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      197028 : MooseVariableField<OutputType>::validParams()
      21             : {
      22      197028 :   return MooseVariableFieldBase::validParams();
      23             : }
      24             : 
      25             : template <typename OutputType>
      26      172864 : MooseVariableField<OutputType>::MooseVariableField(const InputParameters & parameters)
      27             :   : MooseVariableFieldBase(parameters),
      28             :     Moose::FunctorBase<typename Moose::ADType<OutputType>::type>(name()),
      29             :     MeshChangedInterface(parameters),
      30      518592 :     _time_integrator(_sys.queryTimeIntegrator(_var_num))
      31             : {
      32      345728 : }
      33             : 
      34             : template <typename OutputType>
      35             : void
      36     7247313 : MooseVariableField<OutputType>::residualSetup()
      37             : {
      38     7247313 :   MooseVariableFieldBase::residualSetup();
      39     7247313 :   FunctorBase<typename Moose::ADType<OutputType>::type>::residualSetup();
      40     7247313 : }
      41             : 
      42             : template <typename OutputType>
      43             : void
      44     1204373 : MooseVariableField<OutputType>::jacobianSetup()
      45             : {
      46     1204373 :   MooseVariableFieldBase::jacobianSetup();
      47     1204373 :   FunctorBase<typename Moose::ADType<OutputType>::type>::jacobianSetup();
      48     1204373 : }
      49             : 
      50             : template <typename OutputType>
      51             : void
      52     1142077 : MooseVariableField<OutputType>::timestepSetup()
      53             : {
      54     1142077 :   MooseVariableFieldBase::timestepSetup();
      55     1142077 :   FunctorBase<typename Moose::ADType<OutputType>::type>::timestepSetup();
      56     1142077 : }
      57             : 
      58             : template <typename OutputType>
      59             : const NumericVector<Number> &
      60      947481 : MooseVariableField<OutputType>::getSolution(const Moose::StateArg & state) const
      61             : {
      62             :   // It's not safe to use solutionState(0) because it returns the libMesh System solution member
      63             :   // which is wrong during things like finite difference Jacobian evaluation, e.g. when PETSc
      64             :   // perturbs the solution vector we feed these perturbations into the current_local_solution
      65             :   // while the libMesh solution is frozen in the non-perturbed state
      66      947481 :   return (state.state == 0) ? *this->_sys.currentSolution()
      67      947481 :                             : this->_sys.solutionState(state.state, state.iteration_type);
      68             : }
      69             : 
      70             : template <typename OutputType>
      71             : Moose::VarFieldType
      72   138799585 : MooseVariableField<OutputType>::fieldType() const
      73             : {
      74             :   if (std::is_same<OutputType, Real>::value)
      75   130658151 :     return Moose::VarFieldType::VAR_FIELD_STANDARD;
      76             :   else if (std::is_same<OutputType, RealVectorValue>::value)
      77     5854726 :     return Moose::VarFieldType::VAR_FIELD_VECTOR;
      78             :   else if (std::is_same<OutputType, RealEigenVector>::value)
      79     2286708 :     return Moose::VarFieldType::VAR_FIELD_ARRAY;
      80             :   else
      81             :     mooseError("Unknown variable field type");
      82             : }
      83             : 
      84             : template <typename OutputType>
      85             : bool
      86     1086608 : MooseVariableField<OutputType>::isArray() const
      87             : {
      88     1086608 :   const auto is_array = MooseVariableBase::isArray();
      89     1086608 :   if (std::is_same<OutputType, RealEigenVector>::value != is_array)
      90           0 :     mooseError("A variable is marked as an array variable in a base class, but in a derived class "
      91             :                "the output type is not consistent.");
      92     1086608 :   return is_array;
      93             : }
      94             : 
      95             : template <typename OutputType>
      96             : bool
      97      372019 : MooseVariableField<OutputType>::isVector() const
      98             : {
      99      372019 :   return std::is_same<OutputType, RealVectorValue>::value;
     100             : }
     101             : 
     102             : template <>
     103             : template <>
     104             : const MooseArray<Real> &
     105         261 : MooseVariableField<Real>::genericDofValues<false>() const
     106             : {
     107         261 :   return dofValues();
     108             : }
     109             : 
     110             : template <>
     111             : template <>
     112             : const MooseArray<Real> &
     113           0 : MooseVariableField<RealVectorValue>::genericDofValues<false>() const
     114             : {
     115           0 :   return dofValues();
     116             : }
     117             : 
     118             : template <>
     119             : template <>
     120             : const MooseArray<Real> &
     121           0 : MooseVariableField<RealEigenVector>::genericDofValues<false>() const
     122             : {
     123           0 :   mooseError("genericDofValues not implemented for array variables");
     124             : }
     125             : 
     126             : template class MooseVariableField<Real>;
     127             : template class MooseVariableField<RealVectorValue>;
     128             : template class MooseVariableField<RealEigenVector>;

Generated by: LCOV version 1.14