https://mooseframework.inl.gov
MooseVariableDependencyInterface.h
Go to the documentation of this file.
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 #pragma once
11 
12 #include "MooseTypes.h"
13 
14 #include "libmesh/id_types.h"
15 
16 #include <set>
17 #include <vector>
18 #include <algorithm>
19 
20 class MooseObject;
22 namespace libMesh
23 {
24 class DofObject;
25 }
26 
28 {
29 public:
30  // Must be a pointer in order to disambiguate with default copy constructor
32 
33 #ifdef MOOSE_KOKKOS_ENABLED
34 
38  const Moose::Kokkos::FunctorCopy & key);
39 #endif
40 
45  const std::set<MooseVariableFieldBase *> & getMooseVariableDependencies() const
46  {
48  }
49 
59  template <typename DofObjectType>
60  std::set<MooseVariableFieldBase *>
61  checkAllVariables(const DofObjectType & dof_object,
62  const std::set<MooseVariableFieldBase *> & vars_to_omit = {});
63 
73  virtual std::set<MooseVariableFieldBase *>
74  checkVariables(const libMesh::Node & node,
75  const std::set<MooseVariableFieldBase *> & vars_to_check);
76 
86  std::set<MooseVariableFieldBase *>
87  checkVariables(const libMesh::Elem & element,
88  const std::set<MooseVariableFieldBase *> & vars_to_check);
89 
95  {
96  _moose_variable_dependencies.insert(var);
97  }
98  void addMooseVariableDependency(const std::vector<MooseVariableFieldBase *> & vars)
99  {
100  _moose_variable_dependencies.insert(vars.begin(), vars.end());
101  }
102 
103 private:
106  template <typename DofObjectType>
107  std::set<MooseVariableFieldBase *>
108  checkVariablesHelper(const DofObjectType & dof_object,
109  const std::set<MooseVariableFieldBase *> & vars_to_check);
110 
111  std::set<MooseVariableFieldBase *> _moose_variable_dependencies;
112 
114  std::vector<libMesh::dof_id_type> _dof_indices;
115 };
116 
117 template <typename DofObjectType>
118 std::set<MooseVariableFieldBase *>
120  const DofObjectType & dof_object, const std::set<MooseVariableFieldBase *> & vars_to_omit)
121 {
122  if (vars_to_omit.empty())
123  return checkVariables(dof_object, _moose_variable_dependencies);
124 
125  std::set<MooseVariableFieldBase *> vars_to_check;
126  std::set_difference(_moose_variable_dependencies.begin(),
128  vars_to_omit.begin(),
129  vars_to_omit.end(),
130  std::inserter(vars_to_check, vars_to_check.begin()));
131  return checkVariables(dof_object, vars_to_check);
132 }
133 
134 inline std::set<MooseVariableFieldBase *>
136  const libMesh::Node & node, const std::set<MooseVariableFieldBase *> & vars_to_check)
137 {
138  return checkVariablesHelper(node, vars_to_check);
139 }
140 
141 inline std::set<MooseVariableFieldBase *>
143  const libMesh::Elem & element, const std::set<MooseVariableFieldBase *> & vars_to_check)
144 {
145  return checkVariablesHelper(element, vars_to_check);
146 }
const std::set< MooseVariableFieldBase * > & getMooseVariableDependencies() const
Retrieve the set of MooseVariableFieldBase that this object depends on.
virtual std::set< MooseVariableFieldBase * > checkVariables(const libMesh::Node &node, const std::set< MooseVariableFieldBase *> &vars_to_check)
Check whether all of the supplied variables have degree of freedom indices on the supplied node...
char ** vars
This class provides an interface for common operations on field variables of both FE and FV types wit...
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
std::set< MooseVariableFieldBase * > checkVariablesHelper(const DofObjectType &dof_object, const std::set< MooseVariableFieldBase *> &vars_to_check)
Helper method for checking variables for dof indices.
std::set< MooseVariableFieldBase * > _moose_variable_dependencies
Every object that can be built by the factory should be derived from this class.
Definition: MooseObject.h:28
void addMooseVariableDependency(const std::vector< MooseVariableFieldBase *> &vars)
std::set< MooseVariableFieldBase * > checkAllVariables(const DofObjectType &dof_object, const std::set< MooseVariableFieldBase *> &vars_to_omit={})
Check whether all of the variable dependencies have degree of freedom indices on the supplied degree ...
void addMooseVariableDependency(MooseVariableFieldBase *var)
Call this function to add the passed in MooseVariableFieldBase as a variable that this object depends...
std::vector< libMesh::dof_id_type > _dof_indices
A container for holding dof indices in order to avoid constant memory reallocation.