https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Classes | Functions | Variables
PolycrystalICTools Namespace Reference

Classes

class  AdjacencyMatrix
 Simple 2D block matrix indicating graph adjacency. More...
 

Functions

std::vector< unsigned intassignPointsToVariables (const std::vector< Point > &centerpoints, const Real op_num, const MooseMesh &mesh, const MooseVariable &var)
 
unsigned int assignPointToGrain (const Point &p, const std::vector< Point > &centerpoints, const MooseMesh &mesh, const MooseVariable &var, const Real maxsize)
 
AdjacencyMatrix< Real > buildGrainAdjacencyMatrix (const std::map< dof_id_type, unsigned int > &entity_to_grain, MooseMesh &mesh, const libMesh::PeriodicBoundaries *pb, unsigned int n_grains, bool is_elemental)
 
AdjacencyMatrix< Real > buildElementalGrainAdjacencyMatrix (const std::map< dof_id_type, unsigned int > &element_to_grain, MooseMesh &mesh, const libMesh::PeriodicBoundaries *pb, unsigned int n_grains)
 
AdjacencyMatrix< Real > buildNodalGrainAdjacencyMatrix (const std::map< dof_id_type, unsigned int > &node_to_grain, MooseMesh &mesh, const libMesh::PeriodicBoundaries *pb, unsigned int n_grains)
 
std::vector< unsigned intassignOpsToGrains (AdjacencyMatrix< Real > &adjacency_matrix, unsigned int n_grains, unsigned int n_ops, const MooseEnum &coloring_algorithm)
 
MooseEnum coloringAlgorithms ()
 
std::string coloringAlgorithmDescriptions ()
 

Variables

const unsigned int HALO_THICKNESS = 4
 

Function Documentation

◆ assignOpsToGrains()

std::vector< unsigned int > PolycrystalICTools::assignOpsToGrains ( AdjacencyMatrix< Real > &  adjacency_matrix,
unsigned int  n_grains,
unsigned int  n_ops,
const MooseEnum coloring_algorithm 
)

Definition at line 319 of file PolycrystalICTools.C.

323{
324 std::vector<unsigned int> grain_to_op(n_grains, GraphColoring::INVALID_COLOR);
325
326 // Use a simple backtracking coloring algorithm
327 if (coloring_algorithm == "bt")
328 {
329 if (!colorGraph(adjacency_matrix, grain_to_op, n_grains, n_ops, 0))
331 "Unable to find a valid Grain to op configuration, do you have enough op variables?");
332 }
333 else // PETSc Coloring algorithms
334 {
335 const std::string & ca_str = coloring_algorithm;
336 Real * am_data = adjacency_matrix.rawDataPtr();
338 am_data, n_grains, n_ops, grain_to_op, ca_str.c_str());
339 }
340
341 return grain_to_op;
342}
void mooseError(Args &&... args)
bool colorGraph(const PolycrystalICTools::AdjacencyMatrix< Real > &adjacency_matrix, std::vector< unsigned int > &colors, unsigned int n_vertices, unsigned int n_ops, unsigned int vertex)
Backtracking graph coloring routines.
const unsigned int INVALID_COLOR
void colorAdjacencyMatrix(PetscScalar *adjacency_matrix, unsigned int size, unsigned int colors, std::vector< unsigned int > &vertex_colors, const char *coloring_algorithm)

◆ assignPointsToVariables()

std::vector< unsigned int > PolycrystalICTools::assignPointsToVariables ( const std::vector< Point > &  centerpoints,
const Real  op_num,
const MooseMesh mesh,
const MooseVariable var 
)

Definition at line 49 of file PolycrystalICTools.C.

53{
54 Real grain_num = centerpoints.size();
55
56 std::vector<unsigned int> assigned_op(grain_num);
57 std::vector<int> min_op_ind(op_num);
58 std::vector<Real> min_op_dist(op_num);
59
60 // Assign grains to specific order parameters in a way that maximizes the distance
61 for (unsigned int grain = 0; grain < grain_num; grain++)
62 {
63 // Determine the distance to the closest center assigned to each order parameter
64 if (grain >= op_num)
65 {
66 // We can set the array to the distances to the grains 0..op_num-1 (see assignment in the else
67 // case)
68 for (unsigned int i = 0; i < op_num; ++i)
69 {
70 min_op_dist[i] = mesh.minPeriodicDistance(var, centerpoints[grain], centerpoints[i]);
71 min_op_ind[assigned_op[i]] = i;
72 }
73
74 // Now check if any of the extra grains are even closer
75 for (unsigned int i = op_num; i < grain; ++i)
76 {
77 Real dist = mesh.minPeriodicDistance(var, centerpoints[grain], centerpoints[i]);
78 if (min_op_dist[assigned_op[i]] > dist)
79 {
80 min_op_dist[assigned_op[i]] = dist;
81 min_op_ind[assigned_op[i]] = i;
82 }
83 }
84 }
85 else
86 {
87 assigned_op[grain] = grain;
88 continue;
89 }
90
91 // Assign the current center point to the order parameter that is furthest away.
92 unsigned int mx_ind = 0;
93 for (unsigned int i = 1; i < op_num; ++i) // Find index of max
94 if (min_op_dist[mx_ind] < min_op_dist[i])
95 mx_ind = i;
96
97 assigned_op[grain] = mx_ind;
98 }
99
100 return assigned_op;
101}
MeshBase & mesh

◆ assignPointToGrain()

unsigned int PolycrystalICTools::assignPointToGrain ( const Point &  p,
const std::vector< Point > &  centerpoints,
const MooseMesh mesh,
const MooseVariable var,
const Real  maxsize 
)

Definition at line 104 of file PolycrystalICTools.C.

109{
110 unsigned int grain_num = centerpoints.size();
111
112 Real min_distance = maxsize;
113 unsigned int min_index = grain_num;
114 // Loops through all of the grain centers and finds the center that is closest to the point p
115 for (unsigned int grain = 0; grain < grain_num; grain++)
116 {
117 Real distance = mesh.minPeriodicDistance(var, centerpoints[grain], p);
118
119 if (min_distance > distance)
120 {
121 min_distance = distance;
122 min_index = grain;
123 }
124 }
125
126 if (min_index >= grain_num)
127 mooseError("ERROR in PolycrystalVoronoiVoidIC: didn't find minimum values in grain_value_calc");
128
129 return min_index;
130}
const Real p
Real distance(const Point &p)

◆ buildElementalGrainAdjacencyMatrix()

AdjacencyMatrix< Real > PolycrystalICTools::buildElementalGrainAdjacencyMatrix ( const std::map< dof_id_type, unsigned int > &  element_to_grain,
MooseMesh mesh,
const libMesh::PeriodicBoundaries pb,
unsigned int  n_grains 
)

◆ buildGrainAdjacencyMatrix()

AdjacencyMatrix< Real > PolycrystalICTools::buildGrainAdjacencyMatrix ( const std::map< dof_id_type, unsigned int > &  entity_to_grain,
MooseMesh mesh,
const libMesh::PeriodicBoundaries pb,
unsigned int  n_grains,
bool  is_elemental 
)

◆ buildNodalGrainAdjacencyMatrix()

AdjacencyMatrix< Real > PolycrystalICTools::buildNodalGrainAdjacencyMatrix ( const std::map< dof_id_type, unsigned int > &  node_to_grain,
MooseMesh mesh,
const libMesh::PeriodicBoundaries pb,
unsigned int  n_grains 
)

◆ coloringAlgorithmDescriptions()

std::string PolycrystalICTools::coloringAlgorithmDescriptions ( )

Definition at line 351 of file PolycrystalICTools.C.

352{
353 return "The grain neighbor graph coloring algorithm to use. \"legacy\" is the original "
354 "algorithm "
355 "which does not guarantee a valid coloring. \"bt\" is a simple backtracking algorithm "
356 "which will produce a valid coloring but has potential exponential run time. The "
357 "remaining algorithms require PETSc but are recommended for larger problems (See "
358 "MatColoringType)";
359}

◆ coloringAlgorithms()

MooseEnum PolycrystalICTools::coloringAlgorithms ( )

Definition at line 345 of file PolycrystalICTools.C.

346{
347 return MooseEnum("legacy bt jp power greedy", "legacy");
348}

Variable Documentation

◆ HALO_THICKNESS

const unsigned int PolycrystalICTools::HALO_THICKNESS = 4

Definition at line 28 of file PolycrystalICTools.C.