https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Tricrystal2CircleGrainsICAction.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
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
29
32{
34 params.addClassDescription("Sets initial conditions for the order parameters representing the "
35 "tri-crystal grain structure");
36 params.addRequiredParam<unsigned int>("op_num", "number of order parameters to create");
37 params.addRequiredParam<std::string>("var_name_base", "specifies the base name of the variables");
38 params.addParam<std::vector<SubdomainName>>(
39 "block", {}, "Block restriction for the initial condition");
40
41 return params;
42}
43
45 : Action(params),
46 _var_name_base(getParam<std::string>("var_name_base")),
47 _op_num(getParam<unsigned int>("op_num"))
48{
49}
50
51void
53{
54#ifdef DEBUG
55 Moose::err << "Inside the Tricrystal2CircleGrainsICAction Object" << std::endl;
56#endif
57
58 // Loop through the number of order parameters
59 for (unsigned int op = 0; op < _op_num; op++)
60 {
61 // Create variable names
62 std::string var_name = _var_name_base;
63 std::stringstream out;
64 out << op;
65 var_name.append(out.str());
66
67 // Set parameters for BoundingBoxIC
68 InputParameters poly_params = _factory.getValidParams("Tricrystal2CircleGrainsIC");
69 poly_params.set<VariableName>("variable") = var_name;
70 poly_params.set<unsigned int>("op_index") = op;
71 poly_params.applySpecificParameters(parameters(), {"op_num", "block"});
72
73 // Add initial condition
74 _problem->addInitialCondition("Tricrystal2CircleGrainsIC",
75 "Tricrystal2CircleGrainsIC_" + Moose::stringify(op),
76 poly_params);
77 }
78}
registerMooseAction("PhaseFieldApp", Tricrystal2CircleGrainsICAction, "add_ic")
void ErrorVector unsigned int
static InputParameters validParams()
std::shared_ptr< FEProblemBase > & _problem
InputParameters getValidParams(const std::string &name) const
void applySpecificParameters(const InputParameters &common, const std::vector< std::string > &include, bool allow_private=false)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
const InputParameters & parameters() const
Factory & _factory
Automatically generates all variables to model a polycrystal with op_num orderparameters.
Tricrystal2CircleGrainsICAction(const InputParameters &params)
std::string stringify(const T &t)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real