www.mooseframework.org
Tricrystal2CircleGrainsICAction.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 "Parser.h"
13 #include "FEProblem.h"
14 #include "Conversion.h"
15 
16 #include <sstream>
17 #include <stdexcept>
18 
19 #include "libmesh/libmesh.h"
20 #include "libmesh/exodusII_io.h"
21 #include "libmesh/equation_systems.h"
22 #include "libmesh/nonlinear_implicit_system.h"
23 #include "libmesh/explicit_system.h"
24 #include "libmesh/string_to_enum.h"
25 
27 
28 registerMooseAction("PhaseFieldApp", Tricrystal2CircleGrainsICAction, "add_ic");
29 
32 {
34  params.addRequiredParam<unsigned int>("op_num", "number of order parameters to create");
35  params.addRequiredParam<std::string>("var_name_base", "specifies the base name of the variables");
36  params.addParam<std::vector<SubdomainName>>(
37  "block", {}, "Block restriction for the initial condition");
38 
39  return params;
40 }
41 
43  : Action(params),
44  _var_name_base(getParam<std::string>("var_name_base")),
45  _op_num(getParam<unsigned int>("op_num"))
46 {
47 }
48 
49 void
51 {
52 #ifdef DEBUG
53  Moose::err << "Inside the Tricrystal2CircleGrainsICAction Object" << std::endl;
54 #endif
55 
56  // Loop through the number of order parameters
57  for (unsigned int op = 0; op < _op_num; op++)
58  {
59  // Create variable names
60  std::string var_name = _var_name_base;
61  std::stringstream out;
62  out << op;
63  var_name.append(out.str());
64 
65  // Set parameters for BoundingBoxIC
66  InputParameters poly_params = _factory.getValidParams("Tricrystal2CircleGrainsIC");
67  poly_params.set<VariableName>("variable") = var_name;
68  poly_params.set<unsigned int>("op_index") = op;
69  poly_params.applySpecificParameters(parameters(), {"op_num", "block"});
70 
71  // Add initial condition
72  _problem->addInitialCondition("Tricrystal2CircleGrainsIC",
73  "Tricrystal2CircleGrainsIC_" + Moose::stringify(op),
74  poly_params);
75  }
76 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void applySpecificParameters(const InputParameters &common, const std::vector< std::string > &include, bool allow_private=false)
Tricrystal2CircleGrainsICAction(const InputParameters &params)
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
void addRequiredParam(const std::string &name, const std::string &doc_string)
Factory & _factory
static InputParameters validParams()
std::string stringify(const T &t)
registerMooseAction("PhaseFieldApp", Tricrystal2CircleGrainsICAction, "add_ic")
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
OStreamProxy out
std::shared_ptr< FEProblemBase > & _problem
const InputParameters & parameters() const
Automatically generates all variables to model a polycrystal with op_num orderparameters.
void ErrorVector unsigned int