InputParameters validParams<MultiBarrierFunctionMaterial>()
{
  InputParameters params = validParams<Material>();
  params.addParam<std::string>("function_name", "g", "actual name for g(eta_i)");
  MooseEnum h_order("SIMPLE=0", "SIMPLE");
  params.addParam<MooseEnum>("g_order", h_order, "Polynomial order of the switching function h(eta)");
  params.addRequiredCoupledVar("etas", "eta_i order parameters, one for each h");
  return params;
}
InputParameters validParams<SwitchingFunctionMaterial>()
{
  InputParameters params = validParams<OrderParameterFunctionMaterial>();
  params.addClassDescription("Helper material to provide h(eta) and its derivative in one of two polynomial forms.\nSIMPLE: 3*eta^2-2*eta^3\nHIGH: eta^3*(6*eta^2-15*eta+10)");
  MooseEnum h_order("SIMPLE=0 HIGH", "SIMPLE");
  params.addParam<MooseEnum>("h_order", h_order, "Polynomial order of the switching function h(eta)");
  params.set<std::string>("function_name") = std::string("h");
  return params;
}
InputParameters validParams<CrossTermBarrierFunctionMaterial>()
{
  InputParameters params = validParams<Material>();
  params.addParam<std::string>("function_name", "g", "actual name for g(eta_i)");
  MooseEnum h_order("SIMPLE=0", "SIMPLE");
  params.addParam<MooseEnum>("g_order", h_order, "Polynomial order of the switching function h(eta)");
  params.addRequiredCoupledVar("etas", "eta_i order parameters, one for each h");
  params.addRequiredParam<std::vector<Real> >("W_ij", "Terms controlling barrier height set W=1 in DerivativeMultiPhaseMaterial for these to apply");
  return params;
}
InputParameters
validParams<MixedSwitchingFunctionMaterial>()
{
  InputParameters params = validParams<OrderParameterFunctionMaterial>();
  params.addClassDescription("Helper material to provide h(eta) and its derivative in one of two "
                             "polynomial forms. MIX234 and MIX246");
  MooseEnum h_order("MIX234=0 MIX246", "MIX234");
  params.addParam<MooseEnum>(
      "h_order", h_order, "Polynomial order of the switching function h(eta)");
  params.set<std::string>("function_name") = std::string("h");

  params.addRangeCheckedParam<Real>(
      "weight", 1.0, "weight <= 1 & weight >= 0", "Weight parameter for MIX type h(eta)");

  return params;
}