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 14343 : ElementsAlongLine::validParams() 21 : { 22 14343 : InputParameters params = GeneralVectorPostprocessor::validParams(); 23 : 24 14343 : params.addRequiredParam<Point>("start", "The beginning of the line"); 25 14343 : params.addRequiredParam<Point>("end", "The end of the line"); 26 14343 : params.addClassDescription("Outputs the IDs of every element intersected by a user-defined line"); 27 14343 : return params; 28 0 : } 29 : 30 39 : ElementsAlongLine::ElementsAlongLine(const InputParameters & parameters) 31 : : GeneralVectorPostprocessor(parameters), 32 39 : _start(getParam<Point>("start")), 33 39 : _end(getParam<Point>("end")), 34 78 : _elem_ids(declareVector("elem_ids")) 35 : { 36 39 : _fe_problem.mesh().errorIfDistributedMesh("ElementsAlongLine"); 37 39 : } 38 : 39 : void 40 36 : ElementsAlongLine::initialize() 41 : { 42 36 : _elem_ids.clear(); 43 36 : } 44 : 45 : void 46 36 : ElementsAlongLine::execute() 47 : { 48 36 : std::vector<Elem *> intersected_elems; 49 36 : std::vector<LineSegment> segments; 50 : 51 36 : std::unique_ptr<libMesh::PointLocatorBase> pl = _fe_problem.mesh().getPointLocator(); 52 72 : Moose::elementsIntersectedByLine( 53 36 : _start, _end, _fe_problem.mesh(), *pl, intersected_elems, segments); 54 : 55 36 : unsigned int num_elems = intersected_elems.size(); 56 : 57 36 : _elem_ids.resize(num_elems); 58 : 59 216 : for (unsigned int i = 0; i < num_elems; i++) 60 180 : _elem_ids[i] = intersected_elems[i]->id(); 61 36 : }