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

Base class for testing NumericalFluxGasMix objects. More...

#include <TestNumericalFluxGasMixBase.h>

Inheritance diagram for TestNumericalFluxGasMixBase:
[legend]

Public Member Functions

 TestNumericalFluxGasMixBase ()
 

Protected Member Functions

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...
 
void addFluidProperties ()
 Adds fluid properties objects needed for testing. More...
 
virtual const NumericalFlux1DcreateFluxObject ()=0
 Creates the flux object to be tested. More...
 
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. More...
 
virtual std::vector< std::vector< ADReal > > getPrimitiveSolutionsConsistencyTest () const =0
 Gets a vector of primitive solution vectors to use for consistency test. More...
 
void testConsistency ()
 Runs the consistency test(s) More...
 
void testSymmetry ()
 Runs the symmetry test(s) More...
 
void buildObjects ()
 
TaddObject (const std::string &type, const std::string &name, InputParameters &params)
 

Protected Attributes

const UserObjectName _fp_mix_name
 Mixture fluid properties name. More...
 
const IdealGasMixtureFluidProperties_fp_mix
 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

Base class for testing NumericalFluxGasMix objects.

Definition at line 19 of file TestNumericalFluxGasMixBase.h.

Constructor & Destructor Documentation

◆ TestNumericalFluxGasMixBase()

TestNumericalFluxGasMixBase::TestNumericalFluxGasMixBase ( )

Definition at line 14 of file TestNumericalFluxGasMixBase.C.

16  _fp_mix_name("fp_mix")
17 {
19 }
const UserObjectName _fp_mix_name
Mixture fluid properties name.
void addFluidProperties()
Adds fluid properties objects needed for testing.

Member Function Documentation

◆ addFluidProperties()

void TestNumericalFluxGasMixBase::addFluidProperties ( )
protected

Adds fluid properties objects needed for testing.

Definition at line 36 of file TestNumericalFluxGasMixBase.C.

Referenced by TestNumericalFluxGasMixBase().

37 {
38  const std::string fp_steam_name = "fp_steam";
39  const std::string fp_nitrogen_name = "fp_nitrogen";
40 
41  // steam fluid properties; parameters correspond to T in range 298 K to 473 K
42  {
43  const std::string class_name = "IdealGasFluidProperties";
44  InputParameters params = _factory.getValidParams(class_name);
45  params.set<Real>("gamma") = 1.43;
46  params.set<Real>("molar_mass") = 0.01801488;
47  params.set<Real>("mu") = 0.000013277592; // at 400 K and 1.e5 Pa
48  params.set<Real>("k") = 0.026824977826; // at 400 K and 1.e5 Pa
49  _fe_problem->addUserObject(class_name, fp_steam_name, params);
50  }
51 
52  // nitrogen fluid properties
53  {
54  const std::string class_name = "IdealGasFluidProperties";
55  InputParameters params = _factory.getValidParams(class_name);
56  params.set<Real>("gamma") = 1.4;
57  params.set<Real>("molar_mass") = 0.028012734746133888;
58  params.set<Real>("mu") = 0.0000222084; // at 400 K and 1.e5 Pa
59  params.set<Real>("k") = 0.032806168; // at 400 K and 1.e5 Pa
60  _fe_problem->addUserObject(class_name, fp_nitrogen_name, params);
61  }
62 
63  // mixture fluid properties
64  {
65  const std::string class_name = "IdealGasMixtureFluidProperties";
66  InputParameters params = _factory.getValidParams(class_name);
67  params.set<std::vector<UserObjectName>>("component_fluid_properties") = {fp_steam_name, fp_nitrogen_name};
68  _fe_problem->addUserObject(class_name, _fp_mix_name, params);
70  }
71 }
std::shared_ptr< FEProblem > _fe_problem
const IdealGasMixtureFluidProperties * _fp_mix
Fluid properties user object.
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
const UserObjectName _fp_mix_name
Mixture fluid properties name.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Class for fluid properties of an ideal gas mixture.

◆ computeConservativeSolution()

std::vector< ADReal > TestNumericalFluxGasMixBase::computeConservativeSolution ( const std::vector< ADReal > &  W,
const ADReal A 
) const
overrideprotectedvirtual

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 TestNumericalFluxGasMixBase.C.

24 {
25  return FlowModelGasMixUtils::computeConservativeSolution<true>(W, A, *_fp_mix);
26 }
const IdealGasMixtureFluidProperties * _fp_mix
Fluid properties user object.

◆ computeFluxFromPrimitive()

std::vector< ADReal > TestNumericalFluxGasMixBase::computeFluxFromPrimitive ( const std::vector< ADReal > &  W,
const ADReal A 
) const
overrideprotectedvirtual

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 TestNumericalFluxGasMixBase.C.

31 {
32  return FlowModelGasMixUtils::computeFluxFromPrimitive<true>(W, A, *_fp_mix);
33 }
const IdealGasMixtureFluidProperties * _fp_mix
Fluid properties user object.

◆ createFluxObject()

virtual const NumericalFlux1D& TestNumericalFlux1D::createFluxObject ( )
protectedpure virtualinherited

◆ getPrimitiveSolutionsConsistencyTest()

virtual std::vector<std::vector<ADReal> > TestNumericalFlux1D::getPrimitiveSolutionsConsistencyTest ( ) const
protectedpure virtualinherited

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

Implemented in TestNumericalFlux3EqnCentered, TestNumericalFlux3EqnHLLC, and TestNumericalFluxGasMixHLLC.

Referenced by TestNumericalFlux1D::testConsistency().

◆ getPrimitiveSolutionsSymmetryTest()

virtual std::vector<std::pair<std::vector<ADReal>, std::vector<ADReal> > > TestNumericalFlux1D::getPrimitiveSolutionsSymmetryTest ( ) const
protectedpure virtualinherited

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

Implemented in TestNumericalFlux3EqnCentered, TestNumericalFlux3EqnHLLC, and TestNumericalFluxGasMixHLLC.

Referenced by TestNumericalFlux1D::testSymmetry().

◆ 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, false > 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, false > 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_mix

const IdealGasMixtureFluidProperties* TestNumericalFluxGasMixBase::_fp_mix
protected

Fluid properties user object.

Definition at line 39 of file TestNumericalFluxGasMixBase.h.

Referenced by addFluidProperties(), computeConservativeSolution(), and computeFluxFromPrimitive().

◆ _fp_mix_name

const UserObjectName TestNumericalFluxGasMixBase::_fp_mix_name
protected

Mixture fluid properties name.

Definition at line 36 of file TestNumericalFluxGasMixBase.h.

Referenced by addFluidProperties(), and TestNumericalFluxGasMixHLLC::createFluxObject().


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