Line data Source code
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 : 10 : #include "Tricrystal2CircleGrainsICAction.h" 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 : 26 : const Real Tricrystal2CircleGrainsICAction::_abs_zero_tol = 1e-12; 27 : 28 : registerMooseAction("PhaseFieldApp", Tricrystal2CircleGrainsICAction, "add_ic"); 29 : 30 : InputParameters 31 16 : Tricrystal2CircleGrainsICAction::validParams() 32 : { 33 16 : InputParameters params = Action::validParams(); 34 16 : params.addClassDescription("Sets initial conditions for the order parameters representing the " 35 : "tri-crystal grain structure"); 36 32 : params.addRequiredParam<unsigned int>("op_num", "number of order parameters to create"); 37 32 : params.addRequiredParam<std::string>("var_name_base", "specifies the base name of the variables"); 38 32 : params.addParam<std::vector<SubdomainName>>( 39 : "block", {}, "Block restriction for the initial condition"); 40 : 41 16 : return params; 42 0 : } 43 : 44 16 : Tricrystal2CircleGrainsICAction::Tricrystal2CircleGrainsICAction(const InputParameters & params) 45 : : Action(params), 46 16 : _var_name_base(getParam<std::string>("var_name_base")), 47 48 : _op_num(getParam<unsigned int>("op_num")) 48 : { 49 16 : } 50 : 51 : void 52 16 : Tricrystal2CircleGrainsICAction::act() 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 64 : for (unsigned int op = 0; op < _op_num; op++) 60 : { 61 : // Create variable names 62 48 : std::string var_name = _var_name_base; 63 48 : std::stringstream out; 64 : out << op; 65 48 : var_name.append(out.str()); 66 : 67 : // Set parameters for BoundingBoxIC 68 96 : InputParameters poly_params = _factory.getValidParams("Tricrystal2CircleGrainsIC"); 69 96 : poly_params.set<VariableName>("variable") = var_name; 70 48 : poly_params.set<unsigned int>("op_index") = op; 71 48 : poly_params.applySpecificParameters(parameters(), {"op_num", "block"}); 72 : 73 : // Add initial condition 74 144 : _problem->addInitialCondition("Tricrystal2CircleGrainsIC", 75 48 : "Tricrystal2CircleGrainsIC_" + Moose::stringify(op), 76 : poly_params); 77 48 : } 78 16 : }