https://mooseframework.inl.gov
Loading...
Searching...
No Matches
SCMPinSurfaceTemperature.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 "SolutionHandle.h"
12#include "FEProblemBase.h"
13#include "Function.h"
14#include "MooseMesh.h"
15#include "MooseVariable.h"
16#include "SubProblem.h"
17#include "libmesh/system.h"
18#include "SCM.h"
19
21
24{
27 "Returns the surface temperature of a specific fuel pin at a user defined height. Applies a "
28 "linear reconstruction for the temperature.");
29 params.addRequiredParam<Real>("height", "Axial location on fuel pin [m]");
30 params.addRequiredParam<int>("index", "Index of fuel pin");
31 return params;
32}
33
35 : GeneralPostprocessor(parameters),
36 _mesh(SCM::getConstMesh<SubChannelMesh>(_fe_problem.mesh())),
37 _height(getParam<Real>("height")),
38 _i_pin(getParam<int>("index")),
39 _value(0)
40{
41 if (!_mesh.pinMeshExist())
43 name(),
44 " : The SCMPinSurfaceTemperature post processor calculates temperature on pins. A Pin "
45 "Mesh should be defined.");
46}
47
48void
50{
51 // No data on other ranks
52 if (processor_id() != 0)
53 return;
54 auto Tpin_soln = SolutionHandle(_fe_problem.getVariable(0, "Tpin"));
55 auto nz = _mesh.getNumOfAxialCells();
56 auto z_grid = _mesh.getZGrid();
57 auto total_length =
59
60 if (_height >= total_length)
61 {
62 auto * node = _mesh.getPinNode(_i_pin, nz);
63 _value = Tpin_soln(node);
64 }
65 else
66 {
67 for (unsigned int iz = 0; iz < nz; iz++)
68 {
69 if (_height >= z_grid[iz] && _height < z_grid[iz + 1])
70 {
71 auto * node_out = _mesh.getPinNode(_i_pin, iz + 1);
72 auto * node_in = _mesh.getPinNode(_i_pin, iz);
73 _value = Tpin_soln(node_in) + (Tpin_soln(node_out) - Tpin_soln(node_in)) *
74 (_height - z_grid[iz]) / (z_grid[iz + 1] - z_grid[iz]);
75 break;
76 }
77 }
78 }
79}
80
81Real
83{
84 return _value;
85}
registerMooseObject("SubChannelApp", SCMPinSurfaceTemperature)
void ErrorVector unsigned int
virtual const MooseVariableFieldBase & getVariable(const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type=Moose::VarKindType::VAR_ANY, Moose::VarFieldType expected_var_field_type=Moose::VarFieldType::VAR_FIELD_ANY) const override
static InputParameters validParams()
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
const std::string & name() const
void mooseError(Args &&... args) const
Returns the surface temperature of a specific fuel pin at a user defined height.
virtual void execute() override
const Real & _height
axial location [m]
static InputParameters validParams()
const SubChannelMesh & _mesh
geometric information
virtual Real getValue() const override
SCMPinSurfaceTemperature(const InputParameters &params)
Real _value
value we want to calculate
Provide a simple RAII interface for linear lagrange solution variables.
Base class for subchannel meshes.
virtual const Real & getHeatedLength() const
Return heated length.
virtual const Real & getHeatedLengthExit() const
Return unheated length at exit.
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.
virtual Node * getPinNode(unsigned int i_pin, unsigned int iz) const =0
Get the pin mesh node for a given pin index and elevation index.
FEProblemBase & _fe_problem
processor_id_type processor_id() const
MeshBase & mesh
Definition SCM.h:17