www.mooseframework.org
GrainTrackerElasticity.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 
10 #include "GrainTrackerElasticity.h"
11 #include "EulerAngleProvider.h"
12 #include "RotationTensor.h"
13 
15 
16 template <>
17 InputParameters
19 {
20  InputParameters params = validParams<GrainTracker>();
21  params.addParam<bool>("random_rotations",
22  true,
23  "Generate random rotations when the Euler Angle "
24  "provider runs out of data (otherwise error "
25  "out)");
26  params.addRequiredParam<std::vector<Real>>("C_ijkl", "Unrotated stiffness tensor");
27  params.addParam<MooseEnum>(
28  "fill_method", RankFourTensor::fillMethodEnum() = "symmetric9", "The fill method");
29  params.addRequiredParam<UserObjectName>("euler_angle_provider",
30  "Name of Euler angle provider user object");
31  return params;
32 }
33 
34 GrainTrackerElasticity::GrainTrackerElasticity(const InputParameters & parameters)
35  : GrainDataTracker<RankFourTensor>(parameters),
36  _random_rotations(getParam<bool>("random_rotations")),
37  _C_ijkl(getParam<std::vector<Real>>("C_ijkl"),
38  getParam<MooseEnum>("fill_method").getEnum<RankFourTensor::FillMethod>()),
39  _euler(getUserObject<EulerAngleProvider>("euler_angle_provider"))
40 {
41 }
42 
44 GrainTrackerElasticity::newGrain(unsigned int new_grain_id)
45 {
46  EulerAngles angles;
47 
48  if (new_grain_id < _euler.getGrainNum())
49  angles = _euler.getEulerAngles(new_grain_id);
50  else
51  {
53  angles.random();
54  else
55  mooseError("GrainTrackerElasticity has run out of grain rotation data.");
56  }
57 
58  RankFourTensor C_ijkl = _C_ijkl;
59  C_ijkl.rotate(RotationTensor(RealVectorValue(angles)));
60 
61  return C_ijkl;
62 }
GrainTrackerElasticity.h
EulerAngleProvider.h
validParams< GrainTrackerElasticity >
InputParameters validParams< GrainTrackerElasticity >()
Definition: GrainTrackerElasticity.C:18
GrainTrackerElasticity::_random_rotations
const bool _random_rotations
generate random rotations when the Euler Angle provider runs out of data (otherwise error out)
Definition: GrainTrackerElasticity.h:33
GrainDataTracker
GrainTracker derived class template to base objects on which maintain physical parameters for individ...
Definition: GrainDataTracker.h:19
GrainTrackerElasticity
Manage a list of elasticity tensors for the grains.
Definition: GrainTrackerElasticity.h:24
EulerAngleProvider
Abstract base class for user objects that implement the Euler Angle provider interface.
Definition: EulerAngleProvider.h:24
GrainTrackerElasticity::newGrain
RankFourTensor newGrain(unsigned int new_grain_id)
implement this method to initialize the data for the new grain
Definition: GrainTrackerElasticity.C:44
GrainTrackerElasticity::_euler
const EulerAngleProvider & _euler
object providing the Euler angles
Definition: GrainTrackerElasticity.h:39
EulerAngleProvider::getGrainNum
virtual unsigned int getGrainNum() const =0
validParams< GrainTracker >
InputParameters validParams< GrainTracker >()
Definition: GrainTracker.C:50
RotationTensor
This is a RealTensor version of a rotation matrix It is instantiated with the Euler angles,...
Definition: RotationTensor.h:29
EulerAngles::random
void random()
Definition: EulerAngles.C:73
RankFourTensorTempl< Real >
RotationTensor.h
EulerAngles
Euler angle triplet.
Definition: EulerAngles.h:22
GrainTrackerElasticity::_C_ijkl
RankFourTensor _C_ijkl
unrotated elasticity tensor
Definition: GrainTrackerElasticity.h:36
EulerAngleProvider::getEulerAngles
virtual const EulerAngles & getEulerAngles(unsigned int) const =0
GrainTrackerElasticity::GrainTrackerElasticity
GrainTrackerElasticity(const InputParameters &parameters)
Definition: GrainTrackerElasticity.C:34
registerMooseObject
registerMooseObject("PhaseFieldApp", GrainTrackerElasticity)