www.mooseframework.org
MultiAuxVariablesAction.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 "FEProblem.h"
12 #include "Conversion.h"
13 #include "MooseMesh.h"
14 
15 registerMooseAction("PhaseFieldApp", MultiAuxVariablesAction, "add_aux_variable");
16 
17 template <>
18 InputParameters
20 {
21  InputParameters params = validParams<AddAuxVariableAction>();
22  params.addClassDescription("Set up auxvariables for components of "
23  "MaterialProperty<std::vector<data_type> > for polycrystal sample.");
24  params.addRequiredParam<unsigned int>(
25  "grain_num", "Specifies the number of grains to create the aux variables for.");
26  params.addRequiredParam<std::vector<std::string>>(
27  "variable_base", "Vector that specifies the base name of the variables.");
28  MultiMooseEnum data_type("Real RealGradient", "Real");
29  params.addRequiredParam<MultiMooseEnum>(
30  "data_type",
31  data_type,
32  "Specifying data type of the materials property, variables are created accordingly");
33  return params;
34 }
35 
37  : AddAuxVariableAction(params),
38  _grain_num(getParam<unsigned int>("grain_num")),
39  _var_name_base(getParam<std::vector<std::string>>("variable_base")),
40  _num_var(_var_name_base.size()),
41  _data_type(getParam<MultiMooseEnum>("data_type")),
42  _data_size(_data_type.size())
43 {
44 }
45 
46 void
48 {
49  init();
50 
51  if (_num_var != _data_size)
52  mooseError("Data type not provided for all the AuxVariables in MultiAuxVariablesAction");
53 
54  // mesh dimension & components required for gradient variables
55  const unsigned int dim = _mesh->dimension();
56  const std::vector<char> suffix = {'x', 'y', 'z'};
57 
58  // Loop through the number of order parameters
59  for (unsigned int val = 0; val < _num_var; ++val)
60  for (unsigned int gr = 0; gr < _grain_num; ++gr)
61  {
63  if (_data_type[val] == "Real")
64  {
65  // Create variable names with variable name base followed by the order parameter it applies
66  // to.
67  std::string var_name = _var_name_base[val] + Moose::stringify(gr);
68 
69  _problem->addAuxVariable(_type, var_name, _moose_object_pars);
70  }
72  if (_data_type[val] == "RealGradient")
73  for (unsigned int x = 0; x < dim; ++x)
74  {
79  std::string var_name = _var_name_base[val] + Moose::stringify(gr) + "_" + suffix[x];
80 
81  _problem->addAuxVariable(_type, var_name, _moose_object_pars);
82  }
83  }
84 }
MultiAuxVariablesAction
Automatically generates all auxvariables given vectors telling it the names and how many to create.
Definition: MultiAuxVariablesAction.h:18
registerMooseAction
registerMooseAction("PhaseFieldApp", MultiAuxVariablesAction, "add_aux_variable")
MultiAuxVariablesAction::_data_size
const unsigned int _data_size
number of properties
Definition: MultiAuxVariablesAction.h:39
MultiAuxVariablesAction::act
virtual void act()
Definition: MultiAuxVariablesAction.C:47
MultiAuxVariablesAction::_var_name_base
const std::vector< std::string > & _var_name_base
base name for the auxvariables
Definition: MultiAuxVariablesAction.h:30
MultiAuxVariablesAction::MultiAuxVariablesAction
MultiAuxVariablesAction(InputParameters params)
Definition: MultiAuxVariablesAction.C:36
MultiAuxVariablesAction.h
validParams< MultiAuxVariablesAction >
InputParameters validParams< MultiAuxVariablesAction >()
Definition: MultiAuxVariablesAction.C:19
MultiAuxVariablesAction::_grain_num
const unsigned int _grain_num
number of grains to create
Definition: MultiAuxVariablesAction.h:27
MultiAuxVariablesAction::_data_type
const MultiMooseEnum & _data_type
list of material properties to be used
Definition: MultiAuxVariablesAction.h:36
MultiAuxVariablesAction::_num_var
const unsigned int _num_var
number of auxvariables
Definition: MultiAuxVariablesAction.h:33