23 "Computes axial power rate (W/m) assigned to the fuel pins in a triangular lattice "
26 "power",
"The postprocessor or Real to use for the total power of the subassembly [W]");
28 "filename",
"name of radial power profile .txt file (should be a single column) [UnitLess].");
32 "Axial shape of the heat rate as a function of the distance from the start of the "
33 "heated section [Unitless]. Its magnitude does not matter because each pin is "
34 "rescaled to its assigned power");
36 "verbose",
false,
"Print the per-pin power correction every time it is computed");
43 _power(getPostprocessorValue(
"power")),
45 _filename(getParam<
std::string>(
"filename")),
46 _axial_heat_rate(getFunction(
"axial_heat_rate")),
47 _verbose(getParam<bool>(
"verbose"))
69 if (inFile.fail() && !inFile.eof())
73 mooseError(
name(),
": Radial profile file doesn't have correct size: ", n_pins);
98 "The power postprocessor does not execute on every execute_on flag of this "
99 "object, so q_prime may use a lagged power");
100 if (power_pp.getParam<
bool>(
"force_postaux"))
102 "The power postprocessor sets force_postaux, so it executes after this object "
103 "and q_prime uses a lagged power");
130 for (
unsigned int iz = 1; iz < nz + 1; iz++)
133 auto z2 = z_grid[iz];
134 auto z1 = z_grid[iz - 1];
135 if (MooseUtils::absoluteFuzzyGreaterThan(z2, unheated_length_entry) &&
136 MooseUtils::absoluteFuzzyLessThan(z1, unheated_length_entry + heated_length))
139 for (
unsigned int i_pin = 0; i_pin < n_pins; i_pin++)
143 const Point shift(0, 0, unheated_length_entry);
151 if (MooseUtils::absoluteFuzzyGreaterThan(z2, unheated_length_entry) &&
152 MooseUtils::absoluteFuzzyLessThan(z1, unheated_length_entry))
158 if (MooseUtils::absoluteFuzzyGreaterThan(z2, unheated_length_entry + heated_length) &&
159 MooseUtils::absoluteFuzzyLessThan(z1, unheated_length_entry + heated_length))
172 Eigen::MatrixXd correction = Eigen::MatrixXd::Zero(n_pins, 1);
173 for (
const auto i_pin : make_range(n_pins))
176 _console <<
"###########################################" << std::endl;
177 _console <<
"Aux Power correction vector :\n" << correction <<
" \n";
187 Point p1(0, 0, unheated_length_entry);
191 if (MooseUtils::absoluteFuzzyGreaterEqual(
p(2), unheated_length_entry) &&
192 MooseUtils::absoluteFuzzyLessEqual(
p(2), unheated_length_entry + heated_length))
registerMooseObject("SubChannelApp", SCMTriPowerAux)
const Node *const & _current_node
static InputParameters validParams()
const ConsoleStream _console
virtual Real value(Real t, const Point &p) const
void paramWarning(const std::string ¶m, Args... args) const
const std::string & name() const
void mooseError(Args &&... args) const
bool isDefaultPostprocessorValue(const std::string ¶m_name, const unsigned int index=0) const
Sets the axial heat rate for each pin according to a radial power distribution and a user defined axi...
virtual void initialSetup() override
static InputParameters validParams()
SCMTriPowerAux(const InputParameters ¶ms)
const PostprocessorValue & _power
The total power of the assembly.
unsigned int _numberoflines
The number of lines associated with the radial power profile .txt file.
void computeShapeIntegral()
Compute the trapezoidal integral of the axial power shape over each pin.
virtual Real computeValue() override
std::string _filename
The name of the radial power profile file.
Eigen::MatrixXd _power_dis
matrix that holds the values of the relative pin power
const Function & _axial_heat_rate
const TriSubChannelMesh & _triMesh
const bool _verbose
Whether to print the per-pin power correction every time it is computed.
virtual void timestepSetup() override
Eigen::MatrixXd _shape_integral
Trapezoidal integral of the axial power shape over each pin on the SCM axial grid [m].
const ExecFlagEnum & getExecuteOnEnum() const
virtual const Real & getHeatedLength() const
Return heated length.
virtual const Real & getHeatedLengthEntry() const
Return unheated length at entry.
virtual const std::vector< Real > & getZGrid() const
Get axial location of layers.
bool pinMeshExist() const
Return if Pin Mesh exists or not.
virtual unsigned int getNumOfAxialCells() const
Return the number of axial cells.
Mesh class for triangular, edge and corner subchannels for hexagonal lattice fuel assemblies.
unsigned int getNumOfPins() const override
Return the number of pins.
unsigned int getPinIndexFromPoint(const Point &p) const override
Return a pin index for a given physical point p
Node * getPinNode(unsigned int i_pin, unsigned int iz) const override
Get the pin mesh node for a given pin index and elevation index.
const UserObjectBase & getUserObjectBase(const std::string ¶m_name, bool is_dependency=true) const
processor_id_type processor_id() const