12 #include "FEProblem.h"
14 #include "libmesh/string_to_enum.h"
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>(
42 "RGB value of color used to represent area with no grains, defaults to black");
47 : Action(params), _var_name_base(getParam<std::string>(
"auxvariable_name_base"))
55 std::vector<std::string> suffixes = {
"_x",
"_y",
"_z"};
58 std::vector<std::string> colors = {
"red",
"green",
"blue"};
60 for (
unsigned int i = 0; i < 3; ++i)
65 if (_current_task ==
"add_aux_variable")
67 auto var_params = _factory.getValidParams(
"MooseVariableConstMonomial");
69 _problem->addAuxVariable(
"MooseVariableConstMonomial", var_name, var_params);
71 else if (_current_task ==
"add_aux_kernel")
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);
89 mooseError(
"Internal error in EulerAngle2RGBAction.");