www.mooseframework.org
GrainTextureVectorPostprocessor.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 "EulerAngleProvider.h"
12 #include "Assembly.h"
13 
15 
18 {
20  params += SamplerBase::validParams();
21  params.addClassDescription("Gives out info on the grain boundary properties");
22  params.addRequiredParam<UserObjectName>("euler_angle_provider",
23  "The EulerAngleProvider User object");
24  params.addRequiredCoupledVar("unique_grains", "The grain number");
25  params.addRequiredParam<unsigned int>("grain_num", "the number of grains");
26  return params;
27 }
28 
30  : ElementVectorPostprocessor(parameters),
31  SamplerBase(parameters, this, _communicator),
32  _euler(getUserObject<EulerAngleProvider>("euler_angle_provider")),
33  _unique_grains(coupledValue("unique_grains")),
34  _grain_num(getParam<unsigned int>("grain_num")),
35  _sample(4)
36 {
38  mooseError("Euler angle provider has too few angles.");
39 
40  std::vector<std::string> output_variables(4);
41  output_variables[0] = "unique_grain";
42  output_variables[1] = "euler_angle_z";
43  output_variables[2] = "euler_angle_x\'";
44  output_variables[3] = "euler_angle_z\"";
45  SamplerBase::setupVariables(output_variables);
46 }
47 
48 void
50 {
52 }
53 
54 void
56 {
57  _sample[0] =
58  _unique_grains[0] + 1; // Index starts at 0, but we want to display first grain as grain 1.
59 
60  const EulerAngles & angle = _euler.getEulerAngles(_unique_grains[0]);
61  _sample[1] = angle.phi1; // Get the Z rotation
62  _sample[2] = angle.Phi; // Get the X' rotation
63  _sample[3] = angle.phi2; // Get the Z'' rotation
64  SamplerBase::addSample(_current_elem->vertex_average() /* x,y,z coordinates of elem centroid */,
65  _current_elem->id(),
66  _sample);
67 }
68 
69 void
71 {
72  const auto & vpp = static_cast<const GrainTextureVectorPostprocessor &>(y);
74 }
75 
76 void
78 {
80 }
virtual unsigned int getGrainNum() const =0
virtual void initialize()
GrainTextureVectorPostprocessor is a VectorPostprocessor that outputs the the coordinates, grain number, and Euler Angles associated with each element.
const std::vector< double > y
void addRequiredParam(const std::string &name, const std::string &doc_string)
registerMooseObject("PhaseFieldApp", GrainTextureVectorPostprocessor)
void setupVariables(const std::vector< std::string > &variable_names)
virtual void threadJoin(const SamplerBase &y)
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
static InputParameters validParams()
virtual void finalize()
virtual void addSample(const Point &p, const Real &id, const std::vector< Real > &values)
const Elem *const & _current_elem
virtual const EulerAngles & getEulerAngles(unsigned int) const =0
virtual void threadJoin(const UserObject &uo)
Euler angle triplet.
Definition: EulerAngles.h:24
void mooseError(Args &&... args) const
GrainTextureVectorPostprocessor(const InputParameters &parameters)
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()
Abstract base class for user objects that implement the Euler Angle provider interface.
void ErrorVector unsigned int