https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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 NumericalFlux1D & createFluxObject () override
 Creates the flux object to be tested.
 
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.
 
virtual std::vector< std::vector< ADReal > > getPrimitiveSolutionsConsistencyTest () const override
 Gets a vector of primitive solution vectors to use for consistency test.
 
virtual std::vector< ADReal > computeConservativeSolution (const std::vector< ADReal > &W, const ADReal &A) const override
 Computes the conservative solution from the primitive solution.
 
virtual std::vector< ADReal > computeFluxFromPrimitive (const std::vector< ADReal > &W, const ADReal &A) const override
 Computes the 1D flux vector from the primitive solution.
 
const SinglePhaseFluidProperties & getFluidPropertiesObject ()
 Builds and gets the fluid properties user object.
 
void testConsistency ()
 Runs the consistency test(s)
 
void testSymmetry ()
 Runs the symmetry test(s)
 
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.
 
const SinglePhaseFluidProperties & _fp
 Fluid properties user object.
 
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 ( )

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 20 of file TestNumericalFlux3EqnBase.C.

22{
23 return FlowModel1PhaseUtils::computeConservativeSolutionVector<true>(W, A, _fp);
24}
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 27 of file TestNumericalFlux3EqnBase.C.

29{
30 return FlowModel1PhaseUtils::computeFluxFromPrimitive<true>(W, A, _fp);
31}

◆ createFluxObject()

const NumericalFlux1D & TestNumericalFlux3EqnHLLC::createFluxObject ( )
overrideprotectedvirtual

Creates the flux object to be tested.

Implements TestNumericalFlux1D.

Definition at line 20 of file TestNumericalFlux3EqnHLLC.C.

21{
22 const std::string class_name = "ADNumericalFlux3EqnHLLC";
23 InputParameters params = _factory.getValidParams(class_name);
24 params.set<UserObjectName>("fluid_properties") = _fp_name;
25 _fe_problem->addUserObject(class_name, class_name, params);
26
27 return _fe_problem->getUserObject<NumericalFlux1D>(class_name);
28}
InputParameters getValidParams(const std::string &name) const
T & set(const std::string &name, bool quiet_mode=false)
std::shared_ptr< FEProblem > _fe_problem
Abstract base class for computing and caching internal or boundary fluxes for 1D conservation law sys...
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 34 of file TestNumericalFlux3EqnBase.C.

35{
36 const std::string class_name = "IdealGasFluidProperties";
37 InputParameters params = _factory.getValidParams(class_name);
38 params.set<Real>("gamma") = 1.4;
39 params.set<Real>("molar_mass") = 11.640243719999999;
40 _fe_problem->addUserObject(class_name, _fp_name, params);
41
42 return _fe_problem->getUserObject<SinglePhaseFluidProperties>(_fp_name);
43}
Common class for single phase fluid properties.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ 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 63 of file TestNumericalFlux3EqnHLLC.C.

64{
65 std::vector<ADReal> W1(THMVACE1D::N_PRIM_VARS);
66 W1[THMVACE1D::PRESSURE] = 1e5;
67 W1[THMVACE1D::TEMPERATURE] = 300;
68 W1[THMVACE1D::VELOCITY] = 1.5;
69
70 std::vector<std::vector<ADReal>> W_list;
71 W_list.push_back(W1);
72
73 return W_list;
74}
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 31 of file TestNumericalFlux3EqnHLLC.C.

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

◆ testConsistency()

void TestNumericalFlux1D::testConsistency ( )
protectedinherited

Runs the consistency test(s)

Definition at line 57 of file TestNumericalFlux1D.C.

58{
59 const auto & flux = createFluxObject();
60
61 unsigned int i_side = 0;
62 const auto W_list = getPrimitiveSolutionsConsistencyTest();
63 for (const auto & W : W_list)
64 {
65 const ADReal A = 2.0;
66
67 const auto U = computeConservativeSolution(W, A);
68 const auto F_expected = computeFluxFromPrimitive(W, A);
69
70 const auto & FL_computed_pos = flux.getFlux(i_side, 0, true, U, U, 1.0);
71 const auto & FR_computed_pos = flux.getFlux(i_side, 0, false, U, U, 1.0);
72 i_side++;
73
74 const auto & FL_computed_neg = flux.getFlux(i_side, 0, true, U, U, -1.0);
75 const auto & FR_computed_neg = flux.getFlux(i_side, 0, false, U, U, -1.0);
76 i_side++;
77
78 for (unsigned int i = 0; i < FL_computed_pos.size(); ++i)
79 {
80 REL_TEST(FL_computed_pos[i], F_expected[i], REL_TOL_CONSISTENCY);
81 REL_TEST(FR_computed_pos[i], F_expected[i], REL_TOL_CONSISTENCY);
82
83 REL_TEST(FL_computed_neg[i], F_expected[i], REL_TOL_CONSISTENCY);
84 REL_TEST(FR_computed_neg[i], F_expected[i], REL_TOL_CONSISTENCY);
85 }
86 }
87}
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 const NumericalFlux1D & createFluxObject()=0
Creates the flux object to be tested.
virtual std::vector< ADReal > computeFluxFromPrimitive(const std::vector< ADReal > &W, const ADReal &A) const =0
Computes the 1D flux vector 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.

◆ testSymmetry()

void TestNumericalFlux1D::testSymmetry ( )
protectedinherited

Runs the symmetry test(s)

Definition at line 16 of file TestNumericalFlux1D.C.

17{
18 const auto & flux = createFluxObject();
19
20 std::set<unsigned int> flux_regions;
21
22 unsigned int i_side = 0;
23 const auto W_pairs = getPrimitiveSolutionsSymmetryTest();
24 for (const auto & W_pair : W_pairs)
25 {
26 const auto & WL = W_pair.first;
27 const auto & WR = W_pair.second;
28
29 const ADReal AL = 1.0;
30 const ADReal AR = 1.5;
31
32 const std::vector<ADReal> UL = computeConservativeSolution(WL, AL);
33 const std::vector<ADReal> UR = computeConservativeSolution(WR, AR);
34
35 const auto FLR = flux.getFlux(i_side, 0, true, UL, UR, 1.0);
36 const auto FRL = flux.getFlux(i_side, 0, false, UL, UR, 1.0);
37 i_side++;
38 flux_regions.insert(flux.getLastRegionIndex());
39
40 const auto FRL_flipped = flux.getFlux(i_side, 0, true, UR, UL, -1.0);
41 const auto FLR_flipped = flux.getFlux(i_side, 0, false, UR, UL, -1.0);
42 i_side++;
43 flux_regions.insert(flux.getLastRegionIndex());
44
45 for (unsigned int i = 0; i < FLR.size(); ++i)
46 {
47 REL_TEST(FLR[i], FLR_flipped[i], REL_TOL_CONSISTENCY);
48 REL_TEST(FRL[i], FRL_flipped[i], REL_TOL_CONSISTENCY);
49 }
50 }
51
52 // Check that all of the regions in the flux have been tested.
53 EXPECT_TRUE(flux_regions.size() == flux.getNumberOfRegions());
54}
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.

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: