https://mooseframework.inl.gov
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
TestNumericalFlux3EqnHLLC Class Reference

Tests NumericalFlux3EqnHLLC. More...

#include <TestNumericalFlux3EqnHLLC.h>

Inheritance diagram for TestNumericalFlux3EqnHLLC:
[legend]

Public Member Functions

 TestNumericalFlux3EqnHLLC ()
 

Protected Member Functions

virtual const NumericalFlux1DcreateFluxObject () override
 Creates the flux object to be tested. More...
 
virtual std::vector< std::pair< std::vector< ADReal >, std::vector< ADReal > > > getPrimitiveSolutionsSymmetryTest () const override
 Gets a vector of pairs of primitive solution vectors to use for symmetry test. More...
 
virtual std::vector< std::vector< ADReal > > getPrimitiveSolutionsConsistencyTest () const override
 Gets a vector of primitive solution vectors to use for consistency test. More...
 
virtual std::vector< ADRealcomputeConservativeSolution (const std::vector< ADReal > &W, const ADReal &A) const override
 Computes the conservative solution from the primitive solution. More...
 
virtual std::vector< ADRealcomputeFluxFromPrimitive (const std::vector< ADReal > &W, const ADReal &A) const override
 Computes the 1D flux vector from the primitive solution. More...
 
const SinglePhaseFluidPropertiesgetFluidPropertiesObject ()
 Builds and gets the fluid properties user object. More...
 
void testConsistency ()
 Runs the consistency test(s) More...
 
void testSymmetry ()
 Runs the symmetry test(s) More...
 
void buildObjects ()
 
T & addObject (const std::string &type, const std::string &name, InputParameters &params)
 

Protected Attributes

const UserObjectName _fp_name
 Fluid properties user object name. More...
 
const SinglePhaseFluidProperties_fp
 Fluid properties user object. More...
 
std::unique_ptr< MooseMesh_mesh
 
std::shared_ptr< MooseApp_app
 
Factory_factory
 
std::shared_ptr< FEProblem_fe_problem
 

Detailed Description

Tests NumericalFlux3EqnHLLC.

Definition at line 17 of file TestNumericalFlux3EqnHLLC.h.

Constructor & Destructor Documentation

◆ TestNumericalFlux3EqnHLLC()

TestNumericalFlux3EqnHLLC::TestNumericalFlux3EqnHLLC ( )

Definition at line 17 of file TestNumericalFlux3EqnHLLC.C.

Member Function Documentation

◆ computeConservativeSolution()

std::vector< ADReal > TestNumericalFlux3EqnBase::computeConservativeSolution ( const std::vector< ADReal > &  W,
const ADReal A 
) const
overrideprotectedvirtualinherited

Computes the conservative solution from the primitive solution.

Parameters
[in]WPrimitive solution vector
[in]ACross-sectional area

Implements TestNumericalFlux1D.

Definition at line 22 of file TestNumericalFlux3EqnBase.C.

24 {
25  return FlowModel1PhaseUtils::computeConservativeSolutionVector<true>(W, A, _fp);
26 }
const SinglePhaseFluidProperties & _fp
Fluid properties user object.

◆ computeFluxFromPrimitive()

std::vector< ADReal > TestNumericalFlux3EqnBase::computeFluxFromPrimitive ( const std::vector< ADReal > &  W,
const ADReal A 
) const
overrideprotectedvirtualinherited

Computes the 1D flux vector from the primitive solution.

Parameters
[in]WPrimitive solution vector
[in]ACross-sectional area

Implements TestNumericalFlux1D.

Definition at line 29 of file TestNumericalFlux3EqnBase.C.

31 {
32  return FlowModel1PhaseUtils::computeFluxFromPrimitive<true>(W, A, _fp);
33 }
const SinglePhaseFluidProperties & _fp
Fluid properties user object.

◆ createFluxObject()

const NumericalFlux1D & TestNumericalFlux3EqnHLLC::createFluxObject ( )
overrideprotectedvirtual

Creates the flux object to be tested.

Implements TestNumericalFlux1D.

Definition at line 22 of file TestNumericalFlux3EqnHLLC.C.

23 {
24  const std::string class_name = "ADNumericalFlux3EqnHLLC";
25  InputParameters params = _factory.getValidParams(class_name);
26  params.set<UserObjectName>("fluid_properties") = _fp_name;
27  _fe_problem->addUserObject(class_name, class_name, params);
28 
29  return _fe_problem->getUserObject<NumericalFlux1D>(class_name);
30 }
std::shared_ptr< FEProblem > _fe_problem
Abstract base class for computing and caching internal or boundary fluxes for 1D conservation law sys...
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
const UserObjectName _fp_name
Fluid properties user object name.

◆ getFluidPropertiesObject()

const SinglePhaseFluidProperties & TestNumericalFlux3EqnBase::getFluidPropertiesObject ( )
protectedinherited

Builds and gets the fluid properties user object.

Definition at line 36 of file TestNumericalFlux3EqnBase.C.

37 {
38  const std::string class_name = "IdealGasFluidProperties";
39  InputParameters params = _factory.getValidParams(class_name);
40  params.set<Real>("gamma") = 1.4;
41  params.set<Real>("molar_mass") = 11.640243719999999;
42  _fe_problem->addUserObject(class_name, _fp_name, params);
43 
44  return _fe_problem->getUserObject<SinglePhaseFluidProperties>(_fp_name);
45 }
std::shared_ptr< FEProblem > _fe_problem
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
Common class for single phase fluid properties.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const UserObjectName _fp_name
Fluid properties user object name.

◆ getPrimitiveSolutionsConsistencyTest()

std::vector< std::vector< ADReal > > TestNumericalFlux3EqnHLLC::getPrimitiveSolutionsConsistencyTest ( ) const
overrideprotectedvirtual

Gets a vector of primitive solution vectors to use for consistency test.

Implements TestNumericalFlux1D.

Definition at line 65 of file TestNumericalFlux3EqnHLLC.C.

66 {
67  std::vector<ADReal> W1(THMVACE1D::N_PRIM_VARS);
68  W1[THMVACE1D::PRESSURE] = 1e5;
69  W1[THMVACE1D::TEMPERATURE] = 300;
70  W1[THMVACE1D::VELOCITY] = 1.5;
71 
72  std::vector<std::vector<ADReal>> W_list;
73  W_list.push_back(W1);
74 
75  return W_list;
76 }
static const unsigned int N_PRIM_VARS

◆ getPrimitiveSolutionsSymmetryTest()

std::vector< std::pair< std::vector< ADReal >, std::vector< ADReal > > > TestNumericalFlux3EqnHLLC::getPrimitiveSolutionsSymmetryTest ( ) const
overrideprotectedvirtual

Gets a vector of pairs of primitive solution vectors to use for symmetry test.

Implements TestNumericalFlux1D.

Definition at line 33 of file TestNumericalFlux3EqnHLLC.C.

34 {
35  // sL < 0 < sM
36  std::vector<ADReal> W1(THMVACE1D::N_PRIM_VARS);
37  W1[THMVACE1D::PRESSURE] = 1e5;
38  W1[THMVACE1D::TEMPERATURE] = 300;
39  W1[THMVACE1D::VELOCITY] = 20;
40 
41  std::vector<ADReal> W2(THMVACE1D::N_PRIM_VARS);
42  W2[THMVACE1D::PRESSURE] = 2e5;
43  W2[THMVACE1D::TEMPERATURE] = 310;
44  W2[THMVACE1D::VELOCITY] = 1.2;
45 
46  // sL > 0
47  std::vector<ADReal> W3(THMVACE1D::N_PRIM_VARS);
48  W3[THMVACE1D::PRESSURE] = 1e5;
49  W3[THMVACE1D::TEMPERATURE] = 300;
50  W3[THMVACE1D::VELOCITY] = 20;
51 
52  std::vector<ADReal> W4(THMVACE1D::N_PRIM_VARS);
53  W4[THMVACE1D::PRESSURE] = 2e5;
54  W4[THMVACE1D::TEMPERATURE] = 310;
55  W4[THMVACE1D::VELOCITY] = 25;
56 
57  std::vector<std::pair<std::vector<ADReal>, std::vector<ADReal>>> W_pairs;
58  W_pairs.push_back(std::pair<std::vector<ADReal>, std::vector<ADReal>>(W1, W2));
59  W_pairs.push_back(std::pair<std::vector<ADReal>, std::vector<ADReal>>(W3, W4));
60 
61  return W_pairs;
62 }
static const unsigned int N_PRIM_VARS

◆ testConsistency()

void TestNumericalFlux1D::testConsistency ( )
protectedinherited

Runs the consistency test(s)

Definition at line 60 of file TestNumericalFlux1D.C.

61 {
62  const auto & flux = createFluxObject();
63 
64  unsigned int i_side = 0;
65  const auto W_list = getPrimitiveSolutionsConsistencyTest();
66  for (const auto & W : W_list)
67  {
68  const ADReal A = 2.0;
69 
70  const auto U = computeConservativeSolution(W, A);
71  const auto F_expected = computeFluxFromPrimitive(W, A);
72 
73  const auto & FL_computed_pos = flux.getFlux(i_side, 0, true, U, U, 1.0);
74  const auto & FR_computed_pos = flux.getFlux(i_side, 0, false, U, U, 1.0);
75  i_side++;
76 
77  const auto & FL_computed_neg = flux.getFlux(i_side, 0, true, U, U, -1.0);
78  const auto & FR_computed_neg = flux.getFlux(i_side, 0, false, U, U, -1.0);
79  i_side++;
80 
81  for (unsigned int i = 0; i < FL_computed_pos.size(); ++i)
82  {
83  REL_TEST(FL_computed_pos[i], F_expected[i], REL_TOL_CONSISTENCY);
84  REL_TEST(FR_computed_pos[i], F_expected[i], REL_TOL_CONSISTENCY);
85 
86  REL_TEST(FL_computed_neg[i], F_expected[i], REL_TOL_CONSISTENCY);
87  REL_TEST(FR_computed_neg[i], F_expected[i], REL_TOL_CONSISTENCY);
88  }
89  }
90 }
virtual std::vector< ADReal > computeFluxFromPrimitive(const std::vector< ADReal > &W, const ADReal &A) const =0
Computes the 1D flux vector from the primitive solution.
DualNumber< Real, DNDerivativeType, true > ADReal
virtual std::vector< ADReal > computeConservativeSolution(const std::vector< ADReal > &W, const ADReal &A) const =0
Computes the conservative solution from the primitive solution.
virtual std::vector< std::vector< ADReal > > getPrimitiveSolutionsConsistencyTest() const =0
Gets a vector of primitive solution vectors to use for consistency test.
virtual const NumericalFlux1D & createFluxObject()=0
Creates the flux object to be tested.

◆ testSymmetry()

void TestNumericalFlux1D::testSymmetry ( )
protectedinherited

Runs the symmetry test(s)

Definition at line 19 of file TestNumericalFlux1D.C.

20 {
21  const auto & flux = createFluxObject();
22 
23  std::set<unsigned int> flux_regions;
24 
25  unsigned int i_side = 0;
26  const auto W_pairs = getPrimitiveSolutionsSymmetryTest();
27  for (const auto & W_pair : W_pairs)
28  {
29  const auto & WL = W_pair.first;
30  const auto & WR = W_pair.second;
31 
32  const ADReal AL = 1.0;
33  const ADReal AR = 1.5;
34 
35  const std::vector<ADReal> UL = computeConservativeSolution(WL, AL);
36  const std::vector<ADReal> UR = computeConservativeSolution(WR, AR);
37 
38  const auto FLR = flux.getFlux(i_side, 0, true, UL, UR, 1.0);
39  const auto FRL = flux.getFlux(i_side, 0, false, UL, UR, 1.0);
40  i_side++;
41  flux_regions.insert(flux.getLastRegionIndex());
42 
43  const auto FRL_flipped = flux.getFlux(i_side, 0, true, UR, UL, -1.0);
44  const auto FLR_flipped = flux.getFlux(i_side, 0, false, UR, UL, -1.0);
45  i_side++;
46  flux_regions.insert(flux.getLastRegionIndex());
47 
48  for (unsigned int i = 0; i < FLR.size(); ++i)
49  {
50  REL_TEST(FLR[i], FLR_flipped[i], REL_TOL_CONSISTENCY);
51  REL_TEST(FRL[i], FRL_flipped[i], REL_TOL_CONSISTENCY);
52  }
53  }
54 
55  // Check that all of the regions in the flux have been tested.
56  EXPECT_TRUE(flux_regions.size() == flux.getNumberOfRegions());
57 }
DualNumber< Real, DNDerivativeType, true > ADReal
virtual std::vector< std::pair< std::vector< ADReal >, std::vector< ADReal > > > getPrimitiveSolutionsSymmetryTest() const =0
Gets a vector of pairs of primitive solution vectors to use for symmetry test.
virtual std::vector< ADReal > computeConservativeSolution(const std::vector< ADReal > &W, const ADReal &A) const =0
Computes the conservative solution from the primitive solution.
virtual const NumericalFlux1D & createFluxObject()=0
Creates the flux object to be tested.

Member Data Documentation

◆ _fp

const SinglePhaseFluidProperties& TestNumericalFlux3EqnBase::_fp
protectedinherited

◆ _fp_name

const UserObjectName TestNumericalFlux3EqnBase::_fp_name
protectedinherited

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