Advanced Multi-Physics (AMP)
On-Line Documentation
SubchannelTwoEqLinearOperator.h
Go to the documentation of this file.
1
2#ifndef included_AMP_SubchannelTwoEqLinearOperator
3#define included_AMP_SubchannelTwoEqLinearOperator
4
5#include "AMP/operators/LinearOperator.h"
6#include "AMP/operators/subchannel/SubchannelOperatorParameters.h"
7#include "AMP/operators/subchannel/SubchannelPhysicsModel.h"
8
9
10namespace AMP::Operator {
11
12
19{
20public:
21 typedef std::unique_ptr<AMP::Mesh::MeshElement> ElementPtr;
22
24 explicit SubchannelTwoEqLinearOperator( std::shared_ptr<const OperatorParameters> params );
25
28
30 std::string type() const override { return "SubchannelTwoEqLinearOperator"; }
31
32 void reset( std::shared_ptr<const OperatorParameters> params ) override;
33
39
41 auto getParams() { return d_params; }
42
43protected:
44 std::shared_ptr<const SubchannelOperatorParameters> d_params;
45
46 // subchannel physics model
47 std::shared_ptr<SubchannelPhysicsModel> d_subchannelPhysicsModel;
48
49 // frozen vector
51
52private:
54
55 double d_Pout; // exit pressure [Pa]
56 double d_Tin; // inlet temperature [K]
57 double d_mass; // inlet global mass flow rate [kg/s]
58 double d_gamma; // fission heating coefficient
59 double d_theta; // channel angle [rad]
60 double d_Q; // rod power
61 double d_reynolds; // reynolds number
62 double d_prandtl; // prandtl number
63
64 std::string d_frictionModel; // friction model
65 double d_friction; // friction factor
66 double d_roughness; // surface roughness [m]
67
68 std::vector<double> d_channelDiam; // Channel hydraulic diameter using the wetted perimeter
69 std::vector<double> d_channelArea; // Channel flow area
70 std::vector<double> d_rodDiameter; // Average rod diameter for each subchannel
71 std::vector<double> d_rodFraction; // Fraction of a rod in each subchannel
72 std::vector<double> d_channelMass; // Mass flow rate for each subchannel [kg/s]
73
74 size_t d_NGrid; // number of grid spacers
75 std::vector<double> d_zMinGrid; // z min positions of each grid spacer
76 std::vector<double> d_zMaxGrid; // z max positions of each grid spacer
77 std::vector<double> d_lossGrid; // loss coefficients for each grid spacer
78
79 std::string d_source; // heat source type
80 std::string d_heatShape; // heat shape used if heat source type is "totalHeatGeneration"
81
82 // static const double d_machinePrecision = 1.0e-15; // machine precision; used in
83 // perturbation for derivatives
84 const double d_machinePrecision; // static const double is not allowed in iso c++11
85 // either remove static or use std::numeric_limits<T>
86 // by qdi june 14
87
88 // Derivative of enthalpy with respect to pressure
89 double dhdp( double, double );
90
91 // Derivative of specific volume with respect to enthalpy
92 double dvdh( double, double );
93
94 // Derivative of specific volume with respect to pressure
95 double dvdp( double, double );
96
97 // Friction function
98 double friction( double h_minus,
99 double p_minus,
100 double h_plus,
101 double p_plus,
102 double mass,
103 double A,
104 double D );
105
106 // Derivatives of friction with respect to lower and upper enthalpy and pressure
107 double dfdh_lower( double h_minus,
108 double p_minus,
109 double h_plus,
110 double p_plus,
111 double mass,
112 double A,
113 double D );
114 double dfdh_upper( double h_minus,
115 double p_minus,
116 double h_plus,
117 double p_plus,
118 double mass,
119 double A,
120 double D );
121 double dfdp_lower( double h_minus,
122 double p_minus,
123 double h_plus,
124 double p_plus,
125 double mass,
126 double A,
127 double D );
128 double dfdp_upper( double h_minus,
129 double p_minus,
130 double h_plus,
131 double p_plus,
132 double mass,
133 double A,
134 double D );
135
136 std::vector<double> d_x, d_y, d_z;
137 std::vector<bool> d_ownSubChannel; // Which subchannels do I own
138 std::vector<std::vector<ElementPtr>> d_subchannelElem; // List of elements in each subchannel
139 std::vector<std::vector<ElementPtr>>
140 d_subchannelFace; // List of z-face elements in each subchannel
141 int getSubchannelIndex( double x, double y );
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< AMP::Operator::Operator > shared_ptr
Definition Operator.h:29
double dfdh_lower(double h_minus, double p_minus, double h_plus, double p_plus, double mass, double A, double D)
std::vector< std::vector< ElementPtr > > d_subchannelFace
void reset(std::shared_ptr< const OperatorParameters > params) override
SubchannelTwoEqLinearOperator(std::shared_ptr< const OperatorParameters > params)
Constructor.
std::string type() const override
Return the name of the operator.
double dfdp_upper(double h_minus, double p_minus, double h_plus, double p_plus, double mass, double A, double D)
double dfdh_upper(double h_minus, double p_minus, double h_plus, double p_plus, double mass, double A, double D)
std::shared_ptr< const SubchannelOperatorParameters > d_params
double dfdp_lower(double h_minus, double p_minus, double h_plus, double p_plus, double mass, double A, double D)
AMP::LinearAlgebra::Vector::shared_ptr d_frozenVec
std::vector< std::vector< ElementPtr > > d_subchannelElem
auto getParams()
Get the current operator parameters.
std::unique_ptr< AMP::Mesh::MeshElement > ElementPtr
std::shared_ptr< SubchannelPhysicsModel > d_subchannelPhysicsModel
void setFrozenVector(AMP::LinearAlgebra::Vector::shared_ptr frozenVec)
Sets frozen vector.
double friction(double h_minus, double p_minus, double h_plus, double p_plus, double mass, double A, double D)



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