52 const auto & boundary_kernels = _storage.getActiveBoundaryObjects(_tid);
54 printGeneralExecutionInformation();
56 for (
const auto & belem : range)
58 const Elem * elem = belem->_elem;
59 unsigned short int side = belem->_side;
61 SubdomainID last_sub_id = Elem::invalid_subdomain_id;
64 _fe_problem.setCurrentBoundaryID(boundary_id, _tid);
66 if (elem->processor_id() == _fe_problem.processor_id())
69 const auto iter = boundary_kernels.find(boundary_id);
71 if (iter != boundary_kernels.end() && !(iter->second.empty()))
73 printBoundaryExecutionInformation(boundary_id, iter->second);
74 const auto sub_id = elem->subdomain_id();
75 if (sub_id != last_sub_id)
77 _fe_problem.subdomainSetup(sub_id, _tid);
80 _fe_problem.setCurrentSubdomainID(elem, _tid);
81 _fe_problem.prepare(elem, _tid);
82 _fe_problem.reinitElemFace(elem, side, _tid);
84 const Elem * lower_d_elem = _fe_problem.mesh().getLowerDElem(elem, side);
85 _fe_problem.setCurrentLowerDElem(lower_d_elem, _tid);
87 _fe_problem.reinitLowerDElem(lower_d_elem, _tid);
89 const Elem * neighbor = elem->neighbor_ptr(side);
94 bool compute_interface =
95 neighbor && neighbor->active() &&
96 _fe_problem.getInterfaceMaterialsWarehouse().hasActiveBoundaryObjects(boundary_id,
107 std::unordered_set<unsigned int> needed_mat_props;
108 for (
const auto & aux : iter->second)
110 const auto & mp_deps = aux->getMatPropDependencies();
111 needed_mat_props.insert(mp_deps.begin(), mp_deps.end());
113 _fe_problem.setActiveMaterialProperties(needed_mat_props, _tid);
115 _fe_problem.reinitMaterialsFaceOnBoundary(boundary_id, sub_id, _tid);
117 _fe_problem.reinitMaterialsBoundary(boundary_id, _tid);
119 if (compute_interface)
121 _fe_problem.reinitNeighbor(elem, side, _tid);
122 _fe_problem.reinitMaterialsNeighbor(neighbor->subdomain_id(), _tid);
123 _fe_problem.reinitMaterialsInterface(boundary_id, _tid);
127 for (
const auto & aux : iter->second)
129 aux->determineWhetherCoincidentLowerDCalc();
135 _fe_problem.clearActiveMaterialProperties(_tid);
163 unsigned int boundary_id,
const std::vector<std::shared_ptr<AuxKernelType>> & kernels)
const
165 if (!_fe_problem.shouldPrintExecution(_tid) || !_storage.hasActiveObjects() ||
166 _boundaries_exec_printed.count(boundary_id))
169 const auto & console = _fe_problem.console();
170 console <<
"[DBG] Ordering on boundary " << boundary_id << std::endl;
171 std::vector<MooseObject *> objs_ptrs;
172 for (
auto & kernel_ptr : kernels)
173 if (kernel_ptr->hasBoundary(boundary_id))
174 objs_ptrs.push_back(
dynamic_cast<MooseObject *
>(kernel_ptr.get()));
177 _boundaries_exec_printed.insert(boundary_id);