www.mooseframework.org
EulerAngle2RGBAction.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 "EulerAngle2RGBAction.h"
11 #include "Factory.h"
12 #include "FEProblem.h"
13 
14 #include "libmesh/string_to_enum.h"
15 
16 registerMooseAction("PhaseFieldApp", EulerAngle2RGBAction, "add_aux_kernel");
17 
18 registerMooseAction("PhaseFieldApp", EulerAngle2RGBAction, "add_aux_variable");
19 
20 template <>
21 InputParameters
23 {
24  InputParameters params = validParams<Action>();
25  params.addParam<std::string>("auxvariable_name_base", "RGB", "Base name of the auxvariables");
26  params.addClassDescription("Set up auxvariables and auxkernels to output Euler angles as RGB "
27  "values interpolated across inverse pole figure");
28  params.addParam<unsigned int>("phase", "The phase to use for all queries.");
29  MooseEnum sd_enum = MooseEnum("100=1 010=2 001=3", "001");
30  params.addParam<MooseEnum>("sd", sd_enum, "Reference sample direction");
31  MooseEnum structure_enum = MooseEnum(
32  "cubic=43 hexagonal=62 tetragonal=42 trigonal=32 orthorhombic=22 monoclinic=2 triclinic=1");
33  params.addRequiredParam<MooseEnum>(
34  "crystal_structure", structure_enum, "Crystal structure of the material");
35  params.addRequiredParam<UserObjectName>("euler_angle_provider",
36  "Name of Euler angle provider user object");
37  params.addRequiredParam<UserObjectName>("grain_tracker",
38  "The GrainTracker UserObject to get values from.");
39  params.addParam<Point>(
40  "no_grain_color",
41  Point(0, 0, 0),
42  "RGB value of color used to represent area with no grains, defaults to black");
43  return params;
44 }
45 
46 EulerAngle2RGBAction::EulerAngle2RGBAction(const InputParameters & params)
47  : Action(params), _var_name_base(getParam<std::string>("auxvariable_name_base"))
48 {
49 }
50 
51 void
53 {
54  // Auxvariable suffix names that will automatically become a vector in Paraview
55  std::vector<std::string> suffixes = {"_x", "_y", "_z"};
56 
57  // Three color types that will be outputted
58  std::vector<std::string> colors = {"red", "green", "blue"};
59 
60  for (unsigned int i = 0; i < 3; ++i)
61  {
62  // Create the auxvariable name
63  std::string var_name = _var_name_base + suffixes[i];
64 
65  if (_current_task == "add_aux_variable")
66  {
67  auto var_params = _factory.getValidParams("MooseVariableConstMonomial");
68  // Create scalar auxvariables for the three components of the RGB vector
69  _problem->addAuxVariable("MooseVariableConstMonomial", var_name, var_params);
70  }
71  else if (_current_task == "add_aux_kernel")
72  {
73  // Create auxkernels corresponding to each auxvariable
74  InputParameters params = _factory.getValidParams("EulerAngleProvider2RGBAux");
75  params.set<AuxVariableName>("variable") = var_name;
76  params.set<MooseEnum>("sd") = getParam<MooseEnum>("sd");
77  params.set<MooseEnum>("crystal_structure") = getParam<MooseEnum>("crystal_structure");
78  params.set<MooseEnum>("output_type") = colors[i];
79  params.set<UserObjectName>("euler_angle_provider") =
80  getParam<UserObjectName>("euler_angle_provider");
81  params.set<UserObjectName>("grain_tracker") = getParam<UserObjectName>("grain_tracker");
82  params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
83  params.set<Point>("no_grain_color") = getParam<Point>("no_grain_color");
84  if (isParamValid("phase"))
85  params.set<unsigned int>("phase") = getParam<unsigned int>("phase");
86  _problem->addAuxKernel("EulerAngleProvider2RGBAux", var_name, params);
87  }
88  else
89  mooseError("Internal error in EulerAngle2RGBAction.");
90  }
91 }
EulerAngle2RGBAction::act
virtual void act()
Definition: EulerAngle2RGBAction.C:52
registerMooseAction
registerMooseAction("PhaseFieldApp", EulerAngle2RGBAction, "add_aux_kernel")
EulerAngle2RGBAction::_var_name_base
const std::string _var_name_base
Definition: EulerAngle2RGBAction.h:28
validParams< EulerAngle2RGBAction >
InputParameters validParams< EulerAngle2RGBAction >()
Definition: EulerAngle2RGBAction.C:22
EulerAngle2RGBAction.h
EulerAngle2RGBAction::EulerAngle2RGBAction
EulerAngle2RGBAction(const InputParameters &params)
Definition: EulerAngle2RGBAction.C:46
EulerAngle2RGBAction
Automatically generates all variables, Kernels, and Materials to ensure the correct derivatives of th...
Definition: EulerAngle2RGBAction.h:20