LCOV - code coverage report
Current view: top level - src/variables - VariableWarehouse.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: #32971 (54bef8) with base c6cf66 Lines: 131 140 93.6 %
Date: 2026-05-29 20:35:17 Functions: 35 38 92.1 %
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 "VariableWarehouse.h"
      11             : #include "MooseVariableFE.h"
      12             : #include "MooseVariableFV.h"
      13             : #include "MooseLinearVariableFV.h"
      14             : #include "MooseVariableScalar.h"
      15             : #include "MooseTypes.h"
      16             : 
      17      141711 : VariableWarehouse::VariableWarehouse() {}
      18             : 
      19             : void
      20      183853 : VariableWarehouse::add(const std::string & var_name, std::shared_ptr<MooseVariableBase> var)
      21             : {
      22      183853 :   _names.push_back(var_name);
      23      183853 :   auto * raw_var = var.get();
      24      183853 :   _all_objects[var->number()] = var;
      25      183853 :   _var_name[var_name] = raw_var;
      26             : 
      27      183853 :   if (auto * tmp_var = dynamic_cast<MooseVariableFieldBase *>(raw_var))
      28             :   {
      29      180717 :     _vars.push_back(tmp_var);
      30      180717 :     if (auto * tmp_var = dynamic_cast<MooseVariable *>(raw_var))
      31             :     {
      32      170029 :       _regular_vars_by_number[tmp_var->number()] = tmp_var;
      33      170029 :       _regular_vars_by_name[var_name] = tmp_var;
      34             :     }
      35       10688 :     else if (auto * tmp_var = dynamic_cast<MooseVariableFVReal *>(raw_var))
      36             :     {
      37        5421 :       _fv_vars_by_number[tmp_var->number()] = tmp_var;
      38        5421 :       _fv_vars_by_name[var_name] = tmp_var;
      39             :     }
      40        5267 :     else if (auto * tmp_var = dynamic_cast<MooseLinearVariableFVReal *>(raw_var))
      41             :     {
      42        1228 :       _linear_fv_vars_by_number[tmp_var->number()] = tmp_var;
      43        1228 :       _linear_fv_vars_by_name[var_name] = tmp_var;
      44             :     }
      45        4039 :     else if (auto * tmp_var = dynamic_cast<VectorMooseVariable *>(raw_var))
      46             :     {
      47        1554 :       _vector_vars_by_number[tmp_var->number()] = tmp_var;
      48        1554 :       _vector_vars_by_name[var_name] = tmp_var;
      49             :     }
      50        2485 :     else if (auto * tmp_var = dynamic_cast<ArrayMooseVariable *>(raw_var))
      51             :     {
      52        2485 :       _array_vars_by_number[tmp_var->number()] = tmp_var;
      53        2485 :       _array_vars_by_name[var_name] = tmp_var;
      54             :     }
      55             :     else
      56           0 :       mooseError("Unknown variable class passed into VariableWarehouse. Attempt to hack us?");
      57             :   }
      58        3136 :   else if (auto * tmp_var = dynamic_cast<MooseVariableScalar *>(raw_var))
      59        3136 :     _scalar_vars.push_back(tmp_var);
      60             :   else
      61           0 :     mooseError("Unknown variable class passed into VariableWarehouse. Attempt to hack us?");
      62      183853 : }
      63             : 
      64             : void
      65      108123 : VariableWarehouse::addBoundaryVar(BoundaryID bnd, const MooseVariableFEBase * var)
      66             : {
      67      108123 :   _boundary_vars[bnd].insert(var);
      68      108123 : }
      69             : 
      70             : void
      71       80065 : VariableWarehouse::addBoundaryVar(const std::set<BoundaryID> & boundary_ids,
      72             :                                   const MooseVariableFEBase * var)
      73             : {
      74      182783 :   for (const auto & bid : boundary_ids)
      75      102718 :     addBoundaryVar(bid, var);
      76       80065 : }
      77             : 
      78             : void
      79       80062 : VariableWarehouse::addBoundaryVars(
      80             :     const std::set<BoundaryID> & boundary_ids,
      81             :     const std::unordered_map<std::string, std::vector<MooseVariableFEBase *>> & vars)
      82             : {
      83      182774 :   for (const auto & bid : boundary_ids)
      84      107077 :     for (const auto & it : vars)
      85        9770 :       for (const auto & var : it.second)
      86        5405 :         addBoundaryVar(bid, var);
      87       80062 : }
      88             : 
      89             : MooseVariableBase *
      90     4882748 : VariableWarehouse::getVariable(const std::string & var_name) const
      91             : {
      92     4882748 :   auto it = _var_name.find(var_name);
      93     4882748 :   if (it != _var_name.end())
      94     4882742 :     return it->second;
      95             :   else
      96           6 :     return nullptr;
      97             : }
      98             : 
      99             : MooseVariableBase *
     100      175250 : VariableWarehouse::getVariable(unsigned int var_number) const
     101             : {
     102      175250 :   auto it = _all_objects.find(var_number);
     103      175250 :   if (it != _all_objects.end())
     104      175250 :     return it->second.get();
     105             :   else
     106           0 :     return nullptr;
     107             : }
     108             : 
     109             : const std::vector<VariableName> &
     110     6831692 : VariableWarehouse::names() const
     111             : {
     112     6831692 :   return _names;
     113             : }
     114             : 
     115             : const std::vector<MooseVariableFEBase *> &
     116  1848326943 : VariableWarehouse::fieldVariables() const
     117             : {
     118  1848326943 :   return _vars;
     119             : }
     120             : 
     121             : const std::vector<MooseVariableScalar *> &
     122   145675373 : VariableWarehouse::scalars() const
     123             : {
     124   145675373 :   return _scalar_vars;
     125             : }
     126             : 
     127             : const std::set<const MooseVariableFEBase *> &
     128           0 : VariableWarehouse::boundaryVars(BoundaryID bnd) const
     129             : {
     130           0 :   return _boundary_vars.find(bnd)->second;
     131             : }
     132             : 
     133             : namespace
     134             : {
     135             : template <typename T, typename Map, typename Key>
     136             : MooseVariableFE<T> *
     137     3121623 : getFieldVariableHelper(const Map & map, const Key & key, const std::string & container_name)
     138             : {
     139             :   // TODO: the requested variable might be an FV variable - how to we
     140             :   // reconcile this since this function returns an FE (not Field) pointer?
     141             :   // crap tons of objects depend on this.
     142             : 
     143     3121623 :   auto it = map.find(key);
     144     3121623 :   if (it == map.end())
     145           0 :     mooseError("Key '", key, "' not found in VariableWarehouse container '", container_name, "'");
     146             : 
     147     6243246 :   return it->second;
     148             : }
     149             : }
     150             : 
     151             : template <typename T>
     152             : MooseVariableFE<T> *
     153       53663 : VariableWarehouse::getFieldVariable(const std::string & var_name)
     154             : {
     155      107326 :   return getFieldVariableHelper<T>(_regular_vars_by_name, var_name, "_regular_vars_by_name");
     156             : }
     157             : 
     158             : template <typename T>
     159             : MooseVariableFE<T> *
     160           0 : VariableWarehouse::getFieldVariable(unsigned int var_number)
     161             : {
     162           0 :   return getFieldVariableHelper<T>(_regular_vars_by_number, var_number, "_regular_vars_by_number");
     163             : }
     164             : 
     165             : template <>
     166             : VectorMooseVariable *
     167        1182 : VariableWarehouse::getFieldVariable<RealVectorValue>(const std::string & var_name)
     168             : {
     169        3546 :   return getFieldVariableHelper<RealVectorValue>(
     170        2364 :       _vector_vars_by_name, var_name, "_vector_vars_by_name");
     171             : }
     172             : 
     173             : template <>
     174             : VectorMooseVariable *
     175     1873320 : VariableWarehouse::getFieldVariable<RealVectorValue>(unsigned int var_number)
     176             : {
     177     5619960 :   return getFieldVariableHelper<RealVectorValue>(
     178     3746640 :       _vector_vars_by_number, var_number, "_vector_vars_by_number");
     179             : }
     180             : 
     181             : template <>
     182             : ArrayMooseVariable *
     183        1762 : VariableWarehouse::getFieldVariable<RealEigenVector>(const std::string & var_name)
     184             : {
     185        5286 :   return getFieldVariableHelper<RealEigenVector>(
     186        3524 :       _array_vars_by_name, var_name, "_array_vars_by_name");
     187             : }
     188             : 
     189             : template <>
     190             : ArrayMooseVariable *
     191     1191696 : VariableWarehouse::getFieldVariable<RealEigenVector>(unsigned int var_number)
     192             : {
     193     3575088 :   return getFieldVariableHelper<RealEigenVector>(
     194     2383392 :       _array_vars_by_number, var_number, "_array_vars_by_number");
     195             : }
     196             : 
     197             : template MooseVariableFE<Real> *
     198             : VariableWarehouse::getFieldVariable<Real>(const std::string & var_name);
     199             : template MooseVariableFE<Real> * VariableWarehouse::getFieldVariable<Real>(unsigned int var_number);
     200             : 
     201             : template <typename T>
     202             : MooseVariableField<T> *
     203      106732 : VariableWarehouse::getActualFieldVariable(const std::string & var_name)
     204             : {
     205      106732 :   auto it = _regular_vars_by_name.find(var_name);
     206      106732 :   if (it != _regular_vars_by_name.end())
     207      102578 :     return it->second;
     208        4154 :   auto it_fv = _fv_vars_by_name.find(var_name);
     209        4154 :   if (it_fv != _fv_vars_by_name.end())
     210        2924 :     return it_fv->second;
     211        1230 :   return _linear_fv_vars_by_name.at(var_name);
     212             : }
     213             : 
     214             : template <typename T>
     215             : MooseVariableField<T> *
     216   124093669 : VariableWarehouse::getActualFieldVariable(unsigned int var_number)
     217             : {
     218   124093669 :   auto it = _regular_vars_by_number.find(var_number);
     219   124093669 :   if (it != _regular_vars_by_number.end())
     220   124042288 :     return it->second;
     221       51381 :   auto it_fv = _fv_vars_by_number.find(var_number);
     222       51381 :   if (it_fv != _fv_vars_by_number.end())
     223       51381 :     return it_fv->second;
     224           0 :   return _linear_fv_vars_by_number.at(var_number);
     225             : }
     226             : 
     227             : template <>
     228             : MooseVariableField<RealVectorValue> *
     229         866 : VariableWarehouse::getActualFieldVariable<RealVectorValue>(const std::string & var_name)
     230             : {
     231             :   // TODO: when necessary, add the if check to see if we have an FV vector var
     232             :   // before just returning nothing as found in FE vars list.
     233         866 :   return getFieldVariable<RealVectorValue>(var_name);
     234             : }
     235             : 
     236             : template <>
     237             : MooseVariableField<RealVectorValue> *
     238     1873320 : VariableWarehouse::getActualFieldVariable<RealVectorValue>(unsigned int var_number)
     239             : {
     240             :   // TODO: when necessary, add the if check to see if we have an FV vector var
     241             :   // before just returning nothing as found in FE vars list.
     242     1873320 :   return getFieldVariable<RealVectorValue>(var_number);
     243             : }
     244             : 
     245             : template <>
     246             : MooseVariableField<RealEigenVector> *
     247        1389 : VariableWarehouse::getActualFieldVariable<RealEigenVector>(const std::string & var_name)
     248             : {
     249        1389 :   return getFieldVariable<RealEigenVector>(var_name);
     250             : }
     251             : 
     252             : template <>
     253             : MooseVariableField<RealEigenVector> *
     254     1191696 : VariableWarehouse::getActualFieldVariable<RealEigenVector>(unsigned int var_number)
     255             : {
     256     1191696 :   return getFieldVariable<RealEigenVector>(var_number);
     257             : }
     258             : 
     259             : void
     260      134804 : VariableWarehouse::initialSetup()
     261             : {
     262      313067 :   for (auto & pair : _all_objects)
     263      178263 :     pair.second->initialSetup();
     264      134804 : }
     265             : 
     266             : void
     267      653856 : VariableWarehouse::timestepSetup()
     268             : {
     269     1837589 :   for (auto & pair : _all_objects)
     270     1183733 :     pair.second->timestepSetup();
     271      653856 : }
     272             : 
     273             : void
     274     4221495 : VariableWarehouse::customSetup(const ExecFlagType & exec_type)
     275             : {
     276    10666071 :   for (auto & pair : _all_objects)
     277     6444576 :     pair.second->customSetup(exec_type);
     278     4221495 : }
     279             : 
     280             : void
     281     6539873 : VariableWarehouse::subdomainSetup()
     282             : {
     283    14221300 :   for (auto & pair : _all_objects)
     284     7681427 :     pair.second->subdomainSetup();
     285     6539873 : }
     286             : 
     287             : void
     288     1134735 : VariableWarehouse::jacobianSetup()
     289             : {
     290     2433331 :   for (auto & pair : _all_objects)
     291     1298596 :     pair.second->jacobianSetup();
     292     1134735 : }
     293             : 
     294             : void
     295     7076501 : VariableWarehouse::residualSetup()
     296             : {
     297    14769401 :   for (auto & pair : _all_objects)
     298     7692900 :     pair.second->residualSetup();
     299     7076501 : }
     300             : 
     301             : void
     302      784334 : VariableWarehouse::clearAllDofIndices()
     303             : {
     304     2046295 :   for (auto * var : _vars)
     305     1261961 :     var->clearAllDofIndices();
     306      784334 : }
     307             : 
     308             : void
     309    14033421 : VariableWarehouse::setActiveVariableCoupleableVectorTags(const std::set<TagID> & vtags)
     310             : {
     311    32338680 :   for (auto * var : _vars)
     312    18305259 :     var->setActiveTags(vtags);
     313    14033421 : }
     314             : 
     315             : void
     316       95712 : VariableWarehouse::setActiveScalarVariableCoupleableVectorTags(const std::set<TagID> & vtags)
     317             : {
     318      195471 :   for (auto * var : _scalar_vars)
     319       99759 :     var->setActiveTags(vtags);
     320       95712 : }
     321             : 
     322             : template MooseVariableField<Real> *
     323             : VariableWarehouse::getActualFieldVariable<Real>(const std::string & var_name);
     324             : template MooseVariableField<Real> *
     325             : VariableWarehouse::getActualFieldVariable<Real>(unsigned int var_number);

Generated by: LCOV version 1.14