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 
86 
87 std::string coloringAlgorithmDescriptions();
88 }
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)
AdjacencyMatrix & operator=(const AdjacencyMatrix &f)=delete
unsigned int assignPointToGrain(const Point &p, const std::vector< Point > &centerpoints, const MooseMesh &mesh, const MooseVariable &var, const Real maxsize)
T & operator()(unsigned int i, unsigned int j)
std::vector< unsigned int > assignPointsToVariables(const std::vector< Point > &centerpoints, const Real op_num, const MooseMesh &mesh, const MooseVariable &var)
Real f(Real x)
Test function for Brents method.
AdjacencyMatrix< Real > buildNodalGrainAdjacencyMatrix(const std::map< dof_id_type, unsigned int > &node_to_grain, MooseMesh &mesh, const PeriodicBoundaries *pb, unsigned int n_grains)
T operator()(unsigned int i, unsigned int j) const
MooseEnum coloringAlgorithms()
AdjacencyMatrix< Real > buildElementalGrainAdjacencyMatrix(const std::map< dof_id_type, unsigned int > &element_to_grain, MooseMesh &mesh, const PeriodicBoundaries *pb, unsigned int n_grains)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
Simple 2D block matrix indicating graph adjacency.
std::vector< unsigned int > assignOpsToGrains(AdjacencyMatrix< Real > &adjacency_matrix, unsigned int n_grains, unsigned int n_ops, const MooseEnum &coloring_algorithm)
std::string coloringAlgorithmDescriptions()