void ComputeResidualThread::onBoundary(const Elem *elem, unsigned int side, BoundaryID bnd_id) { std::vector<IntegratedBC *> bcs = _sys._bcs[_tid].activeIntegrated(bnd_id); if (bcs.size() > 0) { _fe_problem.reinitElemFace(elem, side, bnd_id, _tid); unsigned int subdomain = elem->subdomain_id(); if (subdomain != _subdomain) _fe_problem.subdomainSetupSide(subdomain, _tid); _fe_problem.reinitMaterialsFace(elem->subdomain_id(), _tid); _fe_problem.reinitMaterialsBoundary(bnd_id, _tid); // Set the active boundary id so that BoundaryRestrictable::_boundary_id is correct _fe_problem.setCurrentBoundaryID(bnd_id); for (std::vector<IntegratedBC *>::iterator it = bcs.begin(); it != bcs.end(); ++it) { IntegratedBC * bc = (*it); if (bc->shouldApply()) bc->computeResidual(); } _fe_problem.swapBackMaterialsFace(_tid); // Set active boundary id to invalid _fe_problem.setCurrentBoundaryID(Moose::INVALID_BOUNDARY_ID); } }