Line data Source code
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 : #pragma once 11 : 12 : #include "FlowModel.h" 13 : 14 : /** 15 : * Base class for a flow model for a single-phase fluid 16 : */ 17 : class FlowModel1PhaseBase : public FlowModel 18 : { 19 : public: 20 : static InputParameters validParams(); 21 : 22 : FlowModel1PhaseBase(const InputParameters & params); 23 : 24 : virtual void addVariables() override; 25 : virtual void addInitialConditions() override; 26 : virtual void addMooseObjects() override; 27 : 28 : protected: 29 : // Methods to get scaling factors for rhoA, rhouA, and rhoEA 30 : virtual Real getScalingFactorRhoA() const = 0; 31 : virtual Real getScalingFactorRhoUA() const = 0; 32 : virtual Real getScalingFactorRhoEA() const = 0; 33 : 34 : /// Returns the solution variable names for the flow model 35 : virtual std::vector<VariableName> solutionVariableNames() const = 0; 36 : 37 : /// Returns true if all of the IC parameters are valid 38 : bool ICParametersAreValid() const; 39 : /// Adds an IC from a function 40 : void addFunctionIC(const VariableName & var_name, const FunctionName & function_name); 41 : // various ICs 42 : virtual void addRhoAIC(); 43 : virtual void addRhoUAIC(); 44 : virtual void addRhoEAIC() = 0; 45 : virtual void addVelocityIC(); 46 : virtual void addDensityIC() = 0; 47 : virtual void addSpecificVolumeIC(); 48 : virtual void addSpecificInternalEnergyIC(); 49 : virtual void addSpecificTotalEnthalpyIC(); 50 : 51 : /// Adds the kernels 52 : virtual void addKernels(); 53 : /// Adds a time derivative kernel for the given variable if problem is transient 54 : void addTimeDerivativeKernelIfTransient(const VariableName & var_name); 55 : // various kernels 56 : virtual void addMomentumAreaGradientKernel(); 57 : virtual void addMomentumFrictionKernel(); 58 : virtual void addMomentumGravityKernel(); 59 : virtual void addEnergyGravityKernel(); 60 : 61 : /// Adds the DG kernels 62 : virtual void addDGKernels(); 63 : 64 : /// Adds the aux kernels 65 : virtual void addAuxKernels(); 66 : // various aux kernels 67 : virtual void addPressureAux() = 0; 68 : virtual void addTemperatureAux() = 0; 69 : virtual void addVelocityAux(); 70 : virtual void addDensityAux(); 71 : virtual void addSpecificVolumeAux(); 72 : virtual void addSpecificInternalEnergyAux(); 73 : virtual void addSpecificTotalEnthalpyAux(); 74 : 75 : /// Adds the functor materials 76 19 : virtual void addFunctorMaterials() {} 77 : void addVariableStepFunctorMaterial(const std::string & variable); 78 : 79 : /// Adds materials to compute fluid properties 80 : virtual void addFluidPropertiesMaterials() = 0; 81 : 82 : /// Adds numerical flux user object 83 : virtual void addNumericalFluxUserObject() = 0; 84 : /// Adds RDG objects 85 : virtual void addRDGMooseObjects(); 86 : /// Adds slope reconstruction material 87 : virtual void addSlopeReconstructionMaterial() = 0; 88 : /// Adds DG kernels 89 : virtual void addRDGAdvectionDGKernels() = 0; 90 : 91 : /// Adds post-processors 92 19 : virtual void addPostprocessors() {} 93 : void addNormalizedVariableStepPP(const std::string & variable, Real normalization); 94 : void addNormalized1PhaseResidualNorm(const VariableName & variable, const std::string & equation); 95 : 96 : /// Slope reconstruction type for rDG 97 : const MooseEnum _rdg_slope_reconstruction; 98 : 99 : /// Numerical flux user object name 100 : const UserObjectName _numerical_flux_name; 101 : 102 : // Reference quantities for normalization 103 : const Real _p_ref; 104 : const Real _T_ref; 105 : const Real _vel_ref; 106 : 107 : // Flow channel start, end, and mid points 108 : const Point _start_point; 109 : const Point _end_point; 110 : const Point _mid_point; 111 : };