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 : #include "ADRDG3EqnMaterial.h" 11 : #include "SinglePhaseFluidProperties.h" 12 : #include "THMIndicesVACE.h" 13 : #include "FlowModel1PhaseUtils.h" 14 : 15 : registerMooseObject("ThermalHydraulicsApp", ADRDG3EqnMaterial); 16 : 17 : InputParameters 18 18658 : ADRDG3EqnMaterial::validParams() 19 : { 20 18658 : InputParameters params = Material::validParams(); 21 18658 : params += SlopeReconstruction1DInterface<true>::validParams(); 22 : 23 18658 : params.addClassDescription( 24 : "Reconstructed solution values for the 1-D, 1-phase, variable-area Euler equations"); 25 : 26 37316 : params.addRequiredCoupledVar("A_elem", "Cross-sectional area, elemental"); 27 37316 : params.addRequiredCoupledVar("A_linear", "Cross-sectional area, linear"); 28 37316 : params.addRequiredCoupledVar("rhoA", "Conserved variable: rho*A"); 29 37316 : params.addRequiredCoupledVar("rhouA", "Conserved variable: rho*u*A"); 30 37316 : params.addRequiredCoupledVar("rhoEA", "Conserved variable: rho*E*A"); 31 : 32 37316 : params.addRequiredParam<MaterialPropertyName>("direction", 33 : "Flow channel direction material property name"); 34 : 35 37316 : params.addRequiredParam<UserObjectName>("fluid_properties", 36 : "Name of fluid properties user object"); 37 : 38 18658 : return params; 39 0 : } 40 : 41 14610 : ADRDG3EqnMaterial::ADRDG3EqnMaterial(const InputParameters & parameters) 42 : : Material(parameters), 43 : SlopeReconstruction1DInterface<true>(this), 44 : 45 14610 : _A_avg(adCoupledValue("A_elem")), 46 14610 : _A_linear(adCoupledValue("A_linear")), 47 14610 : _rhoA_avg(adCoupledValue("rhoA")), 48 14610 : _rhouA_avg(adCoupledValue("rhouA")), 49 14610 : _rhoEA_avg(adCoupledValue("rhoEA")), 50 : 51 14610 : _A_var(getVar("A_elem", 0)), 52 14610 : _rhoA_var(getVar("rhoA", 0)), 53 14610 : _rhouA_var(getVar("rhouA", 0)), 54 14610 : _rhoEA_var(getVar("rhoEA", 0)), 55 : 56 29220 : _dir(getMaterialProperty<RealVectorValue>("direction")), 57 : 58 14610 : _rhoA(declareADProperty<Real>("rhoA")), 59 14610 : _rhouA(declareADProperty<Real>("rhouA")), 60 14610 : _rhoEA(declareADProperty<Real>("rhoEA")), 61 : 62 29220 : _fp(getUserObject<SinglePhaseFluidProperties>("fluid_properties")) 63 : { 64 14610 : _U_vars.resize(THMVACE1D::N_FLUX_INPUTS); 65 14610 : _U_vars[THMVACE1D::RHOA] = _rhoA_var; 66 14610 : _U_vars[THMVACE1D::RHOUA] = _rhouA_var; 67 14610 : _U_vars[THMVACE1D::RHOEA] = _rhoEA_var; 68 14610 : _U_vars[THMVACE1D::AREA] = _A_var; 69 14610 : } 70 : 71 : void 72 25330329 : ADRDG3EqnMaterial::computeQpProperties() 73 : { 74 25330329 : if (_scheme == None) 75 : { 76 20272230 : const auto A_ratio = _A_linear[_qp] / _A_avg[_qp]; 77 40544460 : _rhoA[_qp] = _rhoA_avg[_qp] * A_ratio; 78 40544460 : _rhouA[_qp] = _rhouA_avg[_qp] * A_ratio; 79 40544460 : _rhoEA[_qp] = _rhoEA_avg[_qp] * A_ratio; 80 : } 81 : else 82 : { 83 : // compute primitive variables from the cell-average solution 84 5058099 : std::vector<ADReal> U_avg(THMVACE1D::N_FLUX_INPUTS, 0.0); 85 5058099 : U_avg[THMVACE1D::RHOA] = _rhoA_avg[_qp]; 86 5058099 : U_avg[THMVACE1D::RHOUA] = _rhouA_avg[_qp]; 87 5058099 : U_avg[THMVACE1D::RHOEA] = _rhoEA_avg[_qp]; 88 5058099 : U_avg[THMVACE1D::AREA] = _A_avg[_qp]; 89 5058099 : auto W = FlowModel1PhaseUtils::computePrimitiveSolutionVector<true>(U_avg, _fp); 90 : 91 : // compute and apply slopes to primitive variables 92 5058099 : const auto slopes = getElementSlopes(_current_elem); 93 5058099 : const auto delta_x = (_q_point[_qp] - _current_elem->vertex_average()) * _dir[_qp]; 94 20232396 : for (unsigned int m = 0; m < THMVACE1D::N_PRIM_VARS; m++) 95 30348594 : W[m] = W[m] + slopes[m] * delta_x; 96 : 97 : // compute reconstructed conservative variables 98 : const auto U = 99 5058099 : FlowModel1PhaseUtils::computeConservativeSolutionVector<true>(W, _A_linear[_qp], _fp); 100 5058099 : _rhoA[_qp] = U[THMVACE1D::RHOA]; 101 5058099 : _rhouA[_qp] = U[THMVACE1D::RHOUA]; 102 5058099 : _rhoEA[_qp] = U[THMVACE1D::RHOEA]; 103 5058099 : } 104 25330329 : } 105 : 106 : std::vector<ADReal> 107 14697161 : ADRDG3EqnMaterial::computeElementPrimitiveVariables(const Elem * elem) const 108 : { 109 : const auto U = 110 14697161 : FlowModel1PhaseUtils::getElementalSolutionVector<true>(elem, _U_vars, _is_implicit); 111 29394322 : return FlowModel1PhaseUtils::computePrimitiveSolutionVector<true>(U, _fp); 112 14697161 : }