Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #include "ElementsAlongLine.h" 11 : 12 : // MOOSE includes 13 : #include "LineSegment.h" 14 : #include "RayTracing.h" 15 : #include "MooseMesh.h" 16 : 17 : registerMooseObject("MooseApp", ElementsAlongLine); 18 : 19 : InputParameters 20 14337 : ElementsAlongLine::validParams() 21 : { 22 14337 : InputParameters params = GeneralVectorPostprocessor::validParams(); 23 : 24 14337 : params.addRequiredParam<Point>("start", "The beginning of the line"); 25 14337 : params.addRequiredParam<Point>("end", "The end of the line"); 26 14337 : params.addClassDescription("Outputs the IDs of every element intersected by a user-defined line"); 27 14337 : return params; 28 0 : } 29 : 30 36 : ElementsAlongLine::ElementsAlongLine(const InputParameters & parameters) 31 : : GeneralVectorPostprocessor(parameters), 32 36 : _start(getParam<Point>("start")), 33 36 : _end(getParam<Point>("end")), 34 72 : _elem_ids(declareVector("elem_ids")) 35 : { 36 36 : _fe_problem.mesh().errorIfDistributedMesh("ElementsAlongLine"); 37 36 : } 38 : 39 : void 40 33 : ElementsAlongLine::initialize() 41 : { 42 33 : _elem_ids.clear(); 43 33 : } 44 : 45 : void 46 33 : ElementsAlongLine::execute() 47 : { 48 33 : std::vector<Elem *> intersected_elems; 49 33 : std::vector<LineSegment> segments; 50 : 51 33 : std::unique_ptr<libMesh::PointLocatorBase> pl = _fe_problem.mesh().getPointLocator(); 52 66 : Moose::elementsIntersectedByLine( 53 33 : _start, _end, _fe_problem.mesh(), *pl, intersected_elems, segments); 54 : 55 33 : unsigned int num_elems = intersected_elems.size(); 56 : 57 33 : _elem_ids.resize(num_elems); 58 : 59 198 : for (unsigned int i = 0; i < num_elems; i++) 60 165 : _elem_ids[i] = intersected_elems[i]->id(); 61 33 : }