https://mooseframework.inl.gov
INSFVVariableTest.C
Go to the documentation of this file.
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 "gtest/gtest.h"
11 
12 #include "MooseMain.h"
13 #include "AppFactory.h"
14 #include "FEProblem.h"
15 #include "MooseMesh.h"
16 #include "MooseVariableFieldBase.h"
17 #include "INSFVPressureVariable.h"
18 #include "INSFVVariable.h"
19 
20 class INSFVVariableTest : public ::testing::Test
21 {
22 public:
24  : _app(Moose::createMooseApp("NavierStokesUnitApp", 0, nullptr)), _factory(_app->getFactory())
25  {
26  buildObjects();
27  }
28 
29 protected:
30  void buildObjects()
31  {
32  InputParameters mesh_params = _factory.getValidParams("GeneratedMesh");
33  mesh_params.set<MooseEnum>("dim") = "2";
34  mesh_params.set<unsigned int>("nx") = 2;
35  mesh_params.set<unsigned int>("ny") = 2;
36  _mesh = _factory.createUnique<MooseMesh>("GeneratedMesh", "moose_mesh", mesh_params);
37  _mesh->setMeshBase(_mesh->buildMeshBaseObject());
38  _mesh->buildMesh();
39 
40  InputParameters problem_params = _factory.getValidParams("FEProblem");
41  problem_params.set<MooseMesh *>("mesh") = _mesh.get();
42  problem_params.set<std::string>(MooseBase::name_param) = "problem";
43  _fe_problem = _factory.create<FEProblem>("FEProblem", "problem", problem_params);
45  _app->actionWarehouse().problemBase() = _fe_problem;
46  }
47 
48  // Add an INSFVPressureVariable to the default nonlinear system
49  MooseVariableFieldBase & addINSFVVar(const std::string & name)
50  {
51  InputParameters params = _factory.getValidParams("INSFVPressureVariable");
52  _fe_problem->addVariable("INSFVPressureVariable", name, params);
53  return _fe_problem->getVariable(0, name);
54  }
55 
56  std::unique_ptr<MooseMesh> _mesh;
57  std::shared_ptr<MooseApp> _app;
59  std::shared_ptr<FEProblem> _fe_problem;
60 };
61 
62 // INSFVVariable default does not compute QP data
63 TEST_F(INSFVVariableTest, INSFVVariableDefaultNoQpData)
64 {
65  auto & var = addINSFVVar("p");
66  EXPECT_FALSE(var.supportsQpBasedLoops());
67 }
68 
69 // INSFVVariable opts in via requireQpComputations()
70 TEST_F(INSFVVariableTest, INSFVVariableOptsInViaRequireQpComputations)
71 {
72  auto & var = addINSFVVar("p");
73  dynamic_cast<INSFVVariable &>(var).requireQpComputations();
74  EXPECT_TRUE(var.supportsQpBasedLoops());
75 }
76 
77 // INSFVVariable supports geometric-info loops
78 TEST_F(INSFVVariableTest, INSFVVariableSupportsGeometricInfoLoops)
79 {
80  auto & var = addINSFVVar("p");
81  EXPECT_TRUE(var.supportsGeometricInfoBasedLoops());
82 }
83 
84 // supportsGeometricInfoBasedLoops() on INSFVVariable is unaffected by requireQpComputations()
85 TEST_F(INSFVVariableTest, INSFVVariableGeometricInfoLoopSupportUnaffectedByRequireQp)
86 {
87  auto & var = addINSFVVar("p");
88  dynamic_cast<INSFVVariable &>(var).requireQpComputations();
89  EXPECT_TRUE(var.supportsGeometricInfoBasedLoops());
90 }
static const std::string name_param
std::unique_ptr< MooseMesh > _mesh
MooseVariableFieldBase & addINSFVVar(const std::string &name)
T & set(const std::string &name, bool quiet_mode=false)
std::shared_ptr< MooseObject > create(const std::string &obj_name, const std::string &name, const InputParameters &parameters, THREAD_ID tid=0, bool print_deprecated=true)
InputParameters getValidParams(const std::string &name) const
const std::string name
Definition: Setup.h:21
std::shared_ptr< FEProblem > _fe_problem
TEST_F(INSFVVariableTest, INSFVVariableDefaultNoQpData)
std::shared_ptr< MooseApp > _app
std::unique_ptr< MooseApp > createMooseApp(const std::string &default_app_type, int argc, char *argv[])
std::unique_ptr< MooseObject > createUnique(const std::string &obj_name, const std::string &name, const InputParameters &parameters, THREAD_ID tid=0, bool print_deprecated=true)