www.mooseframework.org
FeatureFloodCountAux.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 "FeatureFloodCountAux.h"
11 #include "FeatureFloodCount.h"
12 #include "GrainTrackerInterface.h"
13 #include "MooseEnum.h"
14 
15 #include <algorithm>
16 
18 
19 template <>
20 InputParameters
22 {
23  InputParameters params = validParams<AuxKernel>();
24  params.addClassDescription("Feature detection by connectivity analysis");
25  params.addDeprecatedParam<UserObjectName>("bubble_object",
26  "The FeatureFloodCount UserObject to get values from.",
27  "Use \"flood_counter\" instead.");
28  params.addRequiredParam<UserObjectName>("flood_counter",
29  "The FeatureFloodCount UserObject to get values from.");
30  params.addParam<unsigned int>("map_index",
31  "The index of which map to retrieve values from when "
32  "using FeatureFloodCount with multiple maps.");
33  MooseEnum field_display(
34  "UNIQUE_REGION VARIABLE_COLORING GHOSTED_ENTITIES HALOS CENTROID ACTIVE_BOUNDS",
35  "UNIQUE_REGION");
36  params.addParam<MooseEnum>("field_display",
37  field_display,
38  "Determines how the auxilary field should be colored. "
39  "(UNIQUE_REGION and VARIABLE_COLORING are nodal, CENTROID is "
40  "elemental, default: UNIQUE_REGION)");
41 
42  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
43 
44  return params;
45 }
46 
47 FeatureFloodCountAux::FeatureFloodCountAux(const InputParameters & parameters)
48  : AuxKernel(parameters),
49  _flood_counter(getUserObject<FeatureFloodCount>("flood_counter")),
50  _var_idx(isParamValid("map_index") ? getParam<unsigned int>("map_index")
51  : std::numeric_limits<std::size_t>::max()),
52  _field_display(getParam<MooseEnum>("field_display")),
53  _var_coloring(_field_display == "VARIABLE_COLORING"),
54  _field_type(_field_display.getEnum<FeatureFloodCount::FieldType>())
55 {
56  if (_flood_counter.isElemental() == isNodal() &&
57  (_field_display == "UNIQUE_REGION" || _field_display == "VARIABLE_COLORING" ||
58  _field_display == "GHOSTED_ENTITIES" || _field_display == "HALOS"))
59  mooseError("UNIQUE_REGION, VARIABLE_COLORING, GHOSTED_ENTITIES and HALOS must be on variable "
60  "types that match the entity mode of the FeatureFloodCounter");
61 
62  if (isNodal())
63  {
64  if (_field_display == "ACTIVE_BOUNDS")
65  mooseError("ACTIVE_BOUNDS is only available for elemental aux variables");
66 
67  if (_field_display == "CENTROID")
68  mooseError("CENTROID is only available for elemental aux variables");
69  }
70 }
71 
72 void
74 {
75  switch (_field_display)
76  {
77  case 0: // UNIQUE_REGION
78  case 1: // VARIABLE_COLORING
79  case 2: // GHOSTED_ENTITIES
80  case 3: // HALOS
81  case 4: // CENTROID
83  (isNodal() ? _current_node->id() : _current_elem->id()), _field_type, _var_idx);
84  break;
85  case 5: // ACTIVE_BOUNDS
86  {
87  const auto & var_to_features = _flood_counter.getVarToFeatureVector(_current_elem->id());
88  _value = std::count_if(
89  var_to_features.begin(), var_to_features.end(), [](unsigned int feature_id) {
90  return feature_id != FeatureFloodCount::invalid_id;
91  });
92 
93  break;
94  }
95  default:
96  mooseError("Unimplemented \"field_display\" type");
97  }
98 }
99 
100 Real
102 {
103  return _value;
104 }
FeatureFloodCount::getEntityValue
virtual Real getEntityValue(dof_id_type entity_id, FieldType field_type, std::size_t var_index=0) const
Definition: FeatureFloodCount.C:918
FeatureFloodCount::getVarToFeatureVector
virtual const std::vector< unsigned int > & getVarToFeatureVector(dof_id_type elem_id) const
Returns a list of active unique feature ids for a particular element.
Definition: FeatureFloodCount.C:701
FeatureFloodCountAux::_field_type
const FeatureFloodCount::FieldType _field_type
Definition: FeatureFloodCountAux.h:47
FeatureFloodCount::isElemental
bool isElemental() const
Definition: FeatureFloodCount.h:117
FeatureFloodCountAux::precalculateValue
virtual void precalculateValue() override
Definition: FeatureFloodCountAux.C:73
FeatureFloodCountAux::_field_display
const MooseEnum _field_display
Definition: FeatureFloodCountAux.h:44
FeatureFloodCount
This object will mark nodes or elements of continuous regions all with a unique number for the purpos...
Definition: FeatureFloodCount.h:44
FeatureFloodCountAux.h
FeatureFloodCountAux
Function auxiliary value.
Definition: FeatureFloodCountAux.h:25
FeatureFloodCount.h
FeatureFloodCountAux::_var_idx
const std::size_t _var_idx
Definition: FeatureFloodCountAux.h:43
validParams< FeatureFloodCountAux >
InputParameters validParams< FeatureFloodCountAux >()
Definition: FeatureFloodCountAux.C:21
FeatureFloodCountAux::FeatureFloodCountAux
FeatureFloodCountAux(const InputParameters &parameters)
Factory constructor, takes parameters so that all derived classes can be built using the same constru...
Definition: FeatureFloodCountAux.C:47
registerMooseObject
registerMooseObject("PhaseFieldApp", FeatureFloodCountAux)
FeatureFloodCountAux::computeValue
virtual Real computeValue() override
Definition: FeatureFloodCountAux.C:101
FeatureFloodCount::invalid_id
static const unsigned int invalid_id
Definition: FeatureFloodCount.h:94
GrainTrackerInterface.h
FeatureFloodCountAux::_flood_counter
const FeatureFloodCount & _flood_counter
Function being used to compute the value of this kernel.
Definition: FeatureFloodCountAux.h:41
FeatureFloodCountAux::_value
Real _value
precalculated element value
Definition: FeatureFloodCountAux.h:50