www.mooseframework.org
PolycrystalUserObjectBase.h
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 #pragma once
11 
12 #include "FeatureFloodCount.h"
13 
14 #include "libmesh/dense_matrix.h"
15 
16 // Forward Declarations
18 
19 template <>
21 
28 {
29 public:
30  PolycrystalUserObjectBase(const InputParameters & parameters);
31 
36  virtual void precomputeGrainStructure() {}
37 
44  virtual void getGrainsBasedOnPoint(const Point & point,
45  std::vector<unsigned int> & grains) const = 0;
46 
52  virtual void getGrainsBasedOnElem(const Elem & elem, std::vector<unsigned int> & grains) const
53  {
54  getGrainsBasedOnPoint(elem.centroid(), grains);
55  }
56 
61  virtual unsigned int getNumGrains() const = 0;
62 
69  virtual Real getVariableValue(unsigned int op_index, const Point & p) const = 0;
70 
75  virtual Real getNodalVariableValue(unsigned int op_index, const Node & n) const
76  {
77  return getVariableValue(op_index, static_cast<const Point &>(n));
78  }
79 
83  virtual const std::vector<unsigned int> & getGrainToOps() const { return _grain_to_op; }
84 
88  static MooseEnum coloringAlgorithms();
89 
93  static std::string coloringAlgorithmDescriptions();
94 
98  virtual void initialSetup() override;
99  virtual void initialize() override;
100  virtual void execute() override;
101  virtual void finalize() override;
102 
103 protected:
104  virtual bool areFeaturesMergeable(const FeatureData & f1, const FeatureData & f2) const override;
105  virtual bool isNewFeatureOrConnectedRegion(const DofObject * dof_object,
106  std::size_t & current_index,
107  FeatureData *& feature,
108  Status & status,
109  unsigned int & new_id) override;
110  virtual void mergeSets() override;
111 
117 
121  void assignOpsToGrains();
122 
126  bool colorGraph(unsigned int vertex);
127 
131  bool isGraphValid(unsigned int vertex, unsigned int color);
132 
136  void printGrainAdjacencyMatrix() const;
137 
138  /*************************************************
139  *************** Data Structures *****************
140  ************************************************/
142  std::unique_ptr<DenseMatrix<Real>> _adjacency_matrix;
143 
145  const unsigned int _dim;
146 
148  const unsigned int _op_num;
149 
151  std::vector<unsigned int> _grain_to_op;
152 
154  const MooseEnum _coloring_algorithm;
155 
157  bool _colors_assigned;
158 
160  const bool _output_adjacency_matrix;
161 
163  static const unsigned int INVALID_COLOR;
164 
166  static const unsigned int HALO_THICKNESS;
167 
168 private:
170  std::vector<unsigned int> _prealloc_tmp_grains;
171 
172  std::map<dof_id_type, std::vector<unsigned int>> _entity_to_grain_cache;
173 
175  const PerfID _execute_timer;
176  const PerfID _finalize_timer;
177 };
PolycrystalUserObjectBase::areFeaturesMergeable
virtual bool areFeaturesMergeable(const FeatureData &f1, const FeatureData &f2) const override
Method for determining whether two features are mergeable.
Definition: PolycrystalUserObjectBase.C:380
PolycrystalUserObjectBase::isNewFeatureOrConnectedRegion
virtual bool isNewFeatureOrConnectedRegion(const DofObject *dof_object, std::size_t &current_index, FeatureData *&feature, Status &status, unsigned int &new_id) override
Method called during the recursive flood routine that should return whether or not the current entity...
Definition: PolycrystalUserObjectBase.C:238
PolycrystalUserObjectBase::mergeSets
virtual void mergeSets() override
This routine is called on the master rank only and stitches together the partial feature pieces seen ...
Definition: PolycrystalUserObjectBase.C:210
PolycrystalUserObjectBase::finalize
virtual void finalize() override
Definition: PolycrystalUserObjectBase.C:166
PolycrystalUserObjectBase::initialize
virtual void initialize() override
Definition: PolycrystalUserObjectBase.C:105
PolycrystalUserObjectBase::execute
virtual void execute() override
Definition: PolycrystalUserObjectBase.C:116
PolycrystalUserObjectBase::coloringAlgorithms
static MooseEnum coloringAlgorithms()
Returns all available coloring algorithms as an enumeration type for input files.
Definition: PolycrystalUserObjectBase.C:516
FeatureFloodCount::Status
Status
This enumeration is used to indicate status of the grains in the _unique_grains data structure.
Definition: FeatureFloodCount.h:120
PolycrystalUserObjectBase::_grain_to_op
std::vector< unsigned int > _grain_to_op
A vector indicating which op is assigned to each grain.
Definition: PolycrystalUserObjectBase.h:150
PolycrystalUserObjectBase::_op_num
const unsigned int _op_num
The maximum number of order parameters (colors) available to assign to the grain structure.
Definition: PolycrystalUserObjectBase.h:147
PolycrystalUserObjectBase::colorGraph
bool colorGraph(unsigned int vertex)
Built-in simple "back-tracking" algorithm to assign colors to a graph.
Definition: PolycrystalUserObjectBase.C:460
FeatureFloodCount
This object will mark nodes or elements of continuous regions all with a unique number for the purpos...
Definition: FeatureFloodCount.h:44
PolycrystalUserObjectBase::initialSetup
virtual void initialSetup() override
UserObject interface overrides.
Definition: PolycrystalUserObjectBase.C:83
PolycrystalUserObjectBase::PolycrystalUserObjectBase
PolycrystalUserObjectBase(const InputParameters &parameters)
Definition: PolycrystalUserObjectBase.C:69
PolycrystalUserObjectBase::_entity_to_grain_cache
std::map< dof_id_type, std::vector< unsigned int > > _entity_to_grain_cache
Definition: PolycrystalUserObjectBase.h:171
PolycrystalUserObjectBase::assignOpsToGrains
void assignOpsToGrains()
Method that runs a coloring algorithm to assign OPs to grains.
Definition: PolycrystalUserObjectBase.C:413
PolycrystalUserObjectBase
This object provides the base capability for creating proper polycrystal ICs.
Definition: PolycrystalUserObjectBase.h:27
PolycrystalUserObjectBase::_finalize_timer
const PerfID _finalize_timer
Definition: PolycrystalUserObjectBase.h:175
PolycrystalUserObjectBase::_prealloc_tmp_grains
std::vector< unsigned int > _prealloc_tmp_grains
Temporary storage area for current grains at a point to avoid memory churn.
Definition: PolycrystalUserObjectBase.h:169
PolycrystalUserObjectBase::_output_adjacency_matrix
const bool _output_adjacency_matrix
A user controllable Boolean which can be used to print the adjacency matrix to the console.
Definition: PolycrystalUserObjectBase.h:159
FeatureFloodCount.h
PolycrystalUserObjectBase::getNumGrains
virtual unsigned int getNumGrains() const =0
Must be overridden by the deriving class to provide the number of grains in the polycrystal structure...
PolycrystalUserObjectBase::_execute_timer
const PerfID _execute_timer
Timers.
Definition: PolycrystalUserObjectBase.h:174
PolycrystalUserObjectBase::buildGrainAdjacencyMatrix
void buildGrainAdjacencyMatrix()
Builds a dense adjacency matrix based on the discovery of grain neighbors and halos surrounding each ...
Definition: PolycrystalUserObjectBase.C:391
PolycrystalUserObjectBase::getGrainsBasedOnElem
virtual void getGrainsBasedOnElem(const Elem &elem, std::vector< unsigned int > &grains) const
This method may be defined in addition to the point based initialization to speed up lookups.
Definition: PolycrystalUserObjectBase.h:52
PolycrystalUserObjectBase::precomputeGrainStructure
virtual void precomputeGrainStructure()
This callback is triggered after the object is initialized and may be optionally overridden to do pre...
Definition: PolycrystalUserObjectBase.h:36
PolycrystalUserObjectBase::_coloring_algorithm
const MooseEnum _coloring_algorithm
The selected graph coloring algorithm used by this object.
Definition: PolycrystalUserObjectBase.h:153
PolycrystalUserObjectBase::printGrainAdjacencyMatrix
void printGrainAdjacencyMatrix() const
Prints out the adjacency matrix in a nicely spaced integer format.
Definition: PolycrystalUserObjectBase.C:499
PolycrystalUserObjectBase::_adjacency_matrix
std::unique_ptr< DenseMatrix< Real > > _adjacency_matrix
The dense adjacency matrix.
Definition: PolycrystalUserObjectBase.h:141
PolycrystalUserObjectBase::INVALID_COLOR
static const unsigned int INVALID_COLOR
Used to indicate an invalid coloring for the built-in back-tracking algorithm.
Definition: PolycrystalUserObjectBase.h:162
PolycrystalUserObjectBase::_dim
const unsigned int _dim
mesh dimension
Definition: PolycrystalUserObjectBase.h:144
validParams< PolycrystalUserObjectBase >
InputParameters validParams< PolycrystalUserObjectBase >()
Definition: PolycrystalUserObjectBase.C:24
PolycrystalUserObjectBase::isGraphValid
bool isGraphValid(unsigned int vertex, unsigned int color)
Helper method for the back-tracking graph coloring algorithm.
Definition: PolycrystalUserObjectBase.C:489
PolycrystalUserObjectBase::getVariableValue
virtual Real getVariableValue(unsigned int op_index, const Point &p) const =0
Returns the variable value for a given op_index and mesh point.
PolycrystalUserObjectBase::_colors_assigned
bool _colors_assigned
A Boolean indicating whether the object has assigned colors to grains (internal use)
Definition: PolycrystalUserObjectBase.h:156
PolycrystalUserObjectBase::getNodalVariableValue
virtual Real getNodalVariableValue(unsigned int op_index, const Node &n) const
Similarly to the getVariableValue method, this method also returns values but may be optimized for re...
Definition: PolycrystalUserObjectBase.h:75
PolycrystalUserObjectBase::getGrainsBasedOnPoint
virtual void getGrainsBasedOnPoint(const Point &point, std::vector< unsigned int > &grains) const =0
Method for retrieving active grain IDs based on some point in the mesh.
PolycrystalUserObjectBase::HALO_THICKNESS
static const unsigned int HALO_THICKNESS
Used to hold the thickness of the halo that should be constructed for detecting adjacency.
Definition: PolycrystalUserObjectBase.h:165
PolycrystalUserObjectBase::getGrainToOps
virtual const std::vector< unsigned int > & getGrainToOps() const
Method for retrieving the initial grain OP assignments.
Definition: PolycrystalUserObjectBase.h:83
PolycrystalUserObjectBase::coloringAlgorithmDescriptions
static std::string coloringAlgorithmDescriptions()
Returns corresponding descriptions of available coloring algorithms.
Definition: PolycrystalUserObjectBase.C:522