From e647c3c9a1504ba6a8a6641904a2ae4ce7ea733d Mon Sep 17 00:00:00 2001 From: Lynn Munday Date: Tue, 21 Sep 2021 18:07:41 -0600 Subject: [PATCH] reporter point marker to mark mesh for refinement around points given by a reporter. closes #18886 included Logan and Daniels suggestions --- .../source/markers/ReporterPointMarker.md | 19 ++++++ .../include/markers/ReporterPointMarker.h | 42 ++++++++++++ framework/src/markers/ReporterPointMarker.C | 61 ++++++++++++++++++ .../box_marker/gold/box_marker_test_out.e | Bin 27244 -> 31428 bytes .../gold/point_marker_test_out.e | 1 + .../reporter_point_marker/point_marker_test.i | 45 +++++++++++++ .../tests/markers/reporter_point_marker/tests | 14 ++++ 7 files changed, 182 insertions(+) create mode 100644 framework/doc/content/source/markers/ReporterPointMarker.md create mode 100644 framework/include/markers/ReporterPointMarker.h create mode 100644 framework/src/markers/ReporterPointMarker.C create mode 120000 test/tests/markers/reporter_point_marker/gold/point_marker_test_out.e create mode 100644 test/tests/markers/reporter_point_marker/point_marker_test.i create mode 100644 test/tests/markers/reporter_point_marker/tests diff --git a/framework/doc/content/source/markers/ReporterPointMarker.md b/framework/doc/content/source/markers/ReporterPointMarker.md new file mode 100644 index 000000000000..306338c57bc1 --- /dev/null +++ b/framework/doc/content/source/markers/ReporterPointMarker.md @@ -0,0 +1,19 @@ +# ReporterPointMarker + +!syntax description /Adaptivity/Markers/ReporterPointMarker + +## Description + +The `ReporterPointMarker` is a stand-alone marker that marks all +elements containing points defined by coordinates given in a `Reporter`. + + +## Example Input Syntax + +!listing test/tests/markers/reporter_point_marker/point_marker_test.i block=Adaptivity + +!syntax parameters /Adaptivity/Markers/ReporterPointMarker + +!syntax inputs /Adaptivity/Markers/ReporterPointMarker + +!syntax children /Adaptivity/Markers/ReporterPointMarker diff --git a/framework/include/markers/ReporterPointMarker.h b/framework/include/markers/ReporterPointMarker.h new file mode 100644 index 000000000000..88b4a45a81a3 --- /dev/null +++ b/framework/include/markers/ReporterPointMarker.h @@ -0,0 +1,42 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#pragma once + +#include "Marker.h" +#include "ReporterInterface.h" + +/** + * Marks all elements near a given boundary for refinement/coarsening + */ +class ReporterPointMarker : public Marker, public ReporterInterface +{ +public: + static InputParameters validParams(); + ReporterPointMarker(const InputParameters & parameters); + virtual void timestepSetup() override; + +protected: + virtual MarkerValue computeElementMarker() override; + + /// marker value to give elements containing a point + const MarkerValue _inside; + /// marker for elements not containing points + const MarkerValue _empty; + /// x coordinate + const std::vector & _x_coord; + /// y coordinate + const std::vector & _y_coord; + ///z coordinate + const std::vector & _z_coord; + /// Pointer to PointLocatorBase object + std::unique_ptr _pl; + /// list of sort uniqued elements containing points + std::set _point_elems; +}; diff --git a/framework/src/markers/ReporterPointMarker.C b/framework/src/markers/ReporterPointMarker.C new file mode 100644 index 000000000000..72c498328e4a --- /dev/null +++ b/framework/src/markers/ReporterPointMarker.C @@ -0,0 +1,61 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#include "ReporterPointMarker.h" + +registerMooseObject("MooseApp", ReporterPointMarker); + +InputParameters +ReporterPointMarker::validParams() +{ + InputParameters params = Marker::validParams(); + params.addClassDescription("Marks the region inside or empty if it contains a reporter defined " + "point for refinement or coarsening."); + params.addRequiredParam("x_coord_name", "reporter x-coordinate name"); + params.addRequiredParam("y_coord_name", "reporter y-coordinate name"); + params.addRequiredParam("z_coord_name", "reporter z-coordinate name"); + MooseEnum marker_states = Marker::markerStates(); + params.addRequiredParam( + "inside", marker_states, "How to mark elements containing a point"); + params.addRequiredParam( + "empty", marker_states, "How to mark elements not containing a point"); + return params; +} + +ReporterPointMarker::ReporterPointMarker(const InputParameters & parameters) + : Marker(parameters), + ReporterInterface(this), + _inside(parameters.get("inside").getEnum()), + _empty(parameters.get("empty").getEnum()), + _x_coord(getReporterValue>("x_coord_name", REPORTER_MODE_REPLICATED)), + _y_coord(getReporterValue>("y_coord_name", REPORTER_MODE_REPLICATED)), + _z_coord(getReporterValue>("z_coord_name", REPORTER_MODE_REPLICATED)) +{ +} + +void +ReporterPointMarker::timestepSetup() +{ + _pl = _fe_problem.mesh().getPointLocator(); + _pl->enable_out_of_mesh_mode(); + _point_elems.clear(); + for (std::size_t i = 0; i < _x_coord.size(); ++i) + { + Point pt(_x_coord[i], _y_coord[i], _z_coord[i]); + const auto elem = (*_pl)(pt); + if (elem) + _point_elems.insert(elem->id()); + } +} + +Marker::MarkerValue +ReporterPointMarker::computeElementMarker() +{ + return (_point_elems.count(_current_elem->id()) ? _inside : _empty); +} diff --git a/test/tests/markers/box_marker/gold/box_marker_test_out.e b/test/tests/markers/box_marker/gold/box_marker_test_out.e index 01bd73f6a171302ec650ab217d7598966a8cba4d..e0a2634599f010ff58716a6c7db4e5e32c8dcd49 100644 GIT binary patch delta 5532 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 Nl?qAgzWNC1KLIQJTpj=b diff --git a/test/tests/markers/reporter_point_marker/gold/point_marker_test_out.e b/test/tests/markers/reporter_point_marker/gold/point_marker_test_out.e new file mode 120000 index 000000000000..e31ffa47fc82 --- /dev/null +++ b/test/tests/markers/reporter_point_marker/gold/point_marker_test_out.e @@ -0,0 +1 @@ +../../box_marker/gold/box_marker_test_out.e \ No newline at end of file diff --git a/test/tests/markers/reporter_point_marker/point_marker_test.i b/test/tests/markers/reporter_point_marker/point_marker_test.i new file mode 100644 index 000000000000..59d29aff3a4d --- /dev/null +++ b/test/tests/markers/reporter_point_marker/point_marker_test.i @@ -0,0 +1,45 @@ +[Mesh] + type = GeneratedMesh + dim = 2 + nx = 10 + ny = 10 + nz = 0 + zmax = 0 + elem_type = QUAD4 +[] + +[Problem] + solve = false +[] + +[Executioner] + type = Steady +[] + +[Reporters] + [coords] + type=ConstantReporter + real_vector_names = 'x y z' + real_vector_values = '.31 .41 .51 .31 .41 .51 .31 .41 .51 .8; + .31 .31 .31 .41 .41 .41 .51 .51 .51 .8; + 0 0 0 0 0 0 0 0 0 1;' + outputs=none + [] +[] + +[Adaptivity] + [Markers] + [box] + type = ReporterPointMarker + x_coord_name = coords/x + y_coord_name = coords/y + z_coord_name = coords/z + inside = refine + empty = do_nothing + [] + [] +[] + +[Outputs] + exodus=true +[] diff --git a/test/tests/markers/reporter_point_marker/tests b/test/tests/markers/reporter_point_marker/tests new file mode 100644 index 000000000000..341a371ef4f9 --- /dev/null +++ b/test/tests/markers/reporter_point_marker/tests @@ -0,0 +1,14 @@ +[Tests] + group = 'Reporter Point Marker' + design = "/Markers/index.md /ReporterPointMarker.md" + issues = '#18886' + + [./mark_only] + type = 'Exodiff' + input = 'point_marker_test.i' + exodiff = 'point_marker_test_out.e' + scale_refine = 2 + requirement = "The adaptivity system shall create an auxiliary field variable that marks " + "elements containing the points from the reporter for refinement." + [../] +[]