void DisplacedProblem::reinitElemPhys(const Elem * elem, std::vector<Point> phys_points_in_elem, THREAD_ID tid) { std::vector<Point> points(phys_points_in_elem.size()); std::copy(phys_points_in_elem.begin(), phys_points_in_elem.end(), points.begin()); _assembly[tid]->reinitAtPhysical(elem, points); _displaced_nl.prepare(tid); _displaced_aux.prepare(tid); _assembly[tid]->prepare(); reinitElem(elem, tid); }
bool DisplacedProblem::reinitDirac(const Elem * elem, THREAD_ID tid) { std::vector<Point> & points = _dirac_kernel_info.getPoints()[elem]; bool have_points = points.size(); if (have_points) { _assembly[tid]->reinitAtPhysical(elem, points); _displaced_nl.prepare(tid); _displaced_aux.prepare(tid); _assembly[tid]->prepare(); reinitElem(elem, tid); } return have_points; }
bool DisplacedProblem::reinitDirac(const Elem * elem, THREAD_ID tid) { std::vector<Point> & points = _dirac_kernel_info.getPoints()[elem]; unsigned int n_points = points.size(); if (n_points) { unsigned int max_qps = _mproblem.getMaxQps(); if (n_points > max_qps) { /** * The maximum number of qps can rise if several Dirac points are added to a single element. * In that case we need to resize the zeros to compensate. */ for (unsigned int tid = 0; tid < libMesh::n_threads(); ++tid) { _zero[tid].resize(max_qps, 0); _grad_zero[tid].resize(max_qps, 0); _second_zero[tid].resize(max_qps, RealTensor(0.)); _second_phi_zero[tid].resize(max_qps, std::vector<RealTensor>(_mproblem.getMaxShapeFunctions(), RealTensor(0.))); } } _assembly[tid]->reinitAtPhysical(elem, points); _displaced_nl.prepare(tid); _displaced_aux.prepare(tid); reinitElem(elem, tid); } _assembly[tid]->prepare(); return n_points > 0; }
bool DisplacedProblem::reinitDirac(const Elem * elem, THREAD_ID tid) { std::set<Point> & points_set = _dirac_kernel_info._points[elem]; bool have_points = points_set.size(); if (have_points) { std::vector<Point> points(points_set.size()); std::copy(points_set.begin(), points_set.end(), points.begin()); _assembly[tid]->reinitAtPhysical(elem, points); _displaced_nl.prepare(tid); _displaced_aux.prepare(tid); _assembly[tid]->prepare(); reinitElem(elem, tid); } return have_points; }