https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad > Class Template Reference

#include <CoupledPressureIncompressibleMomentumSPScalarKernel.h>

Inheritance diagram for CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad >:
[legend]

Public Member Functions

 CoupledPressureIncompressibleMomentumSPScalarKernelTempl (const InputParameters &parameters)
 
virtual bool isADObject () const override
 
const Moose::Functor< Real > * defaultFunctor (const std::string &name)
 
const Moose::Functor< ADReal > * defaultFunctor (const std::string &name)
 

Static Public Member Functions

static InputParameters validParams ()
 
static std::string deduceFunctorName (const std::string &name, const InputParameters &params)
 

Protected Member Functions

virtual GenericReal< is_ad > massFlowRate () const override
 
virtual GenericReal< is_ad > pressureDrop () const override
 
virtual Real computeQpJacobian () override
 
virtual GenericReal< is_ad > computeQpResidual () override
 
virtual Real computeQpJacobianMDot ()
 
virtual Real computeQpJacobianDP ()
 
virtual GenericReal< is_ad > computeFrictionFactor (const GenericReal< is_ad > &mu, const GenericReal< is_ad > &G, const GenericReal< is_ad > &Dh, const unsigned int j)
 
std::string deduceFunctorName (const std::string &name) const
 
const Moose::Functor< T > & getFunctor (const std::string &name)
 
const Moose::Functor< T > & getFunctor (const std::string &name, THREAD_ID tid)
 
const Moose::Functor< T > & getFunctor (const std::string &name, SubProblem &subproblem)
 
const Moose::Functor< T > & getFunctor (const std::string &name, SubProblem &subproblem, THREAD_ID tid)
 
bool isFunctor (const std::string &name) const
 
bool isFunctor (const std::string &name, const SubProblem &subproblem) const
 
Moose::ElemArg makeElemArg (const Elem *elem, bool correct_skewnewss=false) const
 
void checkFunctorSupportsSideIntegration (const std::string &name, bool qp_integration)
 
const Moose::Functor< T > & getFunctorByName (const std::string &name)
 

Protected Attributes

const VariableValue & _mc
 Coupled mass flow rate through the flow path.
 
const size_t _n_temps
 Number of coupled temperature variables.
 
std::vector< const VariableValue * > _T
 Coupled temperature variables.
 
const bool _is_implicit
 Property state integration flag.
 
const Moose::Functor< GenericReal< is_ad > > & _Pref
 System reference pressure.
 
const SinglePhaseFluidProperties & _fp
 Fluid properties object.
 
const size_t _n_segments
 Number of geometrically/thermally unique segments.
 
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _areas
 Flow area of each segment.
 
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _perimeters
 Wetted perimeter of each segment.
 
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _lengths
 Length of each segment.
 
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _alphas
 Angle with respect to the horizontal of each segment.
 
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _forms_losses
 Forms loss coefficients of each segment.
 
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _dPps
 Pump pressure gains of each segment.
 
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _roughnesses
 Wall roughness of each segment.
 
const Moose::Functor< GenericReal< is_ad > > & _gravity
 Gravitational acceleration in the vertical downward direction.
 

Private Types

using Base = IncompressibleMomentumSPBaseTempl< is_ad >
 

Private Member Functions

const Moose::Functor< T > * defaultFunctor (const std::string &name)
 
const Moose::Functor< Real > * defaultFunctor (const std::string &name)
 
const Moose::Functor< ADReal > * defaultFunctor (const std::string &name)
 
const Moose::Functor< T > & getFunctorByName (const std::string &name, SubProblem &subproblem, THREAD_ID tid)
 

Private Attributes

const InputParameters & _fi_params
 
const std::string _fi_name
 
SubProblem *const _fi_subproblem
 
const THREAD_ID _fi_tid
 
std::vector< std::unique_ptr< Moose::Functor< Real > > > _default_real_functors
 
std::vector< std::unique_ptr< Moose::Functor< ADReal > > > _default_ad_real_functors
 

Detailed Description

template<bool is_ad>
class CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad >

Definition at line 15 of file CoupledPressureIncompressibleMomentumSPScalarKernel.h.

Member Typedef Documentation

◆ Base

template<bool is_ad>
using CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad >::Base = IncompressibleMomentumSPBaseTempl<is_ad>
private

Constructor & Destructor Documentation

◆ CoupledPressureIncompressibleMomentumSPScalarKernelTempl()

Definition at line 36 of file CoupledPressureIncompressibleMomentumSPScalarKernel.C.

38 : Base(parameters), _mc(ScalarCoupleable::coupledScalarValue("coupled_mass_flow_rate"))
39{
40}
const VariableValue & _mc
Coupled mass flow rate through the flow path.
const VariableValue & coupledScalarValue(const std::string &var_name, unsigned int comp=0) const

Member Function Documentation

◆ computeFrictionFactor()

template<bool is_ad>
GenericReal< is_ad > IncompressibleMomentumSPBaseTempl< is_ad >::computeFrictionFactor ( const GenericReal< is_ad > &  mu,
const GenericReal< is_ad > &  G,
const GenericReal< is_ad > &  Dh,
const unsigned int  j 
)
protectedvirtualinherited

Definition at line 253 of file IncompressibleMomentumSPBase.C.

257{
258 const Moose::ElemArg qp = Moose::ElemArg();
259 const auto state = _is_implicit ? Moose::currentState() : Moose::oldState();
260 const auto Re = abs(G) * Dh / mu;
261 const auto f_lam = 64.0 / Re;
262 const auto f_turb =
263 0.25 / pow((log10((*(_roughnesses[j]))(qp, state) / (Dh * 3.7) + 5.74 / pow(Re, 0.9))), 2);
264 if (Re < 2300.0) // laminar
265 return f_lam;
266 else if (Re > 4000.0) // turbulent using Swamee-Jain approx. of Colebrook-White eq.
267 return f_turb;
268 else // transition, conservative interpolation between the two
269 return std::max((f_turb - f_lam) / 1700 * Re + f_lam, std::max(f_lam, f_turb));
270}
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
const double mu
const double Re
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _roughnesses
Wall roughness of each segment.
const bool _is_implicit
Property state integration flag.
MetaPhysicL::DualNumber< V, D, asd > abs(const MetaPhysicL::DualNumber< V, D, asd > &a)
StateArg oldState()
StateArg currentState()

◆ computeQpJacobian()

template<bool is_ad>
Real CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad >::computeQpJacobian ( )
overrideprotectedvirtual

◆ computeQpJacobianDP()

template<bool is_ad>
Real IncompressibleMomentumSPBaseTempl< is_ad >::computeQpJacobianDP ( )
protectedvirtualinherited

Definition at line 206 of file IncompressibleMomentumSPBase.C.

207{
208 if constexpr (!is_ad)
209 {
210 const Moose::ElemArg qp = Moose::ElemArg();
211 const auto state = _is_implicit ? Moose::currentState() : Moose::oldState();
212 // Global rescale factor, see computeQpResidual()
213 Real L_over_A_sum = 0;
214 for (const auto j : make_range(_n_segments))
215 L_over_A_sum += (*(_lengths[j]))(qp, state) / (*(_areas[j]))(qp, state);
216 const auto inv_L_over_A_sum = 1.0 / L_over_A_sum;
217 // reference pressure drop is subtracted once, scaled by inv_L_over_A_sum, so its derivative is
218 // -inv_L_over_A_sum
219 return -inv_L_over_A_sum;
220 }
221 else
222 {
223 mooseError("computeQpJacobian() should not be called in AD mode");
224 return 0;
225 }
226}
void mooseError(Args &&... args)
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _lengths
Length of each segment.
const size_t _n_segments
Number of geometrically/thermally unique segments.
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _areas
Flow area of each segment.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)

◆ computeQpJacobianMDot()

template<bool is_ad>
Real IncompressibleMomentumSPBaseTempl< is_ad >::computeQpJacobianMDot ( )
protectedvirtualinherited

Definition at line 164 of file IncompressibleMomentumSPBase.C.

165{
166 if constexpr (!is_ad)
167 {
168 Real momentum_jacob = 0;
169 const Moose::ElemArg qp = Moose::ElemArg();
170 const int i = 0;
171 const auto state = _is_implicit ? Moose::currentState() : Moose::oldState();
172 // start by getting global fluid properties
173 const auto Tave = ((*(_T[0]))[i] + (*(_T[_n_temps - 1]))[i]) / 2;
174 const auto mu = _fp.mu_from_p_T(_Pref(qp, state), Tave);
175 const auto rhog = _fp.rho_from_p_T(_Pref(qp, state), Tave);
176 // Global rescale factor, see computeQpResidual()
177 Real L_over_A_sum = 0;
178 for (const auto j : make_range(_n_segments))
179 L_over_A_sum += (*(_lengths[j]))(qp, state) / (*(_areas[j]))(qp, state);
180 const auto inv_L_over_A_sum = 1.0 / L_over_A_sum;
181 // loop over segments
182 for (const auto j : make_range(_n_segments))
183 {
184 // Decide flow regime for friction factor
185 const auto Dh = 4.0 * (*(_areas[j]))(qp, state) / (*(_perimeters[j]))(qp, state);
186 const auto G = massFlowRate() / (*(_areas[j]))(qp, state);
187 const auto fd = computeFrictionFactor(mu, G, Dh, j);
188 // Friction
189 momentum_jacob +=
190 fd * (*(_lengths[j]))(qp, state) / Dh * G / rhog / (*(_areas[j]))(qp, state);
191 // Form losses
192 momentum_jacob += (*(_forms_losses[j]))(qp, state) * G / rhog / (*(_areas[j]))(qp, state);
193 }
194
195 return momentum_jacob * inv_L_over_A_sum;
196 }
197 else
198 {
199 mooseError("computeQpJacobian() should not be called in AD mode");
200 return 0;
201 }
202}
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _forms_losses
Forms loss coefficients of each segment.
const size_t _n_temps
Number of coupled temperature variables.
std::vector< const VariableValue * > _T
Coupled temperature variables.
const Moose::Functor< GenericReal< is_ad > > & _Pref
System reference pressure.
virtual GenericReal< is_ad > computeFrictionFactor(const GenericReal< is_ad > &mu, const GenericReal< is_ad > &G, const GenericReal< is_ad > &Dh, const unsigned int j)
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _perimeters
Wetted perimeter of each segment.
virtual GenericReal< is_ad > massFlowRate() const =0
const SinglePhaseFluidProperties & _fp
Fluid properties object.

◆ computeQpResidual()

template<bool is_ad>
GenericReal< is_ad > IncompressibleMomentumSPBaseTempl< is_ad >::computeQpResidual ( )
overrideprotectedvirtualinherited

Definition at line 120 of file IncompressibleMomentumSPBase.C.

121{
122 GenericReal<is_ad> momentum_residual = 0;
123 const Moose::ElemArg qp = Moose::ElemArg();
124 const int i = 0;
125 const auto state = _is_implicit ? Moose::currentState() : Moose::oldState();
126 // start by getting global fluid properties
127 const auto Tave = ((*(_T[0]))[i] + (*(_T[_n_temps - 1]))[i]) / 2;
128 const auto mu = _fp.mu_from_p_T(_Pref(qp, state), Tave);
129 const auto rhog = _fp.rho_from_p_T(_Pref(qp, state), Tave);
130 // Global rescale factor so the mass flow rate's transient term has a unit coefficient,
131 // matching the coefficient of ODETimeDerivative kernel: the path's lumped L_over_A_sum is
132 // Sum_j(length_j / area_j), so the whole equation is divided through by that single sum.
133 GenericReal<is_ad> L_over_A_sum = 0;
134 for (const auto j : make_range(_n_segments))
135 L_over_A_sum += (*(_lengths[j]))(qp, state) / (*(_areas[j]))(qp, state);
136 const auto inv_L_over_A_sum = 1.0 / L_over_A_sum;
137 // loop over segments
138 for (const auto j : make_range(_n_segments))
139 {
140 // Decide flow regime for friction factor
141 const auto Dh = 4.0 * (*(_areas[j]))(qp, state) / (*(_perimeters[j]))(qp, state);
142 const auto G = massFlowRate() / (*(_areas[j]))(qp, state);
143 const auto fd = computeFrictionFactor(mu, G, Dh, j);
144 // Friction
145 momentum_residual += fd * (*(_lengths[j]))(qp, state) / Dh * G * abs(G) / 2.0 / rhog;
146 // Form losses
147 momentum_residual += (*(_forms_losses[j]))(qp, state) * G * abs(G) / 2.0 / rhog;
148 // Gravity
149 // get local density for natural circulation aspect
150 auto rhol = _fp.rho_from_p_T(_Pref(qp, state), (*(_T[j]))[i]);
151 momentum_residual +=
152 rhol * _gravity(qp, state) * (*(_lengths[j]))(qp, state) * sin((*(_alphas[j]))(qp, state));
153 // Pump pressure
154 momentum_residual -= (*(_dPps[j]))(qp, state);
155 }
156 // Pressure drop (single path-wide unknown, applied once)
157 momentum_residual += pressureDrop();
158
159 return momentum_residual * inv_L_over_A_sum;
160}
Moose::GenericType< Real, is_ad > GenericReal
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _alphas
Angle with respect to the horizontal of each segment.
std::vector< const Moose::Functor< GenericReal< is_ad > > * > _dPps
Pump pressure gains of each segment.
virtual GenericReal< is_ad > pressureDrop() const =0
const Moose::Functor< GenericReal< is_ad > > & _gravity
Gravitational acceleration in the vertical downward direction.
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sin(_arg) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tan

◆ isADObject()

template<bool is_ad>
virtual bool CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad >::isADObject ( ) const
inlineoverridevirtual

Reimplemented from IncompressibleMomentumSPBaseTempl< is_ad >.

Definition at line 22 of file CoupledPressureIncompressibleMomentumSPScalarKernel.h.

22{ return is_ad; };

◆ massFlowRate()

template<bool is_ad>
virtual GenericReal< is_ad > CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad >::massFlowRate ( ) const
inlineoverrideprotectedvirtual

◆ pressureDrop()

template<bool is_ad>
virtual GenericReal< is_ad > CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad >::pressureDrop ( ) const
inlineoverrideprotectedvirtual

Implements IncompressibleMomentumSPBaseTempl< is_ad >.

Definition at line 27 of file CoupledPressureIncompressibleMomentumSPScalarKernel.h.

27{ return -Base::_u[0]; };

◆ validParams()

template<bool is_ad>
InputParameters CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad >::validParams ( )
static

Definition at line 21 of file CoupledPressureIncompressibleMomentumSPScalarKernel.C.

22{
25 params.addClassDescription("Implements a generic momentum solve over a 1D flow path, acting on "
26 "the reference pressure drop.");
27 params.addCoupledVar("coupled_mass_flow_rate",
28 {},
29 "coupled_mass_flow_rate. Takes a "
30 "scalar variable name");
31
32 return params;
33}
static InputParameters validParams()
void addClassDescription(const std::string &doc_string)
void addCoupledVar(const std::string &name, const std::string &doc_string)

Member Data Documentation

◆ _alphas

template<bool is_ad>
std::vector<const Moose::Functor<GenericReal<is_ad> > *> IncompressibleMomentumSPBaseTempl< is_ad >::_alphas
protectedinherited

Angle with respect to the horizontal of each segment.

Definition at line 60 of file IncompressibleMomentumSPBase.h.

Referenced by IncompressibleMomentumSPBaseTempl< is_ad >::IncompressibleMomentumSPBaseTempl().

◆ _areas

template<bool is_ad>
std::vector<const Moose::Functor<GenericReal<is_ad> > *> IncompressibleMomentumSPBaseTempl< is_ad >::_areas
protectedinherited

Flow area of each segment.

Definition at line 54 of file IncompressibleMomentumSPBase.h.

Referenced by IncompressibleMomentumSPBaseTempl< is_ad >::IncompressibleMomentumSPBaseTempl().

◆ _dPps

template<bool is_ad>
std::vector<const Moose::Functor<GenericReal<is_ad> > *> IncompressibleMomentumSPBaseTempl< is_ad >::_dPps
protectedinherited

Pump pressure gains of each segment.

Definition at line 64 of file IncompressibleMomentumSPBase.h.

Referenced by IncompressibleMomentumSPBaseTempl< is_ad >::IncompressibleMomentumSPBaseTempl().

◆ _forms_losses

template<bool is_ad>
std::vector<const Moose::Functor<GenericReal<is_ad> > *> IncompressibleMomentumSPBaseTempl< is_ad >::_forms_losses
protectedinherited

Forms loss coefficients of each segment.

Definition at line 62 of file IncompressibleMomentumSPBase.h.

Referenced by IncompressibleMomentumSPBaseTempl< is_ad >::IncompressibleMomentumSPBaseTempl().

◆ _fp

template<bool is_ad>
const SinglePhaseFluidProperties& IncompressibleMomentumSPBaseTempl< is_ad >::_fp
protectedinherited

Fluid properties object.

Definition at line 50 of file IncompressibleMomentumSPBase.h.

◆ _gravity

template<bool is_ad>
const Moose::Functor<GenericReal<is_ad> >& IncompressibleMomentumSPBaseTempl< is_ad >::_gravity
protectedinherited

Gravitational acceleration in the vertical downward direction.

Definition at line 68 of file IncompressibleMomentumSPBase.h.

◆ _is_implicit

template<bool is_ad>
const bool IncompressibleMomentumSPBaseTempl< is_ad >::_is_implicit
protectedinherited

Property state integration flag.

Definition at line 46 of file IncompressibleMomentumSPBase.h.

◆ _lengths

template<bool is_ad>
std::vector<const Moose::Functor<GenericReal<is_ad> > *> IncompressibleMomentumSPBaseTempl< is_ad >::_lengths
protectedinherited

◆ _mc

template<bool is_ad>
const VariableValue& CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad >::_mc
protected

Coupled mass flow rate through the flow path.

Definition at line 30 of file CoupledPressureIncompressibleMomentumSPScalarKernel.h.

Referenced by CoupledPressureIncompressibleMomentumSPScalarKernelTempl< is_ad >::massFlowRate().

◆ _n_segments

template<bool is_ad>
const size_t IncompressibleMomentumSPBaseTempl< is_ad >::_n_segments
protectedinherited

Number of geometrically/thermally unique segments.

Definition at line 52 of file IncompressibleMomentumSPBase.h.

Referenced by IncompressibleMomentumSPBaseTempl< is_ad >::IncompressibleMomentumSPBaseTempl().

◆ _n_temps

template<bool is_ad>
const size_t IncompressibleMomentumSPBaseTempl< is_ad >::_n_temps
protectedinherited

Number of coupled temperature variables.

Definition at line 42 of file IncompressibleMomentumSPBase.h.

Referenced by IncompressibleMomentumSPBaseTempl< is_ad >::IncompressibleMomentumSPBaseTempl().

◆ _perimeters

template<bool is_ad>
std::vector<const Moose::Functor<GenericReal<is_ad> > *> IncompressibleMomentumSPBaseTempl< is_ad >::_perimeters
protectedinherited

Wetted perimeter of each segment.

Definition at line 56 of file IncompressibleMomentumSPBase.h.

Referenced by IncompressibleMomentumSPBaseTempl< is_ad >::IncompressibleMomentumSPBaseTempl().

◆ _Pref

template<bool is_ad>
const Moose::Functor<GenericReal<is_ad> >& IncompressibleMomentumSPBaseTempl< is_ad >::_Pref
protectedinherited

System reference pressure.

Definition at line 48 of file IncompressibleMomentumSPBase.h.

◆ _roughnesses

template<bool is_ad>
std::vector<const Moose::Functor<GenericReal<is_ad> > *> IncompressibleMomentumSPBaseTempl< is_ad >::_roughnesses
protectedinherited

Wall roughness of each segment.

Definition at line 66 of file IncompressibleMomentumSPBase.h.

Referenced by IncompressibleMomentumSPBaseTempl< is_ad >::IncompressibleMomentumSPBaseTempl().

◆ _T

template<bool is_ad>
std::vector<const VariableValue *> IncompressibleMomentumSPBaseTempl< is_ad >::_T
protectedinherited

Coupled temperature variables.

Definition at line 44 of file IncompressibleMomentumSPBase.h.

Referenced by IncompressibleMomentumSPBaseTempl< is_ad >::IncompressibleMomentumSPBaseTempl().


The documentation for this class was generated from the following files: