20 #include "libmesh/threads.h"    21 #include "libmesh/elem.h"    22 #include "libmesh/mesh_base.h"    28   : _fe_problem(fe_problem),
    29     _aux_sys(fe_problem.getAuxiliarySystem()),
    30     _elem_aux(_aux_sys.elemAuxWarehouse()),
    31     _elem_vec_aux(_aux_sys.elemVectorAuxWarehouse()),
    32     _elem_array_aux(_aux_sys.elemArrayAuxWarehouse()),
    40   : _fe_problem(x._fe_problem),
    42     _elem_aux(x._elem_aux),
    43     _elem_vec_aux(x._elem_vec_aux),
    44     _elem_array_aux(x._elem_array_aux),
    53   const auto tid = puid.
id;
    55   for (
const auto & belem : range)
    57     const Elem * elem = belem->_elem;
    58     const auto boundary_id = belem->_bnd_id;
    59     const auto side = belem->_side;
    67     const auto & bnd_name = 
mesh.getBoundaryName(boundary_id);
    70     std::vector<SideUserObject *> objs;
    76     for (
const auto & uo : objs)
    77       if (uo->checkVariableBoundaryIntegrity())
    79         auto leftover_vars = uo->checkAllVariables(*elem);
    80         if (!leftover_vars.empty())
    82           const auto neighbor = elem->neighbor_ptr(side);
    83           const bool upwind_elem = !neighbor || elem->id() < neighbor->id();
    84           const Elem * lower_d_elem =
    85               upwind_elem ? 
mesh.getLowerDElem(elem, side)
    86                           : 
mesh.getLowerDElem(neighbor, neighbor->which_neighbor_am_i(elem));
    88             leftover_vars = uo->checkVariables(*lower_d_elem, leftover_vars);
    93     auto check = [elem, boundary_id, &bnd_name, tid, &
mesh, side](
const auto & warehouse)
    95       if (!warehouse.hasBoundaryObjects(boundary_id, tid))
    98       const auto & bnd_objects = warehouse.getBoundaryObjects(boundary_id, tid);
    99       for (
const auto & bnd_object : bnd_objects)
   102         if (!bnd_object->requiresGeometricSearch() && bnd_object->checkVariableBoundaryIntegrity())
   105           auto leftover_vars = bnd_object->checkAllVariables(*elem);
   106           if (!leftover_vars.empty())
   108             const auto neighbor = elem->neighbor_ptr(side);
   109             const bool upwind_elem = !neighbor || elem->id() < neighbor->id();
   110             const Elem * lower_d_elem =
   111                 upwind_elem ? 
mesh.getLowerDElem(elem, side)
   112                             : 
mesh.getLowerDElem(neighbor, neighbor->which_neighbor_am_i(elem));
   114               leftover_vars = bnd_object->checkVariables(*lower_d_elem, leftover_vars);
   136                             const std::set<MooseVariableFieldBase *> & variables,
   137                             const BoundaryName & boundary_name)
   139   if (variables.empty())
   142   std::vector<std::string> names;
   143   names.reserve(variables.size());
   144   for (
const auto * 
const var : variables)
   145     names.push_back(var->name());
   151              "' depends on variable(s) '",
   153              "'. However, that variable does not appear to be defined on (all of) boundary '",
 std::string name(const ElemQuality q)
std::string join(Iterator begin, Iterator end, const std::string &delimiter)
Python-like join function for strings over an iterator range. 
BoundaryElemIntegrityCheckThread(FEProblemBase &fe_problem, const TheWarehouse::Query &query)
void join(const BoundaryElemIntegrityCheckThread &)
QueryCache is a convenient way to construct and pass around (possible partially constructed) warehous...
void boundaryIntegrityCheckError(const MooseObject &object, const std::set< MooseVariableFieldBase *> &variables, const BoundaryName &boundary_name)
Compose boundary restricted error message for the provided object, variables, and boundary_name if th...
virtual std::size_t numNonlinearSystems() const override
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
const TheWarehouse::Query & _query
A warehouse query that we will use to obtain user objects for boundary variable dependency integrity ...
MooseObjectTagWarehouse< IntegratedBCBase > & getIntegratedBCWarehouse()
void operator()(const ConstBndElemRange &range)
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations. 
const ExecuteMooseObjectWarehouse< AuxKernel > & _elem_aux
Elemental auxiliary kernels acting on standard field variables. 
Every object that can be built by the factory should be derived from this class. 
AttribBoundaries tracks all boundary IDs associated with an object. 
QueryCache clone() const
clone creates and returns an independent copy of the query in its current state. 
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
FEProblemBase & _fe_problem
the finite element (or volume) problem 
const ExecuteMooseObjectWarehouse< VectorAuxKernel > & _elem_vec_aux
Elemental auxiliary kernels acting on vector field variables. 
const ExecuteMooseObjectWarehouse< ArrayAuxKernel > & _elem_array_aux
Elemental auxiliary kernels acting on array field variables. 
IntRange< T > make_range(T beg, T end)
virtual MooseMesh & mesh() override
QueryCache & condition(Args &&... args)
Adds a new condition to the query. 
processor_id_type processor_id() const
Result check(std::string requirements, const Registry &capabilities)
Checks if a set of requirements is satisified by the given capability registry.