https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
20class MooseObject;
22namespace libMesh
23{
24class DofObject;
25}
26
28{
29public:
30 // Must be a pointer in order to disambiguate with default copy constructor
32
33#ifdef MOOSE_KOKKOS_ENABLED
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 *>
75 const std::set<MooseVariableFieldBase *> & vars_to_check);
76
86 std::set<MooseVariableFieldBase *>
88 const std::set<MooseVariableFieldBase *> & vars_to_check);
89
98 void addMooseVariableDependency(const std::vector<MooseVariableFieldBase *> & vars)
99 {
100 _moose_variable_dependencies.insert(vars.begin(), vars.end());
101 }
102
103private:
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
117template <typename DofObjectType>
118std::set<MooseVariableFieldBase *>
120 const DofObjectType & dof_object, const std::set<MooseVariableFieldBase *> & vars_to_omit)
121{
122 if (vars_to_omit.empty())
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
134inline 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
141inline std::set<MooseVariableFieldBase *>
143 const libMesh::Elem & element, const std::set<MooseVariableFieldBase *> & vars_to_check)
144{
145 return checkVariablesHelper(element, vars_to_check);
146}
char ** vars
Every object that can be built by the factory should be derived from this class.
Definition MooseObject.h:31
const std::set< MooseVariableFieldBase * > & getMooseVariableDependencies() const
Retrieve the set of MooseVariableFieldBase that this object depends on.
std::set< MooseVariableFieldBase * > checkVariablesHelper(const DofObjectType &dof_object, const std::set< MooseVariableFieldBase * > &vars_to_check)
Helper method for checking variables for dof indices.
std::vector< libMesh::dof_id_type > _dof_indices
A container for holding dof indices in order to avoid constant memory reallocation.
void addMooseVariableDependency(const std::vector< MooseVariableFieldBase * > &vars)
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.
std::set< MooseVariableFieldBase * > _moose_variable_dependencies
void addMooseVariableDependency(MooseVariableFieldBase *var)
Call this function to add the passed in MooseVariableFieldBase as a variable that this object depends...
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 ...
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...