https://mooseframework.inl.gov
SubChannelAddInitialConditionsAction.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 "ActionFactory.h"
12 #include "FEProblemBase.h"
13 #include "QuadSubChannelMesh.h"
14 #include "SubChannelApp.h"
15 #include "SubChannelMesh.h"
16 #include "TriSubChannelMesh.h"
17 
18 registerMooseAction("SubChannelApp", SubChannelAddInitialConditionsAction, "sch:add_default_ic");
19 
22 {
24  params.addClassDescription(
25  "Adds the default initial conditions for subchannel geometry variables");
26  return params;
27 }
28 
30  const InputParameters & parameters)
31  : Action(parameters)
32 {
33 }
34 
35 void
37 {
38  const auto * const quad_mesh = dynamic_cast<const QuadSubChannelMesh *>(_mesh.get());
39  const auto * const tri_mesh = dynamic_cast<const TriSubChannelMesh *>(_mesh.get());
40  const bool is_quad = quad_mesh != nullptr;
41  const bool is_tri = tri_mesh != nullptr;
42  const SubChannelMesh * subchannel_mesh = nullptr;
43 
44  if (is_quad)
45  {
46  subchannel_mesh = quad_mesh;
47  addInitialCondition("SCMQuadFlowAreaIC", "subchannel_S_IC", SubChannelApp::SURFACE_AREA);
49  "SCMQuadWettedPerimIC", "subchannel_w_perim_IC", SubChannelApp::WETTED_PERIMETER);
50  }
51  else if (is_tri)
52  {
53  subchannel_mesh = tri_mesh;
54  addInitialCondition("SCMTriFlowAreaIC", "subchannel_S_IC", SubChannelApp::SURFACE_AREA);
56  "SCMTriWettedPerimIC", "subchannel_w_perim_IC", SubChannelApp::WETTED_PERIMETER);
57  }
58  else
59  return;
60 
62  {
63  auto params = _factory.getValidParams("ConstantIC");
64  params.set<VariableName>("variable") = SubChannelApp::PIN_DIAMETER;
65  params.set<Real>("value") = subchannel_mesh->getPinDiameter();
66  _problem->addInitialCondition("ConstantIC", "subchannel_Dpin_IC", params);
67  }
68 }
69 
70 void
72  const std::string & name,
73  const VariableName & var_name)
74 {
75  if (hasInitialCondition(var_name))
76  return;
77 
78  auto params = _factory.getValidParams(type);
79  params.set<VariableName>("variable") = var_name;
80  _problem->addInitialCondition(type, name, params);
81 }
82 
83 bool
85 {
86  return _problem->getInitialConditionWarehouse().hasObjectsForVariable(var_name, /*tid=*/0);
87 }
virtual const Real & getPinDiameter() const
Return undeformed Pin diameter.
void addInitialCondition(const std::string &type, const std::string &name, const VariableName &var_name)
Add an initial condition unless another IC already targets the variable.
Factory & _factory
T & set(const std::string &name, bool quiet_mode=false)
static const std::string PIN_DIAMETER
Definition: SubChannelApp.h:36
InputParameters getValidParams(const std::string &name) const
Creates the mesh of subchannels in a quadrilateral lattice.
static const std::string WETTED_PERIMETER
Definition: SubChannelApp.h:39
const std::string & name() const
static InputParameters validParams()
Action that adds default SubChannel geometry initial conditions.
const std::string name
Definition: Setup.h:21
const std::string & type() const
bool pinMeshExist() const
Return if Pin Mesh exists or not.
Mesh class for triangular, edge and corner subchannels for hexagonal lattice fuel assemblies...
SubChannelAddInitialConditionsAction(const InputParameters &parameters)
std::shared_ptr< MooseMesh > & _mesh
registerMooseAction("SubChannelApp", SubChannelAddInitialConditionsAction, "sch:add_default_ic")
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string SURFACE_AREA
Definition: SubChannelApp.h:29
void addClassDescription(const std::string &doc_string)
std::shared_ptr< FEProblemBase > & _problem
Base class for subchannel meshes.
bool hasInitialCondition(const VariableName &var_name) const
Return whether any user-provided IC targets the variable.