www.mooseframework.org
RandomEulerAngleProvider.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 
11 #include "GrainTrackerInterface.h"
12 
14 
15 template <>
16 InputParameters
18 {
19  InputParameters params = validParams<EulerAngleProvider>();
20  params.addClassDescription("Assign random Euler angles for each grain.");
21  params.addRequiredParam<UserObjectName>("grain_tracker_object",
22  "The FeatureFloodCount UserObject to get values from.");
23  params.addParam<unsigned int>("seed", 0, "Seed value for the random number generator");
24  return params;
25 }
26 
28  : EulerAngleProvider(params),
29  _grain_tracker(getUserObject<GrainTrackerInterface>("grain_tracker_object")),
30  _angles(0)
31 {
32  _random.seed(0, getParam<unsigned int>("seed"));
33 }
34 
35 void
37 {
38  EulerAngles angle;
39  auto grain_num = _grain_tracker.getTotalFeatureCount();
40  for (auto i = _angles.size(); i < grain_num; ++i)
41  {
42  angle.random(_random);
43  _angles.push_back(angle);
44  }
45 }
46 
47 unsigned int
49 {
50  return _angles.size();
51 }
52 
53 const EulerAngles &
55 {
56  mooseAssert(i < getGrainNum(), "Requesting Euler angles for an invalid grain id");
57  return _angles[i];
58 }
GrainTrackerInterface
This class defines the interface for the GrainTracking objects.
Definition: GrainTrackerInterface.h:24
RandomEulerAngleProvider::_random
MooseRandom _random
Definition: RandomEulerAngleProvider.h:41
RandomEulerAngleProvider::initialize
virtual void initialize() override
Definition: RandomEulerAngleProvider.C:36
registerMooseObject
registerMooseObject("PhaseFieldApp", RandomEulerAngleProvider)
RandomEulerAngleProvider::getGrainNum
virtual unsigned int getGrainNum() const override
Definition: RandomEulerAngleProvider.C:48
RandomEulerAngleProvider
Assign random Euler angles to each grains.
Definition: RandomEulerAngleProvider.h:25
EulerAngleProvider
Abstract base class for user objects that implement the Euler Angle provider interface.
Definition: EulerAngleProvider.h:24
validParams< EulerAngleProvider >
InputParameters validParams< EulerAngleProvider >()
GrainTrackerInterface::getTotalFeatureCount
virtual std::size_t getTotalFeatureCount() const =0
Returns a number large enough to contain the largest ID for all grains in use.
RandomEulerAngleProvider.h
RandomEulerAngleProvider::_grain_tracker
const GrainTrackerInterface & _grain_tracker
Definition: RandomEulerAngleProvider.h:38
validParams< RandomEulerAngleProvider >
InputParameters validParams< RandomEulerAngleProvider >()
Definition: RandomEulerAngleProvider.C:17
GrainTrackerInterface.h
EulerAngles::random
void random()
Definition: EulerAngles.C:73
EulerAngles
Euler angle triplet.
Definition: EulerAngles.h:22
RandomEulerAngleProvider::RandomEulerAngleProvider
RandomEulerAngleProvider(const InputParameters &parameters)
Definition: RandomEulerAngleProvider.C:27
RandomEulerAngleProvider::getEulerAngles
virtual const EulerAngles & getEulerAngles(unsigned int) const override
Definition: RandomEulerAngleProvider.C:54
RandomEulerAngleProvider::_angles
std::vector< EulerAngles > _angles
Definition: RandomEulerAngleProvider.h:39