Advanced Multi-Physics (AMP)
On-Line Documentation
SubchannelFourEqLinearOperator.h
Go to the documentation of this file.
1
2#ifndef included_AMP_SubchannelFourEqLinearOperator
3#define included_AMP_SubchannelFourEqLinearOperator
4
5#include "AMP/operators/LinearOperator.h"
6#include "AMP/operators/subchannel/SubchannelOperatorParameters.h"
7
8
9namespace AMP::Operator {
10
16{
17public:
18 typedef std::unique_ptr<AMP::Mesh::MeshElement> ElementPtr;
19
21 explicit SubchannelFourEqLinearOperator( std::shared_ptr<const OperatorParameters> params );
22
25
27 std::string type() const override { return "SubchannelFourEqLinearOperator"; }
28
29 void reset( std::shared_ptr<const OperatorParameters> params ) override;
30
31 std::shared_ptr<AMP::LinearAlgebra::VectorSelector> selectOutputVector() const override;
32
33 std::shared_ptr<AMP::LinearAlgebra::VectorSelector> selectInputVector() const override;
34
40
42 std::shared_ptr<SubchannelPhysicsModel> getSubchannelPhysicsModel()
43 {
45 }
46
48 double getInletTemperature() { return d_Tin; }
49
51 double getOutletPressure() { return d_Pout; }
52
54 auto getParams() { return d_params; }
55
57 void getLateralFaces( std::shared_ptr<AMP::Mesh::Mesh>,
58 std::map<AMP::Mesh::Point, ElementPtr> &,
59 std::map<AMP::Mesh::Point, ElementPtr> & );
60
62 std::map<AMP::Mesh::Point, double> getGapWidths( std::shared_ptr<AMP::Mesh::Mesh>,
63 const std::vector<double> &,
64 const std::vector<double> &,
65 const std::vector<double> & );
66
68
69 void fillSubchannelGrid( std::shared_ptr<AMP::Mesh::Mesh> ); // function to fill the subchannel
70 // data for all processors
71
72 int getSubchannelIndex( double x,
73 double y ); // function to give unique index for each subchannel
74
75protected:
77 std::shared_ptr<OperatorParameters>
79
80 std::shared_ptr<const SubchannelOperatorParameters> d_params;
81
82 std::shared_ptr<SubchannelPhysicsModel> d_subchannelPhysicsModel;
83
84private:
86
87 std::shared_ptr<AMP::LinearAlgebra::Vector> d_cladTemperature;
88 std::shared_ptr<AMP::LinearAlgebra::Vector> d_frozenVec;
89
90 bool d_forceNoConduction; // option to force conduction terms to zero; used for testing
91 bool d_forceNoTurbulence; // option to force turbulence terms to zero; used for testing
92 bool d_forceNoHeatSource; // option to force heat source terms to zero; used for testing
93 bool
94 d_forceNoFriction; // option to force friction and form loss terms to zero; used for testing
95
96 double d_Pout; // exit pressure [Pa]
97 double d_Tin; // inlet temperature [K]
98 double d_mass; // inlet global mass flow rate [kg/s]
99 double d_win; // inlet lateral mass flow rate [kg/s]
100 double d_gamma; // fission heating coefficient
101 double d_theta; // channel angle [rad]
102 double d_turbulenceCoef; // proportionality constant relating turbulent momentum to turbulent
103 // energy transport
104 double d_reynolds; // reynolds number
105 double d_prandtl; // prandtl number
106 double d_KG; // lateral form loss coefficient
107
108 std::string d_frictionModel; // friction model
109 double d_friction; // friction factor
110 double d_roughness; // surface roughness [m]
111
112 std::vector<double> d_channelDiam; // Channel hydraulic diameter using the wetted perimeter
113 std::vector<double> d_channelArea; // Channel flow area
114 std::vector<double> d_rodDiameter; // Average rod diameter for each subchannel
115 std::vector<double> d_rodFraction; // Fraction of a rod in each subchannel
116 std::vector<double> d_channelMass; // Mass flow rate for each subchannel [kg/s]
117
118 size_t d_NGrid; // number of grid spacers
119 std::vector<double> d_zMinGrid; // z min positions of each grid spacer
120 std::vector<double> d_zMaxGrid; // z max positions of each grid spacer
121 std::vector<double> d_lossGrid; // loss coefficients for each grid spacer
122
123 std::string d_source; // heat source type
124 std::string d_heatShape; // heat shape used if heat source type is "totalHeatGeneration"
125 double d_Q; // (sum of rod powers)/4 for each subchannel
126 std::vector<double> d_QFraction; // fraction of max rod power in each subchannel
127
128 std::vector<double> d_x, d_y, d_z;
129 std::vector<bool> d_ownSubChannel; // does this processor own this subchannel (multiple
130 // processors may own a subchannel)?
131 std::vector<std::vector<ElementPtr>> d_subchannelElem; // List of elements in each subchannel
132 std::vector<std::vector<ElementPtr>>
133 d_subchannelFace; // List of z-face elements in each subchannel
134 size_t d_numSubchannels; // number of subchannels
135
136 double Volume( double, double ); // evaluates specific volume
137 double Temperature( double, double ); // evaluates temperature
138 double DynamicViscosity( double, double ); // evaluates dynamic viscosity
139
142 const std::map<AMP::Mesh::Point, ElementPtr> & );
143};
144} // namespace AMP::Operator
145
146#endif
std::shared_ptr< Vector > shared_ptr
Shorthand for shared pointer to Vector.
Definition Vector.h:60
std::shared_ptr< const Vector > const_shared_ptr
Definition Vector.h:65
std::shared_ptr< AMP::Operator::Operator > shared_ptr
Definition Operator.h:29
void reset(std::shared_ptr< const OperatorParameters > params) override
std::unique_ptr< AMP::Mesh::MeshElement > ElementPtr
std::shared_ptr< OperatorParameters > getJacobianParameters(AMP::LinearAlgebra::Vector::const_shared_ptr u) override
Gets parameters from nonlinear operator for use in linear operator.
std::shared_ptr< AMP::LinearAlgebra::VectorSelector > selectOutputVector() const override
Return the selector for output vectors.
void fillSubchannelGrid(std::shared_ptr< AMP::Mesh::Mesh >)
std::map< AMP::Mesh::Point, double > getGapWidths(std::shared_ptr< AMP::Mesh::Mesh >, const std::vector< double > &, const std::vector< double > &, const std::vector< double > &)
Makes map of gap widths to their xy positions.
ElementPtr getAxiallyAdjacentLateralFace(const AMP::Mesh::MeshElement *, const AMP::Mesh::MeshElement &, const std::map< AMP::Mesh::Point, ElementPtr > &)
std::shared_ptr< AMP::LinearAlgebra::Vector > d_cladTemperature
std::shared_ptr< const SubchannelOperatorParameters > d_params
std::shared_ptr< SubchannelPhysicsModel > getSubchannelPhysicsModel()
Get the element physics model.
std::shared_ptr< SubchannelPhysicsModel > d_subchannelPhysicsModel
void getAxialFaces(const AMP::Mesh::MeshElement &, ElementPtr &, ElementPtr &)
std::vector< std::vector< ElementPtr > > d_subchannelElem
std::shared_ptr< AMP::LinearAlgebra::Vector > d_frozenVec
void setFrozenVector(AMP::LinearAlgebra::Vector::shared_ptr frozenVec)
Sets frozen solution vector.
void getLateralFaces(std::shared_ptr< AMP::Mesh::Mesh >, std::map< AMP::Mesh::Point, ElementPtr > &, std::map< AMP::Mesh::Point, ElementPtr > &)
Makes map of lateral gaps to their centroids.
SubchannelFourEqLinearOperator(std::shared_ptr< const OperatorParameters > params)
Constructor.
std::vector< std::vector< ElementPtr > > d_subchannelFace
double getInletTemperature()
Get the Inlet Temperature [K].
auto getParams()
Get the current operator parameters.
std::shared_ptr< AMP::LinearAlgebra::VectorSelector > selectInputVector() const override
Return the selector for input vectors.
std::string type() const override
Return the name of the operator.
double getOutletPressure()
Get the Outlet Pressure [Pa].



Advanced Multi-Physics (AMP)
Oak Ridge National Laboratory
Idaho National Laboratory
Los Alamos National Laboratory
This page automatically produced from the
source code by doxygen
Last updated: Tue Mar 10 2026 13:06:41.
Comments on this page