PenetrationLocator & GeometricSearchData::getPenetrationLocator(const BoundaryName & master, const BoundaryName & slave, Order order) { unsigned int master_id = _mesh.getBoundaryID(master); unsigned int slave_id = _mesh.getBoundaryID(slave); _subproblem.addGhostedBoundary(master_id); _subproblem.addGhostedBoundary(slave_id); PenetrationLocator * pl = _penetration_locators[std::pair<unsigned int, unsigned int>(master_id, slave_id)]; if (!pl) { pl = new PenetrationLocator(_subproblem, *this, _mesh, master_id, slave_id, order, getNearestNodeLocator(master_id, slave_id)); _penetration_locators[std::pair<unsigned int, unsigned int>(master_id, slave_id)] = pl; } return *pl; }
NearestNodeValueAux::NearestNodeValueAux(const InputParameters & parameters) : AuxKernel(parameters), _nearest_node( getNearestNodeLocator(parameters.get<BoundaryName>("paired_boundary"), boundaryNames()[0])), _serialized_solution(_nl_sys.currentSolution()), _paired_variable(coupled("paired_variable")) { if (boundaryNames().size() > 1) mooseError("NearestNodeValueAux can only be used with one boundary at a time!"); }
NearestNodeLocator & GeometricSearchData::getNearestNodeLocator(const BoundaryName & master, const BoundaryName & slave) { unsigned int master_id = _mesh.getBoundaryID(master); unsigned int slave_id = _mesh.getBoundaryID(slave); _subproblem.addGhostedBoundary(master_id); _subproblem.addGhostedBoundary(slave_id); return getNearestNodeLocator(master_id, slave_id); }
NearestNodeLocator & GeometricSearchData::getQuadratureNearestNodeLocator(const unsigned int master_id, const unsigned int slave_id) { // TODO: Make this better! unsigned int base_id = 1e6; unsigned int qslave_id = slave_id + base_id; _slave_to_qslave[slave_id] = qslave_id; return getNearestNodeLocator(master_id, qslave_id); }