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 "SubChannelAddInitialConditionsAction.h" 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 : 20 : InputParameters 21 297 : SubChannelAddInitialConditionsAction::validParams() 22 : { 23 297 : InputParameters params = Action::validParams(); 24 297 : params.addClassDescription( 25 : "Adds the default initial conditions for subchannel geometry variables"); 26 297 : return params; 27 0 : } 28 : 29 297 : SubChannelAddInitialConditionsAction::SubChannelAddInitialConditionsAction( 30 297 : const InputParameters & parameters) 31 297 : : Action(parameters) 32 : { 33 297 : } 34 : 35 : void 36 297 : SubChannelAddInitialConditionsAction::act() 37 : { 38 297 : const auto * const quad_mesh = dynamic_cast<const QuadSubChannelMesh *>(_mesh.get()); 39 297 : 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 297 : if (is_quad) 45 : { 46 : subchannel_mesh = quad_mesh; 47 292 : addInitialCondition("SCMQuadFlowAreaIC", "subchannel_S_IC", SubChannelApp::SURFACE_AREA); 48 292 : addInitialCondition( 49 : "SCMQuadWettedPerimIC", "subchannel_w_perim_IC", SubChannelApp::WETTED_PERIMETER); 50 : } 51 151 : else if (is_tri) 52 : { 53 : subchannel_mesh = tri_mesh; 54 302 : addInitialCondition("SCMTriFlowAreaIC", "subchannel_S_IC", SubChannelApp::SURFACE_AREA); 55 302 : addInitialCondition( 56 : "SCMTriWettedPerimIC", "subchannel_w_perim_IC", SubChannelApp::WETTED_PERIMETER); 57 : } 58 : else 59 : return; 60 : 61 623 : if (subchannel_mesh->pinMeshExist() && !hasInitialCondition(SubChannelApp::PIN_DIAMETER)) 62 : { 63 298 : auto params = _factory.getValidParams("ConstantIC"); 64 298 : params.set<VariableName>("variable") = SubChannelApp::PIN_DIAMETER; 65 149 : params.set<Real>("value") = subchannel_mesh->getPinDiameter(); 66 298 : _problem->addInitialCondition("ConstantIC", "subchannel_Dpin_IC", params); 67 149 : } 68 : } 69 : 70 : void 71 594 : SubChannelAddInitialConditionsAction::addInitialCondition(const std::string & type, 72 : const std::string & name, 73 : const VariableName & var_name) 74 : { 75 594 : if (hasInitialCondition(var_name)) 76 18 : return; 77 : 78 576 : auto params = _factory.getValidParams(type); 79 576 : params.set<VariableName>("variable") = var_name; 80 576 : _problem->addInitialCondition(type, name, params); 81 576 : } 82 : 83 : bool 84 757 : SubChannelAddInitialConditionsAction::hasInitialCondition(const VariableName & var_name) const 85 : { 86 757 : return _problem->getInitialConditionWarehouse().hasObjectsForVariable(var_name, /*tid=*/0); 87 : }