www.mooseframework.org
PolycrystalICTools.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 "Moose.h"
13 #include "libmesh/libmesh.h"
14 #include "InitialCondition.h"
15 
17 {
18 
23 template <typename T>
25 {
26 public:
27  AdjacencyMatrix(unsigned int size) : _size(size), _data(size * size) {}
28 
29  ~AdjacencyMatrix() = default;
30 
31  // Get rid of copy constructors
32  AdjacencyMatrix(const AdjacencyMatrix & f) = delete;
33  AdjacencyMatrix & operator=(const AdjacencyMatrix & f) = delete;
34 
35  // Use only move constructors
36  AdjacencyMatrix(AdjacencyMatrix && /* f */) = default;
37  AdjacencyMatrix & operator=(AdjacencyMatrix && /* f */) = default;
38 
39  T & operator()(unsigned int i, unsigned int j) { return _data[i * _size + j]; }
40  T operator()(unsigned int i, unsigned int j) const { return _data[i * _size + j]; }
41 
42  std::size_t size() const { return _size; }
43  T * rawDataPtr() { return _data.data(); }
44 
45 private:
46  const std::size_t _size;
47  std::vector<T> _data;
48 };
49 
50 std::vector<unsigned int> assignPointsToVariables(const std::vector<Point> & centerpoints,
51  const Real op_num,
52  const MooseMesh & mesh,
53  const MooseVariable & var);
54 
55 unsigned int assignPointToGrain(const Point & p,
56  const std::vector<Point> & centerpoints,
57  const MooseMesh & mesh,
58  const MooseVariable & var,
59  const Real maxsize);
60 
62 buildGrainAdjacencyMatrix(const std::map<dof_id_type, unsigned int> & entity_to_grain,
63  MooseMesh & mesh,
64  const PeriodicBoundaries * pb,
65  unsigned int n_grains,
66  bool is_elemental);
67 
69 buildElementalGrainAdjacencyMatrix(const std::map<dof_id_type, unsigned int> & element_to_grain,
70  MooseMesh & mesh,
71  const PeriodicBoundaries * pb,
72  unsigned int n_grains);
73 
75 buildNodalGrainAdjacencyMatrix(const std::map<dof_id_type, unsigned int> & node_to_grain,
76  MooseMesh & mesh,
77  const PeriodicBoundaries * pb,
78  unsigned int n_grains);
79 
80 std::vector<unsigned int> assignOpsToGrains(AdjacencyMatrix<Real> & adjacency_matrix,
81  unsigned int n_grains,
82  unsigned int n_ops,
83  const MooseEnum & coloring_algorithm);
84 
85 MooseEnum coloringAlgorithms();
86 
87 std::string coloringAlgorithmDescriptions();
88 }
89 
PolycrystalICTools::AdjacencyMatrix::size
std::size_t size() const
Definition: PolycrystalICTools.h:42
PolycrystalICTools::AdjacencyMatrix::_size
const std::size_t _size
Definition: PolycrystalICTools.h:46
PolycrystalICTools::buildElementalGrainAdjacencyMatrix
AdjacencyMatrix< Real > buildElementalGrainAdjacencyMatrix(const std::map< dof_id_type, unsigned int > &element_to_grain, MooseMesh &mesh, const PeriodicBoundaries *pb, unsigned int n_grains)
Definition: PolycrystalICTools.C:147
PolycrystalICTools::assignPointsToVariables
std::vector< unsigned int > assignPointsToVariables(const std::vector< Point > &centerpoints, const Real op_num, const MooseMesh &mesh, const MooseVariable &var)
Definition: PolycrystalICTools.C:48
PolycrystalICTools::coloringAlgorithmDescriptions
std::string coloringAlgorithmDescriptions()
Definition: PolycrystalICTools.C:359
PolycrystalICTools::AdjacencyMatrix::operator=
AdjacencyMatrix & operator=(const AdjacencyMatrix &f)=delete
PolycrystalICTools::buildGrainAdjacencyMatrix
AdjacencyMatrix< Real > buildGrainAdjacencyMatrix(const std::map< dof_id_type, unsigned int > &entity_to_grain, MooseMesh &mesh, const PeriodicBoundaries *pb, unsigned int n_grains, bool is_elemental)
Definition: PolycrystalICTools.C:133
PolycrystalICTools::AdjacencyMatrix::~AdjacencyMatrix
~AdjacencyMatrix()=default
PolycrystalICTools::AdjacencyMatrix::_data
std::vector< T > _data
Definition: PolycrystalICTools.h:47
PolycrystalICTools::buildNodalGrainAdjacencyMatrix
AdjacencyMatrix< Real > buildNodalGrainAdjacencyMatrix(const std::map< dof_id_type, unsigned int > &node_to_grain, MooseMesh &mesh, const PeriodicBoundaries *pb, unsigned int n_grains)
Definition: PolycrystalICTools.C:271
PolycrystalICTools
Definition: PolycrystalICTools.h:16
PolycrystalICTools::assignPointToGrain
unsigned int assignPointToGrain(const Point &p, const std::vector< Point > &centerpoints, const MooseMesh &mesh, const MooseVariable &var, const Real maxsize)
Definition: PolycrystalICTools.C:104
PolycrystalICTools::AdjacencyMatrix::AdjacencyMatrix
AdjacencyMatrix(unsigned int size)
Definition: PolycrystalICTools.h:27
PolycrystalICTools::AdjacencyMatrix::rawDataPtr
T * rawDataPtr()
Definition: PolycrystalICTools.h:43
PolycrystalICTools::AdjacencyMatrix::operator()
T & operator()(unsigned int i, unsigned int j)
Definition: PolycrystalICTools.h:39
PolycrystalICTools::assignOpsToGrains
std::vector< unsigned int > assignOpsToGrains(AdjacencyMatrix< Real > &adjacency_matrix, unsigned int n_grains, unsigned int n_ops, const MooseEnum &coloring_algorithm)
Definition: PolycrystalICTools.C:319
PolycrystalICTools::AdjacencyMatrix
Simple 2D block matrix indicating graph adjacency.
Definition: PolycrystalICTools.h:24
PolycrystalICTools::coloringAlgorithms
MooseEnum coloringAlgorithms()
Definition: PolycrystalICTools.C:353
PolycrystalICTools::AdjacencyMatrix::operator()
T operator()(unsigned int i, unsigned int j) const
Definition: PolycrystalICTools.h:40