www.mooseframework.org
MatVecRealGradAuxKernelAction.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 "Factory.h"
12 #include "Conversion.h"
13 #include "FEProblem.h"
14 
15 registerMooseAction("PhaseFieldApp", MatVecRealGradAuxKernelAction, "add_aux_kernel");
16 
17 template <>
18 InputParameters
20 {
21  InputParameters params = validParams<Action>();
22  params.addRequiredParam<unsigned int>("op_num",
23  "Value that specifies the number of grains to create");
24  params.addRequiredParam<std::vector<std::string>>(
25  "var_name_base", "Vector specifies the base name of the variables");
26  params.addRequiredParam<std::vector<MaterialPropertyName>>("property",
27  "the scalar material property names");
28  params.addParam<bool>(
29  "use_displaced_mesh", false, "Whether to use displaced mesh in the kernels");
30  params.addRequiredParam<unsigned int>("dim", "the dimensions of the mesh");
31  params.addParam<AuxVariableName>("divergence_variable",
32  "Name of divergence variable to generate kernels for");
33  params.addParam<MaterialPropertyName>("divergence_property",
34  "Scalar material property name for divergence variable");
35  return params;
36 }
37 
39  : Action(params),
40  _div_var(getParam<AuxVariableName>("divergence_variable")),
41  _prop(getParam<std::vector<MaterialPropertyName>>("property")),
42  _div_prop(getParam<MaterialPropertyName>("divergence_property"))
43 {
44  mooseDeprecated("Use 'MaterialVectorAuxKernel' or 'MaterialVectorGradAuxKernel' action instead "
45  "depending on data_type of MaterialProperty<std::vector<data_type> >");
46 }
47 
48 void
50 {
51  const std::vector<std::string> var_name_base =
52  getParam<std::vector<std::string>>("var_name_base");
53 
54  const unsigned int op_num = getParam<unsigned int>("op_num");
55  const unsigned int dim = getParam<unsigned int>("dim");
56  const unsigned int size_v = var_name_base.size();
57  const unsigned int size_p = _prop.size();
58 
59  if (size_p != size_v)
60  paramError("property", "var_name_base and property must be vectors of the same dimension");
61 
62  for (unsigned int op = 0; op < op_num; ++op)
63  {
64  for (unsigned int val = 0; val < size_v; ++val)
65  for (unsigned int x = 0; x < dim; ++x)
66  {
67  std::string var_name = var_name_base[val] + Moose::stringify(x) + Moose::stringify(op);
68  {
69  InputParameters params = _factory.getValidParams("MaterialStdVectorRealGradientAux");
70  params.set<AuxVariableName>("variable") = var_name;
71  params.set<MaterialPropertyName>("property") = _prop[val];
72  params.set<unsigned int>("component") = x;
73  params.set<unsigned int>("index") = op;
74  params.set<bool>("use_displaced_mesh") = getParam<bool>("use_displaced_mesh");
75  _problem->addAuxKernel("MaterialStdVectorRealGradientAux", "grad_" + var_name, params);
76  }
77  }
78 
79  if (isParamValid("divergence_variable"))
80  {
81  if (isParamValid("divergence_property"))
82  {
83  InputParameters params = _factory.getValidParams("MaterialStdVectorAux");
84  params.set<AuxVariableName>("variable") = _div_var;
85  params.set<MaterialPropertyName>("property") = _div_prop;
86  params.set<unsigned int>("index") = op;
87  params.set<bool>("use_displaced_mesh") = getParam<bool>("use_displaced_mesh");
88  _problem->addAuxKernel("MaterialStdVectorAux", "div_" + Moose::stringify(op), params);
89  }
90  else
91  mooseError("Must specify a divergence_property name along with divergence_variable name");
92  }
93  }
94 }
MatVecRealGradAuxKernelAction
Definition: MatVecRealGradAuxKernelAction.h:14
MatVecRealGradAuxKernelAction.h
MatVecRealGradAuxKernelAction::_div_prop
const MaterialPropertyName _div_prop
Definition: MatVecRealGradAuxKernelAction.h:24
registerMooseAction
registerMooseAction("PhaseFieldApp", MatVecRealGradAuxKernelAction, "add_aux_kernel")
MatVecRealGradAuxKernelAction::act
virtual void act()
Definition: MatVecRealGradAuxKernelAction.C:49
MatVecRealGradAuxKernelAction::MatVecRealGradAuxKernelAction
MatVecRealGradAuxKernelAction(const InputParameters &params)
Definition: MatVecRealGradAuxKernelAction.C:38
MatVecRealGradAuxKernelAction::_prop
const std::vector< MaterialPropertyName > _prop
Definition: MatVecRealGradAuxKernelAction.h:23
MatVecRealGradAuxKernelAction::_div_var
const AuxVariableName _div_var
Definition: MatVecRealGradAuxKernelAction.h:22
validParams< MatVecRealGradAuxKernelAction >
InputParameters validParams< MatVecRealGradAuxKernelAction >()
Definition: MatVecRealGradAuxKernelAction.C:19