libMesh
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
NonlinearImplicitSystemOperatorMatrixTest Class Reference
Inheritance diagram for NonlinearImplicitSystemOperatorMatrixTest:
[legend]

Public Member Functions

 LIBMESH_CPPUNIT_TEST_SUITE (NonlinearImplicitSystemOperatorMatrixTest)
 
 CPPUNIT_TEST (testDefaultUsesSingleMatrixSolve)
 
 CPPUNIT_TEST (testOperatorMatrixUsesTwoMatrixSolve)
 
 CPPUNIT_TEST (testTwoMatrixSolveWithoutOverrideThrows)
 
 CPPUNIT_TEST_SUITE_END ()
 
void setUp ()
 
void tearDown ()
 
void testDefaultUsesSingleMatrixSolve ()
 
void testOperatorMatrixUsesTwoMatrixSolve ()
 
void testTwoMatrixSolveWithoutOverrideThrows ()
 

Public Attributes

std::unique_ptr< Mesh > mesh
 
std::unique_ptr< EquationSystems > es
 
NonlinearImplicitSystem * sys = nullptr
 

Detailed Description

Definition at line 107 of file nonlinear_implicit_system_test.C.

Member Function Documentation

◆ CPPUNIT_TEST() [1/3]

NonlinearImplicitSystemOperatorMatrixTest::CPPUNIT_TEST ( testDefaultUsesSingleMatrixSolve  )

◆ CPPUNIT_TEST() [2/3]

NonlinearImplicitSystemOperatorMatrixTest::CPPUNIT_TEST ( testOperatorMatrixUsesTwoMatrixSolve  )

◆ CPPUNIT_TEST() [3/3]

NonlinearImplicitSystemOperatorMatrixTest::CPPUNIT_TEST ( testTwoMatrixSolveWithoutOverrideThrows  )

◆ CPPUNIT_TEST_SUITE_END()

NonlinearImplicitSystemOperatorMatrixTest::CPPUNIT_TEST_SUITE_END ( )

◆ LIBMESH_CPPUNIT_TEST_SUITE()

NonlinearImplicitSystemOperatorMatrixTest::LIBMESH_CPPUNIT_TEST_SUITE ( NonlinearImplicitSystemOperatorMatrixTest  )

◆ setUp()

void NonlinearImplicitSystemOperatorMatrixTest::setUp ( )
inline

Definition at line 126 of file nonlinear_implicit_system_test.C.

127 {
128 mesh = std::make_unique<Mesh>(*TestCommWorld);
130 es = std::make_unique<EquationSystems>(*mesh);
131 sys = &es->add_system<NonlinearImplicitSystem>("test");
132 es->init();
133 }
Manages consistently variables, degrees of freedom, coefficient vectors, matrices and non-linear solv...
void init()
Initializes degrees of freedom on the current mesh.
Definition system.C:196
void build_point(UnstructuredMesh &mesh, const ElemType type=INVALID_ELEM, const bool gauss_lobatto_grid=false)
A specialized build_cube() for 0D meshes.

References libMesh::MeshTools::Generation::build_point(), es, libMesh::System::init(), mesh, sys, and TestCommWorld.

◆ tearDown()

void NonlinearImplicitSystemOperatorMatrixTest::tearDown ( )
inline

Definition at line 135 of file nonlinear_implicit_system_test.C.

136 {
137 sys = nullptr;
138 es.reset();
139 mesh.reset();
140 }

References es, mesh, and sys.

◆ testDefaultUsesSingleMatrixSolve()

void NonlinearImplicitSystemOperatorMatrixTest::testDefaultUsesSingleMatrixSolve ( )
inline

Definition at line 144 of file nonlinear_implicit_system_test.C.

145 {
146 LOG_UNIT_TEST;
147
148 auto solver = std::make_unique<TwoMatrixNonlinearSolver>(*sys);
149 auto * solver_ptr = solver.get();
150 sys->nonlinear_solver = std::move(solver);
151
152 sys->solve();
153
154 CPPUNIT_ASSERT(solver_ptr->solved_with == sys->matrix);
155 CPPUNIT_ASSERT_EQUAL(solver_ptr->single_matrix_calls, 1u);
156 CPPUNIT_ASSERT_EQUAL(solver_ptr->two_matrix_calls, 0u);
157 }
SparseMatrix< Number > * matrix
The system matrix.
virtual void solve() override
Assembles & solves the nonlinear system R(x) = 0.
std::unique_ptr< NonlinearSolver< Number > > nonlinear_solver
The NonlinearSolver defines the default interface used to solve the nonlinear_implicit system.

References libMesh::ImplicitSystem::matrix, libMesh::NonlinearImplicitSystem::nonlinear_solver, libMesh::NonlinearImplicitSystem::solve(), and sys.

◆ testOperatorMatrixUsesTwoMatrixSolve()

void NonlinearImplicitSystemOperatorMatrixTest::testOperatorMatrixUsesTwoMatrixSolve ( )
inline

Definition at line 162 of file nonlinear_implicit_system_test.C.

163 {
164 LOG_UNIT_TEST;
165
166 auto amat = SparseMatrix<Number>::build(*TestCommWorld);
167 sys->set_operator_matrix(amat.get());
168
169 auto solver = std::make_unique<TwoMatrixNonlinearSolver>(*sys);
170 auto * solver_ptr = solver.get();
171 sys->nonlinear_solver = std::move(solver);
172
173 sys->solve();
174
175 CPPUNIT_ASSERT(solver_ptr->solved_with == amat.get());
176 CPPUNIT_ASSERT(solver_ptr->solved_with_pre == sys->matrix);
177 CPPUNIT_ASSERT_EQUAL(solver_ptr->two_matrix_calls, 1u);
178 CPPUNIT_ASSERT_EQUAL(solver_ptr->single_matrix_calls, 0u);
179 }
void set_operator_matrix(SparseMatrix< Number > *mat)
Set a matrix to use as the actual Jacobian operator (Amat) on the next solve(), distinct from matrix,...
static std::unique_ptr< SparseMatrix< T > > build(const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package(), const MatrixBuildType matrix_build_type=MatrixBuildType::AUTOMATIC)
Builds a SparseMatrix<T> using the linear solver package specified by solver_package.

References libMesh::SparseMatrix< T >::build(), libMesh::ImplicitSystem::matrix, libMesh::NonlinearImplicitSystem::nonlinear_solver, libMesh::NonlinearImplicitSystem::set_operator_matrix(), libMesh::NonlinearImplicitSystem::solve(), sys, and TestCommWorld.

◆ testTwoMatrixSolveWithoutOverrideThrows()

void NonlinearImplicitSystemOperatorMatrixTest::testTwoMatrixSolveWithoutOverrideThrows ( )
inline

Definition at line 187 of file nonlinear_implicit_system_test.C.

188 {
189 LOG_UNIT_TEST;
190
191 auto amat = SparseMatrix<Number>::build(*TestCommWorld);
192 sys->set_operator_matrix(amat.get());
193
194 auto solver = std::make_unique<SingleMatrixNonlinearSolver>(*sys);
195 sys->nonlinear_solver = std::move(solver);
196
197 CPPUNIT_ASSERT_THROW(sys->solve(), libMesh::NotImplemented);
198 }
A class to stub for features that should be in libMesh, but haven't been written yet,...

References libMesh::SparseMatrix< T >::build(), libMesh::NonlinearImplicitSystem::nonlinear_solver, libMesh::NonlinearImplicitSystem::set_operator_matrix(), libMesh::NonlinearImplicitSystem::solve(), sys, and TestCommWorld.

Member Data Documentation

◆ es

std::unique_ptr<EquationSystems> NonlinearImplicitSystemOperatorMatrixTest::es

Definition at line 123 of file nonlinear_implicit_system_test.C.

Referenced by setUp(), and tearDown().

◆ mesh

std::unique_ptr<Mesh> NonlinearImplicitSystemOperatorMatrixTest::mesh

Definition at line 122 of file nonlinear_implicit_system_test.C.

Referenced by setUp(), and tearDown().

◆ sys

NonlinearImplicitSystem* NonlinearImplicitSystemOperatorMatrixTest::sys = nullptr

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