https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MarvelTriFlowAreaIC.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
10#include "MarvelTriFlowAreaIC.h"
11#include "TriSubChannelMesh.h"
12#include "SCM.h"
13
15
18{
20 params.addClassDescription("Computes flow area of subchannels in a triangular lattice "
21 "arrangement in a MARVEL-type micro-reactor");
22 return params;
23}
24
26 : TriSubChannelBaseIC(params), _subchannel_mesh(SCM::getConstMesh<SubChannelMesh>(_mesh))
27{
28}
29
30Real
32{
33 Real standard_area, rod_area, wire_area, additional_area;
34 auto pitch = _mesh.getPitch();
35 auto rod_diameter = _mesh.getPinDiameter();
36 auto wire_diameter = _mesh.getWireDiameter();
37 auto wire_lead_length = _mesh.getWireLeadLength();
38 auto gap = _mesh.getDuctToPinGap();
39 auto r_ref = rod_diameter / 2.0 + gap;
40 auto z_blockage = _mesh.getZBlockage();
41 auto index_blockage = _mesh.getIndexBlockage();
42 auto reduction_blockage = _mesh.getReductionBlockage();
43 auto theta = std::acos(wire_lead_length /
44 std::sqrt(std::pow(wire_lead_length, 2) +
45 std::pow(libMesh::pi * (rod_diameter + wire_diameter), 2)));
47 // given the channel number, i, it computes the flow area of the subchannel
48 // based on the subchannel type: CENTER, EDGE or CORNER.
49 auto subch_type = _mesh.getSubchannelType(i);
50
51 if (subch_type == EChannelType::CENTER)
52 {
53 standard_area = std::pow(pitch, 2) * std::sqrt(3.0) / 4.0;
54 rod_area = libMesh::pi * std::pow(rod_diameter, 2.0) / 8.0;
55 additional_area = 0.0;
56 wire_area = libMesh::pi * std::pow(wire_diameter, 2.0) / 8.0 / std::cos(theta);
57 }
58 else if (subch_type == EChannelType::EDGE)
59 {
60 auto gamma = std::acos(1 - 0.5 * std::pow(pitch / r_ref, 2.0));
61 auto alpha = (libMesh::pi - gamma) / 2.0;
62 auto sector_angle = libMesh::pi / 2.0 - alpha;
63 auto triangle_height = std::sqrt(std::pow(r_ref, 2.0) - std::pow(pitch / 2.0, 2.0));
64 auto sector = 0.5 * sector_angle * std::pow(r_ref, 2.0);
65 auto triangle = 0.5 * pitch * triangle_height;
66 standard_area = 2.0 * sector + triangle;
67 rod_area = libMesh::pi * std::pow(rod_diameter, 2.0) / 8.0;
68 additional_area = 0.0;
69 wire_area = libMesh::pi * std::pow(wire_diameter, 2.0) / 8.0 / std::cos(theta);
70 }
71 else
72 {
73 standard_area = (libMesh::pi / 6.0) * std::pow(r_ref, 2.0);
74 rod_area = libMesh::pi * std::pow(rod_diameter, 2.0) / 24.0;
75 additional_area = 0.0;
76 wire_area = libMesh::pi * std::pow(wire_diameter, 2.0) / 24.0 / std::cos(theta);
77 }
78
80 auto subchannel_area = standard_area + additional_area - rod_area - wire_area;
81
83 auto index = 0;
84 for (const auto & i_blockage : index_blockage)
85 {
86 if (i == i_blockage && (p(2) >= z_blockage.front() && p(2) <= z_blockage.back()))
87 {
88 return reduction_blockage[index] * subchannel_area;
89 }
90 index++;
91 }
92
93 return subchannel_area;
94}
const Real p
registerMooseObject("SubChannelApp", MarvelTriFlowAreaIC)
void addClassDescription(const std::string &doc_string)
This class calculates the flow area of the triangular, edge, and corner subchannels for a MARVEL-type...
Real value(const Point &p) override
static InputParameters validParams()
MarvelTriFlowAreaIC(const InputParameters &params)
Base class for subchannel meshes.
virtual const std::vector< Real > & getZBlockage() const
Get axial location of blockage (in,out) [m].
virtual const Real & getPitch() const
Return the undeformed pitch between 2 subchannels.
virtual const std::vector< Real > & getReductionBlockage() const
Get area reduction of blocked subchannels.
virtual const std::vector< unsigned int > & getIndexBlockage() const
Get index of blocked subchannels.
virtual const Real & getPinDiameter() const
Return undeformed Pin diameter.
An abstract class for ICs for hexagonal fuel assemblies.
static InputParameters validParams()
const TriSubChannelMesh & _mesh
const Real & getWireDiameter() const
Return wire diameter.
const Real & getDuctToPinGap() const
Return the the gap thickness between the duct and peripheral fuel pins.
unsigned int getSubchannelIndexFromPoint(const Point &p) const override
Return a subchannel index for a given physical point p
const Real & getWireLeadLength() const
Return the wire lead length.
EChannelType getSubchannelType(unsigned int index) const override
Return the type of the subchannel for given subchannel index.
Definition SCM.h:17
const Real pi